О Работе Пк Часть 3: От Включения До Полной Загрузки Windows 10

Продолжаем разбираться в том, как работает ПК на примере клавиатуры и Windows 10. В этой статье мы поговорим о том, как происходит унификация программного и аппаратного обеспечения.



Запуск системы

Компьютер полностью выключается при отключении его от источника питания и разрядке конденсаторов на материнской плате.

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

10 секунд – время разрядки конденсаторов; состояние микросхем сбрасывается только при полном выключении.

Если ПК подключен к розетке или аккумулятору, то он находится в режиме Stand-By, а это означает, что по шине питания подается небольшое напряжение (5В), от которого питаются некоторые микросхемы на материнской плате.

По крайней мере это системный контроллер По сути, это мини-компьютер, на котором работает большой компьютер.

Получив уведомление о нажатии кнопки Power, он просит блок питания/аккумулятор подать большее напряжение, а затем инициализирует весь чипсет, включая процессор.

Инициализация включает в себя загрузку кода и данных из прошивки материнской платы ( БИОС/UEFI ) в ОЗУ и настроить ЦП для его выполнения.

Неверно думать, что кнопка Power — это переключатель, который подает электричество на процессор и тот начинает выполнение прошивки BIOS с заранее известного адреса.

Возможно, старые компьютеры работали именно так.

Кнопка питания расположена на отдельной плате вместе со светодиодами состояния и подключается к материнской плате через специальный разъем.

На рисунке ниже показаны контакты кнопок Power и Reset, а также светодиоды Power и состояния чтения жесткого диска.

Нажатие кнопки питания транслируется в сигнал на контакты материнской платы, откуда он поступает на системный контроллер.



О работе ПК часть 3: От включения до полной загрузки Windows 10

Контакты на материнской плате для подключения кнопки питания, светодиодов состояния питания, жесткого диска и динамиков.



О работе ПК часть 3: От включения до полной загрузки Windows 10

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

Помимо него могут быть и другие чипы с сопоставимыми возможностями, например Intel Management Engine или Безопасная технология AMD (часть ЦП), которые также работают, когда компьютер «выключен».

Чип с Intel ME имеет процессор x86 с операционной системой.

МИНИКС 3 .

Что он может сделать:

  1. Включайте и выключайте компьютер, т.е.

    выполняйте программы с доступом ко всем вычислительным мощностям, периферийным устройствам машины и сетям.

  2. Обход ограничений брандмауэра.

  3. Просматривайте все данные в процессоре и оперативной памяти, что дает доступ к файлам, защищенным паролем.

  4. Украсть ключи шифрования и получить доступ к паролям
  5. Записывать нажатия клавиш и движения мыши
  6. Посмотрите, что отображается на экране
  7. Вредоносный код в Intel ME не может быть обнаружен антивирусом, поскольку он не может достичь такого низкого уровня.

  8. И конечно, тайно отправлять данные по сети, используя свой стек для работы с сетью.

Это вызывает серьезные проблемы с безопасностью, поскольку его можно взломать или использовать в шпионских целях.

Нанесена иллюстрация того, как блок питания получает от материнской платы сигнал на включение.

Если вы подумываете об установке мощной видеокарты (Nvidia 2070 S) на офисный ПК, то просто вставить ее недостаточно, поскольку для нее требуется блок питания мощностью 600 Вт, тогда как у такого ПК блок ~500 Вт. Первое, что приходит на ум — купить новый блок питания мощностью 650 Вт с отдельной линией для видеокарты.

Но и здесь будут разочарования, так как разъемы материнской платы не будут совпадать с разъемами блока питания, а если вставить его в розетку отдельно и подключить к видеокарте, то тоже ничего не произойдет - вентилятор в блоке питания делает не крутится и изображения нет. Это происходит потому, что блок питания должен получить сигнал от материнской платы, чтобы полностью включиться.

