Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SysSoft.doc
Скачиваний:
519
Добавлен:
16.03.2016
Размер:
4.36 Mб
Скачать

Работа системы прерываний в защищённом режиме работы процессора

В защищённом режиме работы система прерываний действует совершенно ина­че. Прежде всего, система прерываний микропроцессора i80x86 при работе в защищённом режиме вместо таблицы векторов, о которой мы говорили выше, име­ет дело с таблицейдескрипторов прерываний(IDT,interruptdescriptortable). Дело здесь не столько в названии таблицы, сколько в том, что таблица IDT пред­ставляет собой не таблицу с адресами обработчиков прерываний, а таблицу со специальными системными структурами данных (дескрипторами), доступ к ко­торой со стороны пользовательских (прикладных) программ невозможен. Толь­ко сам микропроцессор (его система прерываний) и код операционной системы могут получить доступ к этой таблице, которая представляет собой специальный сегмент, адрес и длина которого содержатся в регистреIDTR(см. рис. 3.2). Этот регистр аналогичен региструGDTRв том отношении, что он инициализируется один раз при загрузке системы. Интересно заметить, что в реальном режиме ра­боты регистр IDTR так же указывает адрес таблицы прерываний, но при этом, как и в процессореi8086, каждый элемент таблицы прерываний (вектор) занимает всего 4 байта и содержит 32-битный адрес в формате селектор: смещение (CS:IP). Начальное значение этого регистра равно нулю, но в него можно зане­сти и другое значение. В этом случае таблица векторов прерываний будет нахо­диться в другом месте оперативной памяти. Естественно, что перед тем, как это сделать (занести в регистр IDTR новое значение), необходимо подготовить саму таблицу векторов. В защищённом режиме работы загрузку регистра IDTR может произвести только код с максимальным уровнем привилегий.

Каждый элемент в таблице дескрипторов прерываний, о которой мы говорим уже в защищённом режиме, представляет собой 8-байтовую структуру, более по­хожую на дескриптор шлюза (gate), нежели на дескриптор сегмента.

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

Дескриптор прерываний может принадлежать к одному из трех типов:

 коммутатор прерывания (interruptgate);

 коммутатор перехвата (trapgate);

 коммутатор задачи (taskgate).

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]