Процесс запуска Windows NT

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Процесс запуска Windows NT — это процесс инициализации операционных систем Microsoft Windows NT, Windows 2000, Windows XP и Windows Server 2003. В Windows Vista процесс сильно изменён.

Фаза начальной загрузки

[править | править код]

Фаза начальной загрузки различается в зависимости от аппаратной платформы. Начиная с ранней фазы, не привязанной к ОС, началом процесса загрузки считается:

  • Для x86 или x64: когда код сектора загрузочного раздела исполняется в реальном режиме и загружает NTLDR
  • Для IA-64: когда исполняется программа IA64ldr.efi EFI (позднее называемая просто как IA64ldr)

От данной точки процесс загрузки продолжает выполнять следующее:

Файл NTLDR, размещенный в корневой папке загрузочного диска, состоит из двух частей. Первая — это модуль StartUp, после которого следует загрузчик ОС (osloader.exe), обе части хранятся в файле NTLDR. При загрузке NTLDR в память управление передается модулю StartUp, при этом центральный процессор работает в реальном режиме. Основная задача StartUp — перевод процессора в защищённый режим, что позволяет использовать 32-разрядную адресацию памяти, а также создать таблицу дескрипторов прерываний, таблицу глобальных дескрипторов, таблицу страниц и включение страничной работы с памятью. Это делается с использованием возможностей основного операционного окружения, на котором установлена операционная система. Затем модуль StartUp загружает и запускает загрузчик ОС.

Загрузчик ОС в NTLDR содержит основные функции для доступа к дискам IDE, отформатированным в файловых системах NTFS, FAT, CDFS (ISO 9660), ETFS или UDFS в новейших версиях операционных систем. Доступ к дискам производится через BIOS посредством встроенной программы ARC на системах с ARC или посредством сети, используя протокол TFTP. Помимо этой точки, все вызовы к BIOS проходят через виртуальный режим 8086, так как из защищённого режима невозможен прямой доступ к BIOS. Если загрузочный диск является SCSI и SCSI-контроллер не использует 13-е прерывание реального режима, то для получения доступа к диску загружается дополнительный файл Ntbootdd.sys. Он является копией того же драйвера miniport для SCSI, который используется, когда запускается Windows.

Затем загрузчик считывает содержимое файла boot.ini для обнаружения информации о системном томе. Если такой файл отсутствует, то загрузчик пытается обнаружить информацию из стандартного установочного каталога. Для машин под Windows NT это каталог C:\WINNT. Для машин под Windows XP и 2003 загружается из C:\WINDOWS.

В этом месте экран очищается и в Windows 2000 и поздних версиях NTLDR и IA64ldr, которые поддерживают гибернацию системы, корневой каталог тома по умолчанию определён в boot.ini для поиска файла гибернации hiberfil.sys. Если этот файл найден и активная память работает, содержимое файла (который совпадает по размеру с физической памятью в машине) загружается в память и передаёт управление в ядро Windows с точки, с которой гибернация была восстановлена. После этого файл сразу же помечается как неактивный, так что повреждение или другие сбои не могут вызвать это (уже устаревшее) состояние памяти в виде повторной загрузки. Если возвращение состояния не удалось, то в следующий раз NTLDR спросит пользователя, надо ли снова пытаться восстанавливать или отменить обработку файла и произвести обычную загрузку.

Если boot.ini содержит запись более чем об одной операционной системе, то пользователю показывается меню загрузки, позволяющее выбрать, какую именно из операционных систем загружать. Если выбрана операционная система, не основанная на NT, подобно Windows 98, то NTLDR загружает соответствующий файл загрузочного сектора, указанный в списке в boot.ini (по умолчанию это bootsect.dos, если не задано иное имя файла) и контроль над выполнением переходит к нему. Если выбрана операционная система, основанная на NT, NTLDR запускает ntdetect.com, который собирает основную информацию об аппаратном обеспечении компьютера, сообщаемую BIOS'ом.

В этой точке процесса загрузки NTLDR очищает экран и выводит псевдографический индикатор состояния (который часто не виден под системами XP или 2003 из-за их скорости инициализации); Windows 2000 также показывает текст «Starting Windows…». Если во время этой фазы пользователь нажмёт F8, то показывается расширенное меню загрузки, содержащее различные специальные режимы загрузки, включающие в себя безопасный режим с конфигурацией последней успешной загрузки, с включением отладки и (в случае серверных редакций) режим восстановления служб каталогов.

Загрузка продолжается, как только выбирается один из пунктов или если повторно нажимается F8.

Фаза загрузки ядра

[править | править код]
  1. ntoskrnl.exe (ядро)
  2. hal.dll (тип абстрактного уровня аппаратного обеспечения)
  3. kdcom.dll (библиотека расширения ядра отладчика аппаратного обеспечения)
  4. bootvid.dll (для логотипа Windows и индикатора статуса загрузки)
  5. config\system — реестр
    1. HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute
    2. процессы служб в порядке готовности
    3. *HKLM\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder

Инициализация подсистемы ядра и подсистемы выполнения Windows делается за две фазы.

Во время первой фазы создаются базовые внутренние структуры памяти и инициализируется контроллер прерываний каждого процессора. Инициализируется менеджер памяти, создаются области для файлового кэша системы, страничных и нестраничных опросов памяти. Менеджер объектов[1] инициализирует токен безопасности для назначения первому процессу системы и менеджер процессов инициализирует сам себя. В этой точке также как системный процесс создаётся System Idle Process.

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

Во время процесса загрузки драйверов устройств в нижней части экрана систем под Windows 2000 виден индикатор статуса; в Windows XP и Windows Server 2003 это было заменено анимированной полоской, которая не отражает реального времени процедуры. До Windows 2000 эта часть процесса загрузки занимала значительно больше времени, потому что драйверы инициализировались последовательно по одному. В Windows XP и Windows Server 2003 все драйверы инициализируются асинхронно.

Примечания

[править | править код]
  1. Windows, NT Object Manager. Дата обращения: 20 августа 2008. Архивировано 21 апреля 2008 года.
  • Russinovich, Mark; David Solomon[англ.]. Startup and Shutdown // Microsoft Windows Internals (неопр.). — 4th edition. — Microsoft Press[англ.], 2005. — С. 251—273.
  • Troubleshooting the Startup Process. Windows XP Resource Kit. Microsoft Technet. Дата обращения: 15 февраля 2006. Архивировано 3 апреля 2012 года.
  • Mark Minasi, John Enck. Troubleshooting NT Boot Failures. Administrator's Survival Guide: System Management and Security. Windows IT Library. Дата обращения: 15 февраля 2006. Архивировано из оригинала 3 апреля 2012 года.
  • Microsoft KB Article 244036 on remote installation & booting
  • Definition of the RunOnce Keys
  • boot.ini switches
  • Startup Applications List
  • Troubleshooting Windows XP Startup Process
  • AnVir Task Manager — утилита для анализа и редактирования программ автозагрузки Windows