Linux Kernel (Ядро линукса) (часть 3)


Загрузка Linux с диска

Для загрузки ядра Linux с диска нужен двухступенчатый загрузчик. Всем известный загрузчик Linux в архитектуре 80x86 называется Linux LOader (LILO). Существуют и другие загрузчики для систем 80x86, например, GRand Unified Bootloader (GRUB) распространен достаточно широко. GRUB является более развитым загрузчиком, чем LILO; он распознает несколько дисковых файловых систем и, следовательно, способен читать порции загрузчика из файлов. Конечно, специфические загрузчики имеются для всех архитектур, поддерживаемых системой Linux.

LILO можно установить либо в сектор MBR (заменив им маленькую программу, копирующую загрузочный сектор активного раздела), либо в загрузочный сектор каждого раздела диска. В обоих случаях результат одинаковый: когда загрузчик выполняется, пользователь может выбрать загружаемую операционную систему.

На самом деле, загрузчик LILO слишком велик и не помещается в один сектор, поэтому он разбит на две части. MBR или загрузочный сектор раздела содержит маленький загрузчик, который записывается системой BIOS в оперативную память, начиная с адреса 0х00007с00. Эта программа переписывает себя по адресу 0х0009ба00, устанавливает стек реального режима (в диапазоне адресов от 0x00098000 до 0x000969ff), загружает вторую часть LILO с адреса 0х0009бс00 и переходит по этому адресу.

Эта вторая программа читает с диска карту загружаемых операционных систем и предлагает пользователю меню (или командную строку), чтобы он мог выбрать одну из них. Когда пользователь сделает выбор (или промедлит в течение определенного времени, и LILO выберет систему по умолчанию), загрузчик либо скопирует в память загрузочный сектор существующего раздела и выполнит его, либо напрямую скопирует образ ядра.
В случае копирования образа ядра Linux загрузчик LILO, использующий в своей работе процедуры BIOS, выполняет следующие действия:
1. Вызывает процедуру BIOS, которая выводит на экран сообщение "Loading” (Загрузка).
2. Вызывает процедуру BIOS, которая загружает с диска первую часть образа ядра: первые 512 байтов помещаются в память, начиная с адреса 0x00090000, а код функции setup о записывается, начиная с адреса
0x00090200.
3. Вызывает процедуру BIOS, которая загружает с диска остальную часть образа ядра и записывает ее, начиная либо с нижнего адреса охоооюооо (для маленьких образов, откомпилированных с помощью команды make zimage), либо с верхнего адреса охооюоооо (для больших образов, откомпилированных с помощью команды make bzimage). В дальнейшем мы будем говорить, что образ ядра загружен низко” или загружен высоко” соответственно. Поддержка больших образов ядра основана, по сути, на той же схеме загрузки, что и маленьких, но данные располагаются по другим физическим адресам, чтобы избежать проблем с "дырой ISA”, упомянутой в главе 2.
4. Переходит на выполнение кода функции setup .

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...