Путаница в таблице дескрипторов пользовательских прерываний - PullRequest
3 голосов
/ 26 июля 2011

Я пишу небольшую ОС, которая работает в защищенном режиме.Я подхожу к моменту, когда хочу загрузить таблицу дескрипторов пользовательских прерываний, и я не знаю, с чего начать.Я прочитал кое-что о вики OS Dev , но есть несколько вопросов, на которые мне нужно ответить.

В вики OS Dev сказано, что the first 32 (0-31) interrupts are reserved and used by the CPU, as exceptions, so don't use those for APIs or IRQs. Дело в том, чтоЕсли я загружаю свою пользовательскую таблицу прерываний, разве я не должен предоставлять записи для всех этих прерываний?

Кроме того, вики утверждает, что BIOS отображает IRQ0-7 на прерывания 8-15.Если это так, разве прерывания IRQ не конфликтуют с зарезервированными прерываниями?

Есть ли что-то, чего я не получаю?Прерывания 0-31 в отдельной таблице или что-то еще?Кто-нибудь, пожалуйста, укажите мне правильное направление и проясните ситуацию.

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

Когда написано don't use those [interrupts 0-31] for APIs or IRQs, это означает, что вы не должны использовать их для функций, отличных от исключений, для которых они зарезервированы.Вам нужно определить обработчики для этих прерываний, чтобы вы могли обрабатывать исключения, когда они возникают.См. Страница исключений OSDev для получения списка исключений с их номером прерывания и описанием.

Когда процессор запускается, он находится в реальном режиме.В этом режиме исключений меньше, поэтому для их обработки зарезервировано меньше прерываний.Пока процессор находится в реальном режиме, безопасно использовать прерывания 8-15 для прерываний.Перед тем, как включить прерывания в защищенном режиме, необходимо переназначить IRQ на разные прерывания.Информацию о том, как это сделать, см. В разделе Инициализация из PIC OSDev (программируемый контроллер прерываний).

0 голосов
/ 26 июля 2011

первые 32 (0-31) прерывания зарезервированы и используются ЦП, как исключения, поэтому не используйте их для API или IRQ.

Это касается ВОЗможет испустить прерывание.0-31 для событий самого ЦП (внутренних, например, сбоя страницы, деления на ноль ...), а других для внешних событий (инициируемых аппаратными средствами, например, нажатие клавиатуры, прерывание pci и т. Д.).Это не про IDT.Вы должны предоставить все прерывания в таблице.

...