2012-07-03 6 views
1

Я пытаюсь обработать поток управления прерывания, в частности, ошибку страницы, на процессоре x86. Вот что я могу выяснить до сих пор:Обработка прерываний для ошибок страницы для копий памяти служебных устройств в x86

  1. IDT заполняется служебными адресными адресами.
  2. Прерывание происходит.
  3. CPU сохраняет EFLAGS, CS и EIP в стек.
  4. EIP установлен в адрес ISR, извлеченный из IDT, то есть mov eip, [idtr+interruptNum*4]
  5. Выполняется процедура прерывания.
  6. Процедура прерывания завершается инструкцией iret.

Теперь предположим, что прерывание на самом деле является ошибкой страницы, связанной с буфером NIC. Будет ли ISR использовать out, чтобы сообщить контроллеру DMA о выдаче копии из системной памяти на устройство (или наоборот), или я отсюда?

+0

Нет, обработчик ошибок страницы отличается от драйвера устройства, который обрабатывает сетевой адаптер. DMA не вызывает сбоев страниц, он использует физическую память в непогружаемом пуле. –

+0

Я не имел в виду, что DMA вызывал ошибки страницы, я имел в виду, что ISR скажет контроллеру DMA копировать блок памяти из системной памяти (ОЗУ) на устройство. Возможно, мой вопрос был недостаточно объяснительным, я сделаю редактирование. – Polynomial

+0

Ой, подождите, теперь я понял. Таким образом, обработчик прерываний будет использоваться для сигнализации драйвера устройства, который затем делает все, что ему нужно для связи с устройством. В этом случае, как обычно делается сигнализация? У меня создается впечатление, что ISR предназначены для работы очень быстро, но драйвер устройства может потребоваться для работы с устройством совсем немного. Или линия прерывания будет немедленно очищена, чтобы могли произойти новые прерывания? – Polynomial

ответ

1

Я считаю, что вы неправильно понимаете, как работает ввод-вывод с памятью.

Когда устройство использует операции ввода-вывода с памятью, ему присваивается диапазон физических адресов. northbridge и/или southbridge, если необходимо, сконфигурированы так, что когда ЦП выполняет операции памяти в этом диапазоне адресов, операции направляются на устройство, а не в ОЗУ. В ОЗУ нет копии того же адресного пространства, и DMA не задействован.

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

Если устройство использует DMA вместо ввода-вывода с отображением памяти, все немного отличается. Драйвер устройства, как правило, зарезервировал для этой операции блок памяти, не относящийся к странице, поэтому снова не происходит никаких ошибок страницы. Эта память даже не должна отображаться в виртуальном адресном пространстве для выполнения операции DMA, поскольку контроллер DMA работает с физическими, а не виртуальными адресами. (Конечно, на каком-то этапе должно быть виртуальное адресное пространство, чтобы блок памяти мог быть прочитан/записан драйвером устройства.)

+0

Отличный ответ. Знаете ли вы какие-либо документы для дальнейшего чтения по этому вопросу? – Polynomial

+1

Только очевидные, Wikipedia и документация драйвера устройства Windows в библиотеке MSDN. У Intel, вероятно, есть подробные спецификации, доступные для их чипсетов, хотя я нашел, что их веб-сайт трудно ориентироваться. –

+0

Спасибо за помощь. Я буду копать. – Polynomial

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

  • Нет связанных вопросов^_^