Встроенные средства защиты. Принципы модульности и перемещаемости. Проверка привилегированности сегмента, страница 14

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

В отличие от многих компьютеров в дескрипторах процессора 80х86 отсутствует бит модификации, показывающий, была ли фактически выполнена запись в сегмент с разрешенной записью после его передачи в память. Если такой сегмент удаляется из памяти и он не был модифицирован, то физически записывать его на диск нет необходимости. Эффекта наличия бита модификации можно достичь программно, если считать все сегменты, загружаемые в память с диска, не записываемыми, т.е. имеющими сброшенный бит разрешения записи (W = 0). Когда программа в первый раз попытается записать в сегмент, возникнет особый случай защиты. Процедура его обработки, анализируя специальные таблицы, может определить, является ли запись разрешенной или нет. Если запись в сегмент разрешена, процедура установит бит W = 1 и осуществит возврат в программу. Это предотвращает возникновение последующих особых случаев, и программы виртуальной памяти получают сообщение, что сегмент модифицировался после своей последней передачи с диска в память.

Сегмент локальной дескрипторной таблицы.

В мультизадачной системе для каждой задачи в дополнение к таблице GDT можно построить свою локальную дескрипторную таблицу LDT. Она определяет только сегменты, доступные конкретной задаче.

Локальная дескрипторная таблица LDT содержит дескрипторы сегментов кода, данных и стека локальной задачи, а также дескрипторы шлюзов вызовов и шлюзов задач. Базовые адреса таблиц LDT размещаются в дескрипторах специального типа - в системных дескрипторах LDT, которые хранятся в глобальной дескрипторной таблице GDT. Системный дескриптор LDT определяется полем TYPE его байта доступа (строка 3 табл.). В поле базового адреса дескриптора LDT находится базовый адрес сегмента с таблицей LDT, а в поле предела - предел сегмента с LDT. Выбор дескриптора LDT из глобальной дескрипторной таблицы осуществляется с помощью селектора, загружаемого программой в регистр LDTR. Для уменьшения времени обращения к  локальным операндам дескриптор LDT после его выборки из глобальной дескрипторной таблицы запоминается в программно-недоступном регистре LDTRт.

Байт доступа дескриптора LDT не содержит дополнительных бит, определяющих параметры защиты. Сам тип дескриптора LDT определяет следующие ограничения  на использование этого сегмента:

- с сегментом LDT нельзя явно производить операции считывания, записи или выполнения;

- сегмент LDT можно использовать только неявно в процессе преобразования адреса;

- в регистр LDTR с помощью привилегированной команды LLDT можно загружать только селекторы для сегментов LDT.

Сегмент состояния задачи TSS

Важнейшей архитектурной особенностью процессоров 80х86 является наличие эффективных аппаратных средств поддержки многозадачного режима, реализующих защиту и быстрое переключение задач. В качестве таких средств используется специальная структура данных, организованная в виде сегмента состояния задачи TSS (Task Status Segment), 16-разрядный регистр задачи TR и связанный с регистром TR программно недоступный теневой 64-разрядный регистр TRт, используемый для запоминания дескриптора сегмента TSS текущей задачи, дескриптор сегмента TSS и дескриптор шлюза задачи. Сегмент состояния задачи TSS является специальным сегментом данных, содержащим всю информацию о состоянии задачи и поле обратной связи для реализации вложенности задач. Фактически сегмент TSS характеризует состояние виртуального процессора задачи в многозадачной системе.