Пользователь нажимает кнопку, экран черный, потом мигает логотип, потом появляется рабочий стол. Со стороны кажется, что ничего особенного не происходит: подождал десяток секунд и все готово. На деле за это короткое время сменяется несколько полностью независимых программных слоев, каждый из которых передает управление следующему и после этого перестает существовать как активный процесс. Разберем этот путь по шагам, от подачи напряжения на плату до появления значков на экране.

Что запускается раньше самой операционной системы: питание, самотестирование и первый код на материнской плате

Нажатие кнопки питания замыкает контакт на материнской плате, и блок питания начинает подавать напряжение по нескольким линиям: 3.3, 5 и 12 вольт. Пока напряжение не стабилизировалось, материнская плата удерживает сигнал сброса на процессоре, чтобы он не начал выполнять случайный код на нестабильном питании. Как только линии выходят на рабочие значения, сигнал сброса снимается, и процессор начинает выполнять первую инструкцию по жестко заданному в его архитектуре адресу.

По этому адресу находится код микропрограммы платы, современный аналог классического BIOS, который называется UEFI (Unified Extensible Firmware Interface). Он записан в отдельной микросхеме флеш-памяти на плате и не зависит от диска с операционной системой. Первым делом UEFI запускает процедуру POST (Power-On Self-Test): проверяет процессор, контроллер памяти, инициализирует оперативную память, опрашивает шину PCI Express и подключенные устройства. Если на этом этапе обнаруживается критическая неисправность, например отсутствие модулей памяти, компьютер издает серию звуковых сигналов через встроенный динамик платы или показывает код ошибки на светодиодном индикаторе, потому что видеокарта на этой стадии может быть еще не инициализирована.

После успешного POST микропрограмма инициализирует базовые контроллеры: видеовыход, USB-порты, сетевой адаптер, если у него есть собственная загрузочная прошивка. Именно здесь пользователь видит логотип производителя платы и может нажать клавишу для входа в настройки UEFI. Если ничего не нажато, таймер истекает, и управление переходит к следующему этапу: поиску загрузочного устройства.

Как прошивка платы находит диск с Windows и проверяет его подлинность

Современные системы почти всегда используют разметку диска GPT (GUID Partition Table) вместо устаревшей MBR, и загружаются в нативном режиме UEFI, а не в режиме совместимости. На диске с такой разметкой есть отдельный служебный раздел EFI System Partition, отформатированный в FAT32, размером обычно около ста мегабайт. Внутри него лежит файл, на который указывает переменная загрузки, прописанная в энергонезависимой памяти платы, у Windows это путь вида \EFI\Microsoft\Boot\bootmgfw.efi.

Прежде чем передать управление этому файлу, прошивка может выполнить проверку Secure Boot: сверяет цифровую подпись загрузчика с базой доверенных ключей, зашитой в плату производителем. Если подпись не совпадает или отсутствует, загрузка блокируется, что защищает систему от буткитов, вредоносного кода, подменяющего загрузчик до старта антивируса. На платах с модулем TPM (Trusted Platform Module) на этом же этапе может фиксироваться состояние компонентов загрузки для последующей проверки шифрования диска.

Когда подпись подтверждена, UEFI передает управление коду из найденного файла, и с этого момента инициативу перехватывает уже не прошивка платы, а компонент самой операционной системы: диспетчер загрузки Windows.

Диспетчер загрузки Windows и файл конфигурации, который решает, какую систему запускать

Диспетчер загрузки, файл bootmgr, читает базу данных конфигурации загрузки BCD (Boot Configuration Data). Это структурированное хранилище, аналог старого текстового файла boot.ini из ранних версий Windows, только в бинарном формате, доступное для просмотра и редактирования через утилиту bcdedit. В базе перечислены все установленные копии Windows, если их несколько, путь к загрузочному разделу каждой, параметры запуска вроде безопасного режима или отладки ядра.

Если система на компьютере одна, диспетчер загрузки почти мгновенно выбирает единственную запись и передает управление файлу winload.efi, расположенному уже в системном разделе с самой Windows, обычно по пути \Windows\System32\winload.efi. На старых системах с разметкой MBR и классическим BIOS его роль выполняет файл winload.exe, логика при этом остается той же, меняется только формат интерфейса с прошивкой.

Именно на этом этапе, если пользователь удерживает клавишу Shift при выборе перезагрузки или нажимает нужную клавишу при старте, диспетчер загрузки может показать меню дополнительных вариантов запуска: восстановление системы, откат последней точки, вход через командную строку среды восстановления.

Загрузка ядра, аппаратного уровня абстракции и первых системных драйверов

Файл winload.efi загружает в память два ключевых компонента: ядро операционной системы NTOSKRNL.EXE и уровень абстракции оборудования HAL.DLL. Ядро NT лежит в основе всех современных версий Windows и отвечает за управление памятью, планирование потоков процессора, обработку прерываний. Уровень абстракции оборудования скрывает от ядра различия между конкретными моделями процессоров и чипсетов, поэтому одно и то же ядро одинаково работает на разных платформах.

Помимо ядра, загрузчик считывает системный куст реестра SYSTEM, определяет, какие драйверы устройств помечены как загружаемые на самом раннем этапе, и подгружает их в память вместе с образом ядра, еще до того как ядро реально начнет выполняться. Это драйверы контроллера диска, файловой системы, антивирусные мини-фильтры, без которых система физически не сможет прочитать собственные файлы с носителя. Остальные драйверы, не критичные для старта, будут запущены позже, уже после инициализации диспетчера управления службами.

