Страничная организация памяти В системах со страничной организацией основная и внешняя память делятся на блоки или страницы фиксированной длины. Каждому пользователю предоставляется отдельное виртуальное адресное пространство, размер которого ограничен только возможностями адресации, заложенными в системе команд. Размер предоставляемой пользователю виртуальной памяти может превышать размер физической ОП. Каждое слово в виртуальной памяти пользователя определяется виртуальным адресом, состоящим из двух частей: старшие разряды адреса рассматриваются как номер страницы, а младшие - как номер слова (или байта) внутри страницы. ![](http://konspekta.net/megapredmetru/baza1/21697137076.files/image107.gif) Рис. 3.16. Преобразование виртуального адреса в реальный адрес при страничной организации виртуальной памяти Управление виртуальной памятью осуществляется программами ядра операционной системы, которые следят за распределением страниц и оптимизируют обмены между первичной и вторичной памятью. При страничной организации памяти смежные виртуальные страницы не обязательно должны размещаться на смежных страницах основной физической памяти. Для указания соответствия между виртуальными страницами и страницами основной памяти для каждой программы операционная система формирует в основной памяти таблицу страниц. При этом каждой странице программы, независимо от того, находится ли она в основной памяти или нет, ставится в соответствие некоторый элемент таблицы страниц. Каждый элемент таблицы страниц содержит номер физической страницы основной памяти и специальный индикатор. Единичное состояние этого индикатора свидетельствует о наличии этой страницы в основной памяти. Нулевое состояние индикатора означает отсутствие страницы в оперативной памяти. На рис. 3.16 показано преобразование виртуальных адресов в реальные с использованием таблицы страниц. Символы, используемые на рис. 3.16 имеют следующий смысл: · бит F (бит существования) показывает, существует или нет i-я страница. Если F=1, то страница существует; · бит С (бит обновления) показывает, было или нет обновление страницы в ОП. Этот бит нужен для того, чтобы исключить лишнюю запись во вторичную память в случае удаления страницы; · код RWX определяет форму доступа (считывание/запись или и то и другое) к i-й странице; · бит Мпоказывает местонахождение страницы. Если M=1, то страница находится в ОП; · код PFA - номер блока, соответствующий i-й странице. Если, например, F=1 и M=1, то это означает, что i-я страница хранится в ОП и номер соответствующего блока определяется значением PFA. Если F=1, а M=0, то в PFA хранится адрес страницы из вторичной памяти. Для увеличения эффективности такого типа схем используется специальная полностью ассоциативная кэш-память, которая также называетсябуфером преобразования адресов TLB (translation-lookside buffer). Заметим, что в целях защиты памяти содержание TLB очищается при переключении с одной программы на другую. Поиск в таблицах страниц, расположенных в основной памяти, и загрузка TLB может осуществляться либо программным способом, либо специальными аппаратными средствами. В последнем случае для того, чтобы предотвратить возможность обращения пользовательской программы к таблицам страниц, с которыми она не связана, предусмотрены специальные меры. С этой целью в процессоре выделяется дополнительный регистр защиты, содержащий описатель (дескриптор) таблицы страниц или базово-граничную пару. База определяет адрес начала таблицы страниц в основной памяти, а граница - длину таблицы страниц соответствующей программы. Загрузка этого регистра защиты разрешена только в привилегированном режиме. Для каждой программы операционная система хранит дескриптор таблицы страниц и устанавливает его в регистр защиты процессора перед запуском соответствующей программы. Отметим некоторые особенности, присущие простым схемам со страничной организацией памяти. Наиболее важной из них является то, что все программы, которые должны непосредственно связываться друг с другом без вмешательства операционной системы, должны использовать общее пространство виртуальных адресов. Это относится и к самой операционной системе, которая, вообще говоря, должна работать в режиме динамического распределения памяти. Поэтому в некоторых системах пространство виртуальных адресов пользователя уменьшается на размер общих процедур, к которым программы пользователей желают иметь доступ. Общим процедурам должен быть отведен определенный объем пространства виртуальных адресов всех пользователей, чтобы они имели постоянное место в таблицах страниц всех пользователей. В этом случае для обеспечения целостности, секретности и взаимной изоляции выполняющихся программ должны быть предусмотрены различные режимы доступа к страницам, которые реализуются с помощью специальных индикаторов доступа в элементах таблиц страниц. Следствием такого использования является значительный рост таблиц страниц каждого пользователя. Одно из решений проблемы сокращения длины таблиц основано на введении многоуровневой организации таблиц. Частным случаем многоуровневой организации таблиц является сегментация при страничной организации памяти. Сегментация памяти Этот подход к организации памяти опирается на возможность разделения программы на отдельные области-сегменты. Каждый сегмент представляет собой отдельную логическую единицу информации, содержащую совокупность данных или кода программы и расположенную в адресном пространстве пользователя. Сегменты создаются пользователями, которые могут обращаться к ним по символическому имени. В каждом сегменте устанавливается своя собственная нумерация слов, начиная с нуля. Обычно в подобных системах обмен информацией между пользователями строится на базе сегментов. Сегменты являются отдельными логическими единицами информации, которые необходимо защищать, и именно на этом уровне вводятся различные режимы доступа к сегментам. Можно выделить два основных типа сегментов: программные сегменты и сегменты данных (сегменты стека являются частным случаем сегментов данных). Поскольку общие программы должны обладать свойством повторной входимости, то из программных сегментов допускается только выборка команд и чтение констант. Запись в программные сегменты может рассматриваться как нарушение защиты и запрещаться системой. Выборка команд из сегментов данных также может считаться нарушением защиты, и любой сегмент данных может быть защищен от обращений по записи или по чтению. Для реализации сегментации существует несколько схем, которые отличаются друг от друга деталями реализации, но основаны на одних и тех же принципах. При сегментации памяти каждое слово в адресном пространстве пользователя определяется виртуальным адресом, состоящим из двух частей: старшие разряды адреса рассматриваются как номер сегмента, а младшие - как номер слова внутри сегмента. Наряду с сегментацией может также использоваться страничная организация памяти. В этом случае виртуальный адрес слова состоит из трех частей: старшие разряды адреса определяют номер сегмента, средние - номер страницы внутри сегмента, а младшие - номер слова внутри страницы. Как и в случае страничной организации, необходимо обеспечить преобразование виртуального адреса в реальный физический адрес основной памяти. С этой целью для каждого пользователя операционная система должна сформировать таблицу сегментов. Каждый элемент таблицы сегментов содержит описатель (дескриптор) сегмента (поля базы, границы и индикаторов режима доступа). При отсутствии страничной организации поле базы определяет адрес начала сегмента в основной памяти, а граница - длину сегмента. При наличии страничной организации поле базы определяет адрес начала таблицы страниц данного сегмента, а граница - число страниц в сегменте. Поле индикаторов режима доступа представляет собой некоторую комбинацию признаков блокировки чтения, записи и выполнения. Таблицы сегментов различных пользователей операционная система хранит в основной памяти. Для определения расположения таблицы сегментов выполняющейся программы используется специальный регистр защиты, который загружается операционной системой перед началом ее выполнения. Этот регистр содержит дескриптор таблицы сегментов (базу и границу), причем база содержит адрес начала таблицы сегментов выполняющейся программы, а граница - длину этой таблицы сегментов. Разряды номера сегмента виртуального адреса используются в качестве индекса для поиска в таблице сегментов. Таким образом, наличие базово-граничных пар в дескрипторе таблицы сегментов и элементах таблицы сегментов предотвращает возможность обращения программы пользователя к таблицам сегментов и страниц, с которыми она не связана. Наличие в элементах таблицы сегментов индикаторов режима доступа позволяет осуществить необходимый режим доступа к сегменту со стороны данной программы. Для повышения эффективности схемы используется ассоциативная кэш-память. Пример преобразования адресов с помощью сегментной таблицы приведен на рис. 3.17. Каждый сегмент (S) виртуального пространства имеет в таблице свой адрес (S), по которому хранится вся информация, относящаяся к данному сегменту. Эта информация включает в себя: · тип доступа (поле RWX) к сегменту; · местоположение сегмента (поле F, если F=1, то сегмент S находится в ОП, если F=0, то во вторичной памяти; · начальный адрес сегмента и размер сегмента (поле L). Выборка и замена сегментов выполняется аналогично выборке и замене страниц. Реальный адрес вычисляется путем добавления к начальному адресу, полученному из таблицы сегментов, адреса внутри сегмента. ![](http://konspekta.net/megapredmetru/baza1/21697137076.files/image109.gif) Рис. 3.17. Преобразование адресов с помощью сегментной таблицы Отметим, что в рассмотренной схеме сегментации таблица сегментов с индикаторами доступа предоставляет всем программам, являющимся частями некоторой задачи, одинаковые возможности доступа, т.е. она определяет единственную область (домен) защиты. Однако для создания защищенных подсистем в рамках одной задачи для того, чтобы изменять возможности доступа, когда точка выполнения переходит через различные программы, управляющие ее решением, необходимо связать с каждой задачей множество доменов защиты. Реализация защищенных подсистем требует разработки некоторых специальных аппаратных средств. Вопросы для самоконтроля 1. Дайте определения основным характеристикам памяти. 2. Какие существуют методы доступа к памяти, и чем они отличаются друг от друга? 3. Какую проблему и за счет чего решает иерархическая организация памяти? 4. В чем состоит принцип локальности по обращению? 5. На каких принципах строятся оперативные запоминающие устройства? 6. За счет чего может быть повышено быстродействие ядра микросхем ОЗУ? 7. Как можно оптимизировать доступ к ОЗУ? 8. Каковы назначение и структура блочной организации ОП? 9. Для чего и как применяется расслоение памяти? 10. Охарактеризуйте пакетный и конвейерный методы доступа к памяти. 11. Как устроена ассоциативная память? 12. Как работает кэш-память с прямым распределением? 13. Как работает кэш-память с полностью и множественно-ассоциативным распределением? 14. Охарактеризуйте стратегии обновления ОП и замещения блоков в кэш-памяти. 15. Для чего нужна виртуальная память? 16. В чем заключается страничная организация виртуальной памяти? 17. Как организуется сегментация виртуальной памяти? |