Что происходит, когда вы отключаете прерывания, и что вы делаете с прерываниями, которые вы не знаете, как с ними работать?
Когда вы отключаете прерывания (с cli
инструкция в x86), что именно происходит?
PIC ждет, пока вы включите прерывания и сработаете, когда это произойдет? (Если это так, сколько времени он ждет и что произойдет, если время "истечет"?)
Разве прерывание - с точки зрения устройства - отправляется в "черную дыру" без ответа?
PIC как-то говорит устройству, что "процессор занят" или что-то?
Или что-то еще происходит?
Кроме того, как вы справляетесь с прерыванием, которое вы не знаете, как обрабатывать?
Есть ли способ сказать PIC (или устройству, если вы не знаете, что это за устройство): "Да, я получил ваше сообщение, но я не знаю, что с ним делать"?
2 ответа
PIC 8259a ожидает сигнала INTA от ЦПУ. Процессор отправляет его, когда начинает обрабатывать прерывание, передавая управление соответствующему ISR. Какой ISR? PIC передает вектор прерывания в CPU, который ищет IVT/IDT для адреса, а вы знаете остальное. PIC не будет предоставлять вектор прерывания, пока не получит INTA.
PIC 8259a имеет только одностороннюю связь с устройствами ввода / вывода. Они могут сказать, что у них есть прерывание, которое нуждается в обслуживании.
Итак, все в воздухе в PIC, если процессор не реагирует на прерывания. Однако устройства могут по своему желанию де-утверждать и затем повторно утверждать сигналы запроса прерывания. Я не знаю, что делать. Я также не знаю, какие есть временные требования для обслуживания прерываний.
Если вас не интересуют прерывания из определенного источника, вы можете просто замаскировать их, и вы их не получите. Если вы делаете прерывание, но не знаете, как его обработать, вы можете просто сообщить PIC, что вы обработали его. Это может оставить прерванное устройство в "замороженном" состоянии, ожидая, пока обслуживание не произойдет. Это также может привести к тому, что устройство будет поддерживать высокий уровень сигнала запроса на прерывание, что будет проблемой, если вы принимаете прерывания в режиме триггера уровня - вы будете постоянно получать прерывания.
Прерывания все еще срабатывают, но процессор не слушает. Когда вы начинаете слушать снова (sti
), сигнал все еще там и вступит в силу при первой возможности.
PIC для ПК имеет несколько уровней прерываний, и я считаю, что он может удерживать одно активное прерывание для каждого уровня приоритета. Он будет хранить каждый из них, пока процессор не сообщит ему, что соответствующая обработка завершена. Отключение прерываний в течение длительного периода времени, вероятно, сломает это, так что просто не делайте этого!
Устройство, отвечающее за прерывание, не получит никакого ответа во время ожидания - что-то вроде ответа в любом случае. Если он не может ждать, он может войти в какое-то состояние ошибки, которое увидит ЦП, когда он в конце концов появится.
Вы получите только те прерывания, которые вы явно включили, поэтому не должно быть никаких сюрпризов. Драйвер устройства, включающий прерывание, лучше знает, как с ним справиться.