Краткий обзор загрузки Windows, Linux, Mac OS X, QNX

Дата: 07/05/05;  Автор: osxuser; 


Фазы загрузки х86 систем


После того как компьютер включен, процессор начинает выполнять инструкции BIOS. BIOS стартует компьютер даже если операционная система на установлена. Первый набор инструкций - power-on self test (POST). POST выполняет следующие функции:


1) Выполняет начальную проверку оборудования, например определяет количество установленой RAM

2) Проверяет наличие устройств для начала загрузки ОС, например жесткого диска

3) Получает установки системной конфигурации из CMOS


После того как POST закончен, дополнительные адаптеры (видео карта, контроллеры жесткого диска) выполняют свой тест внутренней диагностики.


Затем BIOS загружает код загрузчика (который должен быть написан на ассемблере), передавая ему управление. Код загрузчика находится в master boot record (MBR), если конечно загрузчик существует, если нет, то BIOS выдаст Operating system not installed, т.е. Операционная система не установлена. MBR - это самый первый сектор жесткого диска. Код загрузчика содержит информацию от куда грузить ОС. Загрузчики выполняют и другие функции в различных операционных системах, что они делают и что происходит дальше будет описано ниже.


Windows


куда же без нее...


1) Ntldr (сокращение от NT loader) загружает загрузочные файлы с загрузочного раздела и переводит процессор в 32 битный режим плоской памяти (32-bit flat memory) и загружает файловую систему

2) Ntldr стартует Ntdetect.com, последний просто собирает информацию об установленном оборудовании и передает ее Ntldr, который ее сохраняет, чтобы ядро могло ее позже прочитать

3) Ntldr стартует ядро (Ntoskrnl.exe) и говорит ему что установлено, т.е. инфо об установленном оборудовании от Ntdetect.com. Ntldr также загружает hardware abstraction layer (HAL) в память. Ядро и HAL инициализируют Windows executive, который просто напросто читает конфигурацию оборудования из регистра (ключ HKEY_LOCAL_MACHINE\SYSTEM) и запускает сервисы и драйверы. Надо отметить, что драйверы это тоже сервисы

4) Ядро запускает Session Manager (Smss.exe), который:

1. Переключает Windows из текстового режима в графический

2. Запускает менеджер входа в систему Logon Manager (systemroot\System32\Winlogon.exe)

3. Создает дополнительные файлы виртуальной памяти

4. И если установлены новые программы и/или драйверы, то спросит перезагрузить систему


5) менеджер входа в систему Logon Manager (Winlogon.exe) запускает подсистему сервисов (Services.exe) и локальную систему безопастности (Local Security Authority, Lsass.exe) и на последок делает возможным комбинацию клавиш CTRL+ALT+DEL, чтобы показать логин скрин.


Все загрузка окончена!


LInux


Для LInux существуют 2 популярных загрузчика - LILO (LInux LOader) и GRUB. В этой статье будет описан GRUB, так как он более навароченный :) Дистрибьютив линукс был выбран Fedora (ядро версии 2.6.8).


Так вот, GRUB ищет закрузочный раздел и загружает загрузчик второй стадии (second stage boot loader), который читает конфигурацию в /boot/grub/grub.conf, этот файл содержит список всех доступных операционных систем и их параметры загрузки. Точнее сказать, этот файл просто содержит где и какие ядра операционок грузить, заметьте, не сами ОСи а их ядра. Когда все это закончено этот загрузчик второй стадии выводит Fedora сплэш на экран и список всех операционных систем на выбор для загрузки. Когда выбрана Федора линукс из этого списка начинае грузится линукс, :) а делает она это с загрузки ядра. Но все по порядку.


1) Линукс запускает программу Init (/sbin/init) которая выполнят несколько проверок системы (целостность файловой системы например) и запускает программы которые необходимы для работы ОС.

2) Затем смотрит файл /etc/inittab в котором содержится список режимов в котором этот самый линукс можно грузить и какой режим собственно выбран. Список режимов приведен ниже


0 - halt

1 - Single user mode

2 - Multiuser, without NFS (The same as 3, if you do not have networking)

3 - Full multiuser mode

4 - unused

5 - X11

6 - reboot


