Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Механизмы аппаратной поддержки операционных систем. Учебное пособие
.pdf
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Операционная система периодически опрашивает состояние бита
А всех дескрипторов и затем сбрасывает их в 0.
Если по прошествии нескольких циклов опроса бит А в
дескрипторе сегмента остался равным нулю (то есть к данному сегменту
за это время не было обращения), этот сегмент будет считаться редко
используемым.
При подкачке страницами, механизм свопинга аналогичный.
Только информации о присутствии страницы и бит обращения к
странице находятся в записи о странице в Таблице страниц.
71

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
15 3 2 1 0
Номер дескриптора ( i ) TI RPL
7. Механизмы защиты памяти и ресурсов
Концепция защиты системных ресурсов
Защищенный режим получил свое название от развитых
механизмов защиты системных ресурсов, в первую очередь памяти.
Защита сегментов памяти обеспечивается следующими аппаратнопрограммными мерами:
- изолирование операционной системой адресных пространств
задач с помощью Локальных дескрипторных таблиц;
- контроль процессором попыток программного «выхода за
границы сегмента» по величине смещения в сегменте;
- наложение операционной системой на сегменты или
страницы ограничений на чтение или запись и контроль процессором
попыток их нарушения;
- назначение операционной системой сегментам различных
«уровней привилегий» и контроль процессора обращений исполняемого
кода по соответствию этому уровню.
На нарушение установленных «правил» процессор генерирует
системное прерывание («исключение») с определенным номером, по
которому операционная система соответственным образом реагирует:
снимает задачу с исполнения, делает предупреждение и т.д.
Защита может устанавливаться как для сегментов, так и для
страниц при включенном страничном преобразовании адресов.
В механизме защиты сегментов участвуют следующие программно
создаваемые операционной системой структуры:
- поле RPL в селекторе сегмента
- поле “Предел сегмента” и DPL, биты TS и Type в байте доступа
дескриптора сегмента
72

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
7 0
0
Предел сегмента
1
(младшие 16 бит)
2
3
Базовый адрес сегмента
4
5
P
DPL
TS
Type
A
6
G D 0
Предел (ст. 4 бита)
7
Базовый адрес (старший байт)
- поле IOPL в регистре флагов: минимальные привилегии для
выполнения обращения к портам
Защита адресных пространств процессов
Изолирование адресных пространств
Защищенный режим допускает различные способы распределения
адресного пространства между задачами в защищенном режиме. Эти
решения принимает операционная система:
а) единое адресное пространство для всех задач (как в реальном
режиме)
Для этого операционной системе достаточно создать только
Глобальную дескрипторную таблицу (GDT), где содержится описание
всех сегментов.
Локальные дескрипторные таблицы не создаются. Тогда регистрселектор локальной дескрипторной таблицы - LDTR должен содержать
пустой селектор - 0.
73

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Рис. 30 - Общее адресное пространство для задач
Такая структура распределения памяти удобна для «перевода»
программных систем, написанных для реального режима, в
защищенный режим.
Однако, здесь могут быть проблемы с защитой сегментов задач в
памяти, так как они используют единое адресное пространство. Это
скажется на устойчивости операционной системы в целом.
б) собственное адресное пространство для каждой задачи
Операционная система создает отдельную Локальную
дескрипторную таблицу (LDT) для каждой задачи. В LDT описываются
сегменты памяти, которые будут доступны только этой задаче.
Необходимое общее адресное пространство обеспечивается через
глобальную дескрипторную таблицу GDT.
Рис.31 – Изолированные адресные пространства задач
Такая реализация требует больших затрат от операционной
системы, но обеспечивает максимальную защиту адресных пространств
отдельных задач.
74

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
7 6 5 4 3 2 1 0
P DPL ТS T Y P E A
Контроль внутрисегментного смещения
Максимальное смещение в сегменте, то есть величина на 1
меньшая размера сегмента, задано в 20-разрядном поле «Предел
сегмента» дескриптора сегмента.
Диапазон возможных смещений в сегменте составляет:
- при измерении сегмента в байтах (G=0): от 0 до FFFFF.
Размер сегмента не более 2
20
байтов.
- при измерении сегмента в страницах (G=1): от FFF до
FFFFFFFF Размер сегмента может составлять от 212 байтов (одна
страница) до 2
32
байтов ( 220 страниц)
При выполнении любой команды чтения/записи в память
процессор проверяет программно заданное смещение.
Если оно превышает Предел, процессор генерирует системное
внутреннее прерывание, которое обрабатывается операционной
системой как «исключительная ситуация».
Ограничение программного доступа к сегменту для
чтения или записи
Ограничения доступа на сегмент операционная система
устанавливает с помощью бита ТS (тип сегмента) и 3-битного поля
TYPE (тип сегмента) в байте доступа дескриптора сегмента.
Бит типа сегмента - ТS
Этот бит отличает дескриптор программного сегмента от
системного дескриптора.
Системные дескрипторы – это дескрипторы, которые описывают
служебные сегменты операционной системы (например, сегменты
локальных дескрипторных таблиц, сегмент дескрипторной таблицы
прерываний) или выполняют определенные функции при организации
прерываний, переключении задач и вызове процедур.
ТS = 0 – для дескриптора системного сегмента, 1 – для
дескриптора программного сегмента.
75

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
3 2 1
бит Ex
1 C R
3 2 1
бит Ex
0 Ed W
Для системного дескриптора код в поле TYPE задает его тип:
дескриптор LDT, дескриптор TSS (сегмента состояния задачи), шлюз
вызова, шлюз прерывания, шлюз задачи и другие.
Для некоторых системных дескрипторов поле TYPE включает и
неиспользуемый бит А.
Обращение в системные сегменты для прикладных задач
запрещено.
Поле TYPE
Используется операционной системой, чтобы задать ограничения
на чтение или запись в программные сегменты, то есть для
дескрипторов сегментов с битом ТS = 1.
Формат этого поля несколько отличается для исполняемого
программного сегмента (кодового) и программных сегментов данных.
Формат поля TYPE для дескрипторов кодовых сегментов:
Ex – признак “исполняемого” сегмента. Для кодового сегмента
всегда равен 1.
С – бит «подчиненности» кодового сегмента: 0- неподчиненный, 1
– подчиненный. На подчиненные сегменты не распространяются
правила защиты по уровню привилегий. Об этом речь пойдет при
рассмотрении защиты по уровню привилегий.
R – бит разрешения чтения из сегмента: 1– чтение разрешено, 0 –
чтение запрещено.
Обратите внимание на отсутствие бита, которым можно
регулировать разрешение/запрещение записи в кодовый сегмент.
Запись в кодовый сегмент в принципе не разрешена, так как в
интересах защиты исполняемый код не должен изменяться в процессе
своего исполнения.
Формат поля TYPE для дескрипторов сегментов данных.
76

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Тип
сегмента
данных
Минимальное
смещение
в сегменте
Максимальное
смещение
в сегменте
Ed=0
Обычный
0 . . 0
FF . . F
Ed=1
Стек
FF. . F
0 . . 0
P DPL 0 0 1 0 A
P DPL 1 0 0 0 A
Ex – признак исполняемого сегмента. Для сегментов данных
всегда равен 0.
W - бит разрешения записи в сегмент: 1 – запись разрешена, 0–
запись запрещена.
Ed – отличает обычный сегмент данных от стекового: 0 –обычный
сегмент данных, 1 –стековый сегмент.
В зависимости от значения бита Ed, процессор по-разному
интерпретирует величину в поле «Предел смещения» дескриптора
сегмента.
Обратите внимание на отсутствие бита разрешения/запрещения
чтения из сегмента данных. Чтение данных всегда разрешено.
Ограничения на чтение/запись для программных сегментов,
установленные в поле TYPE, проверяются процессором при любом
программном обращении к сегменту.
При попытке выполнить недопустимое обращение к сегменту
процессор генерирует прерывание, обрабатываемое операционной
системой.
Примеры ограничений на доступ к сегменту
Ниже приведены примеры байтов доступа с некоторыми
установленными значениями бита TS и поля TYPE. Приводится
расшифровка типа сегмента и наложенных на него ограничений.
Системный сегмент, содержащий Локальную дескрипторную
таблицу (код 010). Код TYPE=010 задает тип служебного дескриптора –
дескриптор LDT. Обращения к этому сегменту (чтение или запись) из
обычных сегментов запрещены.
77

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
P DPL 1 1 0 0 A
P DPL 1 0 0 1 A
3
2 1 0
Программный сегмент данных, для которого разрешено только
чтение.
Программный кодовый сегмент, к которому нельзя обратиться для
чтения или записи. Так как бит подчиненности С=0, на сегмент
распространяются правила защиты по уровню привилегий.
Сегмент данных, в который разрешена запись.
Защита по привилегиям
В защищенном режиме существует понятие «уровень привилегий»
(«значимости») для каждого сегмента памяти.
Процессор имеет четырехуровневую систему привилегий, с
помощью которой выполняется разграничение программного доступа к
сегментам памяти, портам ввода-вывода, контроль использования
привилегированных команд.
Предусмотрены 4 уровня привилегий, которые кодируются: 0, 1,
2, 3. Для наглядности их изображают в виде колец.
Чем меньше код уровня
привилегий – тем большими
привилегиями обладает данный
сегмент.
Назначение уровня привилегий сегменту делает операционная
система при загрузке его в память и записывает этот код в дескриптор
сегмента.
Уровни привилегий распределяются так:
78

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
7 6 5 4 3 2 1 0
P DPL ТS T Y P E A
0 – сегменты ядра операционной системы (наивысшие
привилегии);
3 - сегменты прикладных программ (наименьшие привилегии).
Как правило, промежуточные уровни 1 и 2 не используются.
Контроль по уровню привилегий выполняется процессором, то
есть аппаратно.
При программном обращении к памяти процессор проверяет
соотношение уровней привилегий кодового сегмента, откуда делается
обращение и уровня привилегий сегмента, к которому делается
обращение. Если это соотношение недопустимо, то процессор
генерирует системное прерывание.
Подобным образом, процессор проверяет уровень привилегий
кодового сегмента при попытке исполнения «привилегированных
команд».
Эти аппаратно заложенные в процессор возможности позволяют
операционной системе организовать гибкую систему ограничений на
программный доступ к памяти, портам ввода-вывода и использование
ряда команд прикладными программами.
Рассмотрим теперь, как реализована система ограничений по
уровню привилегий. То есть, в каких внутренних структурах
операционной системы записаны коды уровней привилегий и каковы
аппаратные правила контроля соотношения уровней привилегий.
Размещение кодов уровней привилегий
Код уровня привилегий сегмента (00, 01,10 или 11) записывается в
поле DPL байта доступа дескриптора сегмента.
Поле DPL ( Descriptor Privilege Level ) – «Уровень привилегий
дескриптора». Содержимое поля DPL определяет уровень привилегий
сегмента, который описывает этот дескриптор.
Значение кода уровня привилегий содержится также в поле RPL
селекторов сегментов.
Поле RPL ( Request Privilege Level ) - “Запрашиваемый уровень
привилегий”.
79

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
15 3 2 1 0
Номер дескриптора ( i ) TI RPL
Это значение находится в любом селекторе сегмента,
используемом в командах обращения к памяти - CS, DS, ES, SS, FS или
GS, и в специальных селекторах сегментов - TR и LDTR
Для селектора CS исполняемого кодового сегмента значение в
поле RPL называется CPL ( Current Privilege Level ) - “Текущий
уровень привилегий”.
Это значение задает уровень привилегий исполняемого кода. Код
привилегий в CPL записывает операционная система из поля DPL
дескриптора кодового сегмента перед началом его исполнения.
Правила контроля процессором уровней привилегий
При любом программном обращении к памяти процессор
проверяет соотношение уровней привилегий, используя значение
уровня привилегий кодового сегмента исполняемой задачи CPL и
значения RPL и DPL .
При нарушении правил процессор генерирует внутреннее
системное прерывание – «исключение», которое обрабатывается
соответствующим образом операционной системой.
1. Доступ к сегментам данных для чтения/записи
Разрешающее соотношение значений для обращения к сегментам
данных: max ( CPL, RPL ) <= DPL
Оно означает: разрешается обращаться к сегментам данных из
исполняемого сегмента, у которого «эффективный уровень привилегий
запроса» не меньше уровня привилегий сегмента данных.
«Эффективным уровнем привилегий запроса» называется
наибольшее из значений: CPL и RPL.
Понятие «эффективный уровень привилегий запроса» учитывает
как значение CPL, так и значение запрашиваемого уровня привилегий
RPL в селекторе сегмента при обращении к сегменту данных.
Эффективный – это «худший» из них.
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
