Программирование драйверов Windows

       

Передача сигналов прерываний


При генерации прерываний используются две основные стратегии. Более старый и менее предпочтительный механизм носит название edge-triggered

(управляемые перепадом, управляемые фронтом) или latched

прерывания. Устройства, которые генерируют такие прерывания, сигнализируют о потребности в обслуживании осуществлением перехода на физически существующем проводе (например, на одном из проводников шины или соединительного кабеля) из одного логического состояния в другое, скажем, из 1 в 0. Как только этот переходной процесс прошел, устройство может отпустить линию (отпустить прерывание), восстановив параметры электрического сигнала, в данном случае, обозначающие логическую 1. Другими словами, линия прерывания такого устройства "пульсирует" под его руководством, а процессор должен обратить внимание на проходящие импульсы.

Этот тип прерываний является потенциальным источником ошибочных срабатываний, поскольку шум на линии может выглядеть как сигнал прерывания. Кроме того, более сложная проблема возникает, когда два устройства с таким типом прерываний используют одну линию. В случае если два устройства "просигнализируют" одновременно, процессор различит лишь одно прерывание, и тот факт, что прерывания сгенерировали два устройства, будет потерян безвозвратно.

Классическим примером оборудования, где случаются потери такого типа прерываний, являются последовательные СОМ порты. По традиции, COM1 и COM3 используют одно определяемое по фронту прерывание, а именно IRQ4. В результате, невозможно одновременно подключить к этим двум портам оборудование, которое использует управляемое прерываниями программное обеспечение. Попытки включить мышь в COM1 и модем в COM3 рано или поздно, но &#8212 неминуемо приводят к остановке одного из драйверов, который ожидает "пропавший" сигнал о прерывании.

Эти ограничения преодолеваются реализацией второго механизма, известного как level-sensitive, чувствительный к уровню, или level-triggered, управляемый уровнем. Устройства удерживают общую аппаратную линию (совместно используемый проводник) в соответствующем состоянии до тех пор, пока потребность каждого не будет удовлетворена. Теперь для процессора нет проблем в том, чтобы зарегистрировать оба прерывания, так как линия удерживается в этом состоянии до момента завершения обслуживания и первого, и второго устройства &#8212 это позволяют делать специальные типы цифровых схем. В случае если два прерывания происходят одновременно, обслуживается устройство с более высоким приоритетом, а после и другое устройство, поскольку оно продолжает сигнализировать, удерживая линию в соответствующем состоянии и после окончания обработки запроса первого, высокоприоритетного, устройства.



Содержание раздела