Когда все необходимое загружено в память, winload.efi передает управление точке входа ядра, и начинается фаза, которую в отладочных логах принято называть инициализацией ядра: настройка диспетчера памяти, создание первых системных потоков, инициализация диспетчера ввода-вывода, который в дальнейшем будет обслуживать все запросы к дискам, сети и периферии.

Служебные процессы, готовящие систему к появлению экрана входа

Первое, что запускает инициализированное ядро в пользовательском режиме, это процесс smss.exe, диспетчер сеансов. Он создает системный сеанс, разворачивает оставшиеся кусты реестра, запускает подсистему Windows csrss.exe, отвечающую за графический и консольный интерфейс на низком уровне, и порождает процесс wininit.exe для сеанса номер ноль, служебного сеанса, в котором работают фоновые компоненты системы, не привязанные к конкретному пользователю.

Процесс wininit.exe в свою очередь запускает два ключевых компонента:

  1. services.exe, диспетчер управления службами, который поднимает по очереди все автоматически запускаемые службы Windows согласно их зависимостям друг от друга;
  2. lsass.exe, подсистема локальной проверки подлинности, отвечающая за обработку паролей, токенов доступа и политику безопасности учетных записей.

Уже сам диспетчер служб порождает нужное количество процессов svchost.exe и распределяет по ним системные службы, объединяя их группами для экономии памяти. Если у процесса svchost.exe родительским процессом оказывается что-то отличное от services.exe, это верный признак постороннего вмешательства, а не штатной работы системы.

Пока диспетчер служб поднимает сетевой стек, службы печати, планировщик заданий и десятки других компонентов, параллельно запускается winlogon.exe, процесс, который отвечает за экран входа в систему. Он взаимодействует с lsass.exe для проверки введенных учетных данных и с драйвером видеоподсистемы для отрисовки самого экрана блокировки.

Экран входа, проверка учетных данных и запуск пользовательского сеанса

Когда пользователь вводит пароль, ПИН-код или проходит вход через считыватель отпечатка, winlogon.exe передает эти данные lsass.exe. Служба сверяет их с локальной базой учетных записей SAM или, в корпоративной сети, обращается к контроллеру домена. После успешной проверки создается маркер доступа, набор атрибутов, определяющий права пользователя в системе, и начинается формирование нового пользовательского сеанса, физически изолированного от служебного сеанса номер ноль.

На этом этапе система загружает пользовательский куст реестра из файла ntuser.dat в личной папке профиля, применяет групповые политики, если компьютер входит в домен, и запускает так называемую оболочку, программу, определенную ключом реестра как основной интерфейс пользователя. У подавляющего большинства настольных систем эта роль отведена процессу explorer.exe: он отрисовывает панель задач, рабочий стол, значки и меню "Пуск", подгружает виджеты и сохраненные настройки оформления.

Параллельно с explorer.exe стартуют программы из папки автозагрузки и соответствующих разделов реестра: антивирус, драйверы для периферии вроде мыши с дополнительными кнопками, фоновые агенты облачных хранилищ. Именно эти автозапускаемые программы чаще всего добавляют лишние секунды к общему времени старта, а не сама операционная система, чье ядро к этому моменту уже полностью готово к работе.

Почему повторные включения происходят быстрее: гибридная загрузка и файл гибернации

У обычного "холодного" старта, описанного выше, есть более быстрый сосед: функция быстрого запуска, включенная по умолчанию на большинстве настольных систем и ноутбуков. При команде "Завершение работы" Windows закрывает все пользовательские сеансы и приложения как обычно, но не выгружает из памяти состояние ядра и загруженных драйверов, а сохраняет этот образ в файл hiberfil.sys на системном разделе, после чего действительно выключает питание. По сути это гибрид полного выключения и режима гибернации, отсюда и название "гибридная загрузка".

При следующем включении прошивка платы и диспетчер загрузки отрабатывают точно так же, как при обычном старте, но диспетчер загрузки замечает в BCD флаг возобновления и вместо winload.efi вызывает отдельное приложение winresume.efi. Оно считывает файл hiberfil.sys и разворачивает сохраненный слепок ядра и драйверов прямо в память, минуя часть работы по повторной инициализации ядра и перечислению служб. Именно поэтому повторное включение после завершения работы обычно ощутимо быстрее, чем самая первая загрузка после сборки компьютера или чем перезагрузка, при которой этот образ намеренно не используется, чтобы гарантированно применить обновления системы.

Обратная сторона быстрого запуска в том, что диск в этот момент формально не считается полностью размонтированным, поэтому смена операционной системы на этом же диске из другой ОС или прямое редактирование системного раздела в таком состоянии может привести к повреждению файловой системы. По этой причине быстрый запуск иногда рекомендуют отключать перед серьезными операциями с разделами диска.

Что в итоге складывается в те несколько секунд ожидания

Если собрать весь путь воедино, получается цепочка из четырех практически независимых программных слоев, которые ничего не знают друг о друге, кроме точки передачи управления: прошивка платы находит и проверяет загрузчик, диспетчер загрузки Windows выбирает нужную систему по данным из BCD, ядро вместе с уровнем абстракции оборудования поднимает низкоуровневую работу с железом, а служебные процессы поверх ядра готовят рабочую среду для конкретного пользователя. Каждый слой построен так, чтобы предыдущий мог полностью выйти из игры, оставив после себя только данные в памяти, а не работающий код. Поэтому сбой на любом из этапов выглядит настолько по-разному: черный экран с кодом ошибки говорит о проблеме на уровне прошивки, синий экран сразу после логотипа почти всегда указывает на драйвер, загруженный вместе с ядром, а зависание на самом экране входа обычно связано уже со службами или профилем пользователя, а не с загрузчиком.