Очевидным решением является новая материнская плата с совместимыми разъемами, но она стоит около 300 долларов.

Есть более простое решение, хотя оно и вызывает вопросы пожарной безопасности.

Возьмите скрепку, разогните ее и вставьте в зеленый (PS_ON) и один из черных контактов (COM).

Теперь все должно работать.



О работе ПК часть 3: От включения до полной загрузки Windows 10



Найдите загрузчик ОС

Существует два типа прошивок материнской платы — BIOS (базовая система ввода-вывода) на старых автомобилях и UEFI (унифицированный расширяемый интерфейс прошивки) на новых.

Windows 10 поддерживает оба варианта и устраняет различия между ними.

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

файлы, взаимодействие с железом через API, а не прерывания как в биосе.



О работе ПК часть 3: От включения до полной загрузки Windows 10

Пример экрана монитора BIOS. Программа BIOS хранится на отдельной микросхеме, подключенной к южному мосту.

Эту микросхему можно вынуть и прошить новой программой; по сути, это всего лишь носитель памяти, а не самостоятельный микрокомпьютер.



О работе ПК часть 3: От включения до полной загрузки Windows 10

Настройки BIOS (например, системное время) хранятся на другом чипе, который обычно располагается рядом с круглой батареей, которая на самом деле представляет собой литиевую батарею, подзаряжающуюся во время работы ПК.

Это называется КМОП , что значит Дополнительный оксид металла-полупроводник , а по-русски это просто CMOS, что и есть комплементарная структура металл-оксид-полупроводник .



О работе ПК часть 3: От включения до полной загрузки Windows 10

Первое что делает программа биос это проверяет подсистемы, эта процедура называется ПОЧТА – Самотестирование при включении питания.

Тест может быть сокращенным или полным, это задается в настройках биоса.

я процитирую Википедия что включают в себя эти тесты: Сокращенный тест включает в себя:

  1. Проверка целостности программ BIOS в ПЗУ с помощью контрольной суммы.

  2. Обнаружение и инициализация основных контроллеров, системных шин и подключенных устройств (графического адаптера, контроллеров накопителей и т.п.

    ), а также выполнение программ, включенных в BIOS устройств, и обеспечение их самоинициализации.

  3. Определение размера оперативной памяти и тестирование первого сегмента (64 килобайта).

Полные правила работы POST:
  1. Проверка всех регистров процессора;
  2. Проверка контрольной суммы ПЗУ;
  3. Проверка системного таймера и порта звуковой сигнализации (для IBM PC — i8253 IC или аналогичный);
  4. тест контроллера DMA;
  5. тест регенератора оперативной памяти;
  6. Тест нижней области оперативной памяти для проецирования резидентных программ в BIOS;
  7. Загрузка резидентных программ;
  8. Стандартный тест графического адаптера (VGA или PCI-E);
  9. тест оперативной памяти;
  10. Проверка основных устройств ввода (НЕ манипуляторов);
  11. КМОП-тест
  12. Тест основных LPT/COM портов;
  13. Тест дисководов гибких дисков (FMD);
  14. Тест жестких дисков (HDD);
  15. Самодиагностика функциональных подсистем BIOS;
  16. Передача управления загрузчику.

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

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

Что именно они означают, следует посмотреть в документации к материнской плате.

Старые компьютеры часто издавали звуковые сигналы при запуске — это программа BIOS сообщала о результатах тестирования.

Иногда для отображения номера ошибки можно использовать дополнительный индикатор.



О работе ПК часть 3: От включения до полной загрузки Windows 10

Если все прошло успешно, BIOS начинает процесс поиска загрузчика ОС.

Для этого он начинает сканировать все жесткие диски, подключенные к материнской плате.

Данные на физических дисках адресуются в единицах, называемых сектор , обычно это 512 байт, но современный стандарт — 4096 байт. Установщик Windows записывает специальный программный код и данные раздела в самый первый сектор диска.

