Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Обзор системы ввода/вывода Обработка прерываний

Обработка прерываний

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

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

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

2. Обновляет статистику по прерываниям устройства.

3. Планирует поток обслуживания прерывания для устройства.

4. Сбрасывает флаг ожидающего прерывания в аппаратном устройстве.

5. Возвращается из прерывания.

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


Похожие:
Еще по теме:
Советуем прочитать:

別れたくない 男性や女性へ
Сейчас 65 гостей онлайн

Реклама на сайте: