|
(НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ ЭТУ ИНФОРМАЦИЮ НЕ БРАТЬ В ГОЛОВУ ;))
NTLDR первым делом переключается в защищёный режим , чтобы использовать всю доступную память для работы . Далее он читает файл boot.ini .
Если выбор только один , то он игнорирует timeout и сразу загружает единственный вариант . Если вариантов несколько и таймаут не равен 0 , то он ждёт указания пользователя .
В загрузочном меню может присутсвовать и не WindowsNt строка . При таком выборе osloader откатываёт всё назад : переключается обратно в реальный режим работы и запускает br выбранной системы .
если выбрана NT-система , то osloader запускает распознаватель оборудования ( ntdetect.com ), который собирает всю информацию об установленном оборудовании , используя стандартный вызовы BIOS . После окончания своей работы он передаёт собранные данные загрузчику ; позднее эта информация окажется в HKLM\Description . Osloader загружает kernel , hal.dll , драйверы со статусом SERVICE_BOOT , ntdll.dl , драйвер файловой системы загрузочного каталога , kdcom.dll и bootvid.dll . После того , как osloader запустил все требуемые файлы , он передаёт управление на kernel . Начинается инициализация ядра .
Существуют две стадии загрузки ядра : фаза 0 и фаза 1 .
Фаза 0 .
Управление находится в KiSystemStartup ( в ядре 0 . но для дальнейшей работы требуется абстрагирование от оборудования . Ядро запрещает прерывания и вызывает HAL ( hardware abstract layer - уровень абстракции от оборудования ) . HAL приспосабливается к конкретной машине , чтобы ядро могло использовать общесистемные функции . Kernel вызывает HalInitSystem , KeInitailizeProcessor и KeInitailizeKerenel , ExpInitalizeExecutive для каждого установленного процессора в системе . Подключается дипетчер обьектов , который создаёт примитивные объекты для своей работы и работы других компонентов , далее начинает работу диспетчер процессов . Он создаёт процессы Idle и System и системный поток Phase1 . После этого ядро разрешает прерывания и запускает системный поток Phase1 , символизирующий начало фазы 1 .
В фазе 1 проходит дальнейшая иницилизация компонентов Windows . Разрешаются прерывания . загружается bootvid.dll . Иницилизируется диспетчер электропитания .Запускается функция HalQueryRealTimeClock . Эта функция читает установленное время из CMOS Setup ( это время считается началом загрузки ) . Для правильной иницилизации драйвера файловой системы , HAL считывает таблицу разделов ( IoReadpartitionTable ) и задёт начальную конфигурацию разделов ( IoSetPartitionInformation ) .
Начинается иницилизация исполнительной подсистемы ( Executive ) , распологающейся на верхнем уровне . Диспетчер обьектов создаёт пространтсва имён \Objecttypes\ и \Dos\Devices . Проходит общая иницилизация Executive . Диспетчер обьектов создаёт пространство имён \Security . Иницилизируется Диспетчер памяти . На системное адресное пространтсво проецируются таблицы NLS . Для дальнейшей работы подключается системная библиотека ядра NT ( ntdll.dll , содержит точки входа WinAPI для NativeAPI ) . Запускается диспетчер кэша и диспетчер конфигурации ( создание HKLM\System и HKLM\Hardware\ ) . Ядро иницилизирует драйвер системного тома . Подключается диспетчер PnP и LPC , создаётся Bootlog.txt ( если это задано в boot.ini ) . I/O Manager проводит иницилизацию всех остальных драйверов . Активизируется подкачка страниц ( NTCreatepagingFile ) . Последним подключается диспетчер электропитания . Для Command Server создаётся Справочный монитор безопастности .
На этом иницилизация ядра и исполнительной подсистемы заканчивается . |