Этот сектор называется Главная загрузочная запись .

Диск разделен на разделы, отформатированные под собственную файловую систему.

Максимум 4 раздела, каждый из которых может быть расширенный раздел , его можно рекурсивно разделить на 4 секции и теоретически их количество не ограничено.

Как только BIOS находит Master Boot Record, он считывает оттуда код и передает ему управление.

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

Он содержит код загрузчика Windows (это Нет раздел с C:\Windows\System32!), этот раздел называется системный раздел .

Как правило, он занимает 100МБ и скрыт от пользователя.

В первом секторе этого раздела хранится загрузочный код, которому передается управление.

Этот том загрузочного сектора , код в нем ищет файл Bootmgr , с которого начинается процесс загрузки Windows. Файл Bootmgr был создан через одно файловое соединение.

Стартап.

com И Bootmgr.exe .

Процессор начинает работать в режиме, называемом "Настоящий" .

Это режим совместимости, в котором ЦП работает так же, как и старые 16-битные процессоры, не имевшие поддержки виртуальной памяти и работавшие напрямую с физической памятью через 20-битную адресную шину, что позволяло адресовать 1 МБ памяти.

Простые программы MS-DOS выполнялись в этом режиме и имели расширение .

COM. Первое, что делает Startup.com (Bootmgr) — переключает процессор в режим «Защищенный» , где защита означает защиту процессов друг от друга.

Этот режим поддерживает виртуальную память и 32-битные адреса, которые могут адресовать 4 ГБ ОЗУ.

Следующий шаг — Bootmgr заполняет таблицу виртуальных адресов в первые 16 МБ ОЗУ и включает трансляцию виртуальных адресов в физические.

Windows работает в этом режиме.

Поскольку на этом этапе подсистемы ОС еще не созданы, Bootmgr имеет собственную простую и неполную реализацию файловой системы NTFS, благодаря чему находит BCD-файл (данные конфигурации загрузки) , в котором хранятся настройки параметров загрузки ОС.

Редактировать его можно через утилиту BcdEdit.exe .

Эти настройки BCD могут указывать на то, что Windows находилась в спящем режиме, а затем Bootmgr запустит программу.

WinResume.exe , который считывает состояние из файла Гиберфил.

sys в память и перезапускает драйверы.

Если BCD сообщает, что существует несколько операционных систем, Bootmgr отобразит их список и предложит пользователю выбрать.

Если ОС одна, то Bootmgr запускает WinLoad.exe, этот процесс выполняет основную работу по инициализации Windows:

  1. Выбирает подходящую версию ядра Windows. Вы можете думать об этом как о Windows10.exe, хотя на самом деле он называется NtOsKrnl.exe. Какие версии существуют? Согласно Википедии:
    • ntoskrnl.exe — это однопроцессорное ядро Windows. без поддержки режима ПА?
    • ntkrnlmp.exe (англ.

      NT Kernel, Multi-Processor version) — многопроцессорное ядро Windows. без поддержки режима ПА?

    • ntkrnlpa.exe — однопроцессорное ядро Windows с поддержкой режимов ПА? .

    • ntkrpamp.exe — многопроцессорное ядро Windows с поддержкой режимов ПА? .

  2. Загружает HAL.dll (уровень аппаратной абстракции), который абстрагирует функции материнской платы и процессора.

  3. Загружает файл шрифта vgaoem.fon.
  4. Загружает файлы, содержащие информацию о представлениях даты и времени, числовых форматах и т. д. Эта функциональность называется Национальная языковая система .

  5. Загружает реестр СИСТЕМЫ в память, он содержит информацию о драйверах, которые необходимо загрузить.

    Информация обо всех водителях находится в HKLM\SYSTEM\CurrentControlSet\Services\ .

    Драйвера, которые необходимо загрузить, имеют ключ start=SERVICE_BOOT_START(0).

    О структуре реестра мы поговорим в другой статье.

  6. Загружает драйвер файловой системы для раздела, в котором расположены файлы драйвера.

  7. Загружает драйверы в память, но еще не инициализирует их из-за циклических зависимостей.

  8. Подготавливает регистры ЦП для выполнения выбранного на первом этапе ядра Windows — NtOsKrnl.exe.
