Наверх Системное программирование
Предыдущий раздел Оглавление Следующий раздел

2.3.2. Загрузка операционной системы

Для начала работы операционной системы необходимо выполнить несколько шагов. Когда компьютер включается, оборудование инициализирует процессор, который начинает выполнять программу в памяти. Однако единственным доступным кодом в этот момент является код в энергонезависимой памяти, который инициализируется изготовителем компьютера и иногда обновляется пользователем путем перепрошивки. Поскольку программа сохраняется в памяти и обновляется крайне редко, она называется прошивкой. Прошивка загружается на персональные компьютеры производителем либо материнской платы, либо компьютерной системы. Исторически сложилось так, что прошивкой персонального компьютера была программа под названием BIOS (Basic Input/Output System — базовая система ввода-вывода), но на самых новых компьютерах используется UEFI (Unified Extensible Firmware Interface — унифицированный расширяемый интерфейс прошивки). UEFI является улучшением BIOS за счет поддержки современного оборудования, предоставления более модульной, не зависимой от типа центрального процессора архитектуры и поддержки расширяемой модели, упрощающей начальную загрузку по сети, подготовку к работе новых машин и запуск диагностики.

Главное предназначение любой прошивки — запуск операционной системы путем начальной загрузки небольшой специальной программы, которая находит начало дисковых разделов. Программы начальной загрузки Windows знают, как считать достаточно информации с тома файловой системы или сети, чтобы найти автономную Windows-программу BootMgr. Программа BootMgr определяет, была ли система ранее переведена в состояние гибернации или ожидания. Если это так, то BootMgr загружает и выполняет WinResume.exe. В противном случае она загружает и выполняет WinLoad.exe для выполнения новой загрузки. WinLoad загружает в память загрузочные компоненты системы: ядро и программу исполнительного уровня (обычно это ntoskrnl.exe), HAL (hal.dll), содержащий раздел SYSTEM файл, драйвер Win32k.sys (содержащий части режима ядра подсистемы Win32), а также образы любых других драйверов, которые перечислены в разделе SYSTEM как загрузочные драйверы (boot drivers). Если в системе имеется включенный Hyper-V, WinLoad также загружает и запускает программу гипервизора.

После загрузки в память загрузочных компонентов Windows управление передается коду низкого уровня в NTOS, который начинает инициализировать HAL, ядро и исполнительный уровень, привязывать образы драйверов, а также обращаться к данным конфигурации в разделе SYSTEM (и обновлять их). После инициализации всех компонентов режима ядра создается первый процесс пользовательского режима.

Загрузочные программы Windows могут обработать часто встречающиеся при загрузке проблемы. Иногда инсталляция плохого драйвера устройства или использование программы вроде regedit (которая может повредить раздел SYSTEM) могут привести к невозможности нормальной загрузки системы. Есть возможность проигнорировать недавно внесенные изменения и загрузиться с последней хорошей конфигурацией системы. Есть и другие варианты загрузки: в безопасном режиме (safe-boot), когда отключается множество необязательных драйверов, через консоль восстановления (recovery console), когда появляется окно командной строки cmd.exe.

Предыдущий раздел Оглавление Следующий раздел