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).
|
|