Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Механизмы аппаратной поддержки операционных систем. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Операционная система периодически опрашивает состояние бита А всех дескрипторов и затем сбрасывает их в 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]