Я пытаюсь обработать поток управления прерывания, в частности, ошибку страницы, на процессоре x86. Вот что я могу выяснить до сих пор:Обработка прерываний для ошибок страницы для копий памяти служебных устройств в x86
- IDT заполняется служебными адресными адресами.
- Прерывание происходит.
- CPU сохраняет EFLAGS, CS и EIP в стек.
- EIP установлен в адрес ISR, извлеченный из IDT, то есть
mov eip, [idtr+interruptNum*4]
- Выполняется процедура прерывания.
- Процедура прерывания завершается инструкцией
iret
.
Теперь предположим, что прерывание на самом деле является ошибкой страницы, связанной с буфером NIC. Будет ли ISR использовать out
, чтобы сообщить контроллеру DMA о выдаче копии из системной памяти на устройство (или наоборот), или я отсюда?
Нет, обработчик ошибок страницы отличается от драйвера устройства, который обрабатывает сетевой адаптер. DMA не вызывает сбоев страниц, он использует физическую память в непогружаемом пуле. –
Я не имел в виду, что DMA вызывал ошибки страницы, я имел в виду, что ISR скажет контроллеру DMA копировать блок памяти из системной памяти (ОЗУ) на устройство. Возможно, мой вопрос был недостаточно объяснительным, я сделаю редактирование. – Polynomial
Ой, подождите, теперь я понял. Таким образом, обработчик прерываний будет использоваться для сигнализации драйвера устройства, который затем делает все, что ему нужно для связи с устройством. В этом случае, как обычно делается сигнализация? У меня создается впечатление, что ISR предназначены для работы очень быстро, но драйвер устройства может потребоваться для работы с устройством совсем немного. Или линия прерывания будет немедленно очищена, чтобы могли произойти новые прерывания? – Polynomial