Что происходит, когда вы отключаете прерывания, и что вы делаете с прерываниями, которые вы не знаете, как с ними работать?
===========================================================================================================================

Когда вы отключаете прерывания (с`cli` инструкция в x86), что именно происходит?

Does the PIC wait for you to turn on interrupts, and fire the interrupt when that happens? (If so, how long does it wait, and what happens if the time 'expires'?)

Does the interrupt -- from the device's perspective -- get sent into a "black hole", with no response?

Does the PIC somehow tell the device that "the CPU is busy" or something?

Or does something else happen?

Кроме того, как вы справляетесь с прерыванием, которое вы не знаете, как обрабатывать?  

Есть ли способ сообщить PIC (или устройству, если вы не знаете, что это за устройство), "да, я получил ваше сообщение, но я не знаю, что с ним делать"?

PIC 8259a ожидает сигнала INTA от ЦП. Процессор отправляет его, когда начинает обрабатывать прерывание, передавая управление соответствующему ISR. Какой ISR? PIC передает вектор прерывания в CPU, который ищет IVT / IDT для адреса, а вы знаете остальное. PIC не будет предоставлять вектор прерывания, пока не получит INTA.

PIC 8259a имеет только одностороннюю связь с устройствами ввода / вывода. Они могут сказать, что у них есть прерывание, которое нуждается в обслуживании.

Таким образом, все в воздухе в PIC, если процессор не реагирует на прерывания. Однако устройства могут по своему желанию де-утверждать и затем повторно утверждать сигналы запроса прерывания. Я не знаю, что делать. Я также не знаю, какие существуют временные требования для обслуживания прерываний.

Если вас не интересуют прерывания из определенного источника, вы можете просто замаскировать их, и вы их не получите. Если вы делаете прерывание, но не знаете, как его обрабатывать, вы можете просто сообщить PIC, что вы его обработали. Это может оставить прерванное устройство в «замороженном» состоянии. состояние, ожидая, пока обслуживание не произойдет. Это также может привести к тому, что устройство будет поддерживать высокий уровень сигнала запроса на прерывание, что будет проблемой, если вы принимаете прерывания в режиме с переключением по уровню - вы будете постоянно получать прерывания.



Прерывания все еще срабатывают, но процессор не слушает. Когда вы начинаете слушать снова (`sti`), сигнал все еще там и вступит в силу при первой возможности.

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

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

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