Читайте также:
|
|
Кроме прерываний, генерируемых аппаратурой, возможно также генерировать прерывания программно.
Это необходимо в следующих случаях:
1) диспетчеризация потоков;
2) обработка отложенных прерываний, т.е. обработка их некритична по времени;
3) обработка событий, связанных со службой времени (таймерами устройств), асинхронного выполнения процедуры (незапланированного) в контексте конкретного потока;
4) поддержка асинхронного ввода-вывода;
5) прерывания DPC (Differed Procedure Call).
Когда выполняющийся поток по какой-либо причине переходит в ждущее состояние, ядро обращается к диспетчеру, чтобы немедленно вызвать переключение контекста на другой поток. Но бывают случаи, когда перераспределение процессора займет последовательность вложенных процедур уровней кода, т.е. будет выполняться достаточно долго. Поэтому переключиться немедленно на другой контекст не представляется возможным. Переключение не выполняется и откладывается. Для этого запрашивается диспетчер процессов. Задержка подобного типа, связанная с переключением контекста, организуется Windows с помощью механизма DPC (отложенного вызова процедуры).
Обнаружив необходимость диспетчеризации, в этом случае ядро генерирует прерывание уровня DPC, но т.к. уже существуют процессы в системе с этим IRQL, обработка его откладывается. Когда очередь рассосалась, оно снижает IRQL ниже уровня DPC и проверяет, не ожидают ли выполнения отложенные прерывания диспетчеризации. Если ожидают, то они обрабатываются. Активация диспетчера – один из способов отложить диспетчеризацию до определенного момента.
Замечание: таким образом, DPC – функция, выполняющая системную задачу, которая не требует немедленного выполнения. Механизм DPC позволяет ОС генерировать прерывания и обеспечивать ядру его штатную работу. Механизм DPC также используется при выполнении запросов на ввод-вывод. Для этого Windows пытается удерживать текущий IRQL ниже IRQL устройств, т.е. обрабатывать отложенно.
DPC, как и прерывания, выполняются в ОС. DPC представляется DPC объектом – объект ядра, который не виден пользовательским приложением, но виден драйверам и исполнительной системе. Наиболее важная часть DPC объекта – адрес системной функции, которую ядро должно вызвать для обработки отложенного прерывания DPC. При этом все DPC процедуры, запланированные к выполнению (подобно процессам) хранятся в специальных очередях. Эти очереди называются очередями DPC. Идея: запрашивая DPC обработку, вызывается ядро, инициируется DPC объект, который становится в очередь DPC объектов, обработка всех DPC начинается тогда, когда IRQL процессора станет Passive.
Схема обработки DPC прерывания показана на слайде 30.
Поскольку пользовательские приложения выполняются при низком IRQL, вероятность того, что DPC будет все время прерывать выполнение пользовательского потока, велико. Поэтому возможны ситуации, когда приходится динамически менять приоритет приложения.
DPC также используется ядром в случае истечения кванта времени, выделенного какому-то процессу. В этом случае генерируется прерывание с уровнем Clock, создается новый квант времени, перераспределяется процессор для вызова переключения на новый контекст. Возможно через процесс Explorer провести мониторинг активности прерываний DPC.
Дата добавления: 2015-07-07; просмотров: 158 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Уровни запросов программных прерываний | | | Диспетчеризация исключений |