Наверх Системное программирование
Предыдущий раздел Оглавление Следующий раздел

2.3.1.4. Асинхронные вызовы процедур (APC)

Асинхронные вызовы процедур (Asynchronous Procedure Call (APC)) имеют сходство с DPC в том, что они также откладывают обработку системной процедуры. Отличием же APC от DPC является то, они выполняются в контексте конкретного потока, а не контексте процессора. Ставить АРС в очередь на выполнение в контексте сделавшего первоначальный запрос ввода-вывода потока будет система ввода-вывода. После чего уровень ядра доставит АРС потоку и будет планировать его выполнение. АРС режима ядра, чтобы завершить ввод-вывод, будет выполняться в контексте потока, инициировавшего в режиме ядра ввод-вывод. В этом случае АРС получает доступ не только к буферу режима ядра, но и ко всему адресному пространству, которое принадлежит содержащему данный поток процессу. От состояния потока в данный момент, а также и от типа системы, будет зависеть время доставки АРС.

Для доставки уведомлений в пользовательском режиме о завершении ввода-вывода потоку, инициировавшему ввод-вывод, можно также использовать АРС пользовательского режима. Он вызывает назначенную приложением процедуру, когда поток будет заблокирован в ядре и готов принимать АРС. Ядро осуществит прерывание ожидания потока и вернет его в пользовательский режим, сформировав стек пользовательского режима и изменив регистры, чтобы выполнить процедуры диспетчеризации АРС, используя системную библиотеку ntdll.dll. Процедура диспетчеризации АРС в свою очередь совершит вызов процедуры пользовательского режима, связанной с операцией ввода-вывода. Помимо указанных способов использования APC функция QueueUserAPC из Win32 API позволяет разработчикам использовать АРС также и для произвольных целей.

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

Предыдущий раздел Оглавление Следующий раздел