Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Назначение дескрипторов и шлюзов



Дескрипторы и шлюзы.

Таблица дескрипторов прерываний в любой системе одна. IDT на нулевом уровне привилегий, следовательно непосредственно к ней обращаться могут только программы работающие на том же уровне. Для того, чтобы в программы других уровней могли пользоваться прерываниями, предусмотрены специальные системные объекты, так называемые шлюзы (gates). При вызове прерывания процессор прежде чем передать управление обработчику опускается через шлюз на его уровень привилегий, а после завершения обработки, поднимается обратно. IDT может содержать 3 типа дескрипторов шлюза: шлюз задачи, шлюз прерывания и шлюз ловушки. Шлюзы содержат указатели на обработчики прерываний и права доступа к ним. При переходе через шлюз задач, процессор производит автоматическое переключение задач. А при переходе через шлюз прерывания или ловушки, передает управление процедуре в контексте текущей программы. Единственное отличие прерывания от ловушки в том, что при переходе через шлюз прерывания, процессор автоматически сбрасывает флаг IF в EFLAGS и не допускает генерации других прерываний и исключений на время работы обработчика. Для шлюза ловушки состояние флага не меняется. Ловушки используются для отладки программ, поэтому обработка ловушки должна быть прозрачна для внешних прерываний. Исключения и прерывания работают в основном через 2 типа шлюзов: задач и прерываний. Шлюз прерываний запускает обработчик в контексте текущей программы, то есть просто передает управление по адрес, указанному в дескрипторе, такой подход хорош в простых операционных системах, когда работают заранее определенные программы, от которых не нужно защищать ядро ОС. Шлюз задачи является более удобным и универсальным, так как позволяет изолировать обработчик от других программ и его рекомендуется применять в системах, где программы потенциально могут нарушать целостность ОС. Шлюз задачи заставляет процессор автоматически переключаться на новую задачу при генерации исключения.

Исключения делятся на 3 типа в зависимости от условий их возникновения:

- ошибка

- ловушка

- авария

Ошибка – это исключение, возникающее в ситуации ошибочных действий программы, при этом подразумеваются, что такую ошибку можно исправить. Такой тип исключения позволяет рестарт виноватой команды после исправления ситуации, для чего в стеке обработчика адрес возврата из прерывания указывает на команду, вызвавшую исключение. Примером такого исключения может быть исключение неприсутствующего сегмента, благодаря этому реализуется механизм виртуальной памяти, в частности подкачка данных с диска.

Ловушка – это исключение, возникающее сразу после выполнения отлавливаемой команды. Это исключение позволяет продолжить выполнение программы со следующей команды, то есть без рестарта виноватой. На ловушках строится механизм отладки программы.

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

Все дескрипторы прерываний исключений объединяются в одну таблицу IDT. Сама IDT может располагаться в памяти по любому адресу и состоять из любого числа дескрипторов в пределах от 0 до 256. В отличие от GDT, IDT пользуется нулевым вектором. Для неиспользуемых векторов бит P дескриптора должен быть равен нулю. Тогда при попытке обращения к нему, процессор будет генерировать исключение неприсутствующего сегмента и ОС сможет корректно обработать неиспользуемое прерывание, в противном случае, скорее всего, возникнет другое исключение, тип которого заранее предусмотреть невозможно. Если произойдет обращение к вектору прерывания дескриптор которого должен находиться за пределами IDT, то процессор сгенерирует исключение общей защиты. Параметры IDT, то есть адрес и предел процессор хранит в специальном 48-разрядном регистре IDTR.

Адрес – это тот адрес, по которому размещенаIDT.

Предел – максимальное смещение относительно начала IDT.

Подготовка и запись значения IDTR аналогична действиям для GDTR.

Программа, работающая не на нулевом уровне привилегий, может получить адрес и предел IDT. И только от ОС зависит, разрешит ли она доступ непривилегированным программам к IDT.





Дата публикования: 2015-01-24; Прочитано: 663 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...