http://npc-news.ru/

Таблица прерываний защищённого режима

Таблица прерываний защищённого режима является таблицей дескрипторов, которая
содержит так называемые вентили прерываний, вентили исключений и вентили задач.
Таблица прерываний защищённого режима называется дескрипторной таблицей
прерываний IDT (Interrupt Descriptor Table).

В защищённом режиме перед передачей управления процессор производит множество проверок возможности
доступа к обработчику прерывания — обеспечивает защиту. Таблица дескрипторов
прерываний (IDT) в любой системе — одна. Программ (задач, процедур, приложений
и пр.) — много. IDT реализуется на нулевом уровне привилегий и, следовательно,
непосредственно к ней обратиться могут только программы, работающие на том же
уровне. Для того, чтобы программы с других уровней (1, 2 и 3) могли пользоваться
прерываниями, предусмотрены специальные системные объекты — так называемые
шлюзы (gates). При вызове прерывания, процессор, прежде, чем передать
управление обработчику, «опускается» через шлюз на его уровень привилегий,
а после завершения обработки — «поднимается» обратно.
IDT может содержать три типа дескрипторов шлюзов:

Шлюз задачи
Шлюз прерывания
Шлюз ловушки

Шлюзы содержат указатели на обработчики прерываний и права доступа к ним.
При переходе через шлюз задачи, процессор производит автоматическое
переключение задач, а при переходе через шлюз прерывания или ловушки передаёт
управление процедуре в контексте текущей программы. Единственное отличие
прерывания от ловушки в том, что при переходе через шлюз прерывания процессор
автоматически сбрасывает флаг IF в EFLAGS и тем самым не допускает генерации
других прерываний и исключений на время работы обработчика, а для шлюза
ловушки — не меняет состояние флага IF. Ловушки используются для отладки
программ и поэтому обработка ловушки должна быть прозрачна для внешних
прерываний.

Исключения и прерывания работают в основном через два типа шлюзов — задач и
прерываний. Шлюз прерывания запускает обработчик в контексте текущей
программы, т.е. просто передаёт управление по адресу, указанному в дескрипторе.
Шлюз задачи является более удобным и универсальным, т.к. позволяет изолировать
обработчик от других программ и его рекомендуется применять в системах,
где программы потенциально могут нарушить целостность ОС.

В этой таблице применяются следующие обозначения:

  • Номер вектора — номер вектора прерывания, на которое отображено исключение.
  • Название — используется в документации Intel и состоит из заглавных букв
    английского названия исключения, например, #DE — Divide Error.
  • Error code — наличие dw-кода ошибки, который процессор добавляет в стек
    обработчика перед передачей ему управления.

Итак, для того, чтобы определить прерывания в защищённом режиме, нужно выполнить следующие действия:
1. Перенаправить аппаратные прерывания (IRQ)
2. Создать дескрипторы для всех используемых векторов (исключений, аппаратных и программных прерываний).
3. Подготовить образ IDTR и загрузить его в регистр IDTR.
4. Разрешить прерывания


Добавить комментарий

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>