Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A_K_3.doc
Скачиваний:
3
Добавлен:
18.11.2019
Размер:
286.72 Кб
Скачать

102

3 Управление памятью в защищенном режиме виртуальной адресации

Простая сегментация памяти в процессоре I8086 (и в РЕАЛЬНОМ РЕЖИМЕ для последующих процессоров) обладает недостатками, усложняющими разработку мультизадачных систем:

  • Сегменты памяти, определяемые только одними сегментными регистрами, имеют всего два атрибута: начальный адрес и максимальный размер 64 Кбайта. Никаких аппаратных средств контроля правильности использования сегментов нет.

  • Размещение сегментов в памяти произвольное: сегменты могут частично или полностью перекрываться или не иметь общих областей.

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

  • Нет никаких препятствий для обращения даже к физически несу- ществующей памяти. Когда программа выдает адрес несуществующей ячейки памяти, результат зависит только от особенностей схем дешифрации адреса и управления внешней шиной; система может даже зависнуть в ожидании данных, которые никогда не будут считаны.

В ЗАЩИЩЕННОМ РЕЖИМЕ ВИРТУАЛЬНОЙ АДРЕСАЦИИ (РВА) процессоров I80286 и последующих процессоров 386+ реализовано несколько уровней привилегий и механизмов защиты задач, требующих больше информации о каждом сегменте. Пользовательская программа теперь не может свободно обращаться по любому адресу в пространстве памяти. Каждая программа (независимо от уровня привилегий) не может обращаться к сегменту до тех пор, пока он не описан для программы.

Каждый сегмент в РЕЖИМЕ ВИРТУАЛЬНОЙ АДРЕСАЦИИ (РВА) характеризуется (описывается) специальной 8-ми байтовой структурой данных, называемой ДЕСКРИПТОРОМ СЕГМЕНТА (segment descriptor).

В описание сегмента (в дескриптор) включается:

  • БАЗОВЫЙ АДРЕС сегмента,

  • РАЗМЕР СЕГМЕНТА,

  • ТИП (определяющий целевое использование сегмента),

  • УРОВЕНЬ ПРИВИЛЕГИЙ и

  • дополнительная информация о состоянии.

Операционная система при создании дескриптора область адресного пространства определяет как используемую с учетом ограничений, содержащихся в дескрипторе. Если не описать область адресного пространства памяти дескриптором, соответствующий диапазон адресов оказывается недоступным и процессор отказывается обращаться к нему. Когда программа ошибочно или намеренно формирует такой недействительный адрес, процессор «перехватывает» виновную команду до попытки считывания/записи по неопределенному адресу.

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

ДЕСКРИПТОРЫ СЕГМЕНТОВ МП 386+ для программной совместимости с МП I80286 имеют формат, представленный на рис. 3.1. Младшие 48 битов совместимы с форматом дескриптора МП I80286, у которого старшие два байта дескрипторов (биты 48...63) обязательно содержат нули.

Поэтому базовый адрес у МП I80286 содержит только 24 бита (доступное адресное пространство в РВА – 16 Мбайт), а максимальный размер сегмента – 64 Кбайта (определяется 16-тью разрядами предела в дескрипторе и 16-тью разрядами формируемого эффективного адреса – ЕА).

Старший байт дескриптора МП 386+ (биты 63..56) содержит СТАРШИЙ БАЙТ БАЗОВОГО АДРЕСА. Начальный адрес сегмента может находиться в линейном адресном пространстве 4 Гбайта.

ПРЕДЕЛ РАЗМЕРНОСТИ СЕГМЕНТА (limit) задается 20-ти битовым полем. Предел равен размеру сегмента в байтах (или страницах) минус единица. Учитывая, что адреса нумеруются от нуля, предел задает максимально возможное смещение в конкретном сегменте или последнюю адресуемую страницу в сегменте.

Байт 5 дескриптора сегмента (биты 40...47 на рис. 3.1) содержит так называемые ПРАВА ДОСТУПА (Access Rights) и часто называется байтом AR (или БАЙТОМ ДОСТУПА) (см. рис. 3.2).

7

6 5

4

3

2

1

0

Для сегмента кода

P

DPL

1

1

C

R

A

Для сегмента данных

P

DPL

1

0

ED

W

A

Для системного объекта

P

DPL

0

x

x

x

x

Рис. 3.2 – Форматы байтов прав доступа

БИТ ПРИСУТСТВИЯ (наличия) – Р (Present) – и БИТ ОБРАЩЕНИЯ – А (Accessed) – помогают операционной системе реализовать виртуальную память. В системе виртуальной памяти при выполнении программы в памяти одновременно находятся только некоторые ее сегменты, а остальные хранятся на диске. Когда программа пытается обратиться к сегменту, которого в памяти нет, возникает особый случай и процедура его обработки считывает ("вталкивает") в память нужный сегмент. Если места в памяти для сегмента недостаточно, процедура обработки должна вначале освободить требуемое место, пересылая ("выталкивая") один или несколько сегментов из памяти на диск. Весь этот процесс называется СВОПИНГОМ ("подкачкой"). После передачи нужного сегмента в память процедура обработки особого случая осуществляет возврат в программу, и она продолжается, не подозревая о прерывании. Следовательно, операционная система создает иллюзию того, что все сегменты программы все время находятся в памяти.

