Процессы преобразования адресов и перемещения информации наиболее просто реализуются при страничной адресации памяти. Метод страничной адресации состоит в том, что виртуальная память (множество адресов) разделяется на страницы емкостью соседних адресов. Так, к странице с адресом 0 относятся адреса 0, 1, 2, ... , к странице с адресом и так далее. В результате адрес слова будет состоять из двух полей Р, указывающих адрес страницы, и А — адрес слова в странице Р (рис. 6.8, а).
1 m 1 m
1 k 1 k 1 k 1 k
a) Виртуальный адрес б) Физический адрес
Если физическую память разделить, а сегменты, состоящие из соседних ячеек, то физические адреса в пределах одной виртуальной страницы по структуре будут полностью совпадать с математическими адресами (рис. 6.8, б), где S - адрес сегмента, а А - адрес слова (ячейки) в сегменте S. Размер страниц составляет 512-1024 слова, но в некоторых случаях возникает необходимость в использовании страниц размером 32—128 слов.
В процессе решения задачи страницы перемещаются между ОЗУ и ВЗУ. Если вычислительный процесс распределяется на страницу Р, то она вызывается в ОЗУ. Когда надобность в информации, размещенной на странице Р, отпадает, то она удаляется из ОЗУ в виртуальную память, освобождая место для других страниц. В результате перемещения граница Р может быть помещена на любом сегменте S ОП.
Текущее состояние памяти ЭВМ характеризуется таблицей страниц (рис. 6.9). Отдельной странице виртуальной памяти Pi (i=1, 2, ..., Q-1) соответствует одна строка таблицы, в которой указываются параметры страницы Рi: Si — адрес сегмента ОЗУ, в котором размещается страница Рi, иначе говоря, физический адрес страницы Pi; di - признак доступности страницы: при di=1 страница Pi, хранится в ОЗУ и недоступна для центрального процессора.
Виртуальная Таблица Физическая
память страниц память
(номер страницы) (номер сегмента)
Si di
В таблице страниц также указываются параметры, определяющие страницу, которую надо удалить из ОЗУ (на рис 6.9 эти параметры не показаны) вследствие относительной низкой вероятности ее использования. Таблица страниц размещается в ОЗУ и в любое время доступна ЦП. Как видно из рис. 6.9, 2048 страниц виртуальной памяти могут размещается в 128 сегментах ОЗУ и на магнитных дисках НМД1 и НМД2 емкостью 960 страниц каждый.
Каждой странице Рi (i=0, 1, 2, . . ., 2047) виртуальной памяти соответствует свой сегмент, адрес которого определен в таблице страниц, и, следовательно, каждому слову присвоен свой физический адрес.
Операционная система (ОС) обеспечивает преобразование математических адресов в физические адреса.
Другой подход к организации памяти опирается на тот факт, что программы обычно разделяются на отдельные области-сегменты. Каждый сегмент представляет собой отдельную логическую единицу информации, содержащую совокупность данных или программ и расположенную в адресном пространстве пользователя. Сегменты создаются пользователями, которые могут обращаться к ним по символическому имени. В каждом сегменте устанавливается своя собственная нумерация слов, начиная с нуля.
Обычно в подобных системах обмен информацией между пользователями строится на базе сегментов. Поэтому сегменты являются отдельными логическими единицами информации, которые необходимо защищать, и именно на этом уровне вводятся различные режимы доступа к сегментам. Можно выделить два основных типа сегментов: программные сегменты и сегменты данных (сегменты стека являются частным случаем сегментов данных). Поскольку общие программы должны обладать свойством повторной входимости, то из программных сегментов допускается только выборка команд и чтение констант. Запись в программные сегменты может рассматриваться как незаконная и запрещаться системой. Выборка команд из сегментов данных также может считаться незаконной и любой сегмент данных может быть защищен от обращений по записи или по чтению.
Для реализации сегментации было предложено несколько схем, которые отличаются деталями реализации, но основаны на одних и тех же принципах.
В системах с сегментацией памяти каждое слово в адресном пространстве пользователя определяется виртуальным адресом, состоящим из двух частей: старшие разряды адреса рассматриваются как номер сегмента, а младшие - как номер слова внутри сегмента. Наряду с сегментацией может также использоваться страничная организация памяти. В этом случае виртуальный адрес слова состоит из трех частей: старшие разряды адреса определяют номер сегмента, средние - номер страницы внутри сегмента, а младшие - номер слова внутри страницы.
Как и в случае страничной организации, необходимо обеспечить преобразование виртуального адреса в реальный физический адрес основной памяти. С этой целью для каждого пользователя операционная система должна сформировать таблицу сегментов. Каждый элемент таблицы сегментов содержит описатель (дескриптор) сегмента (поля базы, границы и индикаторов режима доступа). При отсутствии страничной организации поле базы определяет адрес начала сегмента в основной памяти, а граница - длину сегмента. При наличии страничной организации поле базы определяет адрес начала таблицы страниц данного сегмента, а граница - число страниц в сегменте. Поле индикаторов режима доступа представляет собой некоторую комбинацию признаков блокировки чтения, записи и выполнения.
Таблицы сегментов различных пользователей операционная система хранит в основной памяти. Для определения расположения таблицы сегментов выполняющейся программы используется специальный регистр защиты, который загружается операционной системой перед началом ее выполнения. Этот регистр содержит дескриптор таблицы сегментов (базу и границу), причем база содержит адрес начала таблицы сегментов выполняющейся программы, а граница - длину этой таблицы сегментов. Разряды номера сегмента виртуального адреса используются в качестве индекса для поиска в таблице сегментов. Таким образом, наличие базово-граничных пар в дескрипторе таблицы сегментов и элементах таблицы сегментов предотвращает возможность обращения программы пользователя к таблицам сегментов и страниц, с которыми она не связана. Наличие в элементах таблицы сегментов индикаторов режима доступа позволяет осуществить необходимый режим доступа к сегменту со стороны данной программы. Для повышения эффективности схемы используется ассоциативная кэш-память.
Отметим, что в описанной схеме сегментации таблица сегментов с индикаторами доступа предоставляет всем программам, являющимся частями некоторой задачи, одинаковые возможности доступа, т. е. она определяет единственную область (домен) защиты. Однако для создания защищенных подсистем в рамках одной задачи для того, чтобы изменять возможности доступа, когда точка выполнения переходит через различные программы, управляющие ее решением, необходимо связать с каждой задачей множество доменов защиты. Реализация защищенных подсистем требует разработки некоторых специальных аппаратных средств. Рассмотрение таких систем, которые включают в себя кольцевые схемы защиты, а также различного рода мандатные схемы защиты, выходит за рамки данного пособия.