На mainbord у нас есть контроллер прерываний (IRC), который выступает в качестве мультиплексора между устройствами, которые могут вызвать прерывание и процессор:обработки прерываний (Linux/Общие вопросы)
|--------|
|-----------| | |
-(0)------| IRC _____|______| CPU |
-(...)----| ____/ | | |
-(15)-----|/ | |--------|
|-----------|
Каждое устройство, связанное с IRQ (число слева). После каждого выполнения CPU определяет линию запроса прерывания. Если обнаружен сигнал, будет выполнено сохранение состояния, а ЦП загрузит процедуру обработчика прерываний, которая может быть найдена в векторе прерываний, который находится по фиксированному адресу в памяти. Насколько я могу видеть, число IRQ и номер вектора в векторе прерываний не совпадают, поскольку у меня есть, например, моя сетевая карта, зарегистрированная в IRQ 8. На процессоре Intel Pentium это будет указывать на рутину, которая используется чтобы сигнализировать одно условие ошибки, поэтому должно быть отображение где-нибудь, что указывает на правильный обработчик.
Вопросы:
1) Если я пишу драйвер устройства и зарегистрировать IRQ X для него. Откуда система знает, какое устройство должно быть обработано? Например, я могу использовать request_irq() с IRQ номером 10, но как система знает, что обработчик должен использоваться для мыши или клавиатуры или для того, что я пишу драйвер?
2) Как выглядит вектор прерывания? Я имею в виду, что если я использую IRQ 10 для своего устройства, это перепишет стандартный обработчик, который предназначен для обработки ошибок в таблице (первая используемая версия - 32 согласно Silberschatz (понятия операционной системы)).
3) Кто инициализирует IRQ? Биос? ОС?
4) Кто отвечает за соответствие IRQ и смещение в векторе прерывания?
5) Можно разделить IRQS. Как это возможно? На материнской плате есть аппаратные дорожки, которые подключают устройства к контроллеру прерываний. Как можно настроить полосы для одного и того же прерывания? Должна быть таблица, в которой говорится, что дорожка 2 и 3 обрабатывает IRQ15, например. Где находится эта таблица и как она называется?
Более подробное описание по установке прерываний, обработки и отображения можно найти здесь: [код ходьбы в рамках прерываний ядра] (http://linuxburps.blogspot.in/2013/10/linux-interrupt- handling.html) –