При загрузке драйверов WinLoad проверяет их цифровые подписи и если они не совпадают, то он становится синим( BSOD ) или зеленый ( ГСОД , для инсайдерских предварительных сборок) «экран смерти».



О работе ПК часть 3: От включения до полной загрузки Windows 10



Запустить на UEFI



О работе ПК часть 3: От включения до полной загрузки Windows 10

Пример экрана загрузки UEFI BIOS существует уже более 30 лет, и в попытке исправить его недостатки компания Intel в 1998 году создала стандарт Intel Boot Initiative, позже переименованный в EFI и переданный в дар EFI Forum в 2005 году.

Недостатки BIOS: • Работает только в 16-битном режиме.

• Может адресовать только 1 МБ ОЗУ.

• Часто возникают проблемы с совместимостью.

• MBR ограничена только четырьмя основными разделами диска.

• Диск ОС не может быть больше 2,2 ТБ.

• Имеет очень ограниченные возможности проверки загрузчика ОС.

BIOS был заменен UEFI, по сути, миниатюрной ОС, которая может работать как в 32-битной, так и в 64-битной версии.

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



О работе ПК часть 3: От включения до полной загрузки Windows 10

В UEFI загрузка происходит в родной разрядности процессора - 32 или 64, есть доступ ко всей памяти, виртуальная память поддерживается, включена Безопасная загрузка и можно запустить антивирусное ПО до начала загрузки ОС.

Порядок загрузки ОС в UEFI:

  1. Инициализация и запуск Прошивки, запуск чипсета.

  2. POST-тест, аналогичный BIOS
  3. Загрузка драйверов EFI и поиск диска, соответствующего требованиям загрузочного диска EFI.
  4. Найдите папку с именем EFI. Спецификация UEFI требует наличия раздела для Системный раздел EFI , отформатированный под файловую систему FAT, размером от 100МБ до 1ГБ или не более 1% от размера диска.

    Каждая установленная Windows имеет на этом разделе свой каталог — ЭФИ\Майкрософт .



    О работе ПК часть 3: От включения до полной загрузки Windows 10

  5. Считывает путь к файлу загрузчика из настроек UEFI, сохраненных в NVRAM (энергонезависимой памяти).

  6. Находит и запускает EFI/Microsoft/Boot/BootMgrFw.efi .

  7. BootMgrFw.efi находит ключ реестра BCD, который хранится в отдельном файле с именем BCD. Из него он находит WinLoad.efi , который находится в C:\Windows\System32\winload.efi .



    О работе ПК часть 3: От включения до полной загрузки Windows 10

Для просмотра содержимого раздела Системный раздел EFI откройте консоль с правами администратора (WinKey+X => Windows PowerShell (Admin)) и выполните команды mountvol Z: /s, Z:, реж.

.

CD - меняет каталог.

Основное отличие компонентов BootMgr и WinLoad для UEFI от их копий для BIOS заключается в том, что они используют API ЕФИ , вместо прерываний BIOS и форматов загрузочных разделов МБР биос И Системный раздел EFI значительно различаются.



Инициализация ядра

Напомню, что мы рассматриваем загрузку ПК в контексте клавиатуры, поэтому нет необходимости заострять внимание на всех этапах.

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

выделено .

На предыдущем этапе компонент был запущен WinLoad.exe/WinLoad.efi , который работает NtOsKrnl.exe указав параметры загрузки в глобальной переменной nt!KeLoaderBlock (память режима ядра доступна всем процессам), что WinLoad собрано за время моей работы.

