Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы операционных систем.doc
Скачиваний:
282
Добавлен:
01.05.2014
Размер:
2.22 Mб
Скачать

Сегментно-страничная организации виртуальной памяти

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

На практике, однако, появления в системе большого количества таблиц страницстараются избежать, организуя неперекрывающиеся сегменты в одном виртуальном пространстве, для описания которого хватает однойтаблицы страниц. Таким образом, однатаблица страницотводится для всего процесса. Например, в популярных ОС Linux и Windows 2000 все сегменты процесса, а также область памяти ядра ограничены виртуальным адресным пространством объемом 4 Гбайт. При этом ядро ОС располагается по фиксированнымвиртуальным адресамвне зависимости от выполняемого процесса.

Структура таблицы страниц

Организация таблицы страниц– один из ключевых элементов отображения адресов встраничнойисегментно-страничнойсхемах. Рассмотрим структурутаблицы страницдля случаястраничной организацииболее подробно.

Итак, виртуальный адрессостоит из виртуального номера страницы и смещения. Номер записи втаблице страницсоответствует номеру виртуальной страницы. Размер записи колеблется от системы к системе, но чаще всего он составляет 32 бита. Из этой записи втаблице страницнаходится номер кадра для данной виртуальной страницы, затем прибавляется смещение и формируется физический адрес. Помимо этого запись втаблице страницсодержит информацию об атрибутах страницы. Этобиты присутствияи защиты (например,0– read/write,1– read only...). Также могут быть указаны:бит модификации, который устанавливается, если содержимое страницы модифицировано, и позволяет контролировать необходимость перезаписи страницы на диск;бит ссылки, который помогает выделить малоиспользуемые страницы; бит, разрешающий кэширование, и другие управляющие биты. Заметим, что адреса страниц на диске не являются частьютаблицы страниц.

Основную проблему для эффективной реализации таблицы страницсоздают большие размеры виртуальных адресных пространств современных компьютеров, которые обычно определяются разрядностью архитектуры процессора. Самыми распространенными на сегодня являются 32-разрядные процессоры, позволяющие создавать виртуальные адресные пространства размером 4 Гбайт (для 64-разрядных компьютеров эта величина равна 264байт). Кроме того, существует проблема скорости отображения, которая решается за счет использования так называемойассоциативной памяти(см. следующий раздел).

Подсчитаем примерный размер таблицы страниц. В 32-битном адресном пространстве при размере страницы 4 Кбайт (Intel) получаем232/212=220, то есть приблизительно миллион страниц, а в 64-битном и того более. Таким образом, таблица должна иметь примерно миллион строк (entry), причем запись в строке состоит из нескольких байтов. Заметим, что каждый процесс нуждается в своейтаблице страниц(а в случаесегментно-страничнойсхемы желательно иметь по однойтаблице страницна каждый сегмент).

Понятно, что количество памяти, отводимое таблицам страниц, не может быть так велико. Для того чтобы избежать размещения в памяти огромной таблицы, ее разбивают на ряд фрагментов. В оперативной памяти хранят лишь некоторые, необходимые для конкретного момента исполнения фрагментытаблицы страниц. В силу свойства локальности число таких фрагментов относительно невелико. Выполнить разбиениетаблицы страницна части можно по-разному. Наиболее распространенный способ разбиения – организация так называемоймногоуровневой таблицы страниц. Для примера рассмотрим двухуровневуютаблицус размером страниц 4 Кбайт, реализованную в 32-разрядной архитектуре Intel.

Таблица, состоящая из220строк, разбивается на210 таблицвторого уровня по210строк. Этитаблицывторого уровня объединены в общую структуру при помощи однойтаблицыпервого уровня, состоящей из210строк. 32-разрядный адрес делится на 10-разрядное полеp1, 10-разрядное полеp2и 12-разрядное смещениеd. Полеp1указывает на нужную строку втаблицепервого уровня, полеp2– второго, а полеdлокализует нужный байт внутри указанного страничного кадра (см.рис. 9.1).

Рис. 9.1.Пример двухуровневой таблицы страниц

При помощи всего лишь одной таблицывторого уровня можно охватить 4 Мбайт (4 Кбайт x 1024) оперативной памяти. Таким образом, для размещения процесса с большим объемом занимаемой памяти достаточно иметь в оперативной памяти однутаблицупервого уровня и несколькотаблицвторого уровня. Очевидно, что суммарное количество строк в этихтаблицахмного меньше220. Такой подход естественным образом обобщается на три и более уровнейтаблицы.

Наличие нескольких уровней, естественно, снижает производительность менеджера памяти. Несмотря на то что размеры таблицна каждом уровне подобраны так, чтобытаблицапомещалась целиком внутри одной страницы, обращение к каждому уровню – это отдельное обращение к памяти. Таким образом, трансляция адреса может потребовать нескольких обращений к памяти.

Количество уровней в таблице страницзависит от конкретных особенностей архитектуры. Можно привести примеры реализации одноуровневого (DEC PDP-11), двухуровневого (Intel, DEC VAX), трехуровневого (Sun SPARC, DEC Alpha) пейджинга, а также пейджинга с заданным количеством уровней (Motorola). Функционирование RISC-процессора MIPS R2000 осуществляется вообще безтаблицы страниц. Здесь поиск нужной страницы, если эта страница отсутствует вассоциативной памяти, должна взять на себя ОС (так называемый zero level paging).