Обработчики прерываний не являются вектором прерываний. Вектор прерывания - это код, к которому процессор переходит при срабатывании прерывания. Это грубое упрощение, но вот как это выглядит:
interrupt_vector {
num = check_interrupt_number()
f = get_interrupt_handler_func(num);
d = get_interrupt_handler_data(num);
/* call interrupt handler */
ret = f(d);
}
Таким образом, обработчик и данные регистрируются вместе, а код вектора прерывания вызывает обработчик registererd, передавая зарегистрированные данные, и проверяет возвращаемое значение.
Конечно, здесь у нас есть один уровень обработчика, но у вас может быть несколько, например, один обработчик для всех PCI Irq, который по очереди проверяет зарегистрированный обработчик для определенного PCI irq и в конечном итоге вызывает itn, передавая зарегистрированные данные и т. .
Конечно, реальный код, как правило, намного сложнее. Вы можете попробовать эту ссылку lxr для навигации по источникам ядра Linux