8. Иерархия памяти
Сегментация памяти
Другой подход к организации памяти опирается на тот факт, что программы
обычно разделяются на отдельные области-сегменты. Каждый сегмент
представляет собой отдельную логическую единицу информации, содержащую
совокупность данных или программ и расположенную в адресном пространстве
пользователя. Сегменты создаются пользователями, которые могут обращаться
к ним по символическому имени. В каждом сегменте устанавливается
своя собственная нумерация слов, начиная с нуля.
Обычно в подобных системах обмен информацией между пользователями
строится на базе сегментов. Поэтому сегменты являются отдельными
логическими единицами информации, которые необходимо защищать, и
именно на этом уровне вводятся различные режимы доступа к сегментам.
Можно выделить два основных типа сегментов: программные сегменты
и сегменты данных (сегменты стека являются частным случаем сегментов
данных). Поскольку общие программы должны обладать свойством повторной
входимости, то из программных сегментов допускается только выборка
команд и чтение констант. Запись в программные сегменты может рассматриваться
как незаконная и запрещаться системой. Выборка команд из сегментов
данных также может считаться незаконной и любой сегмент данных может
быть защищен от обращений по записи или по чтению.
Для реализации сегментации было предложено несколько схем, которые
отличаются деталями реализации, но основаны на одних и тех же принципах.
В системах с сегментацией памяти каждое слово в адресном пространстве
пользователя определяется виртуальным адресом, состоящим из двух
частей: старшие разряды адреса рассматриваются как номер сегмента,
а младшие - как номер слова внутри сегмента. Наряду с сегментацией
может также использоваться страничная организация памяти. В этом
случае виртуальный адрес слова состоит из трех частей: старшие разряды
адреса определяют номер сегмента, средние - номер страницы внутри
сегмента, а младшие - номер слова внутри страницы.
Как и в случае страничной организации, необходимо обеспечить преобразование
виртуального адреса в реальный физический адрес основной памяти.
С этой целью для каждого пользователя операционная система должна
сформировать таблицу сегментов. Каждый элемент таблицы сегментов
содержит описатель (дескриптор) сегмента (поля базы, границы и индикаторов
режима доступа). При отсутствии страничной организации поле базы
определяет адрес начала сегмента в основной памяти, а граница -
длину сегмента. При наличии страничной организации поле базы определяет
адрес начала таблицы страниц данного сегмента, а граница - число
страниц в сегменте. Поле индикаторов режима доступа представляет
собой некоторую комбинацию признаков блокировки чтения, записи и
выполнения.
Таблицы сегментов различных пользователей операционная система
хранит в основной памяти. Для определения расположения таблицы сегментов
выполняющейся программы используется специальный регистр защиты,
который загружается операционной системой перед началом ее выполнения.
Этот регистр содержит дескриптор таблицы сегментов (базу и границу),
причем база содержит адрес начала таблицы сегментов выполняющейся
программы, а граница - длину этой таблицы сегментов. Разряды номера
сегмента виртуального адреса используются в качестве индекса для
поиска в таблице сегментов. Таким образом, наличие базово-граничных
пар в дескрипторе таблицы сегментов и элементах таблицы сегментов
предотвращает возможность обращения программы пользователя к таблицам
сегментов и страниц, с которыми она не связана. Наличие в элементах
таблицы сегментов индикаторов режима доступа позволяет осуществить
необходимый режим доступа к сегменту со стороны данной программы.
Для повышения эффективности схемы используется ассоциативная кэш-память.
Отметим, что в описанной схеме сегментации таблица сегментов с
индикаторами доступа предоставляет всем программам, являющимся частями
некоторой задачи, одинаковые возможности доступа, т. е. она определяет
единственную область (домен) защиты. Однако для создания защищенных
подсистем в рамках одной задачи для того, чтобы изменять возможности
доступа, когда точка выполнения переходит через различные программы,
управляющие ее решением, необходимо связать с каждой задачей множество
доменов защиты. Реализация защищенных подсистем требует разработки
некоторых специальных аппаратных средств. Рассмотрение таких систем,
которые включают в себя кольцевые схемы защиты, а также различного
рода мандатные схемы защиты, выходит за рамки данного обзора.
|