Здравствуйте, уважаемые подписчики.



Новость. Нашу рассылку перевели в категорию "обыкновенные некоммерческие рассылки" и одновременно в разряд "серебряные". Спасибо за участие!

И еще. Наша будующая система до сих пор не имеет названия. Стоит придумать. Присылайте свои предложения мне на e-mail: dron@infosec.ru



Выпуск №3

В этом выпуске мы поговорим, как и обещал, о порядке загрузки операционных систем.

Процесс загрузки, естественно, начинается с BIOS.
При старте процессор находится в реальном режиме, следовательно больше одного мегабайта памяти адресовать не может. Но это и не обязательно.

BIOS проверяет устройства, с которых может производиться загрузка. Порядок проверки в современных BIOS устанавливается. В список устройств могут входить Floppy disk, IDE disk, CDROM, SCSI disk...

Вне зависимости от типа устройства суть загрузки одна...
На устройстве обнаруживается boot sector. Для CDROM это не совсем справедливо, но про них мы пока не будем говорить. BootSector загружается в память по адресу 0:7с00. Дальнейшее поведение BootSector'а зависит от системы.


Загрузка Linux.


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

Процесс загрузки через ядро используется обычно на 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.


Загрузка FreeBSD.


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

Порядок загрузки примерно следующий:

  1. BootSector загружает вторичный загрузчик;
  2. Вторичный загрузчик переводит систему в защищенный режим и запускает loader;
  3. loader предоставляет пользователю возможность выбрать необходимые модули или запустить другое ядро;
  4. После чего управление передается ядру и начинается инициализация драйверов;


В прошлом выпуске я писал: В следующем выпуске мы рассмотрим процессы загрузки разных операционных систем (Windows не предлагать!).
Почему Windows не предлагать? Windows пока что еще никто не отменял :) Не хотите загружаться как Windows, но тогда расскажите, почему и приведите сравнение, но все равно расскажите, как это делает Windows.
Не хотел рассказывать, но придется... :)
Если что-то я напутаю, уж извините...
Давайте по порядку рассмотрим, как грузятся системы от Microsoft.


Загрузка DOS.


boot sector DOS загружает в память два файла: io.sys и msdos.sys. Названия этих файлов в разных версиях DOS различались, не важно. Файл io.sys содержит в себе функции прерывания int 21h, файл msdos.sys обрабатывает config.sys, и запускает командный интерпретатор command.com, который в свою очередь обрабатывает командный файл autoexec.bat.


Загрузка Windows 9x.


Отличие от DOS заключается в том, что функции msdos.sys взял на себя io.sys. msdos.sys остался ради совместимости как конфигурационный файл. После того как командный интерпретатор command.com обрабатывает autoexec.bat вызывается программа win.com, которая осуществляет перевод системы в защищенный режим, и запускает различные другие программы, обеспечивающие работу системы.


Загрузка Windows NT.


boot sector NT - зависти от формата FS, для FAT устанавливается один, для NTFS - другой, в нем содержиться код чтения FS, без обработки подкаталогов.

  1. boot sector загружает NTLDR из корневой директории, который запускается в real mode;
  2. NTLDR певодит систему в защищенный режим;
  3. Создаются необходимые таблицы страниц для доступа к первому мегабайту памяти;
  4. Активируется механизм страничного преобразования;
  5. Далее NTLDR читает файл boot.ini, для этого он использует встроенный read only код FS. В отличии от кода бутсектора он может читать подкаталоги;
  6. На экране выводится меню выбора вида загрузки;
  7. После выбора, или по истечении таймаута, NTLDR из файла boot.ini определяет нахождение системной директории Windows, она может находиться в другом разделе, но обязательно должна быть корневой;
  8. Если в boot.ini указана загрузка DOS (или Win9x), то файл bootsect.dos загружается в память и выполняется горячая перезагрузка;
  9. Далее обрабатывается boot.ini;
  10. Загружается ntdetect.com, который выводит сообщение "NTDETECT V4.0 Checking Hardware", и детектит различные устройства... Вся информация собирается во внешней структуре данных, которая в дальнейшем становиться ключем реестра "HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION";
  11. NTLDR выводит сообщение "OSLOADER V4.0";
  12. Из директории winnt\system32 загружается ntoskrnl.exe, содержащий в себе ядро и подсистемы выполнения (менеджер памяти, кэш менеджер, менеджер объектов), и файл hal.dll, который содержит в себе интерфейс с аппаратным обеспечением;
  13. Далее NTLDR предоставляет возможность выбрать "последние известные хорошие" конфигурации. В зависимости от выбора выбираются копии реестра используемые для запуска;
  14. Загружает все драйвера и другие необходимые для загрузки файлы;
  15. В завершение он запускает функцию main из ntoskrnl.exe и завершает свою работу;

Не могу гарантировать полную достоверность представленной информации, NT я знаю плохо, тем более не знаю что у нее внутри. Так же не могу что-либо более конкретного сказать про распределение памяти в процессе загрузки Windows NT. некоторые неточности могут быть связаны с моим плохим знанием английского, желающие могут посмотреть на оригинал по адресу: Inside the Boot Process, Part 1

Ну вот, мы узнали как загружаются системы. В своей системе мы не будем слепо следовать какому либо из представленных здесь путей. Ради совместимости обеспечим формат ядра, аналогичный Linux. Мне кажется, в этой системе все сделано достаточно понятно и просто.

Я думаю никто не будет против того, что мы в первую очередь будем ориентироваться на Linux?

А в следующем выпуске мы поговорим о распределении памяти в системе и начнем писать свой boot sector.

Отправлено 2001-07-20 для 695 подписчиков.
ведущий рассылки Dron
Архив Рассылки

При поддержке Kalashnikoff.ru


Hosted by uCoz