Общие сведения об архитектуре драйверов Windows NT

Страницы работы

Фрагмент текста работы

Последняя может продолжать выполнять другие действия, пока обрабатываются шаги 2 и  3, но должна синхронизировать свою работу с завершением шага 3, чтобы определить, когда завершится передача данных. Три стадии обработки как синхронных, так и асинхронных запросов ввода-вывода подробно описаны в следующих разделах.

Посылка запроса ввода-вывода

Начнем с простого примера. Пусть приложение синхронно выводит буфер символов на принтер, подключенный к параллельному порту компьютера и управляемый однослойным драйвером этого порта. (Обычно сначала осуществляется спулинг на диск, но для простоты мы сейчас это игнорируем.)

В Windows NT запрос к принтеру вначале проходит через подсистему среды или DLL, которая, в свою очередь, вызывает сервис NtWriteFile() диспетчера ввода-вывода. Первый параметр этого сервиса — описатель файлового объекта, определяющий пункт назначения запроса. Так как этим пунктом является параллельный порт, то подсистема должна была предварительно открыть описатель порта (виртуальный файл с именем \Device\Parallel0) и задать синхронный ввод-вывод.

Диспетчер ввода-вывода создает IRP, в котором он сохраняет указатель на файловый объект и код санкции, указывающий драйверу параллельного порта

Обслуживание прерывания

Вторая стадия обработки запроса ввода-вывода, направленного устройству, управляемому по прерываниям, состоит в обслуживании прерывания устройства. После завершения передачи данных устройство ввода-вывода генерирует прерывание, и в дело вступают драйвер устройства, ядро NT и диспетчер ввода-вывода. Когда происходит прерывание от устройства, процессор, получивший его передаст управление ядру; последнее обращается к своей таблице распределения прерываний, чтобы найти процедуру обслуживания прерываний (interrupt service routine, ISR) для данного устройства. (Драйверы устройств, генерирующих прерывания, должны предоставлять ISR-процедуру, которая перехватывает прерывания от устройства и обслуживает запрос прерывания.)

В большинстве ОС прерывания от устройств имеют высокий приоритет и ОС обычно блокирует низкоуровневые, а может быть и все, прерывания, по ISR не закончит обслуживание устройства. В Windows NT, однако, ISR обрабатывает прерывания от устройств и два этапа. Прерывания от устройств имеют высокий уровень (IRQL), но ISR остается на этом уровне только на время, необходимое для того, чтобы запретить новые прерывания от устройства. Затем поте понижает IRQL процессора и завершает обработку прерывания. Эта техника гарантирует, что программные прерывания и прерывания от устройств на 6oлее низких уровнях не будут блокированы дольше необходимого.


Рис. Драйвер устройства

Для реализации двухшаговой обработки прерываний драйверы устройств NT используют отложенные вызовы процедур (DPC). Например, когда приходит прерывание от принтера, соответствующая ISR немедленно запрещает это прерывание. В зависимости от устройства, это может быть сделано простым считыванием его регистра состояния. Затем ISR сохраняет информацию устройства, которая понадобится в дальнейшем, помещает DPC в очередь и завершается. Остаток кода обработки прерывания содержится в DPC.

После завершения ISR ядро NT понижает IRQL процессора до уровня, на котором тот находился до прерывания. Помещение DPC в одну из очередей DPC ядра вызовет программное прерывание, когда IRQL процессора опустится ниже уровня диспетчерский

Похожие материалы

Информация о работе