![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
В защищенном режиме работы система прерываний действует совершенно иначе. Прежде всего, система прерываний микропроцессора 180x86 при работе в защищенном режиме вместо таблицы векторов, о которой мы говорили выше, имеет дело с таблицей дескрипторов прерываний (IDT, interrupt descriptor table). Дело здесь не столько в названии таблицы, сколько в том, что таблица IDT представляет собой не таблицу с адресами обработчиков прерываний, а таблицу со специальными системными структурами данных (дескрипторами), доступ к которой со стороны пользовательских (прикладных) программ невозможен. Только сам микропроцессор (его система прерываний) и код операционной системы могут получить доступ к этой таблице, которая представляет собой специальный сегмент, адрес и длина которого содержатся в регистре IDTR (см. рис. 3.2). Этот регистр аналогичен регистру GDTR в том отношении, что он инициализируется один раз при загрузке системы. Интересно заметить, что в реальном режиме работы регистр IDTR так же указывает адрес таблицы прерываний, но при этом, как и в процессоре 18086, каждый элемент таблицы прерываний (вектор) зани-
![]() |
мает всего 4 байта и содержит 32-битный адрес в формате селекторхмещение (CS:IP). Начальное значение этого регистра равно нулю, но в него можно занести и другое значение. В этом случае таблица векторов прерываний будет находиться в другом месте оперативной памяти. Естественно, что перед тем, как это сделать (занести в регистр IDTR новое значение), необходимо подготовить саму таблицу векторов. В защищенном режиме работы загрузку регистра IDTR может произвести только код с максимальным уровнем привилегий.
Каждый элемент в таблице дескрипторов прерываний, о которой мы говорим уже в защищенном режиме, представляет собой 8-байтовую структуру, более похожую на дескриптор шлюза (gate), нежели на дескриптор сегмента.
Как мы уже знаем, в зависимости от причины прерывания процессор автоматически индексирует таблицу прерываний и выбирает соответствующий элемент, с помощью которого и осуществляется перенаправление в исполнении кода, то есть передача управления на обработчик прерывания. Однако таблица IDT содержит только шлюзы, а не дескрипторы сегментов кода, поэтому фактически получается косвенная адресация, но с использованием рассмотренного ранее механизма защиты с помощью уровней привилегии. Благодаря этому пользователи уже не могут сами изменить обработку прерываний, которая предопределяется системным программным обеспечением.
Дескриптор прерываний может принадлежать к одному из трех типов:
Q коммутатор прерывания (interrupt gate); Q коммутатор перехвата (trap gate); Q коммутатор задачи (task gate).
При обнаружении запроса на прерывание и при условии, что прерывания сейчас разрешены, процессор действует в зависимости от типа дескриптора (коммутатора), соответствующего номеру прерывания. Первые два типа дескриптора прерываний вызывают переход на соответствующие сегменты кода, принадлежащие виртуальному адресному пространству текущего вычислительного процесса. Поэтому про них говорят, что обработка прерываний по этим дескрипторам осуществляется под контролем текущей задачи. Последний тип дескриптора — коммутатор задачи — вызывает полное переключение процессора на новую задачу со сменой всегр контекста в соответствии с сегментом состояния задачи (TSS). Рассмотрим эти варианты.
Дата публикования: 2015-01-23; Прочитано: 890 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!