К ним относятся:

  1. Пути к системе (загрузчик Windows) и загрузке ( C:\Windows\System32 ) каталоги.

  2. Указатель на таблицы виртуальной памяти, созданные WinLoad.
  3. Дерево с описанием подключенного оборудования, используется для создания ветки реестра HKLM\HARDWARE.
  4. Копия скачанного реестра HKLM\Система
  5. Указатель на список загруженных (но не инициализированных) драйверов, участвующих в запуске Windows.
  6. Другая информация, необходимая для скачивания.

Инициализация ядра Windows происходит в два этапа.

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

На этом же этапе в память загружаются строки с сообщениями BSOD, поскольку в момент сбоя они могут быть недоступны или повреждены.

  • Первый этап инициализации ядра:
    1. Исполнительный уровень инициализирует свои объекты состояния — глобальные объекты, списки, блокировки.

      Выполняется проверка Артикул Windows (единица хранения запасов) , примеры SKU Windows 10 — Home, Pro, Mobile, Enterprise, Education.

    2. Если включено Проверка драйверов , то он инициализируется.

    3. Диспетчер памяти создает структуры данных, необходимые для API внутренней памяти ( службы памяти ), резервирует память для внутреннего использования ядром.

    4. Если подключен отладчик ядра ( отладчик ядра ) ему отправляется уведомление о загрузке символов для драйверов, загружаемых при старте системы.

    5. Информация о версии сборки Windows инициализируется.

    6. Запустить диспетчер объектов — позволяет зарегистрировать именованные объекты, к которым другие компоненты могут обращаться по имени.

      Ярким примером является мьютекс, позволяющий приложению запустить один экземпляр.

      Здесь он создан для хранения ручка стола , который устанавливает соответствие, например, между HWND и объектом, описывающим окно.

    7. Начинать Контрольный монитор безопасности подготавливает все необходимое для создания вашей первой учетной записи.

    8. Менеджер процессов подготавливает все списки и глобальные объекты для создания процессов и потоков.

      Создаются процессы Idle и System (в которых выполняется «Windows10.exe», также известный как NtOsKrnl.exe), они еще не выполняются, поскольку прерывания отключены.

    9. Инициализация Платформа отладки в пользовательском режиме .

    10. Первый этап инициализации Plug and Play Manager. PnP — стандарт, реализованный на уровне производителей периферии, материнских плат и ОС.

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

  • Второй этап инициализации ядра.

    Он содержит 51 шаг, поэтому многие из них я пропущу:

    1. По завершении первого этапа основной технологический процесс Система (NtOsKrnl.exe) уже приступил к исполнению.

      Он выполняет второй этап инициализации.

      Поток получает высший приоритет — 31.

    2. HAL настраивает таблицу прерываний и разрешает прерывания.

    3. показано Начальный экран Windows , который по умолчанию представляет собой черный экран с индикатором выполнения.

    4. Исполнительный уровень инициализирует инфраструктуру для таких объектов синхронизации, как Семафор, Мьютекс, Событие, Таймер.

    5. Объекты для отладчика пользовательского режима инициализируются.

    6. Символическая ссылка \SystemRoot создана.

    7. NtDll.dll отображено в памяти.

      Он сопоставляется со всеми процессами и содержит API-интерфейсы Windows.

    8. Драйвер файловой системы инициализирован.

    9. Подсистема межпроцессного взаимодействия между компонентами Windows АЛПК инициализирован.

      Вы можете думать об этом как об именованных каналах или Windows Communication Foundation для межпроцессного взаимодействия.

    10. Начинается инициализация диспетчера ввода-вывода , который создает необходимые структуры данных для инициализации и хранения драйверов периферийных устройств, подключенных к компьютеру.

      Этот процесс очень сложен.

      Здесь инициализируются компоненты Инструментарий управления Windows И Трассировка событий для Windows (оно опирается на Анализатор производительности Windows ).

      После этого шага все драйверы инициализируются.

    11. Процесс начинается SMSS.exe ( Подсистема диспетчера сеансов ).

      Он отвечает за создание пользовательского режима, в котором будет создаваться визуальная часть Windows.



