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


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

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

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

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

¨ коммутатор прерывания (interrupt gate);

¨ коммутатор перехвата (trap gate);

¨ коммутатор задачи (task gate).

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



Дата добавления: 2022-02-05; просмотров: 261;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.