Обработка прерываний (Linux/Общие)

На основной плате у нас есть контроллер прерываний (IRC), который действует как мультиплексор между устройствами, которые могут инициировать прерывание, и ЦП:

                             |--------|
          |-----------|      |        |
-(0)------| IRC  _____|______| CPU    |
-(...)----| ____/     |      |        |
-(15)-----|/          |      |--------|
          |-----------|

Каждое устройство связано с IRQ (цифра слева). После каждого выполнения ЦП воспринимает строку запроса на прерывание. Если сигнал обнаружен, будет выполнено сохранение состояния, и ЦП загрузит процедуру обработки прерывания, которую можно найти в векторе прерывания, расположенном по фиксированному адресу в памяти. Насколько я вижу, номер IRQ и номер вектора в векторе прерывания не совпадают, потому что, например, моя сетевая карта зарегистрирована на IRQ 8. На процессоре Intel Pentium это указывает на подпрограмму, которая используется чтобы сигнализировать об одном состоянии ошибки, поэтому где-то должно быть сопоставление, указывающее на правильный обработчик.

Вопросы:

1) Если я напишу драйвер устройства и пропишу для него IRQ X. Откуда система знает, какое устройство должно обрабатываться? Я могу, например, использовать request_irq() с номером IRQ 10, но как система узнает, что обработчик должен использоваться для мыши или клавиатуры или для того, что я пишу драйвер?

2) Как тогда выглядит вектор прерывания? Я имею в виду, что если я использую IRQ 10 для своего устройства, это перезапишет стандартный обработчик, предназначенный для обработки ошибок в таблице (первое используемое значение — 32 в соответствии с Зильбершатцем (концепции операционной системы)).

3) Кто изначально устанавливает IRQ? Биос? ОС?

4) Кто отвечает за соответствие IRQ и смещения в векторе прерывания?

5) Возможно совместное использование IRQS. Как это возможно? На материнской плате есть аппаратные линии, которые соединяют устройства с контроллером прерываний. Как полосы могут быть настроены на одно и то же прерывание? Должна быть таблица, в которой указано, что дорожки 2 и 3 обрабатывают IRQ15, например. Где находится эта таблица и как она называется?

15
задан fliX 3 June 2012 в 10:27
поделиться