Запуск подсистем — SMSS, CSRSS, WinInit

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

SMSS.exe работает с ядром в обход Windows API, он использует то, что называется Собственный API .

Windows API — это оболочка Native API. SMSS.exe сначала запускает подсистему Windows ( CSRSS.exe — подсистема выполнения клиент-сервера ) и завершает инициализацию реестра.

Процесс и потоки SMSS.exe помечены как критические, а это означает, что их неожиданное завершение, например из-за ошибки, приведет к сбою системы.

Для связи с подсистемами, например, вызов API, создающий новый сеанс, СМСС создает порт ALPC с именем СмАпиПорт .

Переменные окружения загружаются из реестра, запускаются такие программы, как 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, который отображает пользовательский интерфейс входа в систему.

WinInit.exe инициализирует подсистемы для создания графической оболочки – Станция Windows И рабочие столы , это не тот рабочий стол, который вы видите, это другая концепция Windows. Далее запускает процессы:

  1. Сервисы.

    exe Менеджер по контролю услуг (SCM) запускает службы и драйверы, отмеченные как AutoStart. Службы выполняются в процессах svchost.exe .

    Есть утилита tlist.exe , который запускается с параметром tlist.exe -s выведет в консоли названия служб в каждом из svchost.exe.

  2. LSASS.exe – Местный системный администратор.

  3. LSM.exe – Менеджер локальных сеансов.

WinLogon.exe – загружает поставщиков аутентификации ( поставщики учетных данных ), которым может быть пароль, смарт-карта, PIN-код, Hello Face. Он создает процесс LogonUI.exe который показывает пользователю интерфейс аутентификации, а затем проверяет введенные данные (логин и пароль, PIN-код).

Если все прошло успешно, то WinLogon запускает процесс, указанный в ключе реестра.

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon\Userinit .

По умолчанию это процесс UserInit.exe , который:

  1. Запускает скрипты, указанные в реестрах:
    • HKCU\Software\Policies\Microsoft\Windows\System\Scripts
    • HKLM\SOFTWARE\Policies\Microsoft\Windows\System\Scripts
  2. Если групповая политика безопасности определяет квоту профиля пользователя, запускается %SystemRoot%\System32\Proquota.exe
  3. Запускает оболочку Windows, по умолчанию это Explorer.exe. Этот параметр настраивается через реестр:
    • HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
    • HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
WinLogon уведомляет Сетевой провайдер о залогиненом пользователе, которому он восстанавливает и подключает сохраненные в реестре системные диски и принтеры.

Сетевой провайдер — это файл mpr.dll из системной папки, которая размещена в процессе svchost.exe , то есть служба Windows. Дерево процессов выглядит так, на нем видно кто кого создал (показаны не все процессы, может немного отличаться от последних версий Windows).



О работе ПК часть 3: От включения до полной загрузки Windows 10



Где клавиатура?

При запуске ядро Windows считывает из реестра информацию о контроллере системной шины, обычно это шина PCI (реже MSI), к ней подключаются контроллеры портов ввода-вывода, в том числе USB и PS/2. Информация об этом записывается во время установки Windows. Система загружает для него драйвер и рекурсивно обходит все порты, также загружая для каждого из них свой драйвер.

Драйверы можно объединять в узлы ( узел драйвера ), например драйвер клавиатуры, будет подключен к драйверу порта PS2. А вот с USB-портом сложнее — сначала драйвер порта, потом драйвер для работы с протоколом HID и только потом клавиатура.

Каждый порт контролируется собственным чипом, который контролирует соединение и принимает/отправляет сигналы между процессором и устройством.

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

Порт управления чипом имеет выделенную линию с контроллером прерываний (PIC или APIC), через который он может попросить ЦП привлечь к себе внимание, например, прочитать данные с клавиатуры (порт PS/2, USB — отдельная история).

).

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

В нашем примере драйвер был загружен из C:\Windows\System32\i8042prt.sys .

Давайте вспомним предыдущая статья .

В старых компьютерах с PIC на чипе Интел 8259 Было 15 линий прерываний, где клавиатура была подключена к выводу IRQ1, таймер IRQ0, а мышь к IRQ12, который фактически был пятым выводом второго чипа 8259, который мультиплексировал свои прерывания через вывод IRQ2 первого контроллера.

Современные PIC могут иметь 255 контактов для сигналов прерывания.

Во время загрузки ОС программирует APIC/PIC так, чтобы он возвращал определенное число, когда, скажем, поступило прерывание от клавиатуры или USB-порта, и используя это число, ЦП находит таблица векторов прерываний функция, которую необходимо выполнить.

Количество прерываний определяется ХАЛ И Менеджер Plug'n'Play .

Контроллер прерываний ищет сигнал на своих ножках в определенном порядке, например, в бесконечном цикле проверяет напряжение на ножках от 1 до MAX_PIN. Этот порядок определяет приоритет, например, клавиатура будет видна раньше мыши, а таймер — раньше клавиатуры.

Чтобы не зависеть от работы контроллеров прерываний, Windows абстрагирует понятие IRQ (запрос прерывания) В IRQL (уровень запроса прерывания) .

Если контроллер прерываний имеет хотя бы 15 или 255 строк, все они будут сопоставлены с 32 IRQL для x86 и 15 IRQL для x64 и IA64.



О работе ПК часть 3: От включения до полной загрузки Windows 10



О работе ПК часть 3: От включения до полной загрузки Windows 10

Что означают приоритеты IRQL:
  1. Высокий – когда происходит сбой системы, обычно это вызов функции KeBugCheckEx.
  2. Сбой питания – не используется.

    Первоначально он был изобретен для Windows NT.

  3. Межпроцессорное прерывание — вам необходимо отправить запрос другому ЦП в многопроцессорной системе для выполнения действия, например, обновления кэша TLB, завершения работы системы, сбоя системы (BSOD).

  4. Clock – необходим для обновления системных часов, а также для ведения статистики о том, сколько времени потоки проводят в пользовательском режиме и режиме ядра.

  5. Профиль – используется для часов реального времени (локальный APIC-таймер), когда включен механизм профилирования ядра.

  6. Устройство 1 .

    Устройство N – прерывания от устройств ввода-вывода.

    Во время прерывания данные с клавиатуры, мыши и других устройств считываются в отдельные буферы и сохраняются в объектах DPC (отложенный вызов процедуры) для последующей обработки и позволяют устройствам пересылать данные.

    После этого приоритет снижается до Диспетчерского ЦОДа.

  7. Диспетчерский ЦОД – как только данные получены от устройств, можно приступать к их обработке.

  8. БТР - Асинхронный вызов процедур .

    С помощью этого механизма вы можете выполнять код, пока поток спит, вызывая WaitForSingleObject, Sleep и другие.

  9. Пассивный/Низкий — все приложения выполняются здесь в пользовательском режиме.

Если вы всегда программировали в пользовательском режиме, вы никогда не слышали об IRQL, поскольку все пользовательские программы выполняются с пассивным/низким (0) приоритетом.

Как только происходит событие с b О более высокий уровень приоритета (событие клавиатуры, таймер планировщика потоков), процессор сохраняет состояние прерванного потока, которое представляет собой значения регистров ЦП, и вызывает диспетчер прерываний ( диспетчер прерываний , просто функция), повышающая приоритет IRQL через API КеРай Теги: #Разработка Windows #Компьютерное оборудование #оборудование #C++ #операционные системы #Системное программирование

Вместе с данным постом часто просматривают: