Отложенный (DPS) и асинхронный (APS) вызовы процедур для обработки прерываний

IRQL уровни 1 (APC LEVEL) и 2 (DISPATCH LEVEL) предназначены для так называемых программных (в терминологии Microsoft) прерываний соответственно:

· асинхронный вызов процедуры - APC (asynchronous procedure call) и

· отложенный вызов процедуры - DPC (deferred procedure call).

Если ядро принимает решение выполнить некоторую системную процедуру, но нет необходимости делать это немедленно, оно ставит ее в очередь DPC и генерирует DPC прерывание. Когда IRQL процессора станет достаточно низким, эта процедура выполняется. Характерный пример - отложенная операция планирования. Из этого следует, что код, выполняемый на IRQL уровне, выше или равном 2, не подвержен операции планирования.

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

2) Кроме того, на этом уровне ожидают своей очереди не только вызовы планировщика / диспетчера, но и другие отложенные вызовы от других процедур.

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

Пример АПС – перемещение данных, полученных драйвером устройства ввода вывода из системной области памяти, куда они первоначально попадают в индивидуальную часть адресного пространства нужного процесса. Такие действия постоянно выполняются системой ввода-вывода, собственно для них и были введены подобные прерывания.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: