Ведение два класса ЭВМ. Принцип действия ЭВМ

Вид материалаДокументы

Содержание


Регистр таблицы глобальных дескрипторов GDTR
Регистр таблицы локальных дескрипторов LDTR
Регистр таблицы дескриптора прерываний IDTR
Сохранение регистра GDT
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   14

AVL - Доступно для использования системным программным обеспечением

BASE - Базовый адрес сегмента

DPL - Уровень привилегированности дескриптора

S - Тип дескриптора (0=системный; 1=прикладной)

G - Грануляция

Граница сегмента

P - Присутствие сегмента

TYPE - Тип сегмента

D - Размер операции по умолчанию

(Распознается только в дескрипторах кодового сегмента: 0=16-битовый размер; 1=32-битовый размер)

Граница: Определяет размер сегмента. Процессор помещает рядом два поля границы сегмента, в совокупности образующих одно 20-разрядное значение. Процессор интерпретирует границу одним из двух следующих способов, в зависимости от установки бита грануляции:

1. Если бит грануляции очищен, то граница может принимать значения от 1 байта до 1 мегабайта, с приращениями в один байт.

2. Если бит грануляции установлен, то граница может принимать значения от 4 Килобайт до 4 Гигабайт, с приращениями в 4 Кб.

Для большинства сегментов логический адрес может иметь значение смещения в диапазоне от 0 до значения границы. Прочие значения ведут к генерации исключений. Сегменты с расширением вниз изменяют смысл поля граница на противоположный: они позволяют адресацию любыми значениями смещения, кроме значений от 0 до значения границы (см. описание поля Типа, приводимое ниже). Это позволяет создавать сегменты, для которых увеличение значения поля Границы приводит к распределению новой памяти в нижней части адресного пространства, вместо верхней. Сегменты с расширением вниз предназначены для хранения стеков, но использовать их не обязательно. Если стек должен быть помещен в сегмент, который не будет изменять свой размер, то таким сегментом может быть обычный сегмент данных.

Бит S: Определяет, является ли этот сегмент системным сегментом, или же сегментом кода или данных. Если бит S установлен, то сегмент является либо кодовым сегментом, либо сегментом данных. Если этот бит очищен, то сегмент является системным сегментом.

Бит D: Указывает длину операндов и исполнительных адресов сегмента по умолчанию. Если бит D установлен, то предполагается режим 32-разрядных операндов и 32-разрядных исполнительных адресов. Если этот бит очищен то предполагается использование 16-разрядных операндов и адресов.

Тип: Интерпретация этого поля зависит от того, относится ли данный дескриптор к прикладному, или же к системному сегменту. Поле Типа дескриптора памяти задает тип доступа, разрешенного к данному сегменту, а также направление, в котором этот сегмент растет


Таблица 5-1. Типы прикладных сегментов

Число

E

W

A


Тип дескриптора

Описание


0 0 0 0 Данные Только чтение

1 0 0 1 Данные Только чтение, выполнен доступ

2 0 1 0 Данные Чтение/запись

3 0 1 1 Данные Чтение/запись, выполнен доступ

4 1 0 0 Данные Только чтение, расширение вниз

5 1 0 1 Данные Только чтение, расширение вниз,выполнен доступ

6 1 1 0 Данные Чтение/запись, расширение вниз

7 1 1 1 Данные Чтение/запись, расширение вниз, выполнен доступ


Число

C

R

A

Тип дескриптора

Описание


8 0 0 0 Код Только выполнение

9 0 0 1 Код Только выполнение, выполнен доступ

10 0 1 0 Код Выполнение/чтение

11 0 1 1 Код Ваполнение/чтение, выполнен доступ

12 1 0 0 Код Только выполнение, конформный

13 1 0 1 Код Только выполнение, конформный,

выполнен доступ

14 1 1 0 Код Выполнение/только чтение, конформный

15 1 1 1 Код Выполнение/только чтение, конформный, выполнен доступ

Для сегментов данных три младших бита поля типа можно интерпретировать как признаки расширения вниз (E), разрешения записи (W) и того, что к сегменту был выполнен доступ (A). Для кодовых сегментов три младших бита поля типа можно интерпретировать как признак конформности (C), разрешения чтения (R) и выполненного доступа (A).

Сегменты данных могут быть предназначены только для чтения или для чтения/записи. Загрузка регистра SS селектором сегмента для любого другого типа сегмента генерирует исключение общей защиты. Если стековому сегменту требуется иметь возможность изменять размер, то ему может быть назначен сегмент данных с типом расширения вниз. Для сегмента с расширением вниз смысл поля Границы меняется на противоположный. Если для других типов сегмента допустимыми являются значения смещения в диапазоне от 0 до значения границы (вне этого диапазона генерируется исключение общей защиты), то для сегмента с расширением вниз значения в этом диапазоне, напротив, ведут к генерации исключения. Допустимыми смещениями для сегментов с расширением вниз являются те, что для сегментов других типов вызывают особую ситуацию. Сегменты с расширением вверх должны адресоваться смещениями, меньшими или равными границе сегмента. Смещения же в сегменты с расширением вниз всегда должны превышать значение границы сегмента. Такая интерпретация границы сегмента вызывает распределение области памяти в нижней части сегмента, когда граница сегмента увеличивается, что является правильным для стековых сегментов, поскольку они растут в направлении младшего адреса. Если стек помещается в сегменте, который не меняет своего размера, то этот сегмент не обязан быть сегментом с расширением вниз.

Кодовые сегменты могут быть предназначены только для выполнения, либо для выполнения/чтения. Сегмент с типом "выполнение/чтение" может быть использован, например, когда в команды кода в ПЗУ помещены константы. В данном случае константы могут быть прочитаны либо при помощи команды, имеющей префикс переопределения сегмента CS, либо при помощи помещения селектора данного кодового сегмента в сегментный регистр для сегмента данных.

Кодовые сегменты могут быть либо конформными, либо не конформными. Переход выполнения в более привилегированный конформный сегмент сохранит текущий уровень привилегированности. Переход выполнения в не конформный сегмент с другим уровнем привилегированности приведет к генерации исключения общей защиты, если не использован шлюз задачи. Системные утилиты, не обращающиеся к средствам защиты, такие как функции транслирования данных (например, перекодировка EBCDIC/ASCII, кодирование / декодирование по методу Хаффмана, библиотека математических функций), а также некоторые типы исключений (например, ошибка деления на ноль, переполнение, обнаруженное при помощи INTO или превышение диапазона BOUND) могут быть загружены в конформные кодовые сегменты.

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

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

Процессор может обновлять поле Типа при доступе к сегменту, даже если доступ этот произошел в цикле чтения. Если таблицы дескрипторов были помещены в ПЗУ, аппаратному обеспечению может потребоваться запретить связь ПЗУ с шиной данных во время цикла записи. Также может потребоваться возвратить сигнал READY# процессору в цикле записи в ПЗУ; в противном случае не произойдет завершение этого цикла. Эти средства аппаратной конструкции необходимы для использования ПЗУ резидентных таблиц дескрипторов с процессором 386 DX, который всегда устанавливает бит Доступа при загрузке дескриптора сегмента. Однако, процессор i486 только в том случае, если он еще не установлен. Избежать попытки записи в таблицы дескрипторов в ПЗУ можно, установив биты Доступа в каждом дескрипторе.

DPL (Уровень привилегированности дескриптора): Определяет уровень привилегированности сегмента. Используется для управления доступом к сегменту при помощи механизма защиты.

Бит присутствия сегмента: Если этот бит очищен, то процессор при загрузке в сегментный регистр селектора данного дескриптора генерирует исключение "сегмент не присутствует". Это свойство используется для обнаружения попыток доступа к сегментам, которые стали недоступными. Сегмент может стать недоступным, когда системе понадобилось создать свободную память. Для элементов памяти, таких как символьные шрифты или драйверы устройств, в тех случаях, когда они в текущий момент не используются, выполняется отмена распределения памяти. Отмена распределения памяти такому элементу выполняется маркировкой такого сегмента как "не присутствующего" (это выполняется при помощи очистки бита присутствия сегмента). После этого память, занимаемая данным сегментом, может быть распределена для другого использования. Когда элемент, для которого было отменено распределение памяти, понадобится в следующий раз, исключение "сегмент не присутствует" укажет на то, что необходимо снова загрузить этот сегмент в память. Если такого рода организация памяти выполняется способом, не видимым для прикладных программ, то она называется "виртуальной памятью". Система может работать с общим размером виртуальной памяти, значительно превышающим физическую память, благодаря тому, что одновременно в физической памяти присутствует только несколько сегментов.


Регистр таблицы глобальных дескрипторов GDTR

Этот регистр содержит 32-битовый базовый адрес и 16-битовую границу сегмента для таблицы глобальных дескрипторов (GDT). При ссылке на данные в памяти для того, чтобы найти дескриптор сегмента в GDT или LDT используется селектор сегмента. Дескриптор сегмента содержит базовый адрес сегмента.


Регистр таблицы локальных дескрипторов LDTR

Этот регистр содержит 32-битовый базовый адрес, 16-битовую границу сегмента и 16-битовый селектор сегмента для таблицы локальных дескрипторов (LDT). Сегмент, который содержит LDT, имеет соответствующий дескриптор сегмента в GDT. Дескриптора сегмента для GDT не существует. При ссылке на данные в памяти для того, чтобы найти дескриптор сегмента в GDT или LDT используется селектор сегмента. Дескриптор сегмента содержит базовый адрес сегмента.


Регистр таблицы дескриптора прерываний IDTR

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


Регистр задачи TR

Этот регистр содержит 32-разрядный базовый адрес, 16-разрядную границу сегмента, аттрибуты дескриптора и 16-разрядный селектор сегмента для текущей выполняемой задачи. Он содержит ссылку на дескриптор сегмента состояния задачи (TSS), находящийся в таблице глобального дескриптора.


2. Адресация таблиц дескриптора

Команда

Описание


Полезна в прикладных программах?

Защищена от прикладных программ?

LLDT

SLDT

LGDT

SGDT

Загрузка регистра LDT

Сохранение регистра LDT

Загрузка регистра GDT

Сохранение регистра GDT


Да

Да

Нет

Нет

Нет

Нет

Да

Нет