Итак, в прошлой статье мы рассмотрели
практически всю часть "железную" часть
загрузки операционной системы. Закончили
мы на том, что MBR запись записывается в
память и управление передается ее коду.
Дальше Boot Loader проверяет таблицу партиций
в поисках активной. Загрузчик дальше ищет
загрузочную запись (Boot Record) на самом первом
секторе раздела.
В данном случае Boot Record это еще 512 байт -
таблица с описанием раздела (количество
байт в секторе, количество секторов в
кластере и т.п.) и переход на первый файл
операционной системы (IO.SYS в DOS).
Операционная система.
Управление передается операционной
системы. Как же она работает, как проходит
процесс загрузки?
Boot Record проверяется на правильность и если
код признается правильным то код
загрузочного сектора исполняется как
программа.
Загрузка Windows XP контролируется файлом NTLDR,
находящемся в корневой директории
системного раздела. NTLDR работает в четыре
приема:
- Начальная фаза загрузки
- Выбор системы
- Определение железа
- Выбор конфигурации
В начальной фазе NTLDR переключает
процессор в защищенный режим. Затем
загружает соответствующий драйвер
файловой системы для работы с файлами любой
файловой системы, поддерживаемой XP.
Если кто забыл, то наша любимая ОСь может
работать с FAT-16, FAT-32 и NTFS.
Если в корневой директории есть BOOT.INI,
то его содержание загружается в память.
Если в нем есть записи более чем об одной
операционной системе, NTLDR останавливает
работу - показывает меню с выбором и ожидает
ввода от пользователя определенный период
времени.
Если такого файла нет, то NTLDR продолжает
загрузку с первой партиции первого диска,
обычно это C:\.
Если в процессе выбора пользователь
выбрал Windows NT, 2000 или XP, то проверяется
нажатие F8 и показ соответствующего меню с
опциями загрузки.
После каждой удачной загрузки XP создает
копию текущей комбинации драйверов и
системных настроек известную как Last Known Good
Configuration. Этот коллекцию можно использовать
для загрузки в случае если некое новое
устройство внесло разлад в работу
операционной системы.
Если выбранная операционная система XP, то
NTLDR находит и загружает DOS-овскую программу NTDETECT.COM
для определения железа, установленного в
компьютере.
NTDETECT.COM строит список компонентов,
который потом используется в ключе HARDWARE
ветки HKEY_LOCAL_MACHINE реестра.
Если компьютер имеет более
одного профиля оборудования программа
останавливается с меню выбора конфигурации.
После выбора конфигурации NTLDR
начинает загрузку ядра XP (NTOSKRNK.EXE).
В процессе загрузки ядра (но перед
инициализацией) NTLDR остается главным в
управлении компьютером. Экран очищается и
внизу показывается анимация из белых
прямоугольников. Кроме ядра загружается и
Hardware Abstraction Layer (HAL.DLL), дабы ядро могло
абстрагироваться от железа. Оба файла
находятся в директории System32.
NTLDR загружает драйвера
устройств, помеченные как загрузочные.
Загрузив их NTLDR передает управление
компьютером дальше.
Каждый драйвер имеет ключ в
HKEY_LOCAL_MACHINE\SYSTEM\Services. Если значение Start равно
SERVICE_BOOT_START, то устройство считается
загрузочным. Для кажого такого устройства
на экране печатается точка.
NTOSKRNL в процессе загрузки
проходит через две фазы - так называемую
фазу 0 и фазу 1. Первая фаза инициализирует
лишь ту часть микроядра и исполнительные
подсистемы, которая требуется для работы
основных служб и продолжения загрузки. На
этом этапе на экране показывается
графический экран со статус баром.
XP дизейблит прерывания в процессе фазы 0 и
включает их только перед фазой 1. Вызывается
HAL для подготовки контроллера прерываний.
Инициализируются Memory Manager, Object Manager, Security
Reference Monitor и Process Manager. Фаза 1 начинается когда
HAL подготавливает систему для обработки
прерываний устройств. Если на компьютере
установлено более одного процессор они
инициализируются. Все исполнительные подсистемы
реинициализируются в следующем порядке:
- Object Manager
- Executive
- Microkernel
- Security Reference Monitor
- Memory Manager
- Cache Manager
- LPCS
- I/O Manager
- Process Manager
Инициализация Менеджера ввода/Вывода
начинает процесс загрузки всех системных
драйверов. С того момента где остановился
NTLDR загружаются драйвера по приоритету.
Сбой в загрузке драйвера может заставить XP
перезагрузиться и попытаться восстановить Last
Known Good Configuration.
Последняя задача фазы 1 инициализации
ядра - запуск Session Manager Subsystem (SMSS).
Подсистема ответственна за создание
пользовательского окружения,
обеспечивающего интерфейс NT.
SMSS работает в пользовательском режиме, но в
отличии от других приложений SMSS считается
доверенной частью операционной системы и
"родным" приложением (использует
только исполнительные функции), что
позволяет ей запустить графическую
подсистему и login.
SMSS загружает win32k.sys - графическую
подсистему.
Драйвер переключает компьютер в
графический режим, SMSS стартует все сервисы,
которые должны автоматически запускаться
при старте. Если все устройства и сервисы
стартовали удачно процесс загрузки считается
удачным и создается Last Known Good
Configuration.
Процесс загрузки не считается
завершенным до тех пор, пока пользователь
не залогинился в систему. Процесс
инициализируется файлом WINLOGON.EXE,
запускаемым как сервис и поддерживается Local
Security Authority (LSASS.EXE), который и показывает
диалог входа в систему.
Это диалоговое окно показывается примерно
тогда, когда Services Subsystem стартует сетевую
службу.