Таким образом если выбрат 1 - Single user mode, то система будет работать в режиме одного пользователя, если выбрат 5 - X11, то GUI будет загружен сразу, и если выбран 6, тогда система перезагрузится :) Интересный пункт надо отметить :)


Mac OS X


В этой ОС есть свой загрузчик - BootX (/System/Library/CoreServices/BootX). После того как он загружен он делает следующее:


1) Загружает ядро

2) Пытается загрузить предыдущий кэшированный (сохраненный) список драйверов если он существует

3) Потом как в линукс, запускает Init, теперь Open Firmware (типа БИОСа) больше не доступен

4) инициализирует различные Mach/BSD структуры данных

5) инициализирует ввод/вывод (I/O Kit)


Теперь загрузчик отдыхает, ядро продолжает загрузку


1) Ядро стартует mach init ( /sbin/mach_init), это просто такой демон (сервис) который обеспечивает взаимоотношение между именами сервисов и мак портами, которые обеспечивают доступ к этим сервисам

2) И опять как в линукс, mach init определяет в каком режиме грузить систему (Single/Multi user mode, загружать ли GUI, и т.д.) И проверяет целостность файловой системы

3) Затем монтирует файловую систему

4) Запускает поддержку виртуальной памяти

5) SystemStarter Загружает файлы из автозагрузки, например CoreGraphics который в свою очередь загружает ATSServer и WindowServer


Все, логин скрин (или консоль) выведены на экран



Mac OS X логин


FreeBSD


Загрузка FreeBSD тоже очень похожа на мак ОС и линукс, понятно почему, все они UNIX based.

Поэтому буду краток на FreeBSD :)


FreeBSD имеет копию MBR в /boot/boot0, boot0 это одна из трех частей загрузчика так как MBR может быть только 512 байтов макс. boot0 загружает boot1 который только знает где находится boot2. Вот тут все и начинается, boot2 уже сложнее и больше boot0 и boot1. boot2 позволяет выбрать собственно сам загрузчик (loader) или любой другой загрузчик, например GRUB. И наконец позволяет выбрать ОС для загрузки. Так вот после того как ОС была выбрана loader (так называется загрузчик в FreeBSD, по англ. тока) инициализирует оборудование, определяет в каком режиме грузить систему и грузит ядро. И все.


QNX


Процесс зпгрузки, коротко в трех шагах:


1) Загрузчик, он же The Initial Program Loader (IPL), находит образ ОС (OS image) , заметьте это не ядро! и отдает управление в руки программы загрузки, которая находится в этом образе.

2) Затем программа загрузки конфигурирует ядро и отдает управление Neutrino microkernel, тобиж ядру, и менеджеру процессов (procnto).

3) менеджер процессов (procnto) затем загружает драйверы и программы


Теперерь поподробней, роль загрузчика, он же The Initial Program Loader (IPL), такова:


1. Начать загрузку после reset vector

2. Конфигурировать контроллер памяти

3. Конфигурировать clocks

4. Настроить стек (stack) и таким образом разрешить проверку и установку ОС


роль программы загрузки:


1. Копировать и разархивировать образ ОС (OS image), если необходимо

2. Конфигурировать железо

3. Определить сис. конфигурацию

4. Запустить ядро


Это конечто коротко, на самом сайте QNX все в больших деталях и еще приписка: "если все что написано вверху звучит как много работы, то так оно и есть!!" :)



операционная система QNX 5



операционная система QNX 6


Заключение


Надо отметить, что кроме Windows загрузчики других ОСей, таких как GRUB или LILO, например могут загружать не только свои ядра, так например GRUB может грузить ядро FreeBSD, Linux и Mac os x. Были также планы по описанию загрузки BeOS, но документация для нее пока не найдена.


Комментарии пишите на мыло osxuser@email.su



Переведено by osxuser


Linux - http://www.linuxhomenetworking.com/linux-hn/runlevels.htm

Mac OS X - http://www.kernelthread.com/mac/osx/arch_startup.html

FreeBSD - http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/boot-blocks.html

QNX - http://www.qnx.com/developers/docs/momentics621_docs/neutrino/building/overview.html

Windows - microsoft.com

QNX 5, 6 screenshots - www.osnews.com/img/534/qnx5.jpg

Mac OS X screenshots - http://www.condreyconsulting.com/production/PRODUCTS/Kanaka/Graphics/login.gif