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

Загрузка Linux.


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

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

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

  • boot sector переписывает свой код по адресу 9000h:0;
  • Загружает с диска Setup, который записан в нескольких последующих секторах, по адресу: 9000h:0200h;
  • Загружает ядро по адресу 1000h:0. Ядро так же следует в последующих секторах за Setup. Ядро не может быть больше чем 508 килобайт, но так как оно, чаще всего, архивируется - это не страшно;
  • Запускается Setup;
  • Проверяется корректность Setup;
  • Производится проверка оборудования средствами BIOS. Определяется размер памяти, инициализируется клавиатура и видеосистема, наличие жестких дисков, наличие шины MCA (Micro channel bus), PC/2 mouse, APM BIOS (Advanced power management);
  • Производится переход в защищенный режим;
  • Управление передается по адресу 1000h:0 на ядро;
  • Если ядро архивировано, оно разархивируется. иначе просто переписывается по адресу 100000h (за пределы первого мегабайта);
  • Управление передается по этому адресу;
  • Активируется страничная адресация;
  • Инициализируются idt и gdt, при этом в кодовый сегмент и в сегмент данных ядра входит вся виртуальная память;
  • Инициализируются драйвера;
  • Управление передается неуничтожимому процессу init;
  • 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.



    Содержание раздела