2010-07-16 4 views
3

Я изучаю материал устройства с низким уровнем устройства. Я запутался между прерываниями и IRQ. Пример кода драйвера, который перехватывает клавиатуру, предполагает прерывание клавиатуры 0x31, но моя книга на микропроцессоре говорит, что это 0x09. При открытии «Диспетчер устройств»> «Клавиатуры-> Ресурсы» отображается IRQ 1. Можно ли это прояснить?Прерывания клавиатуры

Спасибо, Санджив

ответ

0

Простой ответ заключается в том, что IRQ (запрос прерывания) представляет собой аппаратный вход, который отображается при помощи системы на прерывание. В случае клавиатуры IRQ1 отображаются на прерывание 9.

Счастливый ответ, что прерывание 31h в этом контексте, очевидно, ошибка или опечатка.

Interrupt request

2

Это так. На вашем компьютере у вас есть блок под названием (A) PIC. Этот блок принимает данные от некоторых ваших периферийных устройств, таких как клавиатура PS2, и вызывает прерывание на процессоре. В современной системе есть два APIC. Один из них называется первичным, а другой называется подчиненным, и каждый из них удерживает 8 строк IRQ. Когда вы нажимаете клавишу на клавиатуре, APIC получает сигнал в строке 1 (IRQ 1), который затем вызывает прерывание на CPU.

APIC может быть запрограммирован так, что даже если он получает сигнал в строке 1, он не будет поднимать прерывание 9 на CPU (хотя, как бы странно это не было по умолчанию, если вы его не программируете), потому что это будет конфликтовать с некоторыми внутренних прерываний ЦП, поэтому вы обычно проецируете его в другое место. В вашем случае кажется, что он переводит его на прерывание 0x31, которое звучит так, будто оно может быть правильным (добавляет IRQ + 0x30).

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

Смежные вопросы