Почему завершение прерывания для главного изображения может вызвать тройную ошибку (перезагрузку)?
Вопрос
Хорошо, в школе мы разрабатываем операционную систему.Мой проект заключался в разработке драйвера жесткого диска ATA.Я думал, что моя процедура обслуживания прерываний работает достаточно хорошо, когда мой профессор указал, что я отправляю команды окончания прерывания только подчиненному PIC, а не ведущему.
Моя проблема в том, что всякий раз, когда я отправляю сообщение об окончании прерывания на главный РИС, это вызывает тройную ошибку, которая затем приводит к перезагрузке моей системы.Теперь я откомментировал кучу строк, и кажется, что всякий раз, когда в коде остается функция отправки сообщения об окончании прерывания на главный рисунок, я получаю тройную ошибку.
Теперь я совершенно уверен в следующем:
- прерывания отключаются при вводе моего ISR
- Я правильно отправляю байт окончания прерывания (класс протестирован)
- Я не подтверждаю повторно одно и то же прерывание
Это вызвало огромное разочарование, поэтому я надеюсь, что кто-нибудь сможет дать мне некоторые рекомендации без необходимости просмотра нашего кода.
Спасибо!
Решение
Я могу только догадываться об этом.Вот некоторые вещи, которые нужно проверить.
- Выходит ли ВЗ за пределы лимита вашего сегмента?
- Находится ли ВЗ на странице, доступной только для чтения?
- Имеет ли ваш обработчик прерываний правильный уровень привилегий для доступа к EOI?
- Используете ли вы правильный сегментный регистр?
Любой из них может привести к неисправности.Это, в свою очередь, может вызвать двойную или тройную ошибку, если таблицы дескрипторов либо повреждены, либо изначально были неправильно настроены.