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

Сигналы прерываний


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

В обязанности процессора, если он намерен перейти к обслуживанию по поступившему сигналу, входит сохранение состояния процессора, контекста выполняемого программного потока. Лишь после этого процессор(будет правильнее сказать — операционная система) может выполнить переход к программному коду Процедуры Обслуживания Прерывания (Interrupt Service Routine, ISR), которую регистрирует драйвер, взявший на себя работу по представлению данного устройства в операционной системе.

Обычно устройства генерируют сигналы прерываний в ситуациях:

  • Устройство завершило обработку предыдущего запроса (поступившего от драйвера) и теперь готово к обработке нового.
  • Буфер или очередь FIFO устройства почти полны (во время ввода) или почти пусты (во время вывода). Такое прерывание разрешает драйверу получение из буфера устройства или вывод в буфер устройства данных для обеспечения его непрерывной работы.
  • Устройство столкнулось с нештатной или ошибочной ситуацией во время выполнения операции, и прерывание может быть специально для того предназначенной формой завершения операции.
  • Устройства, которые не способны генерировать прерывания, могут создать ситуацию серьезной деградации операционной системы. В связи с тем, что огромное количество выполняющихся потоков использует центральный процессор совместно, недопустимо позволять какому-либо драйверу такую роскошь, как ожидание полного завершения "его" текущей операции. При работе с подобными устройствами, не умеющими "разговаривать прерываниями", можно применять тактику опроса через определенные промежутки времени. В англоязычной литературе такой метод называется 'polling'.

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



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