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
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 Linux Kernel 2.6...3653 
 Trees...490 
 Clickhouse...460 
 Go Web ...455 
 Ethreal 4...452 
 Максвелл 3...421 
 Ext4 FS...412 
 C++ Patterns 3...402 
 Rodriguez 6...397 
 William Gropp...390 
 Ethreal 1...385 
 Gary V.Vaughan-> Libtool...382 
 Secure Programming for Li...382 
 Steve Pate 1...381 
 Ethreal 3...371 
 Assembler...361 
 DevFS...359 
 Стивенс 9...353 
 Ulrich Drepper...349 
 Стивенс 10...324 
 
  01.01.2024 : 3621733 посещений 

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

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

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