Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы ОС.docx
Скачиваний:
44
Добавлен:
22.09.2019
Размер:
3.18 Mб
Скачать

38. Системные механизмы dpc и apc. (Лекция 9)

К огда дальнейшее выполнение потока невозможно, например из-за его завершения или перехода в ждущее состояние, ядро напрямую обращается к диспетчеру, чтобы вызвать немедленное переключение контекста. Однако иногда ядро обнаруживает, что перераспределение процессорного времени (rescheduling) должно произойти при выполнении глубоко вложенных уровней кода. B этой ситуации ядро запрашивает диспетчеризацию, но саму операцию откладывает до выполнения текущих действий. Такую задержку удобно организовать с помощью программного прерывания DPC (deferred procedure call). DPC позволяют операционной системе генерировать прерывания и выполнять системные функции в режиме ядра.

D PC/dispatch (deferred procedure call) – отложенный вызов процедур; программное прерывание с наивысшим приоритетом IRQL=2, выполняющее системную задачу, менее критичную по сравнению с текущей.

Использование:

- распределение процессорного времени (диспетчеризация потоков, обработка событий таймеров);

- реализация объектов синхронизации;

- асинхронный ввод-вывод.

APC (asynchronous procedure call) позволяет выполнять пользовательские программы и системный код в контексте конкретного пользовательского потока (а значит, и в адресном пространстве конкретного процесса). Поскольку для выполнения в контексте конкретного потока APC ставятся в очередь и выполняются при IRQL ниже «DPC/dispatch», на их работу не налагаются ограничения, свойственные DPC АРС-процедура может обращаться к ресурсам (объектам), ждать освобождения описателей объектов, генерировать ошибки страниц и вызывать системные сервисы.

APC (Asynchronous procedure call) – асинхронный вызов процедуры в контексте определенного потока. При переключении на поток и наличии в его очереди APC-объектов генерируется прерывание с IRQL=1.

APC-объект :

- хранит адрес функции, выполняемой в контексте потока, в очереди которого он содержится;

- размещается в очереди в общем случае другим процессом

Роль при вводе-выводе: позволяет ядру вернуть данные вызывающему потоку в ситуации, когда DPC-процедура обрабатывалась в другом контексте

Существуют APC режима ядра и пользователя – в зависимости от того, какой процесс разместил APC-объект.

Каждый процессор (CPU) имеет свою очередь DPC. Обычно туда помещаются задания, формируемые ISR, исполняемыми на том же CPU. Асинхронный вызов процедуры в режиме ядра связан с драйвером или другим кодом режима ядра и обычно используется для передачи данных, например для копирования данных из буфера ядра в пользовательский буфер. Помните, что пользовательский буфер должен быть доступен в контексте процесса, который владеет буфером.

При необходимости синхронизации доступа к разделяемым структурам ядра последнее всегда повышает IRQL процессора до уровня «DPC/dispatch» Обнаружив необходимость в диспетчеризации, ядро генерирует прерывание уровня «DPC/dispatch». Но поскольку IRQL уже находится на этом уровне или выше, процессор откладывает обработку этого прерывания. Когда ядро завершает свои операции, оно определяет, что должно последовать снижение IRQL ниже уровня «DPC/dispatch», и проверяет, не ожидают ли выполнения отложенные прерывания диспетчеризации. Если да, IRQL понижается до уровня «DPC/dispatch», и эти отложенные прерывания обрабатываются.