Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 OS
 osjournal 
 Protected Mode 
 Hardware 
 Kernels
  Dark Fiber
  BOS
  QNX
  OS Dev
  Lecture notes
  MINIX
  OS
  Solaris
  История UNIX
  История FreeBSD
  Сетунь
NEWS
Последние статьи :
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
  SQL 30.07   
  JFS 10.06   
  B-trees 01.06   
 
TOP 20
 Part 4...357 
 Ethreal 1...286 
 Secure Programming for Li...281 
 Trees...264 
 2.0-> Linux IP Networking...232 
 Intel 386...213 
 B.Blunden 1...182 
 Steve Pate 3...178 
 Стивенс 9...176 
 Ethreal 4...171 
 Hansen 1...155 
 Daniel Bovet 5...152 
 Part 3...151 
 William Gropp...150 
 Advanced Bash Scripting G...149 
 UML 3...147 
 C++ Templates 3...146 
 Ext4 FS...146 
 Robbins 3...143 
 Robbins 4...143 
 
  01.05.2019 : 2719283 посещений 

iakovlev.org

aiorOS

Автор - Salvatore Iengo.
http://aioros.sourceforge.net

aiorOS - 32-битная операционная система,созданная в образовательных целях. Ядро поддерживает системные вызовы,многозадачность,пейджинг(до 4 гигов на процесс). Реализована загрузка бинарников в качестве пользовательских процессов.
Прослеживается связь с линуксовым ядром,автор сам об этом говорит.

Образ

Код

Использование памяти при загрузке ядра показано на схеме
 ; Memory structure
 ;
 ;|            |               |      /\
 ;|            |               |      ||
 ;|   KERNEL   |               |      || (max 4GB)
 ;| (max 4GB)  |               |      ||
 ;|(cod.& dat.)|               | KERNEL CODE, DATA & STACK
 ;|            |               |
 ;|------------| 0x1000:0x0000 | (pmode 0x08:0x00010000) ----------------
 ;|            |               |
 ;|            |               |  GDT + IDT + PAGEDIR
 ;|            |               |      ||
 ;|------------| 0x07C0:0x0200 |      ||
 ;| BOOTSECTOR |               |      ||
 ;|------------| 0x07C0:0x0000 |      || (max 64KB)
 ;|            |               |      ||
 ;|------------|               |      ||
 ;| 16bit BIOS |               |      \/
 ; ------------  0x0000:0x0000 |-----------------------------------------
 
 

На рисунке представлены регистры интеловского процессора и организация памяти в защищенном режиме

На рисунке представлено устройство первого нижнего метра памяти - начало вверху

На рисунке показано , что в реальном режиме сегмент ограничен 64 КБ, и адрес начала такого сегмента всегда кратен 16 байтам. Реальный физический адрес получается по следующему алгоритму: берется значение сегментного регистра,делается сдвиг этого значения - shift <<4 , и к результату прибавляем смещение внутри 64 КБ.

Показан принцип виртуальной памяти. Имеется цепочка , на входе которой стоит логический адрес,который последовательно трансформируется сначала в линейный, а потом уже в реальный физический адрес. Виртуальная память основана на 2-х китах - сегментации и постраничной адресации

Показана организация памяти при загрузке aiorOS

Глобальная таблица состоит из 3-х дескрипторов

После загрузки ядро обслуживает прерывания. При нажатии на клавишу ядро переходит в пользовательский режим

Показана организация стека при переключении между режимами пользователь-ядро. Пространство ядра окрашено желтым цветом. При переключении в режим ядра флаги текущей задачи хранятся в стеке ядра. DPL0 и DPL3 - это стеки для нулевого и 3-го уровня защиты.

При переключении текущий процесс нужно восстановить именно в той точке, в которой он был прерван ядром.

Каждая задача обладает собственной TSS , стеком , pid.

Таймер настроен на работу с частотой 100 раз в секунду. При этом приоритет текущей задачи уменьшается каждый раз на единицу. Когда он становится равным 0, происходит contextswitch. Задача проходит состояния : READY
RUNNING
STOPPED
EXITING
TERMINATED
Сам contextswitch реализован с помощью инструкции ljmp.

Аппаратные прерывания типа fault (не увеличивают eip).
Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье