какой файл программы загружает диспетчер загрузки во время загрузки windows
Как загружается Windows 10?
Вы когда-нибудь задумывались, что происходит, когда вы нажимаете кнопку питания? В этом посте мы увидим, как загружается Windows 10 и что происходит в фоновом режиме. Хотя все мы видим это как один процесс, все происходит пошагово. Он был разработан таким образом, что, если у вас возникнут какие-либо проблемы с загрузкой Windows 10, вы сможете устранить ее.
Как загружается Windows 10
Процесс загрузки Windows 10 в системах BIOS состоит из четырех основных этапов. Он начинается с POST и заканчивается загрузкой ОС Windows или ядра. Вот список этапов, через которые он проходит:
Во время каждого процесса загружается программа. В зависимости от того, использует ли он Legacy BIOS или UEFI, пути к файлам и файлы меняются.
фаза | Процесс загрузки | BIOS | UEFI | ||||||||||
1 | Preboot | MBR/PBR (загрузочный код) | Прошивка UEFI | ||||||||||
2 | Диспетчер загрузки Windows | % SystemDrive% \ Bootmgr | \ EFI \ Microsoft \ Boot \ Bootmgfw.efi | ||||||||||
3 | Загрузчик ОС Windows | % SystemRoot% \ system32 \ winload.exe | % SystemRoot% \ system32 \ Winload.efi | ||||||||||
4 | Ядро ОС Windows NT | % SystemRoot% \ system32 \ ntoskrnl.exe | 1] PreBoot: POST или Power-On Self-Test загружает настройки прошивки. Он проверяет наличие действительной дисковой системы и пригодна ли система для перехода к следующему этапу. Если на компьютере установлена допустимая MBR, то есть основная загрузочная запись, процесс загрузки продвигается дальше и загружает диспетчер загрузки Windows. 3] Загрузчик ОС Windows: Как и его имя, WinLoad.exe загружает важные драйверы для запуска ядра Windows. Ядро использует драйверы для связи с оборудованием и выполнения остальных действий, необходимых для продолжения процесса загрузки. Когда вы запускаете Windows 10 на компьютере, который поддерживает Unified Extensible Firmware Interface (UEFI), Trusted Boot защищает ваш компьютер с момента его включения. Когда компьютер запускается, он сначала находит загрузчик операционной системы. Компьютеры без защищенной загрузки просто запускают любой загрузчик на жестком диске ПК. Когда компьютер, оснащенный UEFI, запускается, он сначала проверяет, что прошивка имеет цифровую подпись. Если включена безопасная загрузка, микропрограмма проверяет цифровую подпись загрузчика, чтобы убедиться, что она не повреждена. Вы можете прочитать больше о том, как защитить процесс загрузки Windows 10. Помните, что многое происходит даже после входа в систему, но это все сценарии процесса после загрузки. Обратите внимание, что процесс загрузки Windows 10 намного больше, чем мы объяснили здесь – мы только объяснили основы! Определение диспетчера загрузки Windows (BOOTMGR)Диспетчер загрузки Windows (BOOTMGR) – это небольшая часть программного обеспечения, называемая диспетчером загрузки, которая загружается из загрузочного кода тома диска, который является частью загрузочной записи тома. BOOTMGR помогает запускать операционную систему Windows 10, Windows 8, Windows 7 или Windows Vista. BOOTMGR, в конечном итоге, выполняет winload.exe, системный загрузчик, используемый для продолжения процесса загрузки Windows. Где находится диспетчер загрузки Windows (BOOTMGR)Данные конфигурации, необходимые для BOOTMGR, можно найти в хранилище данных конфигурации загрузки (BCD), похожей на реестр базе данных, которая заменила файл boot.ini, используемый в более старых версиях Windows, таких как Windows XP. Сам файл BOOTMGR является одновременно доступным только для чтения и скрытым, и находится в корневой директории раздела, помеченного как Активный в Управлении дисками. На большинстве компьютеров Windows этот раздел помечен как Зарезервированный системой и не имеет буквы диска. Если у вас нет системного раздела, вероятно, BOOTMGR находится на вашем основном диске, обычно это C:. Можно ли отключить диспетчер загрузки WindowsСначала Вам нужно понять, зачем отключать диспетчер загрузки Windows? Говоря по-другому, это может излишне замедлить процесс загрузки, поскольку вам придётся выбирать, какую операционную систему загружать. Если вам не нужно выбирать, с какой операционной системы загружаться, потому что вам всегда нравится запускать одну и ту же, тогда вы можете избежать этого, предварительно выбрав ту, которую вы всегда хотите запускать. Однако, вы не можете удалить Диспетчер загрузки Windows. Что вы можете сделать, это сократить время ожидания на экране выбора операционной системы. Вы можете сделать это, предварительно выбрав операционную систему, а затем сократив время ожидания, по сути пропустив Windows Boot Manager. Это достигается с помощью средства настройки системы (msconfig.exe). Вот как это сделать: Будьте осторожны при использовании инструмента «Конфигурация системы» – вы можете внести ненужные изменения, которые могут привести к ещё большей путанице в будущем. Откройте Администрирование, которое доступно по ссылке Система и безопасность в «Панели управления». Если вы не видите ссылку «Система и безопасность» на первой странице панели управления, выберите «Администрирование». Откройте Конфигурация системы. Перейдите на вкладку Загрузка. Выберите операционную систему, которую вы хотите всегда загружать. Помните, что вы всегда можете изменить это позже, если решите загрузить другую. Экран Конфигурации системы может сообщить вам, что, возможно, потребуется перезагрузить компьютер. Безопасно выбрать Выход без перезапуска – вы увидите эффект от этого изменения при следующем перезапуске. Менеджер загрузки теперь должен быть отключен. Дополнительная информация о BOOTMGRРаспространенная ошибка запуска в Windows – это ошибка BOOTMGR Is Missing. BOOTMGR вместе с winload.exe заменяет функции, выполняемые NTLDR в более старых версиях Windows, таких как Windows XP. Также появляется новый загрузчик Windows, winresume.exe. Если, по крайней мере, установлена одна операционная система Windows и выбран мультизагрузочный сценарий, загрузочный менеджер Windows загружается, считывает и применяет конкретные параметры, которые применяются к операционной системе, установленной для данного конкретного раздела. Если выбран вариант Legacy, диспетчер загрузки Windows запускает NTLDR и продолжает процесс, как при загрузке любой версии Windows, использующей NTLDR, например Windows XP. Если существует более одной установки Windows, предшествующей Vista, предоставляется другое загрузочное меню (которое создается из содержимого файла boot.ini ), чтобы вы могли выбрать одну из этих операционных систем. Хранилище данных конфигурации загрузки является более безопасным, чем параметры загрузки, которые были в предыдущих версиях Windows, поскольку оно позволяет пользователям в группе «Администраторы» заблокировать хранилище BCD и выдать определенные права другим пользователям, чтобы определить, какие из них могут управлять параметрами загрузки. Что такое диспетчер загрузки Windows и как его включить / отключить [MiniTool Wiki]What Is Windows Boot Manager Быстрая навигация:Что такое диспетчер загрузки WindowsМенеджер загрузки для Windows (BOOTMGR ), небольшая программа, загружается из загрузочного кода тома, который является частью загрузочной записи тома. Это позволяет вам загружать Windows 10 / 8/7 или Виндоус виста Операционная система. Помимо, MiniTool предложит вам дополнительную информацию. Сам файл BOOTMGR доступен только для чтения и скрыт, он находится в корневом каталоге раздела. Он отмечен как «Активный» в управлении дисками. На большинстве ПК с Windows этот раздел помечен как «Зарезервировано системой» без буквы жесткого диска. Как включить / отключить диспетчер загрузки Windows 10Основываясь на приведенном выше описании, вы можете узнать, что диспетчер загрузки Windows Windows 10 полезен для вашего компьютера. Кроме того, если у вас несколько операционных систем, вы можете выбрать целевую операционную систему и включить Windows Manager при загрузке компьютера. Однако, поскольку он может излишне замедлить процесс загрузки, когда он ждет, чтобы спросить вас, с какой операционной системы загружаться, вы можете отключить его. Наконечник: Если вы не хотите выбирать операционную систему для загрузки и всегда хотите запускать одну и ту же, вы можете предварительно выбрать ту, которую всегда хотите запускать. На самом деле вы не можете удалить диспетчер загрузки Windows. Что вы можете сделать, так это сократить время ожидания на экране вашего ответа, какую операционную систему вы хотите запустить. Вы можете использовать указанные методы для включения / отключения диспетчера загрузки Windows 10. Наконечник: Будьте осторожны при использовании данных конфигурации системы. Не делайте лишних изменений. Это приведет к еще большему беспорядку. Метод 1: используйте командную строкуЧтобы включить / отключить BOOTMGR через командную строку, вам необходимо иметь права администратора для выполнения. Если у вас нет такого доступа, рекомендуется использовать Рене Пасс чтобы создать его, прежде чем выполнять следующие шаги. Шаг 2: Введите следующие команды в Незамедлительный и ударил Войти после ввода каждой команды. Вы также можете использовать bcdedit / set Метод 2: изменить свойства системыКроме того, вы можете изменить свойства системы, чтобы включить или отключить диспетчер загрузки Windows. Вот шаги для вас. Шаг 1: Открыть Бежать диалоговое окно, нажав Выиграть Больше р ключи. Шаг 2: Тип sysdm.cpl и нажмите Хорошо продолжать. Шаг 3: Когда Свойства системы всплывает окно, выберите Продвинутый вариант. Затем нажмите на Настройки под Запуск и восстановление вариант. Шаг 4: Во всплывающем окне выберите Время отобразить список операционных систем поле и установите значение времени. После этого нажмите Хорошо чтобы сохранить изменения. Шаг 5: Если вы хотите отключить BOOTMGR, отмените Время отобразить список операционных систем поле или установите значение времени как 0 и нажмите Хорошо чтобы закончить операцию. Дополнительная информация о BootMGRРемонт компьютеров Троещина Киев: компьютерная помощь, сборка компьютеров на заказ — «Computerrepair».Диагностика и ремонт компьютеров, сборка на заказ, компьютерная помощь, услуги системного администратора, компьютерный мастер на Троещине: ☎(098)2940277Принцип загрузки компьютера. Принцип загрузки операционной системы Windows.Принцип загрузки компьютера, принцип загрузки операционной системы WindowsПочему необходимо понимать принцип загрузки операционной системы Windows? Старт компьютера, загрузка операционной системы — поэтапные процессы, проходящие соответственно определенным правилам и протоколам. Зачастую, на форуме компьютерной помощи, «знатоки» начинают советовать не понимая ни сути проблемы, ни метода ее устранения. Переустановкой Windows и сбросом батарейки CMOS сложные проблемы не решаются. Для восстановления работоспособности компьютера необходимо четко понимать принцип загрузки операционной системы WIndows от нажатия кнопки Power до появления рабочего стола. В данной статье я попытался коротко осветить принцип загрузки компьютера: BIOSа, операционной системы Windows и возможные сбои на этапах от старта до появления рабочего стола. Принцип загрузки компьютера: BIOSМикросхема BIOS (один из вариантов исполнения чипа) Принцип загрузки любого компьютера примерно одинаков: вначале инициализируется, проверяется и настраивается «железо», затем управление передается загрузчику операционной системы. Такой принцип загрузки компьютера класса IBM PC был сформирован и утвержден много лет назад. Однако, современные реалии уже не приемлют устаревший 16-и разрядный BIOS. На его смену пришел программный продукт Intel под названием EFI BIOS обладающий значительными преимуществами. Режим реальной адресации ЦПРежим реальной адресации — это такой режим работы процессора при котором ему доступно 1Мб (именно 1 мегабайт — это не опечатка) памяти в которой размещаются основная область 640Кб хранящая таблицу прерываний устройств, данные BIOS и данные 16-и битных программ DOS (если их кто-то еще запускает). За основной область памяти «внутри» первого 1Мб хранится Upper Memory Area (UMA) размером 384 Кб. В ней содержится информации об аппаратной части компьютера: видеопамять, адаптеры BIOS, а так же зарезервированное место размером 128Кб использующееся как специальное программное окно, через которое можно странично адресовать память выше 1Мб. Память свыше первого 1Мб может быть доступна через спецификацию расширенной памяти (англ. Expanded Memory Specification, EMS) при этом там можно хранить только данные, но не код программы. Для того, чтобы память выше 1Мб была доступна непосредственно программам без интерфейса EMS, процессор необходимо переключить в защищенный режим работы. Принцип загрузки компьютера в режиме реальной адресации — историческая особенность первых процессоров таких как Intel 80286 который не мог адресовать более одного мегабайта памяти. BIOS — из той же эпохи. Вот почему современные компьютеры и ноутбуки используют с недавнего времени вместо BIOS расширенную базовую систему ввода-вывода под названием EFI. То, что вы видите на картинке — это не сам BIOS, это его утилита настройки. Микрокод BIOS хранится в микросхеме EEPROM, а настройки CMOS BIOS — в энергонезависимой памяти размером 128-256 Байт располагаемой на отдельной микросхеме или интегрирован в южный мост. Настройки CMOS сохраняются при выключении питания за счет подпитки от литиевой 3-х вольтовой батарейки. Типичные проблемы загрузки компьютера на этапе BIOS:Согласно настройкам Boot device priority BIOS опрашивает устройства хранения и ищет в первом секторе диска сигнатуру 55AA. Это является признаком наличия MBR на загрузочном устройстве. В противном случае выводится информация об ошибке: «No bootable device». Признак наличия MBR на загрузочной флешке Первый сектор MBR занимает 512 байт и содержит код загрузчика, таблицу разделов (4 поля по 16байт) и признак загрузочного устройства в виде записи 55AA. Принцип загрузки операционной системы Windows XPBIOS производит чтение 512 байт первого сектора жесткого диска в оперативную память по адресу 0x00007C00, далее прочитанному коду передаётся управление. Этот программный код MBR сканирует таблицу разделов жесткого диска и передает управление загрузочному коду (PBR — Partition Boot Record) одного из разделов ЖД имеющего статус «активный». Windows, например не будет загружаться с раздела жесткого диска не имеющего статус активного. Задача кода в активном разделе диска загрузить ядро операционной системы в память и передать ему управление. Код в загрузочном секторе считывает корневой каталог для Ntldr. Ntldr производит следующие шаги: Далее загружается Ntoskrnl.exe (ядро системы), hal.dll. Ядро и HAL (уровень аппаратных абстракций) инициализируют Windows executive, который читает конфигурацию оборудования из реестра (ключ HKEY_LOCAL_MACHINE\SYSTEM) и запускает сервисы и драйверы. Во время загрузки драйверов устройств на экране монитора отображается анимированный бегунок загрузки Windows. Так что если «бегунок подвис», загружайтесь в безопасном режиме (F8) и отключайте по одному основные драйверы: видеокарты, драйверы сетевых адаптеров. Проблемы загрузки Windows:Для каждого этапа загрузки системы характерны свои неисправности и сбои отображаемые теми или иными сообщениями. Понятно, что если Windows циклично перезагружается или подвисает на синем экране, либо на полоске загрузки, выдает синий экран BSOD, сбрасывание настроек CMOS BIOS путем вытаскивания батарейки 3V ни к чему не приведет (если вы, конечно, до этого не занимались разгоном компьютера). Режимы работы IDE/AHCI контроллера жесткого диска и его влияние на загрузку WindowsДля нормальной загрузки BIOS и передачи дальнейших полномочий загрузчику операционной системы на жестком диске, «железо» компьютера должно быть исправным, а в настройках BIOS верно указано и сконфигурировано загрузочное устройство (жесткий диск): приоритет загрузки и режим работы контроллера диска AHCI / IDE. XP например вообще не устанавливается на диск если его контроллер сконфигурирован в режим AHCI, установщик Windows просто сообщит об отсутствующем жестком диске. Windows Vista/7/8 прекрасно устанавливаются в режиме контроллера AHCI или IDE. Переключения режима работы контроллера жесткого диска IDE/AHCI Необходимо, так же, четко осознавать, что если вы наблюдаете картинку начальной загрузки Windows, то загрузчики MBR и PBR, NTLDR, таблица разделов в порядке! Не надо загружаться с лайв-сд и использовать команды восстановления загрузочной записи: Fixmbr, Fixboot. Виды повреждений файловой системы и методы их устраненияНиже приведены варианты вероятных повреждений структуры файловой системы и указаны способы устранения. Данная таблица была взята из замечательной книги Криса Касперски «Восстановление данных». Принцип загрузки операционной системы Windows 7 / 8 несколько иной.Принцип загрузки компьютера на базе Windows 7 8 отличен от XP. Загрузка Windows 7/8 имеет свои особенности: вместо NTLDR там используется Winload.exe, сама система располагается на двух разделах: один скрытый со статусом «Active/Активный», «Системный» размером Разделы необходимые для загрузки Windows 7 Таким образом, затерев «ненужный и непонятный» раздел размером 100Мб, можно лишиться загрузки операционной системы Windows 7. Принцип загрузки операционной системы Windows 7 и восстановление ее загрузки описан мной в этой статье. Резюмируя, принцип загрузки операционной системы Windows, а точнее, процесс от старта компьютера до загрузки ядра ОС можно описать так:
Загрузка операционной системы Windows 7: от ядра до появления рабочего столаНачальный загрузчик загружает ядро операционной системы (файл Ntoskrnl.exe), а затем загружает уровень HAL (файл Hal.dll). Далее начальный загрузчик загружает в память куст реестра HKEY_LOCAL_MACHINE\SYSTEM файл %System-Root%System32\Config\System, после чего сканирует ключ HKEY_LOCAL_MACHINE\ SYSTEM\Services в поисках драйверов устройств, сконфигурированных для данного класса загрузки, и загружает их в память. Загружаются драйверы и службы. На последнем этапе запуска компьютера ядро операционной системы запускает диспетчер сеансов (файл Smss.exe). Тот инициализирует системную среду, создавая системные переменные среды и запуская подсистему Win32 (файл Csrss.exe). Диспетчер сеансов запускает диспетчер входа в систему (Windows Logon Manager, файл Winlogon.exe), который в свою очередь запускает диспетчер управления службами (Services Control Manager, файл Services.exe) и локальную систему безопасности (Local Security Authority, файл Lsass.exe) и переходит в режим ожидания входа пользователя в систему. Когда пользователь выполняет вход в систему, диспетчер входа в систему запускает на исполнение файл Userinit.exe и оболочку Проводника (File Explorer). Файл Userinit.exe инициализирует пользовательскую среду, создавая пользовательские переменные среды, запуская программы автозагрузки и выполняя прочие необходимые задания. Оболочка Проводника Windows предоставляет рабочий стол, панель задач и систему меню. Понимание принципа загрузки компьютера, операционной системы Windows поможет быстро понять на каком этапе произошел сбой. О работе ПК ч.3: От включения до полной загрузки Windows 10Мы продолжаем разбираться как работает ПК на примере клавиатуры и Windows 10. В этой статье поговорим о том как происходит единение софта и железа. Старт системыПолностью компьютер выключен когда он отключен от питания и конденсаторы на материнской плате разрядились. До эры смартфонов мобильные телефоны часто глючили и если перезагрузка не лечила проблему, то приходилось доставать батарею и ждать 10 секунд, потому что сбрасывалось программное состояние ОС, в то время как чипы на материнской плате и контроллеры устройств оставались активными сохраняя состояние, драйвера ОС к ним просто реконнектились. 10 секунд — время на разрядку конденсаторов, состояние чипов сбрасывается только при полном отключении. Контакты на материнке для подключения кнопки включения, светодиодов состояния Power, жёсткого диска и динамиков. Плата ноутбука с кнопкой включения и светодиодом состояния Прикладная иллюстрация как блок питания получает сигнал от материнки на включение. Если вы задумаете установить мощную видеокарту (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 начинает процесс поиска загрузчика ОС. Для этого он начинает просматривать все подключенные к материнской плате жёсткие диски. Данные на физических дисках адресуются в единицах называемых сектор, обычно он 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. Запуск на UEFIПример экрана загрузки UEFI BIOS существует больше 30 лет и в попытках исправить его недостатки компания Intel в 1998 году создала стандарт Intel Boot Initiative, позже переименованный в EFI и в 2005 году пожертвованный организации EFI Forum. Недостатки BIOS: Инициализация ядраЗапуск подсистем – SMSS, CSRSS, WinInitSMSS.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 для входа. Дерево процессов выглядит следующим образом, на нём можно увидеть кто и кого создал (показаны не все процессы, может немного отличаться от последний версий 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 реализовывается на уровне софта в Hardware Abstraction Layer (HAL.dll), а не железа. В Windows системах есть драйвер шины (bus driver), который определяет наличие устройств подключенных к шинам – PCI, USB и др. и номера прерываний которые могут быть назначены каждому устройству. Драйвер шины сообщает эту информацию Plug and play manager, который уже решает какие номера прерываний назначить каждому устройству. Далее арбитр прерываний внутри PnP Mgr (PnP interrupt arbiter) устанавливает связи между IRQ и IRQL. Так вот, драйвер клавиатуры (kbdclass.sys) получает данные от порта (USB, PS2) через прерывание и записывает их через WriteFile, компонент внутри ядра Windows просыпается, считывает их используя API ReadFile и добавляет в очередь сообщений с клавиатуры. API для работы с файлом могут использоваться для чтения данных с драйверов. С этого момента начинается обработка данных стеком ввода Windows, об этом в следующей статье. Если у вас есть ПК с PS2 портом и вы умеете пользоваться WinDbg в режиме ядра, то можете легко найти обработчик прерываний клавиатуры напечатав команду !idt, которая выведет на экран всю таблицу векторов прерываний. Прерывание вклинивается в ход выполнения программы, слово вектор здесь подразумевает направление, направление исполнения программы. WinDbg был сделан специально для отладки Windows, самая последняя версия называется WinDbgX. Он имеет текстовый интерфейс, который отпугивает людей привыкших к Visual Studio, однако предоставляет гораздо больше возможностей, в частности исполнение скриптов. Прерывание фиолетового порта PS2 выделено красным. Функция которая его обрабатывает называется I8042KeyboardInterruptService, которая находится в файле i8042prt.sys. Сейчас возникает вопрос, откуда у обработчика прерываний аргумент? Кто его передаёт? Ведь CPU ничего не знает о нём. Если поставите в неё breakpoint, то удивитесь ещё больше увидев несколько функций выше по стеку: 0: kd> kC Пару слов о 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 не имеет значение какой порт или источник данных от устройства используется.
|