Если в дескрипторе Р = 0, то любая попытка использовать этот дескриптор (например, загрузка селектора в сегментный регистр) вызывает особый случай «неприсутствия» (т.е. отсутствия). Операционная система виртуальной памяти отмечает все сегменты, находящиеся в памяти, установкой Р = 1, а сегменты, которых в памяти нет (они на диске), установкой Р = 0. Следовательно, особый случай «НЕПРИСУТСТВИЯ» возникает, когда программа обращается к сегменту, которого в памяти нет. Процедура обработки этого особого случая может считать нужный сегмент с диска, УСТАНОВИТЬ ПОЛЕ БАЗЫ ДЕСКРИПТОРА НА АДРЕСАЦИЮ БАЗЫ СЕГМЕНТА и сделать Р = 1.

БИТ ОБРАЩЕНИЯ – А – помогает операционной системе выбрать сегмент, который передается на диск, когда в памяти нет достаточного места для нового сегмента. Приемлемая стратегия при необходимости освобождения пространства памяти заключается в том, чтобы обменять (swap) сегмент, к которому не было обращения самое продолжительное время. Эта стратегия называется LRU – ЗАМЕНЯЕТСЯ ДОЛЬШЕ ВСЕГО НЕ ИСПОЛЬЗОВАВШИЙСЯ СЕГМЕНТ.

Биты А всех сегментов первоначально должны находиться в состоянии «нуль». Когда селектор определенного дескриптора загружается в сегментный регистр, бит А этого дескриптора устанавливается (А = 1). Через регулярные интервалы времени операционная система сканирует все дескрипторы и сбрасывает их биты А в нуль. Если во время сканирования обнаруживается дескриптор с битом А = 1, то к нему после предыдущего сканирования были обращения. Операционная система должна произвести инкремент счетчика последнего использования такого сегмента. Когда необходимо выбрать сегмент для передачи на диск, им будет сегмент С НАИМЕНЬШИМ СЧЕТЧИКОМ ПОСЛЕДНЕГО ИСПОЛЬЗОВАНИЯ.

Бит 1 БАЙТА ДОСТУПА (см. рис. 3.2) для сегмента кода (сегмента выполняемой программы) называется битом СЧИТЫВАЕМОГО сегмента – R. Если R = 1, то наряду с обращением к такому сегменту для выполнения команд разрешаются и обращения для считывания. Если же R = 0, любая попытка считать из сегмента вызывает ОСОБЫЙ СЛУЧАЙ ЗАЩИТЫ. Любая попытка записи в исполняемый сегмент кода также приводит к ОСОБОМУ СЛУЧАЮ ЗАЩИТЫ. Таким образом можно организовать виртуальное ПЗУ.

Этот же бит 1 БАЙТА ДОСТУПА для (неисполняемого) сегмента данных является битом РАЗРЕШЕНИЯ ЗАПИСИ – W. Если W = 1, то помимо считывания из сегмента данных разрешена и запись в него. Если же W = 0, то любая попытка записать в сегмент вызывает особый случай защиты. Кроме того, любая попытка ВЫПОЛНИТЬ СЕГМЕНТ ДАННЫХ также приводит к ОСОБОМУ СЛУЧАЮ ЗАЩИТЫ.

Ограничения на доступ по СЧИТЫВАНИЮ, ЗАПИСИ И ВЫПОЛНЕНИЮ помогают поддерживать целостность системы, обнаруживать ошибки и предотвращать программное «пиратство» в многопользовательских системах. Например, попытка копирования данных из сегмента кода, указывая префикс CS: замены сегмента, вызовет особый случай зашиты. В системе виртуальной памяти сегмент с запрещенной записью НЕ НУЖНО физически передавать на диск (если его все же нужно удалить из памяти), так как после передачи с диска он не изменялся.

Биты 1, 2, 3 в байте прав доступа называются также ПОЛЕМ ТИПА (Type). Это поле определяет целевое использование сегмента, задавая допустимые в сегменте операции (табл. 3.1)

Таблица 3.1 – Типы сегментов в режиме виртуальной адресации

Поле типа

Тип сегмента и допустимые операции

000

Сегмент данных; разрешено только считывание

001

Сегмент данных; разрешены считывание и запись

010

Сегмент стека; разрешено только считывание (бессмысленный тип, на практике не применяется)

011

Сегмент стека; разрешены считывание и запись

100

Сегмент кода; разрешено только выполнение

101

Сегмент кода; разрешены выполнение и считывание

110

Подчиненный сегмент кода; разрешено только выполнение

111

Подчиненный сегмент кода; разрешены выполнение и считывание

Бит 4 БАЙТА ПРАВ ДОСТУПА (см. рис. 3.1 и рис. 3.2) – БИТ СИСТЕМЫ (System) в дескрипторах сегментов памяти всегда установлен в состояние «1». Если бит S = 0, то дескриптор описывает системный объект, как являющийся, так и не являющийся сегментом памяти.

Двухбитовое ПОЛЕ УРОВНЯ ПРИВИЛЕГИЙ ДЕСКРИПТОРА DPL (Descriptor Privilege Level) определяет уровень привилегий, ассоциируемый с той областью памяти, которую описывает дескриптор. УРОВЕНЬ ПРИВИЛЕГИЙ имеет значения от 0 (наибольшие привилегии) до 3 (наименьшие привилегии).

Дополнительные биты атрибутов, находящиеся в старшей тетраде байта 6 (см. рис.3.1), определяют :

  • G (бит 55 – гранулированности, дробности) – указывает в каких единицах задан предел (размер) сегмента : при G = 0 – в байтах; при G = 1 – в страницах по 4 Кбайт;

  • D (бит 54 – разрядности) – определяет разрядность формируемого внутрисегментного смещения или выбираемого операнда: при D = 0 – 16 разрядов; при D = 1 – 32 разряда.

  • бит 54 – всегда равен нулю, а бит 53 может иметь произвольное значение.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]