Мы продолжаем разбираться как работает ПК на примере клавиатуры и Windows 10. В этой статье поговорим о том как происходит единение софта и железа.
Старт системы
Полностью компьютер выключен когда он отключен от питания и конденсаторы на материнской плате разрядились. До эры смартфонов мобильные телефоны часто глючили и если перезагрузка не лечила проблему, то приходилось доставать батарею и ждать 10 секунд, потому что сбрасывалось программное состояние ОС, в то время как чипы на материнской плате и контроллеры устройств оставались активными сохраняя состояние, драйвера ОС к ним просто реконнектились. 10 секунд — время на разрядку конденсаторов, состояние чипов сбрасывается только при полном отключении.
Если же ПК подключен к розетке или батарее, то он находится в режиме Stand-By, это значит что по шине питания подаётся маленькое напряжения (5В) от которого запитываются некоторые чипы на материнке. Как минимум это системный контроллер, по сути это мини-компьютер запускающий большой компьютер. Получив уведомление о нажатии кнопки Power он просит блок питания/батарею подать больше напряжения и после инициализирует весь чип-сет, в том числе и процессор. Инициализация включает в себя перекачку кода и данных прошивки материнки (BIOS/UEFI) в оперативную память и настройку CPU на её исполнение.
Думать что кнопка Power это рубильник который подаёт электричество на CPU и тот начинает исполнять с заранее известного адреса прошивку BIOS неправильно. Возможно старые компьютеры так и работали. Кнопка включения находится на своей плате, вместе со светодиодами состояний и к материнке она подключается через специальный разъём. На картинке ниже видны контакты для кнопки Power, Reset, а также светодиодов с состоянием Power и чтения жёсткого диска. Нажатие кнопки включения переводится в сигнал на контакты материнки, откуда он достигает системный контроллер.
Контакты на материнке для подключения кнопки включения, светодиодов состояния Power, жёсткого диска и динамиков.
Плата ноутбука с кнопкой включения и светодиодом состояния
Cистемный контроллер обладает огромными полномочиями – включать и выключать компьютер, исполнять код в режиме ядра. Помимо него могут быть и другие чипы со сравнимыми возможностями, такие как Intel Management Engine или AMD Secure Technology (часть CPU), которые так же работают когда компьютер «выключен». Чип с Intel ME имеет в себе x86 CPU с операционной системой MINIX 3. Что он может делать:
- Включать и выключать компьютер, т.е. выполнять программы имея доступ ко всей вычислительной мощности, периферии машины и сети.
- Обходить ограничения файервола.
- Видеть все данные в CPU и RAM, что даёт доступ к запароленным файлам.
- Красть ключи шифрования и получать доступ к паролям
- Логировать нажатия клавиш и движения мыши
- Видеть что отображается на экране
- Вредоносный код в Intel ME не может быть детектирован антивирусом, потому как на такой низкий уровень он добраться не может
- И конечно же скрытно отправлять данные по сети используя свой стек для работы с сетью.
Это вызывает серьёзные вопросы безопасности, потому как он может быть хакнут или использовать в шпионских целях.
Прикладная иллюстрация как блок питания получает сигнал от материнки на включение. Если вы задумаете установить мощную видеокарту (Nvidia 2070 S) на офисный ПК, то просто вставить её недостаточно, потому как она требует питание в 600W, в то время как такой ПК имеет блок на ~500W. Первое что придёт в голову – купить новый блок питания на 650W с отдельной линией для видеокарты. Но и здесь будут разочарования, потому как разъёмы материнки будут не совпадать с разъёмами БП, а если его отдельно воткнуть в розетку и подключить к видюхе тоже ничего не будет – в блоке питания вентилятор не крутится и изображения нет. Так происходит, потому что БП должен получить сигнал от материнки на полное включение. Очевидное решение – новая материнка с совместимыми разъёмами, однако она стоит ~$300. Есть решение проще, хоть оно и вызывает опасения пожаробезопасности. Берём скрепку, разгибаем и вставляем в зелёный (PS_ON) и один из чёрных пинов (COM). Теперь всё должно работать.
Поиск загрузчика ОС
Есть два вида прошивки материнки – BIOS (Basic Input Output System) на старых машинах и UEFI (Unified Extensible Firmware Interface) на новых. Windows 10 поддерживает обе и абстрагирует различия между ними. UEFI правильней называть ОС чем прошивкой, потому как он предлагает больше возможностей, к примеру богатый графический интерфейс вместо текстового, наличие мышки, больший объём доступной памяти, улучшенная модель безопасности и валидации файлов ОС, взаимодействие с железом через API, вместо прерываний как в BIOS.
Пример экрана монитора BIOS.
Программа BIOS хранится на отдельном чипе, подключенном к Южному мосту. Этот чип можно достать и перепрошить новой программой, по факту это просто носитель памяти, а не самостоятельный микрокомпьютер.
Настройки BIOS (системное время, например), хранятся на другом чипе который как правило находится возле круглой батарейки, которая на самом деле является литиевым аккумулятором, подзаряжающимся во время работы ПК. Называется он CMOS, что означает Complementary Metal Oxide Semiconductor, а по-русски просто — КМОП, что есть комплементарная структура металл-оксид-полупроводник.
Первым делом программа BIOS выполняет проверку подсистем, эта процедура называется POST – Power On Self Test. Тест может быть сокращённый либо полный, это задаётся в настройках BIOS. Процитирую Википедию, что в себя включают эти тесты:
Сокращённый тест включает:
- Проверку целостности программ BIOS в ПЗУ, используя контрольную сумму.
- Обнаружение и инициализацию основных контроллеров, системных шин и подключённых устройств (графического адаптера, контроллеров дисководов и т. п.), а также выполнение программ, входящих в BIOS устройств и обеспечивающих их самоинициализацию.
- Определение размера оперативной памяти и тестирования первого сегмента (64 килобайт).
Полный регламент работы POST:
- Проверка всех регистров процессора;
- Проверка контрольной суммы ПЗУ;
- Проверка системного таймера и порта звуковой сигнализации (для IBM PC — ИМС i8253 или аналог);
- Тест контроллера прямого доступа к памяти;
- Тест регенератора оперативной памяти;
- Тест нижней области ОЗУ для проецирования резидентных программ в BIOS;
- Загрузка резидентных программ;
- Тест стандартного графического адаптера (VGA или PCI-E);
- Тест оперативной памяти;
- Тест основных устройств ввода (НЕ манипуляторов);
- Тест CMOS
- Тест основных портов LPT/COM;
- Тест накопителей на гибких магнитных дисках (НГМД);
- Тест накопителей на жёстких магнитных дисках (НЖМД);
- Самодиагностика функциональных подсистем BIOS;
- Передача управления загрузчику.
По результатам этого теста может быть обнаружена неисправность, к примеру нерабочая видеокарта или клавиатура. Поскольку экран монитора может не работать результаты тестов сообщаются в виде последовательности звуковых сигналов разной высоты. Что конкретно они значат надо смотреть в документации к материнской плате. Старые компьютеры часто бибикали во время старта — это программа BIOS сообщала о результатах тестов. Иногда может дополнительно использоваться индикатор, показывающий номер ошибки.
Если всё прошло успешно, BIOS начинает процесс поиска загрузчика ОС. Для этого он начинает просматривать все подключенные к материнской плате жёсткие диски. Данные на физических дисках адресуются в единицах называемых сектор, обычно он 512 байт, однако современный стандарт – 4096 байт. Установщик Windows в самый первый сектор на диске записывает специальный программный код и данные о разделах. Этот сектор называется Master Boot Record. Диск разбивается на разделы (partitions), отформатированный своей файловой системой. Максимум 4 раздела, каждый из который может быть расширенным (extended partition), такой можно рекурсивно делить на 4 раздела и теоретически их число не ограничено. Как только BIOS находит Master Boot Record он считывает оттуда код и передаёт ему управление. Этот код поочередно просматривает данные о разделах и находит тот который помечен как активный, в нём находится код загрузчика Windows (Это не раздел с C:\Windows\System32!), этот раздел называется system partition. Как правило он занимает 100Мб и скрыт от пользователя. В первом секторе этого раздела хранится загрузочный код, которому передаётся управление. Это volume boot sector, код в нём ищет файл Bootmgr, с которого и начинается процесс загрузки Windows. Файл Bootmgr создан через соединение в один файлов Startup.com и Bootmgr.exe.
Процессор начинает свою работу в режиме который называется «Реальный». Это режим совместимости, в нём CPU работает так же как и старые 16-bit процессоры, не имевшие поддержки виртуальной памяти и работавшие напрямую с физической памятью через 20-bit шину адресов, позволявшую адресовать 1Мб памяти. Простые MS-DOS программы выполнялись в этом режиме и имели расширение .COM. Первое что делает Startup.com (Bootmgr) – переключает процессор в режим «Защищённый», где под защитой понимается защита процессов друг от друга. В этом режиме поддерживается виртуальная память и 32х битные адреса, которыми можно адресовать 4Гб оперативной памяти. Следующим этапом Bootmgr заполняет таблицу виртуальных адресов на первые 16Мб RAM и включает трансляцию с виртуальных адресов в физические. В этом режиме и работает Windows. Поскольку на этом этапе подсистемы ОС ещё не созданы, Bootmgr имеет свою простую и неполную реализацию файловой системы NTFS, благодаря которой он находит BCD файл (Boot Configuration Data), в котором хранятся настройки параметров загрузки ОС. Вы можете редактировать его через утилиту BcdEdit.exe. В этих настройках BCD может быть указано, что Windows была в состоянии гибернации, и тогда Bootmgr запустит программу WinResume.exe, которая считывает состояние из файла Hyberfil.sys в память и перезапускает драйвера. Если BCD говорит, что есть несколько ОС, то Bootmgr выведет на экран их список и попросит пользователя выбрать. Если ОС одна, то Bootmgr запускает WinLoad.exe, этот процесс и выполняет основную работу по инициализации Windows:
- Выбирает соотвествующую версию ядра Windows. Можете думать о нём как о Windows10.exe, хотя на самом деле он называется NtOsKrnl.exe. Какие есть версии? Согласно википедии:
- ntoskrnl.exe — однопроцессорное ядро Windows. без поддержки режима PAE
- ntkrnlmp.exe (англ. NT Kernel, Multi-Processor version) — многопроцессорное ядро Windows. без поддержки режима PAE
- ntkrnlpa.exe — однопроцессорное ядро Windows с поддержкой режима PAE.
- ntkrpamp.exe — многопроцессорное ядро Windows с поддержкой режима PAE.
- Загружает HAL.dll (Hardware Abstraction Layer), который абстрагирует особенности материнки и CPU.
- Загружает файл шрифтов vgaoem.fon
- Загружает файлы в которых содержится инфомрация о представлениях даты времени, форматов чисел и пр. Эта функциональность называется National Language System.
- Загружает в память реестр SYSTEM, в нём содержится информация о драйверах которые надо загрузить. Информация о всех драйверах находится в HKLM\SYSTEM\CurrentControlSet\Services\. Драйвера которые надо загрузить имеют ключ start = SERVICE_BOOT_START (0). Об устройстве реестра мы поговорим в другой статье.
- Загружает драйвер файловой системы для раздела на котором располагаются файлы драйверов.
- Загружает драйвера в память, но пока не инициализирует их из-за круговых зависимостей.
- Подготавливает регистры CPU для выполнения ядра Windows выбранного на первом шаге – NtOsKrnl.exe.
Во время загрузки драйверов WinLoad проверяет их цифровые подписи и если они не совпадают, то будет синий (BSOD) или зелёный (GSOD, для insider preview сборок) «экран смерти».
Запуск на UEFI
Пример экрана загрузки UEFI
BIOS существует больше 30 лет и в попытках исправить его недостатки компания Intel в 1998 году создала стандарт Intel Boot Initiative, позже переименованный в EFI и в 2005 году пожертвованный организации EFI Forum. Недостатки BIOS:
• Работает только в 16-битном режиме
• Может адресовать только 1Mb оперативной памяти
• Часто имеет проблемы совместимости
• MBR ограничен только четырьмя главными разделами диска
• Диск с ОС не может быть больше чем 2.2Tb.
• Имеет очень ограниченные возможности для валидации загрузчика ОС.
На смену BIOS пришёл UEFI, по сути это миниатюрная ОС которая может работать и в 32-bit и в 64-bit. Для совместимости есть опция Compatibility Support Module, которая включается в настройках и эмулирует работу BIOS.
В UEFI загрузка происходит в родной для процессора битности – 32 или 64, есть доступ ко всей памяти, поддерживается виртуальная память, включен Secure Boot и есть возможность запустить antimalware до начала загрузки ОС. Порядок загрузки ОС в UEFI:
- Инициализация и запуск Firmware, запуск чип-сета.
- POST тест, аналогично BIOS
- Загрузка EFI-драйверов и поиск диска подпадающего под требования EFI для загрузочного диска
- Поиск папки с именем EFI. Спецификация UEFI требует чтобы был раздел для EFI System Partition, отформатированный под файловую систему FAT, размером 100Мб – 1Гб или не более 1% от размера диска. Каждая установленная Windows имеет свою директорию на этом разделе – EFI\Microsoft.
- Читает из настроек UEFI сохранённых в NVRAM (энергонезависимая память) путь к файлу загрузчика.
- Находит и запускает EFI/Microsoft/Boot/BootMgrFw.efi.
- BootMgrFw.efi находит раздел реестра BCD, который хранится в отдельном файле с именем BCD. Из него он находит WinLoad.efi, который расположен в C:\Windows\System32\winload.efi.
Чтобы посмотреть содержимое раздела EFI System Partition откройте консоль с правами админа (WinKey+X => Windows PowerShell (Admin)) и выполните команды mountvol Z: /s, Z:, dir. CD — меняет директорию.
Главное отличие компонентов BootMgr и WinLoad для UEFI от своих копий для BIOS тем что они используют EFI API, вместо прерываний BIOS и форматы загрузочных разделов MBR BIOS и EFI System Partition сильно отличаются.
Инициализация ядра
Напоминаю, что мы рассматриваем загрузку ПК в контексте работы клавиатуры, поэтому не стоит заострять внимание на всех этапах. Надо понять где в этом процессе находится клавиатура, важные для понимания этапы выделены.
На предыдущем этапе был запущен компонент WinLoad.exe/WinLoad.efi, который запускает NtOsKrnl.exe указав ему параметры загрузки в глобальной переменной nt!KeLoaderBlock (память режима ядра доступна всем процессам), которые WinLoad собрал во время своей работы. Они включают:
- Пути к System (загрузчик Windows) и Boot (C:\Windows\System32) директориям.
- Указатель на таблицы виртуальной памяти которые создал WinLoad
- Дерево с описанием подключенного hardware, оно используется для создания HKLM\HARDWARE ветки реестра.
- Копия загруженного реестра HKLM\System
- Указатель на список загруженных (но не инициализированных) драйверов участвующих в старте Windows.
- Прочая информация необходимая для загрузки.
Инициализация ядра Windows происходит в два этапа. До этого происходит инициализация Hardware Abstraction Layer, который в числе всего прочего настраивает контроллеры прерывания для каждого CPU.
На этой же стадии загружаются в память строки с сообщениями для BSOD, потому как в момент падения они могут быть недоступны или повреждены.
- Первая фаза инициализации ядра:
- Слой Executive инициализирует свои объекты состояний – глобальные объекты, списки, блокировки. Производится проверка Windows SKU (Stock Keeping Unit), примеры Windows 10 SKU — Home, Pro, Mobile, Enterprise, Education.
- Если включен Driver Verifier, то он инициализируется.
- Менеджер памяти создаёт структуры данных, необходимые для работы внутренних API для работы с памятью (memory services), резервирует память для внутреннего пользования ядром.
- Если подключен отладчик ядра (kernel debugger) ему отправляется уведомление загрузить символы для драйверов загружаемых во время старта системы.
- Инициализируется информация о версии билда Windows.
- Старт Object Manager – позволяет регистрировать именованные объекты к которым могут получать доступ по имени другие компоненты. Яркий пример – мьютекс по которому приложение позволяет запустить единственный экземпляр. Здесь же создаётся храниться handle table, по которой устанавливается соответствие к примеру между HWND и объектом описывающим окно.
- Старт Security Reference Monitor подготавливает всё необходимое для создания первого аккаунта.
- Process Manager подготавливает все списки и глобальные объекты для создания процессов и потоков. Создаются процесс Idle и System (в нём исполняется “Windows10.exe” он же NtOsKrnl.exe), они пока не исполняются, потому как прерывания выключены.
- Инициализация User-Mode Debugging Framework.
- Первая фаза инициализации Plug and Play Manager. PnP – это стандарт который реализовывается на уровне производителей периферии, материнских плат и ОС. Он позволяет получать расширенную информацию о подключенных устройствах и подключать их без перезагрузки ПК.
- Вторая фаза инициализации ядра. Она содержит 51 шаг, поэтому я пропущу многие из них:
- По завершению первой фазы главный поток процесса System (NtOsKrnl.exe) уже начал исполнение. В нём производится вторая фаза инициализации. Поток получает самый высокий приоритет – 31.
- HAL настраивает таблицу прерываний и включает прерывания.
- Показывается Windows Startup Screen, которая по умолчанию представляет из себя чёрный экран с progress bar.
- Executive слой инициализирует инфраструктуру для таких объектов синхронизации как Semaphore, Mutex, Event, Timer.
- Объекты для User-Mode Debugger проинициализированы.
- Создана symbolic link \SystemRoot.
- NtDll.dll отображена в память. Она отображается во все процессы и содержит Windows APIs.
- Инициализирован драйвер файловой системы.
- Подсистема межпроцессного общения между компонентами Windows ALPC проинициализирована. Можете думать о ней как о named pipes или Windows Communication Foundation для межпроцессного общения.
- Начинается инициализация I/O Manager, который создаёт необходимые структуры данных для инициализации и хранения драйверов подключенной к компьютеру периферии. Этот процесс очень сложный.
Здесь же инициализируются компоненты Windows Management Instrumentation и Event Tracing for Windows (на него полагается Windows Performance Analyzer). После этого шага все драйвера проинициализированы. - Запускается процесс SMSS.exe (Session Manager Sub System). Он отвечает за создание режима пользователя, в котором будет создана визуальная часть Windows.
Запуск подсистем – SMSS, CSRSS, WinInit
SMSS.exe отличается от пользовательских процессов, это нативный процесс и это даёт ему дополнительные полномочия. SMSS.exe работает с ядром в обход Windows API, он использует то что называется Native API. Windows API – обёртка вокруг Native API. SMSS.exe первым делом запускает подсистему Windows (CSRSS.exe – Client Server Runtime Sub System) и заканчивает инициализацию реестра.
Процесс и потоки SMSS.exe помечены как критические, это значит что если они неожиданно завершаться, к примеру из-за ошибки, это приведёт к падению системы. Для общения с подсистемами, к примеру вызову API создающему новую сессию, SMSS создаёт ALPC-порт с именем SmApiPort. Загружаются из реестра переменные среды окружения, запускаются программы такие как Check Disk (autochk.exe, эти программы записаны в реестре HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute). SMSS.exe запускается для каждой пользовательской сессии. Глобальные переменные (очередь сообщений например) у каждой сессии своя за счёт механизма виртуальной памяти. В Windows есть контексты потока, процесса и сессии. Каждый SMSS.exe запускает свой экземпляр подсистемы, на данный момент это только CSRSS.exe (Windows), в прошлом поддерживались операционные системы OS/2 (os2ss.exe) и POSIX (psxss.exe), но эта идея была неудачной. Самый первый SMSS.exe засыпает в ожидании процесса WinInit.exe. Остальные экземпляры вместо этого создают процесс WinLogon который показывает UI для входа.
WinInit.exe инициализирует подсистемы для создания графической оболочки – Windows Station и десктопы, это не тот рабочий стол который вы видите, это иная концепция Windows. Далее он запускает процессы:
- Services.exe – Services Control Manager (SCM) запускает сервисы и драйвера помеченные как AutoStart. Сервисы запускаются в процессах svchost.exe. Есть утилита tlist.exe, которая запущенная с параметром tlist.exe -s напечатает в консоли имена сервисов в каждом из svchost.exe.
- LSASS.exe – Local System Authority.
- LSM.exe – Local Session Manager.
WinLogon.exe – загружает провайдеры аутентификации (credential providers), которые могут быть password, Smartcard, PIN, Hello Face. Он порождает процесс LogonUI.exe который и показывает пользователю интерфейс для аутентификации, а после валидирует введённые данные (логин и пароль, PIN).
Если всё прошло успешно, то WinLogon запускает процесс указанный в ключе реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon\Userinit. По умолчанию это процесс UserInit.exe, который:
- Запускает скрипты указанные в реестрах:
- HKCU\Software\Policies\Microsoft\Windows\System\Scripts
- HKLM\SOFTWARE\Policies\Microsoft\Windows\System\Scripts
- Если групповая политика безопасности определяет User Profile Quota, запускает %SystemRoot%\System32\Proquota.exe
- Запускает оболочку Windows, по умолчанию это Explorer.exe. Этот параметр конфигурируется через реестр:
- HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
- HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
WinLogon уведомляет Network Provider о залогинившемся пользователе, на что тот восстанавливает и подключает системные диски и принтеры сохранённые в реестре. Network Provider представляет из себя файл mpr.dll из системной папки, который хостится в процессе svchost.exe, т.е. сервис Windows.
Дерево процессов выглядит следующим образом, на нём можно увидеть кто и кого создал (показаны не все процессы, может немного отличаться от последний версий Windows).
Где здесь клавиатура?
Во время запуска ядро Windows считывает из реестра информацию о контроллере системной шины, как правило это шина PCI (реже MSI), к ней подключены контроллеры портов ввода-вывода, в том числе и USB, PS/2. Информация о нём записывается во время установки Windows. Система загружает для него драйвер и рекурсивно обходит все порты так же загружая для каждого из них свой драйвер. Драйвера могут комбинироваться в узлы (driver node), к примеру драйвер клавиатуры, будет соединён с драйвером порта PS2. А вот порт USB сложнее — сначала драйвер порта, потом драйвер для работы с протоколом HID и только потом клавиатура.
Каждый порт контроллируется своим чипом, который мониторит подключение, принимает/отправляет сигналы между CPU и устройством. Если чип-сет Южный мост не встроен в CPU, как это часто делают в ноутбуках, а существует отдельным чипом на материнке, то правильней говорить: сигнал между Южным мостом и контроллером порта. Чип контроллирующий порт имеет выделенную линию с контроллером прерываний (PIC или APIC), по которой он может попросить обратить на себя внимание CPU, к примеру считать данные от клавиатуры (порт PS/2, с USB другая история). Поскольку ОС загрузила для порта драйвер, она может отдавать ему команды, читать и отправлять данные. В нашем примере был загружен драйвер из C:\Windows\System32\i8042prt.sys. Давайте вспомним предыдущую статью. В старых компьютерах с PIC на чипе Intel 8259 было 15 линий прерываний, где клавиатура была подключена к ножке IRQ1, таймер IRQ0, а мышка к IRQ12, который на самом деле был пятой ножкой второго чипа 8259, который мультиплексировал свои прерывания через ножку IRQ2 первого контроллера. В современных PIC могут быть 255 контактов для сигналов прерываний. Во время загрузки ОС программирует APIC/PIC возвращать определённое число когда скажем пришло прерывание от порта клавиатуры или USB и по этому номеру CPU находит в таблице векторов прерываний функцию которую надо выполнить. Номер прерываний определяют HAL и Plug’n’Play Manager. Контроллер прерываний ищет сигнал на своих ножках в определённом порядке, к примеру в бесконечном цикле проверяет напряжение на ножках от 1 до MAX_PIN. Этот порядок определяет приоритет, к примеру клавиатура будет замечена раньше мышки, а таймер раньше клавиатуры. Чтобы не зависеть от особенностей работы контроллеров прерываний Windows абстрагирует концепцию IRQ (Interrupt Request) в IRQL (Interrupt Request Level). Будь у контроллера прерываний хоть 15 хоть 255 линий они все будут отображены на 32 IRQL для x86 и 15 IRQL для x64 и IA64.
Что означают приоритеты IRQL:
- High – когда происходит краш системы, обычно это вызов функции KeBugCheckEx.
- Power Fail – не используется. Изначально был придуман для Windows NT.
- Interprocessor Interrupt – нужен отправить запрос другому CPU на мультипроцессорной системе выполнить действие, например обновить TLB cache, system shutdown, system crash (BSOD).
- Clock – нужен чтобы обновлять системные часы, а так же вести статистику сколько времени потоки проводят в режиме пользователя и ядра.
- Profile – используется для real-time clock (local APIC-timer) когда механизм kernel-profiling включен.
- Device 1 … Device N – прерывания от устройств I/O. Во время прерывания данные от клавиатуры, мыши и других устройств считываются в отдельные буфера и сохраняются в объектах типа DPC (Deferred Procedure Call), чтобы обработать их позже и дать возможность устройствам переслать данные. После приоритет снижается до Dispatch DPC
- Dispatch DPC — как только данные от устройств получены можно начинать их обрабатывать.
- APC — Asynchronous Procedure Call. Через этот механизм вы можете исполнить код когда поток будет спать вызвав WaitForSingleObject, Sleep и другие.
- Passive/Low — здесь исполняются все приложения в User Mode.
Если вы всегда программировали в режиме пользователя, то никогда не слышали про IRQL, потому что все пользовательские программы выполняеются с приоритетом Passive/Low (0). Как только происходит событие с большим уровнем приоритета (событие от клавиатуры, таймер планировщика потоков), процессор сохраняет состояние прерванного потока, которое представляет из себя значения регистров CPU, и вызывает диспетчер прерываний (interrupt dispatcher, просто функция), который повышает приоритет IRQL через API KeRaiseIrql в HAL и вызывает непосредственно сам код обработчика (interrupt’s service routine). После этого IRQL CPU понижается до прежнего уровня через функцию KeLowerIrql и прерванный поток начинает обработку с того же места где его прервали. На этом механизме основан планировщик потоков. Он устанавливает таймер, который с определённым интервалом (квант времени) генерирует прерывание с приоритетом DPC/Dispatch (2) и в своей interrupt’s service routine по определённому алгоритму назначает новый поток на исполнение.
Механизм IRQL реализовывается на уровне софта в Hardware Abstraction Layer (HAL.dll), а не железа. В Windows системах есть драйвер шины (bus driver), который определяет наличие устройств подключенных к шинам – PCI, USB и др. и номера прерываний которые могут быть назначены каждому устройству. Драйвер шины сообщает эту информацию Plug and play manager, который уже решает какие номера прерываний назначить каждому устройству. Далее арбитр прерываний внутри PnP Mgr (PnP interrupt arbiter) устанавливает связи между IRQ и IRQL.
Когда приходит прерывание от клавиатуры, любой исполняемый в данный момент поток (это может быть ваша программа) назначается на его обработку. Interrupt dispatcher повышает приоритет IRQL CPU до одного из уровней Device1-DeviceN. После этого менеджер виртуальной памяти не сможет найти страницу если она не загружена в RAM (не сможет обработать Page Fault), планировщик потоков не сможет прервать выполнение, потому что они все работают с меньшим уровнем IRQL. Главная задача драйвера клавиатуры в этот момент считать полученные данные и сохранить их для дальнейшей обработки. Данные записываются в объект типа _DPC (Deferred Procedure Call), который сохраняется в список DPC потока (что-то вроде std::list<DPC>, в ядре ОС вместо массивов используются связанные списки). Как только прерывания от всех внешних устройств обработаны, IRQL потока понижается до уровня DPC в котором и производится обработка отложенных процедур (DPC). В коде обработчика DPC для клавиатуры вызывается функция из драйвера клавиатуры Kbdclass.sys:
VOID KeyboardClassServiceCallback(
_In_ PDEVICE_OBJECT DeviceObject,
_In_ PKEYBOARD_INPUT_DATA InputDataStart,
_In_ PKEYBOARD_INPUT_DATA InputDataEnd,
_Inout_ PULONG InputDataConsumed
);
Так вот, драйвер клавиатуры (kbdclass.sys) получает данные от порта (USB, PS2) через прерывание и записывает их через WriteFile, компонент внутри ядра Windows просыпается, считывает их используя API ReadFile и добавляет в очередь сообщений с клавиатуры. API для работы с файлом могут использоваться для чтения данных с драйверов. С этого момента начинается обработка данных стеком ввода Windows, об этом в следующей статье.
Если у вас есть ПК с PS2 портом и вы умеете пользоваться WinDbg в режиме ядра, то можете легко найти обработчик прерываний клавиатуры напечатав команду !idt, которая выведет на экран всю таблицу векторов прерываний. Прерывание вклинивается в ход выполнения программы, слово вектор здесь подразумевает направление, направление исполнения программы. WinDbg был сделан специально для отладки Windows, самая последняя версия называется WinDbgX. Он имеет текстовый интерфейс, который отпугивает людей привыкших к Visual Studio, однако предоставляет гораздо больше возможностей, в частности исполнение скриптов. Прерывание фиолетового порта PS2 выделено красным. Функция которая его обрабатывает называется I8042KeyboardInterruptService, которая находится в файле i8042prt.sys.
BOOLEAN
I8042KeyboardInterruptService(
IN PKINTERRUPT Interrupt,
IN PVOID Context
);
Routine Description:
This is the interrupt service routine for the keyboard device when
scan code set 1 is in use.
Arguments:
Interrupt - A pointer to the interrupt object for this interrupt.
Context - A pointer to the device object.
Return Value:
Returns TRUE if the interrupt was expected (and therefore processed);
otherwise, FALSE is returned.
Сейчас возникает вопрос, откуда у обработчика прерываний аргумент? Кто его передаёт? Ведь CPU ничего не знает о нём. Если поставите в неё breakpoint, то удивитесь ещё больше увидев несколько функций выше по стеку:
0: kd> kC
# Call Site
00 i8042prt!I8042KeyboardInterruptService
01 nt!KiCallInterruptServiceRoutine
02 nt!KiInterruptSubDispatch
03 nt!KiInterruptDispatch
04 nt!KiIdleLoop
Объяснение здесь простое – это не та функция которая сохранена в регистре IDT процессора. То что вы видите на картинке выше на самом деле объекты типа _KINTERRUPT. В таблице прерываний сохранён специальный ассемблерный код (nt!KiIdleLoop), который знает как найти объект описывающий прерывание в памяти. Что же интересного есть в нём?
- Указатель на объект представляющий драйвер в памяти.
- Указатель на функцию i8042prt!I8042KeyboardInterruptService, которая и вызывает код считывающий данные из порта PS2 через ассемблерную команду IN AL, 0x60 – сохранить значение из порта номер 0x60 в регистре AL.
- Функция dispatcher – ей передаётся указатель функцию из пункта №2 и она вызывает её.
- Состояние регистров CPU. Перед вызовом прерывания состояние CPU будет сохранено сюда, и отсюда же будет восстановлено.
- Приоритет прерывания. Не тот который определяет контроллер прерываний, а тот который Windows считает нужным. Это IRQL (Interrupt Request Level) – абстракция над IRQ.
Как только обработчик прерываний клавиатуры будет вызван, он уведомит драйвер клавиатуры о полученных данных, после чего будет уведомлено ядро ОС, которое обработав данные отправит их дальше по стеку ввода, где они могут быть доставлены приложению, которое на них отреагирует, или перед этим в обработчик языков (азиатские иероглифы, автокоррекция, автозаполнение).
Ядро ОС напрямую не взаимодействует с драйвером клавиатуры, для этих целей используется Plug’n’Play Manager. Этот компонент предоставляет API IoRegisterPlugPlayNotification, который вызовет предоставленную callback-функцию когда устройство будет добавлено или удалено.
Пару слов о USB
Ознакомление с работой порта USB потребовало бы отдельной статьи описывающей его работу и плюс описание обработки данных HID на Windows. Это очень сильно усложнило бы материал, к тому же уже есть хорошие статьи по теме, поэтому PS2 идеальный пример из-за своей простоты.
USB создавался как универсальный порт для всех устройств, будь то клавиатура, фотоаппарат, сканнер, игровой руль с педалями, принтер и пр. Вдобавок он поддерживает вложенность портов – USB материнки => монитор с USB => клавиатура с USB к которой подключена мышка, флешка и USB-hub к которому подключен жёсткий диск. Взглянув на контакты USB 2.0 вы увидите что они не заточены под передачу каких-то определённых данных, как у PS2. Их всего четыре – витая пара для передачи битов данных, плюс и минус питания.
Провода кабеля USB 2.0
USB 3.0 быстрее за счёт дополнительных пяти контактов. Как видите там нету линии CLOCK для синхронизации, поэтому логика передачи данных сложнее. Слева USB 2.0 и справа USB 3.0 для сравнения.
Все данные передаются через протокол HID (Human Interface Device), который описывает форматы, порядок взаимодействия и передачи данных и всё остальное. Стандарт USB 2.0 занимает 650 страниц, документ HID Class Specification, описывающий работу устройств (мыши, клавиатуры и пр) – 97 страниц, их рекомендуется изучить если вы работаете с USB.
Первым делом подключенное устройство должно рассказать о себе, для этого оно отправляет несколько структур данных, в которых указывается ID устройства и ID производителя по которым Plug’n’Play manager может найти в реестре информацию, загрузить и соединить драйвера. USB устройства пассивны, т.е. хост должен сам с определённым интервалом проверять наличие данных. Частота опроса и размер пакета данных задаются в одном из дескрипторов устройства USB. Максимальный размер пакета – 64 байта, что для информации о нажатых клавишах более чем достаточно.
В Windows есть встроенная поддержка HID, она не такая простая как связь драйвера порта PS2 с драйвером клавиатуры, потому что драйвер HID должен уметь обрабатывать все поддерживаемые протоколом сценарии. Вне зависимости от провайдера данных — порты PS2, USB или Remote Desktop или виртуальная машина – на самом верху driver node будет находится Kbdclass, от которого ядро ОС и будет получать информацию. Уведомление о подсоединении клавиатуры будет обрабатываться через Plug’n’Play Manager, так что для ядра Windows не имеет значение какой порт или источник данных от устройства используется.
ч.1 — Основы ОС и компьютера
ч.2 — Как работает материнская плата и клавиатура через порт PS2
Основные этапы загрузки операционной системы Windows
Загрузчик операционной системы — системное программное обеспечение, обеспечивающее загрузку операционной системы непосредственно после включения компьютера.
Загрузчик операционной системы:
— обеспечивает необходимые средства для диалога с пользователем компьютера (например, загрузчик позволяет выбрать операционную систему для загрузки);
— приводит аппаратуру компьютера в состояние, необходимое для старта ядра операционной системы (например, на x86архитектурах перед запуском ядра загрузчик должен правильно настроить виртуальную память);
— загружает ядро операционной системы в ОЗУ. Загрузка ядра операционной системы не обязательно происходит с жесткого диска. Загрузчик может получать ядро по сети. Ядро может храниться в ПЗУ или загружаться через последовательные интерфейсы (это может пригодиться на ранней стадии отладки создаваемой компьютерной системы);
— формирует параметры, передаваемые ядру операционной системы (ядру Windows передаются параметры, указывающие способ подключения корневой файловой системы);
— передаёт управление ядру операционной системы.
Загрузка Windows
1. После подачи питания запускается процесс самотестирования, управляет которым программа BIOS. Если на данном этапе выявляется неисправный узел, то загрузка ПК останавливается и на экран выводится соответствующее уведомление, либо раздается серия звуковых сигналов.
Компьютер тестирует себя (стадия POST, Power On Self Test), оперативную память, физические устройства. Если BIOS поддерживает спецификацию PnP, то происходит определение и настройка такого типа устройств. BIOS обнаруживает загрузочное устройство (жесткий диск, привод CD ROM), загружает и запускает на выполнение основную загрузочную запись (MBR). MBR просматривает таблицу разделов (partition table), чтобы найти активный, загружает загрузочный вектор активного раздела в память и запускает его на выполнение. Загружает и инициализирует файл NTLDR, который представляет собой загрузчик ОС.
2. После окончания теста BIOS запускает определение загрузочного сектора на носителях, которые поддерживает материнская плата (дискета, жесткий диск, оптический диск). Приоритет поиска загрузочного сектора настраивается в настройках BIOS.
При загрузке 32-разрядных версий операционной системы Windows (2000, XP или Server 2003) используются следующие файлы:
C:NTLDR — стадии подготовки к загрузке и загрузка
C:BOOT.INI — стадия загрузки ядра
C:BOOTSECT.DOS — стадия загрузки ядра (опционально)
C:NTDETECT.COM — стадия загрузки ядра
%systemroot%System32NTOSKRNL.EXE — стадия загрузки ядра (или NTKRNLPA.EXE)
%systemroot%System32HAL.DLL — стадия загрузки ядра
Здесь под %systemroot% подразумевается директория, где размещены основные файлы операционной системы, например, D:Windows — для Windows XP, установленной на логический диск D. Для системы Windows 2000, например, установленной на логическом диске С, это будет директория C:WINNT.
3 После того, как загрузочный накопитель определен, с него считывается первый сектор, в котором расположена основная загрузочная запись (MBR, Master Boot Record). MBR также содержит таблицу разделов диска с пометкой — какой из них активный.
В общем виде, структура главной загрузочной записи MBR, может быть представлена следующим образом:
— программный код и данные начального загрузчика. (446 байт.)
— таблица разделов диска (4 поля по 16 байт — 64 байта)
— сигнатура 55AA (2 байта)
Структура MBR включает в себя 2 основных элемента — программный код первичного загрузчика и таблицу разделов. Обязательным признаком наличия записи MBR является специальный код (сигнатура) в двух последних байтах — 55AA.
Наличие сигнатуры проверяется подпрограммой
4. MBR определяет активный раздел и управление передается загрузочной записи, которую хранит первый сектор активного раздела. При помощи данной загрузочной записи активируется менеджер загрузки ОС Windows (называется bootmgr – файл, расположенный в корневой директории активного раздела).
boot.ini позволяют загрузчику найти дальнейшие компоненты загружаемой системы и определяют нужные параметры начальной загрузки.
Диспетчер загрузки bootmgr представляет собой файл небольшого размера, расположенный в корневом каталоге активного раздела. Основное его предназначение — обеспечение дальнейшей процедуры загрузки в соответствии с существующей конфигурацией, хранящейся в специальном хранилище — хранилище данных конфигурации ( BCD — Boot Configuratin Data), представляющем собой файл с именем BCD, находящийся в каталоге BOOT активного раздела.
Пример содержимого boot.ini:
[boot loader] timeout=10 default=multi(0)disk(0)rdisk(0)partition(1)WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(3)WINNT="MS Windows 2000 Server" /fastdetect multi(0)disk(0)rdisk(0)partition(1)WINNT="MS Windows 2000 Professional RUS" /fastdetect
Параметр timeout задает время ожидания выбора загружаемой ОС в секундах, default — определяет, что загружать по умолчанию. В секции[operating systems] — список загружаемых ОС и параметры их загрузки. Пути задаются в ARC-виде (Advanced RISC Computer), где:
multi(0) — номер контроллера HDD. 0 — Primary, 1 — Secondary.
disk(0) — для IDE всегда равен 0, для SCSI — номер логического устройства (LUN)
rdisk(0) — для SCSI всегда равен 0, для IDE — номер физического диска.
partition(1) — номер раздела с установленной OC. Номера разделов начинаются с «1»
WINNT — имя каталога с установленной OC.
5. Далее менеджер загрузки проверяет информацию конфигурации системы, которая записана в файл BCD (аббревиатура от Boot Configuration Data) хранилище данных конфигураций загрузки. Если в файле содержится несколько записей, пользователь увидит меню выбора операционной системы. Расположен данный файл в каталоге с названием Boot активного раздела.
В качестве активного раздела используется, автоматически создаваемый при инсталляции в первой части диска, раздел небольшого размера ( около 100Мб). Данному разделу не присваивается буква, и в проводнике он не отображается. Это сделано с целью защиты загрузчика от небезопасных для него действий пользователя — удаления файлов конфигурации или самого диспетчера, сжатия файловой системы и т.п.
Раздел конфигурации BCD содержит подраздел Description с параметрами описания и подраздел Objects с объектами конфигурации загрузки. Данные конфигурации загрузки можно условно разделить на 3 основных составляющих:
— хранилище BCD (Store)
— записи в хранилище (Entries)
— параметры записей (Entry Options)
Иерархически, хранилище конфигурации загрузки представляет собой совокупность объектов (Objects), состоящих из отдельных элементов (Elements):
Каждый из объектов представляет собой упорядоченную структуру элементов, обрабатываемую диспетчером загрузки. Существует 3 типа объектов:
— приложения (application objects)
— наследуемые объекты
— устройства (device objects)
Если вернуться к отображаемой редактором реестра структуре хранилища конфигурации, то заметно, что каждый подраздел раздела Objects имеет имя, представляющее собой глобальный уникальный идентификатор — GUID . Идентификатор GUID формируется программным путем и однозначно является уникальным для той системы, где он создается. Алгоритм формирования GUID построен таким образом, что каждый новый генерируемый идентификатор никогда не совпадает с другим,
существующим в данной системе. Обозначается GUID в виде групп из шестнадцатеричных цифр, разделяемых дефисами, и заключенными в фигурные скобки:
{d1f837a2-7e0f-11df-bc8b-f6edb78d41b5}
6 Как только система выбрана, активируются модуль загрузки Windows Winload.exe, системные службы, компоненты ядра Hal.dll и Ntoskrnl.exe и ряд других компонентов – данный этап сопровождается анимированным логотипом.
7 Активируется процесс winlogon.exe, необходимый для управления входом пользователей в Windows. Если в системе всего один пользователь без пароля, вход будет произведен в автоматическом режиме. Если это не так – будет выведено окно выбора пользователя с формой для ввода пароля (если он установлен).
Исходя из вышеперечисленного, можно сделать вывод, что для корректного старта Windows должны выполняться следующие требования:
— текущие параметры BIOS должны обеспечить загрузку с накопителя, на котором установлена ОС. Если в настройках указано, что в первую очередь загрузка производится со сменных носителей, необходимо убедиться в их отсутствии;
— первый сектор загрузочного диска должен содержать корректную загрузочную запись и таблицу разделов, при этом один из разделов обязан быть помеченным как активный;
-активный раздел должен иметь загрузочную запись Windows , а его корневой каталог должен содержать файл bootmgr;
— в каталоге Boot активного раздела обязан присутствовать файл BCD, которых хранит записи об инсталлированных операционных системах.
Загрузка ядра
На этапе загрузки ядра NTLDR выполняет следующие действия:
Загружает код ядра из файла NTOSKRNL.EXE (NTKRNLPA.EXE при наличии опции /РАЕ в файле boot.ini), но не инициализирует его.
Загружает код слоя аппаратных абстракций из файла HAL.DLL.
Загружает раздел HKLMSYSTEM из %systemroot%System32ConfigSystem.
Выбирает набор параметров для конфигурации (список драйверов, устройств, устройств и служб, которые необходимо запустить).
Загружает драйверы (обычно это низкоуровневые драйвера, как, например, драйвера дисков) со значением параметра Start равным 0x0. Значение параметра List в
HKLMSYSTEMCurrentContorlSetControlServiceGroupOrder
определяет порядок загрузки их загрузчиком NTLDR. Драйверы, регулирующие свою загрузку таким способом, должны иметь соответствующие значения параметра Group в своих подразделах раздела Системного Реестра
HKLMSystemCurrentControlSetServices.
Инициализация ядра
По завершении загрузки, ядро инициализируется и ему передается управление от загрузчика NTLDR. Создается раздел HKLMHardware по результатам распознавания аппаратуры, куда заносится информация о системной плате, устройствах и прерываниях. Создается набор параметров Clone путем копирования управляющих параметров; информация о которых содержится в параметре Current в разделе HKLMSystemSelect. Набор Clone никогда не модифицируется. Загружаются драйверы, указанные в разделе системного реестра
HKLMSystemCurrentControlSetServices
в параметрах которых присутствует значение Start равное 0x01 , порядок загрузки которых так же, как и было указано выше, определяется в параметре Group. Драйверы инициализируются сразу же после их загрузки. Значения параметра ErrorControl в описании драйвера (то есть в его параметре, указанном в Системном Реестре) определяет реакцию системы в том случае, если при загрузке и инициализации данного драйвера произошла ошибка. Запускаются сервисы (например, Служба Журнала Событий) и драйверы.
Вывод на экран информации о процессе загрузки
Указав параметр /sos в соответствующей строке файла boot.ini, например
multi(0)disk(0)rdisk(0)partition(2)Windows ="Комментарий для пользователя"/sos
можно обеспечить вывод на экран информацию о загружаемых программных модулях операционной системы/
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32ntoskrnl.exe multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32hal.dll multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32KDCOM.DLL multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32BOOTVID.DLL multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32configsystem multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32c_1251.nls multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32c_866.nls multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32l_intl.nls multi(0)disk(0)rdisk(0)partition(1)WindowsFONTSvga866.fon
Это статья для повышения компьютерного кругозора. Если сегодня хочется попрограммировать, сделайте проект с колесом фортуны, а если нужны задачи — вот подборка самых интересных задач на логику.
Сегодня покажем, что происходит в обычном стационарном компьютере, когда вы его включаете и загружаете. Прямо по шагам, углубляясь в детали.
Воткнули вилку в розетку
Чаще всего компьютер включён в сеть постоянно, и это значит, что блок питания подаёт на материнскую плату совсем небольшой ток. Ток настолько мал, что внутри блока питания ничего не греется, поэтому не нужно включать никакие вентиляторы.
Ток поступает на контакты питания материнской платы, а оттуда — на системный контроллер. Системный контроллер — специальная микросхема (или группа микросхем), которая управляет всем, что находится на материнской плате, включая процессор и оперативную память. Когда есть питание, системный контроллер просто ждёт, пока пользователь не нажмёт кнопку включения компьютера.
Получается, даже когда компьютер условно выключен, на самом деле он включён — работает системный контроллер, который, как сторож, проверяет, нужно ли подавать электричество на остальные устройства внутри компьютера.
Нажали кнопку включения
После нажатия кнопки включения системный контроллер получает от неё сигнал и говорит блоку питания: «Мне нужно больше тока». Блок начинает полноценно работать и подаёт полноценное питание на материнскую плату и остальные компоненты — теперь начинают работать все основные компоненты компьютера:
- процессор,
- оперативная память,
- микросхемы BIOS или UEFI (про них позже),
- жёсткий диск.
Когда всё это заработало, системный контроллер берёт содержимое микросхемы BIOS, загружает его в оперативную память и говорит «Ну всё, дальше ты». С этого момента управление компьютером переходит к BIOS.
Вам может быть интересно:
Загрузился BIOS
BIOS — это аббревиатура от Basic Input/Output System, базовая система ввода-вывода. Она отвечает за первоначальную загрузку компьютера. Все данные BIOS хранятся в отдельной микросхеме на материнской плате, а чтобы настройки не пропали после отключения от розетки, ставят батарейку. Если питания от сети не будет, батарейка будет поддерживать память в микросхеме около 10 лет.
Первое, что делает BIOS, — запускает POST (Power On Self Test), самотестирование при включении. Тест проверяет работу процессора, оперативной памяти, контроллеров, загрузчиков и всего остального оборудования, важного для загрузки компьютера. Если всё в порядке, то компьютер пропищит один раз и продолжит загрузку — так он сообщает о результатах тестирования. А если будут ошибки — пропищит иначе, например:
- короткий и длинный — ошибка с оперативной памятью;
- длинный и 2 коротких — проблемы с видеокартой;
- постоянно длинный и короткий гудки — что-то с процессором;
- всё время пищит — ошибки с блоком питания.
Когда POST пройден, BIOS начинает искать загрузчик операционной системы. Для этого он смотрит у себя в настройках порядок загрузки — список дисков по очереди, с которых можно загрузиться. Например, вот порядок загрузки на экране BIOS компьютера Lenovo. Видно, что сначала нужно попробовать загрузиться с USB (первые три строчки), потом, если USB-дисков нет, — с жёсткого диска (п. 4), а если и диска нет — то попробовать с CD-дисковода или загрузиться по сети:
Как только загрузчик найден, BIOS считывает его код и передаёт ему всё дальнейшее управление компьютером.
Немного про UEFI
У BIOS есть проблема — устаревший интерфейс и мало возможностей для настроек компьютера. Чтобы это исправить, придумали UEFI — мини-операционную систему, которая так же, как и BIOS, может управлять основными настройками, но ещё обладает дополнительными возможностями. Например, у неё есть полноценный графический интерфейс с мышкой, расширенные возможности по настройке устройств и более полный доступ к возможностям железа.
Основное отличие от BIOS в том, что UEFI требуется больше памяти для первоначальных программ загрузки компьютера. Для этого UEFI забирает себе первые 100 мегабайт на диске и берёт эти данные оттуда, а сам раздел делает скрытым.
Работа загрузчика
Загрузчик — это сборное название всех программ и драйверов, которые понадобятся операционной системе для полноценной загрузки.
Можно провести такую аналогию: операционная система — это строительная бригада, которая может сделать что угодно. Но для её работы нужен менеджер, чтобы он заранее съездил к заказчику, выяснил, что нужно сделать, составил смету, закупил материалы и прикинул график работ. Загрузчик — это как раз тот самый менеджер, который делает все предварительные работы. Если менеджер не сделает свою часть, бригада не сможет приступить к работам.
Сам загрузчик находится на жёстком диске, и как только BIOS его находит и отправляет в оперативную память, загрузчик начинает действовать:
- включает нужный режим работы процессора, который защищает одни процессы от других;
- распределяет оперативную память и сгружает туда файл с параметрами загрузки операционной системы;
- загружает драйверы устройств и проверяет их цифровую подпись;
- подключает файловую систему, чтобы компьютер мог полноценно работать со всеми дисками.
На финальном этапе загрузчик находит ядро операционной системы, загружает его в память и передаёт управление ему.
Запуск ядра операционной системы
Если процесс загрузки дошёл до этой точки, то компьютер понимает, что скоро загрузится операционная система, а значит, можно показать пользователю стартовый экран. На Windows он выглядит так:
Пока крутится индикатор загрузки, ядро занимается тем, что загружает и запускает все служебные программы и скрипты:
- смотрит, какое подключено железо и какие драйверы для него нужны прямо сейчас;
- считывает настройки системы и запускает скрипты сразу с нужными параметрами;
- запускает службы и демоны;
- настраивает графический интерфейс;
- включает систему входа пользователей в систему.
Смысл ядра — запустить все программы, которые будут нужны для дальнейшей работы операционной системы. В нашей аналогии со строительной бригадой, ядро — это прораб, который находится всё время на объекте от начала работ до их полного окончания. Прораб следит за ключевыми процессами и вмешивается, если что-то идёт не так. Ядро действует точно так же: обеспечивает работоспособность всей ОС и регулирует ключевые процессы.
Вход пользователя в систему
Последний шаг загрузки компьютера — вход пользователя в систему. Он может быть автоматическим, если нет пароля на вход — в противном случае система попросит его ввести:
После входа операционная система загружает все пользовательские настройки и программы — ставит нужный фон на рабочий стол, применяет какую-то схему оформления и запускает те программы, которые выбрал этот пользователь.
И всё.
Художник:
Даня Берковский
Вёрстка:
Кирилл Климентьев
Подготавливая информационные материалы для наших читателей, мы неоднократно касались темы неработающего компьютера. Например, у нас есть подробная статья о том, что делать, когда не включается компьютер. Во многих текстах мы не раз упоминали такой элемент операционной системы как загрузчик. Сегодня мы предлагаем познакомиться ним подробнее, а также разобраться, как восстановить загрузчик Windows 10 или 11 в случае, если он поврежден и не работает.
Что такое загрузчик Windows 10
Прежде чем разбираться, как восстанавливать загрузчик Windows 10, необходимо понять, что это такое и какие у данного элемента функции. Дадим определение этой части операционной системы и расскажем о ней чуть подробнее.
Загрузчик Windows 10 — это программное средство, ответственное за запуск операционной системы Windows 10 при включении компьютера. Загрузчик выполняет несколько ключевых задач, обеспечивая корректную и стабильную загрузку операционной системы. Вот некоторые основные функции загрузчика Windows 10:
- Загрузка ядра операционной системы. Компонент запускает ядро операционной системы, начиная процесс загрузки. Ядро является основным элементом операционной системы, отвечающим за взаимодействие с аппаратной частью и управление ресурсами компьютера.
- Загрузка драйверов. Загрузчик может активировать необходимые драйверы, которые обеспечивают взаимодействие с аппаратной частью компьютера, таким как драйверы для видеокарты, звуковой карты и других устройств.
- Управление загрузочными параметрами. Загрузчик также предоставляет возможность выбора различных параметров загрузки, таких как безопасный режим, последняя известная настройка и другие опции, которые могут помочь в устранении проблем с загрузкой системы.
Обычно загрузчик Windows 10 (и более ранних версий Windows) называется NTLDR (New Technology Loader), а также используется Boot Configuration Data (BCD) для хранения информации о параметрах загрузки и настройках системы.
Интересно, что, несмотря на название, загрузчик операционной системы загружается далеко не первым. При включении компьютера первой активируется система UEFI, которая ищет раздел EFI на диске и запускает загрузчик. Только после этого он активирует работу операционной системы.
Почему загрузчик Windows может сломаться
Существует множество причин, по которым может возникнуть сбой загрузчика Windows. В основном они касаются программного обеспечения, но также проблемы могут возникать из-за аппаратной части или даже из-за действий пользователя. Перечислим некоторые из наиболее распространенных причин появления ошибки загрузчика Windows:
- Повреждение загрузочного сектора. Если загрузочный сектор на жестком диске поврежден, загрузчик может не суметь правильно прочитать информацию о загрузке операционной системы. Иные сектора с поврежденными данными или физическими повреждениями также могут вызвать сбой загрузчика.
- Изменения в конфигурации оборудования. Подключение нового оборудования или изменения в существующей конфигурации (например, замена жесткого диска или видеокарты) могут вызвать сбои загрузчика, если операционная система не может адаптироваться к изменениям.
- Вирусы и вредоносное ПО. Атаки вирусов или вредоносных программ могут повредить системные файлы, включая те, которые отвечают за загрузку операционной системы.
- Неудачные обновления. Некорректно установленные или несовместимые обновления операционной системы могут привести к сбоям загрузчика.
- Неправильные настройки BIOS/UEFI. Некорректные параметры в настройках Basic Input/Output System (BIOS) или Unified Extensible Firmware Interface (UEFI) могут затруднить правильную загрузку операционной системы.
- Неправильные действия пользователя. Сейчас Windows практически не дает изменять системные файлы. Но долгое время ошибка загрузчика ntldr vis missing or invalid возникала из-за того, что пользователь просто удалял неизвестный ему файл в корне диска. Если подобное случалось, приходилось срочно искать, как восстановить загрузчик Windows 7 или систем более ранних версий.
- Установка еще одной операционной системы на диск. Сейчас большинство ОС просто удаляют «конкурентов» с того диска, куда ставятся. Но при определенном упорстве можно установить на диск несколько операционных систем. Однако, при неверной установке загрузка некоторых ОС будет невозможна из-за того, что у операционных систем возник конфликт и чей-то загрузчик был удален.
Для исправления работы загрузчика Windows, часто требуется использование инструментов восстановления, таких как встроенные средства Windows, загрузка с установочного диска или USB-накопителя с образом системы.
Важно отметить, что внимательное следование процедурам обновления, регулярная проверка наличия вирусов и аккуратное управление оборудованием могут помочь предотвратить подобные проблемы и обеспечить более стабильную загрузку операционной системы.
Как восстановить работу загрузчика Windows
В случае, если у вас не работает загрузчик Windows, необходимо предпринять три основных шага. В первую очередь определяется проблема. Если у вас аппаратная проблема, необходимо заменить жесткий диск. Если ошибка вызвана действиями пользователя, нужно после проинструктировать пользователя и убедиться, что он не совершит повторные действия. Если проблема в Windows, необходимо заранее подумать об отключении обновлений или иных действиях, которые помогут предотвратить повторение проблемы.
После того как вы выяснили, почему не работает загрузчик на Windows 7, 10, или иной операционной системе можно начинать разбираться в том, как его восстановить. Есть несколько способов, опишем самые популярные. Обратите внимание, что для всех вариантов вам потребуется загрузочная копия Windows на флешке.
Полная переустановка Windows
Самый простой способ восстановить работу загрузчика Windows 10 — это переустановить всю операционную систему. Учитывая, что сегодня это действие можно выполнить буквально кликая кнопку «Далее», такой вариант — один из наиболее предпочтительных. Почему? Во-первых, он исключает неправильное восстановление загрузчика. Во-вторых, он гарантирует, что в системе не останется того ПО, вирусов, некорректных обновлений, которые стали причиной поломки. Дополнительный плюс — не нужно искать командную строку, чтобы восстановить загрузчик, все делается средствами Windows 10.
Важно! Перед переустановкой ОС обязательно скопируйте все нужные файлы. Если ваш компьютер не грузится, можно изъять из него жесткий диск и подключить к другому устройству, чтобы забрать данные с рабочего стола, папки загрузок и других мест, где они могли бы храниться. Кроме того, возьмите себе за правило не хранить на системном диске важных данных — как раз на такой случай.
Дадим алгоритм установки операционной системы, которому вам нужно следовать:
- Запустите компьютер с USB-накопителя (загрузочной флешки).
- После загрузки с USB-накопителя выберите язык, временную зону и другие настройки.
- Выберите «Установить Windows» и следуйте инструкциям мастера установки.
- Когда система спросит, укажите раздел на жестком диске, на который вы хотите установить Windows 10. Можно выполнить форматирование диска или выбрать уже существующий раздел. Во втором случае, скорее всего, сработает восстановление.
- Подождите, пока процесс установки завершится. Компьютер перезагрузится несколько раз.
- После перезагрузки следуйте инструкциям по настройке базовых параметров, таких как учетная запись пользователя, пароль, настройки безопасности и другие.
- После завершения установки Windows 10 установите необходимые драйверы для оборудования и программное обеспечение.
Эти шаги должны помочь вам выполнить переустановку Windows 10 с использованием загрузочного USB-накопителя. Убедитесь, что у вас есть резервные копии важных данных перед началом этого процесса, чтобы избежать потери данных.
После переустановки в некоторых случаях приходится активировать Windows заново. Об этом процессе мы писали в статье «Почему появляется надпись «Активация Windows» и как от нее избавиться».
Автоматическое восстановление средствами Windows
Если полная переустановка вам не по душе, то можно попытаться восстановить текущую систему с помощью функции восстановления. Для этого используйте загрузку с другого источника.
Загрузившись с флешки, выберите пункт «Поиск и устранение неисправностей» в меню, а после — укажите, что вам требуется пункт «Дополнительные параметры». Здесь у вас будет пункт «Восстановление при загрузке», который и нужно выбрать.
Меню загрузки Windows при автоматическом восстановлении
После восстановления система сама перезагрузится и попросит выбрать пользователя. Укажите себя, если пользователей несколько. Далее будет проведена диагностика компьютера — нужно немного подождать. В случае успеха или неудачи система оповестит вас. Если восстановление не сработало, можно нажать кнопку «Дополнительные параметры», чтобы вернуться в меню и попробовать другие способы, например, загрузить командную строку.
Неудачное восстановление системы Windows 10
Восстановление системы из командной строки
Управление с помощью командной строки поможет восстановить загрузчик Windows с большей вероятностью, чем автоматический режим. Однако здесь необходимо ввести много команд вручную и точно понимать, что вы делаете. Ну и, конечно, нужно разбираться, что такое командная строка и как в ней работать.
Алгоритм действий при использовании командной строки выглядит следующим образом:
- Загрузитесь в Windows через Boot Menu или меню восстановления, вызовите консоль.
- Наберите в командной строке diskpart. Это вызов утилиты, с которой мы сейчас будем работать.
- Наберите в командной строке list volume. В списке, который появится на экране, необходимо найти букву диска, где располагается Windows. Если на компьютере работает EUFI, скорее всего, это скрытый том с разметкой FAT32. Запомните буквенное обозначение и метку нужного тома.
- Введите select volume и номер тома, который запомнили в предыдущем пункте.
- Введите format fs=fat32, если изначально том был отформатирован в FAT32 и format fs=ntfs, если изначально том был отформатирован в NTFS.
- Введите assign letter=Т, чтобы присвоить диску метку T. Вам нужно выбрать такую метку, которой нет у других дисков в системе.
- Введите exit, чтобы завершить работу инструмента.
Команда list volume показывает, какие имена и метки, а также файловые системы, есть у разделов на текущем компьютере.
После настройки диска необходимо использовать команду bcdboot. Вот пример ее написания: bcdboot C:\Windows /s T: /f ALL. В этой записи вы:
- указываете местоположение Windows с помощью буквы диска;
- указываете, в какой раздел будут копироваться файлы с помощью команды /s T:;
- уточняете тип встроенного ПО целевого системного раздела. ALL означает, что это может быть и BIOS, и UEFI.
Команда bcdboot позволяет восстановить загрузчик Windows через командную строку. Изучите справку, если сомневаетесь в том, как именно ее использовать. Справка появляется, если вы введете в консоли bcdboot и нажмете Enter сразу же, не добавляя никаких подробностей.
Справка по команде bcdboot в консоли Windows
Последний шаг в этом способе восстановления загрузчика — убрать присвоенную диску метку, чтобы Windows снова могла нормально работать. Для этого необходимо:
- Вновь открыть утилиту с помощью diskpart.
- Выбрать нужный диск с помощью команд list volume, select volume.
- Удалить метку диска командой remove letter=.
- Закрыть инструмент, написав exit.
Утилита diskpart дает пользователю достаточно много возможностей. Подробно обо всех командах, которые можно использовать таким образом, читайте на сайте Microsoft. Если после всех манипуляций загрузчик не восстановился и система не работает, попробуйте полную переустановку.
Подготовка к восстановлению загрузчика — справка
В предыдущих разделах мы несколько раз упоминали о загрузочной флешке. Возможно, вы не знаете, как именно ее можно создать. Ниже рассказываем алгоритм создания загрузочной флешки и ее использования. Эти действия вы можете выполнить, даже если компьютер в полном порядке. Тренировка поможет правильно среагировать, если на самом деле потребуется восстановить загрузчик Windows 7 или любой другой более новой операционной системы.
Как создать загрузочную флешку
Независимо от того, хотите ли вы восстановить загрузчик Windows 10 через командную строку или в автоматическом режиме, вам потребуется загрузочная флешка. Несколько лет назад можно было бы написать «загрузочный носитель», но сейчас DVD-диски практически не используются. У многих даже нет дисководов. Большинство при восстановлении системы загружаются с флешки, поэтому о ней и будем говорить.
Для создания загрузочной флешки существует стандартная утилита, которую можно скачать с сайта Microsoft. Вам необходимо средство для установки операционной системы. После его скачивания и запуска разрешите ему вносить изменения на вашем устройстве.
Раздел сайта, где можно скачать утилиту для создания загрузочной флешки
Программа установки Windows работает в полуавтоматическом режиме. Пользователю нужно лишь выбирать некоторые важные пункты. Вот основная последовательность действий:
- Примите лицензионное соглашение.
- Выберите пункт «Создать установочный носитель», когда система спросит, что вы хотите сделать.
- Выберите язык, выпуск операционной системы и архитектуру. Как определить разрядность Windows мы писали отдельно. Если вы создаете загрузочную флешку на будущее на том же устройстве, на котором будете ее с нее грузиться, можно предложить программе выбрать параметры, выставив значение «Использовать рекомендуемые параметры для этого компьютера».
- Выберите носитель, в нашем случае это USB-устройство. Необходимо вставить его в компьютер или ноутбук, предварительно сохранив все файлы. Обратите внимание, что файлы на загрузочной флешке оставлять нельзя: система удалит их.
- Подождите. Система уведомит о том, что работа выполнена.
Момент настройки выпуска, языка и архитектуры для создания загрузочной флешки
После таких нехитрых действий у вас появляется загрузочная флешка, с помощью которой можно загрузиться при неработающей системе и предпринять какие-то дальнейшие действия. Например, попытаться восстановить загрузчик Windows 10 из командной строки или иным способом.
Как загрузиться с загрузочной флешки
Если загрузчик Windows не работает, возобновление системы с помощью имеющейся ОС невозможно. Но мало создать загрузочную флешку, нужно суметь с нее загрузиться. Мы составили небольшую инструкцию, которая поможет вам выполнить нужные действия:
- Вставьте загрузочную флешку в компьютер.
- Перезагрузите компьютер и в процессе загрузки нажмите соответствующую клавишу (чаще всего это F2, F12, Esc или Del), чтобы войти в настройки BIOS/UEFI.
- В разделе Boot или Boot Priority выберите флешку как первое устройство загрузки.
- Сохраните изменения в BIOS/UEFI и перезагрузите компьютер. Обычно это делается путем выбора опции «Save & Exit» или подобной.
Когда компьютер перезагрузится, он должен автоматически начать загрузку с флешки. Если этого не происходит, возможно, вам нужно повторить шаги и убедиться, что флешка правильно подготовлена.
В этой статье мы подробно описали, как восстановить загрузчик Windows 10 штатными средствами, через командную строку и с помощью полной переустановки системы. Надеемся, что эти знания вам не потребуются и ваш компьютер всегда будет работать как часы. Кроме того, стоит обратить внимание на один момент: если вы видите, что на вашей технике последовательно выходит из строя тот или иной компонент Windows, возможно, проблема системная и кроется не в программной части. Или, наоборот, причина инцидентов — вирус, находящийся в локальной сети. Регулярные поломки требуют анализа и аудита, так как они свидетельствуют о более серьезной проблеме. Если вы не хотите подвергать опасности данные, хранящиеся на компьютерах в вашем офисе, позвоните нам. Наши системные администраторы и IT-специалисты проанализируют ситуацию и помогут решить вопрос раз и навсегда!
Многие из наc сталкиваются с Windows Boot Manager, но не понимают, что это такое. Иногда данное меню появляется при загрузке ноутбука. Что делать в таких ситуациях? Рассказываем в нашем материале.
Источник: Super User / Boot Manager
Windows Boot Manager (bootmgr) — это системный компонент операционной системы Windows, который отвечает за загрузку операционной системы. Он был введен в Windows Vista и продолжает использоваться в последующих версиях, включая Windows 7, 8, 10 и 11. Boot Manager является частью архитектуры загрузки системы и выполняет несколько ключевых функций:
- Управление процессом загрузки — Windows Boot Manager определяет, какую операционную систему запускать, и передает управление загрузке ядра (Windows Loader, winload.exe). В случае, если на компьютере установлено несколько операционных систем, Boot Manager предоставляет меню для выбора, какую из них загрузить;
- Загрузка загрузочного конфигурационного файла (BCD) — Boot Manager загружает и интерпретирует данные из Boot Configuration Data (BCD) — это хранилище, в котором содержатся параметры и опции загрузки для установленных операционных систем;
- Работа с многозагрузочными конфигурациями — Boot Manager поддерживает загрузку нескольких операционных систем, позволяя пользователю выбирать среди них при старте компьютера.
Сравнение с NTLDR
Источник: Wondershare Recover It / NTLDR
NTLDR (NT Loader) — это предшественник Windows Boot Manager, который использовался в более ранних версиях Windows, таких как Windows NT, 2000 и XP. Хотя NTLDR и Boot Manager выполняют схожие функции, они существенно различаются по архитектуре, функциональности и возможностям.
Boot Manager |
NTLDR |
|
Архитектура |
Имеет модульную архитектуру и разделяет функции между несколькими компонентами, такими как Boot Manager (bootmgr) и Windows Loader (winload.exe). Это позволяет более гибко управлять процессом загрузки и расширяет возможности загрузчика |
Был монолитным загрузчиком, который управлял загрузкой операционной системы и сразу загружал ядро Windows, а также мог загружать более старые версии DOS с использованием файла boot.ini. |
Поддержка современных технологий |
Поддерживает как MBR, так и GPT (GUID Partition Table), а также работает в средах UEFI, что делает его более универсальным и современным инструментом для управления загрузкой операционной системы. |
Был ограничен по своим возможностям и не поддерживал современные технологии, такие как UEFI, и новые файловые системы. Он работал только с MBR (Master Boot Record) и не мог эффективно взаимодействовать с новыми аппаратными стандартами. |
Конфигурация и управление |
Boot Manager использует более сложную и мощную систему конфигурации на базе BCD (Boot Configuration Data), которая предоставляет расширенные возможности для настройки и управления процессом загрузки, включая поддержку различных операционных систем и конфигураций оборудования. |
Конфигурация загрузки в NTLDR осуществлялась через простой текстовый файл boot.ini, который ограничивал возможности пользователя в настройке загрузки и усложнял управление многозагрузочными системами. |
Графический интерфейс |
Предлагает более удобный и понятный графический интерфейс для выбора операционной системы, что упрощает взаимодействие пользователя с системой. |
Предоставлял текстовое меню для выбора операционной системы при многозагрузочной конфигурации, что было функционально, но ограничено в возможностях. |
Как работает Windows Boot Manager
Работа начинается сразу после включения компьютера и завершает свои действия перед запуском ядра операционной системы.
Этапы загрузки
Процесс загрузки с использованием Windows Boot Manager можно разделить на несколько этапов:
- Инициализация BIOS/UEFI. Когда компьютер включается, первичный процесс загрузки начинается с BIOS (Basic Input/Output System) или UEFI (Unified Extensible Firmware Interface). Эта программа загружается первой и проверяет основные компоненты системы (процессор, память, устройства ввода-вывода). BIOS или UEFI определяет, с какого устройства нужно загрузить операционную систему (жесткий диск, SSD, USB-накопитель и так далее);
- Загрузка Windows Boot Manager. После завершения работы BIOS/UEFI управление передается Windows Boot Manager, который находится на системном разделе жесткого диска (обычно этот раздел скрыт от пользователя). Boot Manager загружает и читает файл конфигурации BCD (Boot Configuration Data), который содержит информацию о доступных операционных системах и их параметрах загрузки;
- Меню выбора операционной системы. Если на компьютере установлено несколько операционных систем, Windows Boot Manager отображает меню выбора, позволяя пользователю выбрать, какую операционную систему загрузить. В случае отсутствия альтернативных ОС Boot Manager автоматически загружает единственную доступную систему;
- Передача управления Windows Loader. После выбора или автоматической загрузки операционной системы Windows Boot Manager передает управление Windows Loader (winload.exe). Этот компонент отвечает за загрузку ядра операционной системы и всех необходимых драйверов для начала работы системы;
- Загрузка ядра операционной системы. Windows Loader загружает ядро Windows, инициализирует системные драйверы и запускает системные процессы, такие как управление памятью и взаимодействие с оборудованием. После успешной загрузки ядра система переходит в стадию инициализации пользовательских процессов и служб.
Конфигурационные файлы
Windows Boot Manager использует несколько конфигурационных файлов и данных для управления процессом загрузки:
- BCD (Boot Configuration Data) — является центральным хранилищем конфигурационных данных, которые используются Windows Boot Manager. В нем содержатся записи о каждой установленной операционной системе, а также параметры загрузки, такие как путь к загрузчику ОС, режимы загрузки (обычный, безопасный или другой), а также параметры, влияющие на работу оборудования;
- winload.exe — исполняемый файл, загружаемый Windows Boot Manager после выбора операционной системы. Он отвечает за загрузку ядра и начальных драйверов, необходимых для запуска ОС;
- bootmgr — является основным исполняемым файлом Windows Boot Manager. Он хранится в корне системного раздела и загружается BIOS/UEFI для инициализации процесса загрузки.
Взаимодействие с BIOS/UEFI
Источник: Xataka Windows / BIOS и UEFI
BIOS и UEFI — это программные интерфейсы, которые находятся на границе между аппаратным обеспечением компьютера и операционной системой. Их основная задача — инициализировать и тестировать оборудование перед запуском операционной системы, а также передать управление загрузчику (в данном случае Windows Boot Manager).
BIOS работает в режиме реального времени и использует MBR (Master Boot Record) для управления загрузкой. В случае с BIOS Windows Boot Manager хранится на системном разделе, и управление передается через указание на загрузочный сектор диска, который запускает bootmgr.
UEFI является более современным интерфейсом и поддерживает работу с GPT (GUID Partition Table), что позволяет управлять загрузкой более эффективно и использовать объемы дисков, превышающие 2 ТБ. В UEFI Windows Boot Manager находится в разделе EFI, и управление передается через специальный загрузочный менеджер UEFI, который запускает bootmgfw.efi (аналог bootmgr в среде UEFI).
BIOS и UEFI могут работать в разных режимах. Для Windows это может быть либо Legacy BIOS, либо UEFI. При использовании UEFI возможна работа в режимах Secure Boot, который предотвращает загрузку неподписанного кода, тем самым защищая систему от вредоносных программ.
Можно ли отключить Windows Boot Manager?
Источник: Make Use Of / Windows Logo
Технически, Windows Boot Manager можно отключить, но это не рекомендуется для стабильной работы системы. Boot Manager является ключевым компонентом процесса загрузки Windows и управляет выбором операционной системы, настройками конфигурации загрузки и взаимодействием с ядром системы.
Отключение Boot Manager может привести к ряду проблем, таких как невозможность загрузить операционную систему, нарушение конфигураций многозагрузочных систем или повреждение данных загрузки.
Почему не рекомендуется отключать Boot Manager
- Отключение Windows Boot Manager может сделать систему нестабильной или даже нерабочей. Этот компонент управляет процессом загрузки и обеспечивает правильную передачу управления ядру ОС. Без него Windows не сможет корректно загружаться;
- Если на вашем компьютере установлено несколько операционных систем (например, Windows и Linux), отключение Boot Manager приведет к потере возможности выбирать между ними при загрузке. Это может усложнить процесс управления многозагрузочными конфигурациями;
- В современных системах с UEFI и Secure Boot отключение Boot Manager может привести к нарушению работы системы безопасности, а также вызвать ошибки при загрузке ОС;
- Boot Manager опирается на файл конфигурации BCD для управления параметрами загрузки, такими как выбор операционной системы или безопасный режим. Без Boot Manager система не сможет корректно обрабатывать эти параметры.
Временное отключение
Если необходимо временно отключить или скрыть меню Windows Boot Manager, это можно сделать путем изменения настроек. Однако важно понимать, что такое отключение является временной мерой, и система будет по-прежнему использовать Boot Manager для загрузки.
Можно настроить время отображения меню выбора операционной системы. Для этого нужно изменить тайм-аут в файле BCD с помощью утилиты bcdedit. Например:
- bashCopy codebcdedit /timeout 0
Это отключит отображение меню выбора ОС, и система будет загружаться автоматически без задержки.
Если на компьютере установлено несколько операционных систем, можно выбрать одну из них по умолчанию и автоматически загружать её, не отображая меню выбора. Это можно сделать через настройки системы:
- Нажмите Win + R, введите msconfig.
Источник: CQ / Windows 11
- В разделе «Загрузка» выберите нужную ОС и установите ее по умолчанию.
Источник: CQ / Windows 11
- Установите таймер загрузки на 0 секунд.
Альтернативные варианты загрузки одной ОС
В системах с UEFI вы можете настроить загрузку ОС напрямую через интерфейс UEFI, выбрав в меню загрузки нужный диск или раздел, содержащий операционную систему. Это позволяет загружаться в обход некоторых функций Boot Manager, но в случае сбоя все равно потребуется восстановить Boot Manager.
Существуют сторонние загрузчики, такие как GRUB (обычно используется в системах Linux), которые могут управлять процессом загрузки на уровне выше, чем Boot Manager. Однако использование таких загрузчиков требует знаний и конфигурации и может привести к дополнительным сложностям в системах с Windows.
Заглавное фото: HP