Защита сегментов производится с помощью мандатов и доступов. Дескриптор является мандатом, который помимо точки входа в таблицу отображения, содержит требуемый доступ к сегменту. В таблице отображения указывается разрешенный доступ к сегменту. В случае их не противоречия друг к другу разрешается обращение к сегменту.
Каждый объект разделен на 2 части: системная часть и пользовательская часть. В системной части записываются мандаты (дескрипторы) для доступа к составляющим этот объект сегментам. Т.е. системная часть состоит из последовательности дескрипторов или мандатов для доступа, причем для одного и того же сегмента они могут быть разные: один сегмент может быть описан с разрешением записи. Другой сегмент может быть описан только с разрешением чтения, а третий сегмент может быть описан с разрешением только проверки о его наличии. Один и тот же сегмент может иметь несколько дескрипторов в таблице отображения.
Рис. 5.3. Использование мандатов
Типы данных (объектов). В разных системах поддерживается разное число типов и названия, но основных 3:
1. Домен – это постоянная часть программы.
2. Контекст (запись активации) – сегмент, обеспечивающий повторную входимость в процедуру, функцию (реентерабельность). Фактически это стек процедуры и локальные статические данные процедуры. Здесь создается стек метода и статические данные метода, для того, чтобы обеспечить повторную входимость, чтобы параллельно один и тот же домен могли использовать различные программы. Запись активации фактически создается при вызове метода и удаляется, когда метод завершил работу.
3. Процесс представляет собой набор объектов, необходимых для создания, выполнения и завершения процесса. Состоит из объектов типа «память», где память есть домен, который описывает временно выделяемую область; объектов, составляющих процесс (домен для кода, несколько записей архивации); контекста (записи архивации процесса); глобальные данные и т.д. Это защищаемая область адресного пространства, где описаны доступы, дескрипторы или мандаты для других сегментов. Тип объекта хранится внутри дескриптора. Системой аппаратно поддерживается (контролируется) различные типы доступа для различных объектов.
Домен защиты (Д) определяет тип операций, применимых к данному сегменту через данный дескриптор.
Типы доменов защиты:
1. Выполняемый (E);
2. Чтение (R);
3. Запись (W).
В связи с тем, что с использованием одного и того же дескриптора или мандата происходит последовательно несколько обращений, и каждый раз этот мандат должен размениваться через дескрипторную таблицу, придумали хитрость: сказано, что мандат или дескриптор может находиться в одном из сегментных регистров (CS, SS, DS, ES, FS, GS). Эти сегментные регистры имеют размер, равный размеру дескриптора какого-то сегмента или объекта. Т.е. в сегментных регистрах содержится дескриптор, и вы обращаетесь к сегменту относительно дескриптора, но на самом деле в дескрипторе хранится не адрес, а номер входа в таблицу дескрипторов. Адрес сегмента в памяти называется базой, длина сегмента называется размером.
При обращении к сегменту через сегментный регистр читается дескрипторная таблица, потом в команде вычисляется смещение относительно начала сегмента, с этим базовым адресом происходит сложение и обращается к области физической памяти. Значит, каждое обращение к памяти сопровождается обращением к памяти. Получается абсурд. Чтобы решить эту проблему, придумали хитрость: каждый сегментный регистр имеет теневой регистр с размером элемента таблицы отображения и фактически адрес сегмента, размер сегмента и т.д. хранится внутри процессора. Как только перезагружается сегментный регистр, процессор, зная адрес дескрипторной таблицы извлекает 64-битное слово и записывает его в теневой регистр. Адрес дескрипторной таблицы хранится в специальном регистре GDT, размером 64 бита, т.е. физический адрес хранится в таблице отображения и поэтому, как только меняется содержимое сегментного регистра, запускается программа, которая попадает в таблицу по заданному новому смещению (по новой точке входа в таблицу). Таким образом, всегда поддерживается соответствие сегментного регистра и теневого.