Linux для пользователя - страница 16

Шрифт
Интервал

стр.

Для этого она ищет в таблице разделов активный раздел и считывает в память вторичный загрузчик, который располагается начиная с первого логического сектора активного раздела. Обратите внимание на слово "начиная". Дело в том, что вторичный загрузчик в разных системах имеет разную длину.

В разделе, отформатированном под файловую систему FAT, вторичный загрузчик занимает один сектор (512 байт). В разделе, отформатированном под файловую систему NTFS, вторичный загрузчик занимает уже несколько секторов.

Вторичный загрузчик загружает первый слой программ, необходимых для запуска операционной системы. В случае MS DOS программа-загрузчик загружает IO.SYS по адресу 700h, затем MSDOS.SYS и передает управление разделу SYSINIT модуля IO.SYS.

Если по каким-либо причинам на диске не найден активный раздел, процесс загрузки продолжается обработкой прерывания 18h. Эта ветвь реально используется очень редко, но такая возможность может быть очень полезна в некоторых ситуациях. При удаленной загрузке, когда операционная система загружается с сервера, это прерывание перенаправляется программой POST на ROM сетевой карты.

Для других ОС от Microsoft процесс загрузки происходит аналогично

• Windows95 загружается так же, как и DOS, но заменяет IO.SYS и MSDOS.SYS своими файлами. Файлы DOS сохраняются под именами IO.DOS и MSDOS.DOS соответственно. Когда вы выбираете загрузку сохраненного DOS, Windows95 переименовывает свои файлы в файлы с расширением w40 и восстанавливает первоначальные имена системных файлов DOS. Процесс продолжается с загрузки DOS-овского IO.SYS. Таким образом, загрузочные сектора DOS и Windows95 одинаковые.

• Windows NT4 использует MBR DOS, но заменяет загрузочную запись активного раздела таким образом, что вместо IO.SYS загружается NTLDR. Это уже мощная программа, которая многое может сделать. В частности, она находит файл boot.ini и, если параметр timeout больше 0, предлагает меню загрузки.

Каждая строка секции [operating systems] файла boot.ini определяет один из вариантов загрузки и строится по следующему шаблону 

>адрес_вторичного_загрузчика="название_варианта"

Адресом вторичного загрузчика может являться указание на конкретный раздел диска или на файл загрузчика. Вот пример файла boot.ini:

>[operating systems]

>multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 RUS"

>multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 RUS [VGA mode]" /basevideo /sos

>C:\="Microsoft Windows"

>C:\BOOTSECT.LNX="Linux"

Если пользователь выбирает NT, то выполняется загрузка по адресу раздела, указанному в первой строке раздела. В строке, соответствующей Microsoft Windows, указан просто диск "C:\", так как имя загрузочного файла берется по умолчанию: bootsect.dos. Файл грузится в память и загрузка продолжается так, как если бы загрузочная запись раздела была загружена программным кодом из MBR.

Для загрузки других систем можно воспользоваться таким же приемом. Для этого в boot.ini нужно добавить строки, содержащие ссылки на другие загрузочные файлы. При выборе такой строки будет загружаться соответствующая ОС. В приведенном выше примере этим способом обеспечивается загрузка Linux. Для этого в файле C:\BOOTSECT.LNX должно быть предварительно записано содержимое загрузочной записи, создаваемой Linux (точнее - LILO, стандартным загрузчиком Linux).

2.3.4. Проблемы с большими дисками

В MS-DOS и первых версиях Windows доступ к дискам был организован через прерывание 13 (Int 13h) BIOS (в том числе на этапе начальной загрузки ОС). При этом использовалась адресация секторов на диске на основе указания номеров цилиндра, головки и сектора на дорожке (C/H/S). Точнее:

• AH - выбор операции;

• CH - младшие 8 бит номера цилиндра;

• CL - 7-6 биты соответствуют старшим битам номера цилиндра, 5-0 биты соответствуют номеру сектора;

• DH - номер считывающей головки;

• DL - номер диска (80h или 81h).

(Заметим в скобках, что нумерацию физических цилиндров и дорожек принято начинать с 0, а сектора на дорожке нумеруют, начиная с 1). Однако практически головок было не более 16-ти, а число секторов на дорожке - не более 63, и хотя для указания цилиндра использовалось 10 бит, все равно BIOS не мог работать с дисками объемом более 1024*63*16*512 = 528 Мбайт.


стр.

Похожие книги