Прерывания генерируются устройствами для сигнализации о том, что операция завершена, или о том, что возникло изменение в состоянии. По получении прерывания от устройства система планирует процедуру обслуживания прерывания соответствующего драйвера устройства с одним или несколькими параметрами, которые уникально идентифицируют устройство, требующее обслуживания. Эти параметры необходимы, поскольку драйверы устройств обычно поддерживают несколько устройств одного и того же типа. Если бы идентификатор прерывающего устройства не передавалася с каждым прерыванием, драйвер был бы вынужден опрашивать все потенциальные устройства, чтобы выяснить, какое из них вызвало прерывание.
Система организует передачу номера устройства процедуре обслуживания прерывания каждого устройства путем установки в таблице векторов прерываний адреса дополнительной связующей процедуры. Для обслуживания прерывания вызывается эта связующая процедура, а не действительная процедура обслуживания прерывания; она выполняет следующие действия.
1. Собирает нужные параметры аппаратного обеспечения и помещает их в место, зарезервированное для них устройством.
2. Обновляет статистику по прерываниям устройства.
3. Планирует поток обслуживания прерывания для устройства.
4. Сбрасывает флаг ожидающего прерывания в аппаратном устройстве.
5. Возвращается из прерывания.
Поскольку связующая процедура вставлена между таблицей векторов прерываний и процедурой обслуживания прерывания, инструкции специального назначения, которые невозможно генерировать из C и которые необходимы аппаратуре для поддержки прерываний, можно оставить вне драйвера устройства. Это посредничество связующей процедуры дает возможность писать драйверы устройств без использования языка ассемблера.
- 25/10/2010 03:12 - Дисковые устройства
- 24/10/2010 15:46 - Точки входа для драйверов символьных устройств
- 24/10/2010 13:44 - Символьно-ориентированные устройства
- 22/10/2010 01:34 - Непосредственные устройства и физический ввод/вывод
- 21/10/2010 12:10 - Символьные устройства
- 20/10/2010 17:08 - Очередь ввода/вывода
- 18/10/2010 18:44 - Драйверы устройств
- 18/10/2010 06:21 - Отображение ввода/вывода от пользователя на устройство