Создание операционной системы на ассемблере


Загрузка Linux.



Для Linux свойственно два способа загрузки:

  • Загрузка через boot sector ядра;
  • Загрузка через boot manager LILO (Linux Loader);

Процесс загрузки через ядро используется обычно на Floppy дисках и происходит в следующем порядке:

  1. boot sector переписывает свой код по адресу 9000h:0;
  2. Загружает с диска Setup, который записан в нескольких последующих секторах, по адресу: 9000h:0200h;
  3. Загружает ядро по адресу 1000h:0. Ядро так же следует в последующих секторах за Setup. Ядро не может быть больше чем 508 килобайт, но так как оно, чаще всего, архивируется - это не страшно;
  4. Запускается Setup;
  5. Проверяется корректность Setup;
  6. Производится проверка оборудования средствами BIOS. Определяется размер памяти, инициализируется клавиатура и видеосистема, наличие жестких дисков, наличие шины MCA (Micro channel bus), PC/2 mouse, APM BIOS (Advanced power management);
  7. Производится переход в защищенный режим;
  8. Управление передается по адресу 1000h:0 на ядро;
  9. Если ядро архивировано, оно разархивируется. иначе просто переписывается по адресу 100000h (за пределы первого мегабайта);
  10. Управление передается по этому адресу;
  11. Активируется страничная адресация;
  12. Инициализируются idt и gdt, при этом в кодовый сегмент и в сегмент данных ядра входит вся виртуальная память;
  13. Инициализируются драйвера;
  14. Управление передается неуничтожимому процессу init;
  15. init запускает все остальные необходимые программы в соответствии с файлами конфигурации;

В случае загрузки через LILO:

  1. boot sector LILO переписывает свой код по адресу 9a00h:0;
  2. До адреса 9b00h:0 размещает свой стек;
  3. Загружает вторичный загрузчик по адресу 9b00h:0 и передает ему управление;
  4. Вторичный загрузчик загружает boot sector ядра по адресу 9000h:0;
  5. Загружает Setup по адресу 9000h:0200h;
  6. Загружает ядро по адресу 1000h:0;
  7. Управление передается программе Setup. Зачем загружает boot sector из ядра? не понятно;

В Linux есть такое понятие как "big kernel". Такой kernel сразу загружается по адресу 100000h.





- Начало -  - Назад -  - Вперед -



Книжный магазин