1.Внутреннее устройство Windows (гл. 1-4) :: Руссинович Марк
Страница:
158 из 350
B одном из предыдущих примеров вывода !idt вектор 0x3b был подключен к нескольким объектам прерываний, связанным вцепочку (chained interrupt objects).
Программные прерывания
Хотя большинство прерываний генерируется аппаратно, ядро Windows тоже может генерировать прерывания — только они являются программными. Этот вид прерываний служит для решения многих задач, в том числе:
• инициации диспетчеризации потоков;
• обработки прерываний, не критичных по времени;
• обработки событий таймеров;
• асинхронного выполнения какой-либо процедуры в контексте конкретного потока;
• поддержки асинхронного ввода-вывода. Эти задачи подробно рассматриваются ниже.
Прерывания DPC или диспетчеризации
Когда дальнейшее выполнение потока невозможно, например из-за его завершения или перехода в ждущее состояние, ядро напрямую обращается к диспетчеру, чтобы вызвать немедленное переключение контекста. Однако иногда ядро обнаруживает, что перераспределение процессорного времени (rescheduling) должно произойти при выполнении глубоко вложенных уровней кода. B этой ситуации ядро запрашивает диспетчеризацию, но саму операцию откладывает до выполнения текущих действий. Такую задержку удобно организовать с помощью программного прерывания DPC (deferred procedure call).
При необходимости синхронизации доступа к разделяемым структурам ядра последнее всегда повышает IRQL процессора до уровня «DPC/dispatch» или выше. При этом дополнительные программные прерывания и диспетчеризация потоков запрещаются.
|< Пред. 156 157 158 159 160 След. >|