Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Но что делать если устройств много? На все внешние устройства ножек процессора не напасёшься.
прерывания ISA не разделяемые
Верно, а почему они так поступали? Потому что для правильного взаимодействия все обработчики на одной линии должны вызываться в цикле до тех пор, пока каждый из них не определит, что "его" устройство больше не выставляет запрос на прерывание. Только так можно гарантировать, что следующий запрос пойдет фронтом сигнала. В рамках MS/DOS реализовать такое взаимодействие очень сложно. Я уже не говорю про другие тонкости, например, чтобы 8259A поймал сигнал запроса, перед фронтом сигнала необходим некоторый промежуток “тишины“.
Спасибо за статью. Настраивал в qemu/kvm прямой доступ к GPU из гостя и говорили что MSI значительно уменьшает издержки на прерывания. Из статьи становится немного понятней почему.
По сигналу подтверждения прерывания она выдавала на шину три байта, первый соответствовал коду операции «Вызов подпрограммы» (значение 0xCD в шестнадцатеричной системе), затем два байта адреса вызова этой подпрограммы, которые нужно было записать в соответствующие каждому источнику прерывания внутренние регистры контроллера. Для процессоров семейства x86 была выпущена микросхема 8259A, так как механизм передачи управления изменился.
Прерывания от внешних устройств в системе x86. Часть 1. Эволюция контроллеров прерываний