Архитектура современных операционных систем
133 Механизм функционирует следующим образом: ядро создает объект DPC, заполняет его атрибут, то есть адрес функции, которую нужно выполнить, и вырабатывает программное прерывание DPC. Поскольку ядро работает на том же уровне, это прерывание маскируется до тех пор, пока текущий IRQL не бу- дет понижен. Все невыполненные DPC ставятся в очередь. Как только уровень процес- сора будут понижен, возникнет прерывание DPC и планировщик начнет запус- кать отложенные процедуры из очереди DPC. Так как каждая отложенная процедура может начать выполняться в произ- вольный момент времени и неизвестно, в контексте какого потока, в DPC нель- зя создавать и ожидать объекты системы, изменять виртуальную память, вызы- вать другие прерывания. DPC используется системой для обработки списка потоков, ожидания ис- течения заданного интервала времени, а также драйверами в процедурах за- вершения операции ввода/вывода. APC – асинхронный вызов процедур. Это механизм, позволяющий потоку асинхронно своему выполнению вызвать какую-либо процедуру или функцию в случае возникновения некоторого события, например, завершения операция ввода/вывода. Асинхронный вызов процедур поддерживается специальным объектом – APC, но этот объект доступен не только ядру, но и пользовательским потокам. Основным атрибутом этого объекта является адрес асинхронно вызывае- мой функции. Работа с APC такая же, как с DPC. Для использования механизма поток создает объект APC, заполняет в нем адрес вызываемой функции и свя- зывает APC с некоторым событием. Как только это событие происходит, вырабатывается прерывание APC, ко- торое будет обработано, когда уровень процессора будет наинизшим, то есть будет выполняться пользовательский поток. Поскольку APC связывается с конкретным потоком, то и очередей APC много. Каждый поток имеет свою очередь APC.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy