Pages Menu
Categories Menu

Опубликовано | Нет комментариев

Отображение прерываний на IRQL-уровни

IRQL-уровни нельзя отождествлять с запросами на прерывание (IRQ), определенными контроллерами прерываний, — в архитектурах, на которых работает Windows, концепция IRQL на аппаратном уровне не реализована.

Как же тогда Windows определяет, какой IRQL следует назначить прерыванию? Ответ можно найти в HAL. В Windows присутствие устройств на шине (PCI, USB и т. д.) и прерываний, которые могут быть назначены этим устройствам, определяется таким типом драйвера устройства, который называется драйвером шины.

Драйвер шины сообщает эту информацию диспетчеру устройств Plug and Play, который, с учетом допустимых назначения прерываний для всех остальных устройств, решает, какое прерывание будет назначено каждому устройству. Затем им вызывается арбитр прерываний Plug and Play, который отображает прерывания на IRQL-уровни. (На системах, не имеющих ACPI, используется корневой арбитр, а на ACPI-совместимых системах ACPI HAL имеет свой собственный арбитр.)

Для разных HAL, включенных в Windows, используются разные алгоритмы назначения. На ACPI-системах (включая x86, x64 и IA64), HAL вычисляет IRQL для заданного прерывания путем деления вектора прерывания, назначенного IRQ на 16. Что же касается выбора вектора прерывания для IRQ, это зависит от типа контроллера прерывания, имеющегося в системе.

На современных APIC-системах это число генерируется в циклическом режиме, поэтому какого-либо способа вычислить IRQ на основе вектора прерывания или IRQL не существует.

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

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.

↓