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
 P.Collins...1335 
 Steve Pate 1...751 
 QT->Qt3...362 
 Trees...355 
 Python...320 
 Steve Pate 3...287 
 TCP 2...267 
 Rodriguez 6...251 
 Максвелл 3...249 
 Daniel Bovet 4...246 
 Linux Inline Assembly...244 
 MySQL & PosgreSQL...242 
 TCP 3...241 
 Rubni-Corbet -> Глав...237 
 Rodriguez 2...231 
 Mod_perl 2...229 
 Robert Love 2...229 
 UML 3...223 
 C++ Templates 4...222 
 Стивенс 9...218 
 
  01.05.2017 : 2190164 посещений 

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).
Оставьте свой комментарий !

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

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