Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000377.doc
Скачиваний:
29
Добавлен:
30.04.2022
Размер:
2.52 Mб
Скачать

Функция обработки прерывания

Если внешнее устройство генерирует прерывания при наступлении определенных событий, например, прерывание при готовности новых данных или прерывание при завершении запрошенной операции ввода-вывода, то драйвер должен предоставлять системе соответствующую функцию обработки прерывания.

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

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

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

Поэтому функция обработки прерывания должна завершаться как можно быстрее, использовать исключительно неподкачиваемую память и выполнять только критичные по времени операции с аппаратурой, оставляя всю остальную обработку вторичному обработчику, выполняемому как обычный процесс операционной системы.

Функция опроса устройства

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

Для устройств, по каким-либо причинам не поддерживающих прерывания, в драйверах UNIX предусмотрена функция опроса устройства.

При необходимости, функция опроса устройства регистрируется драйвером в таблице коммутаторов символьных устройств, и вызывается системой по таймеру через точку входа d_poll коммутатора символьных устройств.

Так как драйвер должен быть достаточно универсальным и позволять использовать различные программно-аппаратные конфигурации компьютера, в реальных драйверах функция опроса обычно вызывает функцию обработки прерывания. Функция опроса вызывается системой на каждое прерывание аппаратного таймера (обычно 100 раз в секунду), но для сохранения высокого уровня производительности системы, функция опроса вызывает функцию обработки прерывания реже, например, на каждое десятое прерывание таймера.

Другие функции драйверов

Помимо рассмотренных выше функций, реальные драйверы могут предоставлять еще множество функций, расширяющих возможности устройства или системы в целом.

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

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

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