Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METOD_UKAZ_KURS.DOC
Скачиваний:
9
Добавлен:
04.04.2013
Размер:
2.07 Mб
Скачать

2.4. Прерывания и исключения

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

Прерыванияподразделяются на аппаратные (маскируемые и немаскируемые), вызываемые электрическими сигналами на входах процессора, и программные.

Исключения, или особые случаи, подразделяются на отказы, двойные отказы, ловушки и аварийные завершения. Различия заключаются в сохраняемых значениях регистровCS[0:15] и ЕIP[0:31].

В защищенном режиме наиболее часто встречаются следующие условия работы процессора, порождающие исключения.

Табл. 7.

Примеры исключений.

Название

Условие возникновения

#PF

Отказ страницы

#SS

Нарушение границ или отсутствие сегмента стека

#GP

Превышение лимита таблицы дескрипторов или лимита сегмента

2.5. Основные понятия Защищенного режима работы процессора

Защищенный режим предназначен для обеспечения независимости выполнения нескольких задач, что подразумевает защиту ресурсов одной задачи от возможного воздействия другой (под задачами подразумеваются как приложения, так и задачи операционной системы). Основным защищаемым ресурсом является память, в которой хранятся коды, данные и различные системные таблицы. Защищать требуется и совместно используемую аппаратуру, обращение к которой обычно происходит через операции ввода/вывода и прерывания, В защищенном режиме процессор аппаратно реализует многие функции защиты, необходимые для построения супервизора многозадачной ОС, в том числе механизм виртуальной памяти.

Защита памяти основана на сегментации. Защита памяти с помощью сегментации не позволяет:

  • использовать сегменты не по назначению (например, пытаться трактовать область данных как коды инструкций);

  • нарушать права доступа (пытаться модифицировать сегмент, предназначенный только для чтения и т. п.);

  • адресоваться к элементам, выходящим за лимит сегмента;

  • изменять содержимое таблиц дескрипторов (то есть параметров сегментов), не имея достаточных привилегий.

В защищенном режиме сегменты распределяются ОС, прикладная программа может использовать только разрешенные для нее сегменты памяти, выбирая их с помощью селекторов из предварительно сформированных таблиц дескрипторов сегментов (GDTилиLTD).

Глобальная таблица (GDT) содержит дескрипторы, доступные всем задачам. Она может содержать дескрипторы любых типов, кроме дескрипторов прерываний и ловушек. Нулевой элемент этой таблицы процессором не используется. Локальная таблица (LDT) может быть собственной для каждой задачи и содержит только дескрипторы сегментов, шлюзы задач и вызовов. Сегмент недоступен задаче, если его дескриптора нет в текущий момент ни вGDT, ни вLDT.

Выбор локальной (LDT) или глобальной (GDT) таблицы определяется по значению битаTIселектора, а положение (номер) дескриптора в таблице задается 1З-разрядным полемINDEXселектора (формат селектора приведен на рис. 3). Размеры таблиц могут находиться в пределах 8 байт - 64 Кбайт, что соответствует числу элементов в таблице от 1 до 213 (по 8 байт каждый) С каждой из этих таблиц связан соответствующий регистр процессора:GDTсоответствует регистрGDTR, аLDT- регистрLDTR(см. раздел 2.1).

После выбора дескриптора (из GDTилиLDT) в скрытые регистры дескрипторов, связанные с каждым сегментным регистром, из дескриптора копируются поля базового адреса, лимита и атрибутов сегмента.

Затем, хранящийся в SDCбазовый адрес складывается с эффективным адресом (16 или 32). Это и будет линейный адресLA, который затем может быть передан в блок страничной переадресации.

Рис. 2. SDC (Segment Descriptor Cache).

Например, при 32-бинтой адресации вычисление линейного адреса выглядит так: LA=SDC[64:95]=SDC[64:95]+EA[0:31]

Регистр GDTRимеет программно-доступное 16-разрядное поле лимита, задающее размер таблицы, и 32-разрядное поле базового адреса, определяющее положение таблицы в пространстве линейных адресов памяти. У регистраLDTRпрограммно доступно только 16-разрядное поле селектора, по которому изGDTавтоматически загружаются программно-недоступные и невидимые поля базового адреса и лимита.

Процессор может обращаться только к тем сегментам памяти, для которых имеются дескрипторы в таблицах. Механизм сегментации формирует линейный адрес по схеме, приведенной на рис. 3.

Рис. 3. Формирование линейного адреса в защищенном режиме.

Индекс совместно с индикатором таблицы ТIпозволяет выбрать дескриптор из локальной (ТI=1) или глобальной (ТI=0) таблицы дескрипторов. Для неиспользуемых сегментных регистров предназначен нулевой селектор сегмента, формально адресующийся к самому первому элементу глобальной таблицы. Попытка обращения к памяти по такому сегментному регистру вызовет исключение #GP. Исключение возникнет и при попытке загрузки нулевого селектора в регистрCS[0:15] или SS[0:15], а также при ссылке на дескриптор, выходящий за рамки сегмента.

Дескрипторы(рис. 4) представляют собой 8-байтные структуры данных, используемые для определения свойств программных элементов (сегментов). Дескриптор определяет положение элемента в памяти, размер занимаемой им области (лимит), его назначение и характеристики защиты. Все дескрипторы хранятся в таблицах, обращение к которым поддерживается процессором аппаратно. При значении бита Р=1 сегмент отображен в физической памяти, при Р=0 отображения нет, и поля базового адреса и лимита не используются. БитDопределяет разрядность адресов и операндов по умолчанию:D=0 – 16 бит,D=1 – 32 бит

Рис. 4. Дескриптор сегмента.

Соседние файлы в предмете Организация ЭВМ