Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Osso.docx
Скачиваний:
16
Добавлен:
25.04.2019
Размер:
551.47 Кб
Скачать
  1. Архитектурные средства поддержки виртуальной памяти. Сегментно-страничная организация виртуальной памяти. Структура таблицы страниц.

сегментно-страничная организациz памяти

Существуют две другие схемы организации виртуальной памяти: сегментная и сегментно-страничная. Идеи сегментации изложены во введении к предыдущей главе. При сегментной организации виртуальный адрес по-прежнему является двумерным и состоит из двух полей - номера сегмента и смещения внутри сегмента.   Заметим, что с точки зрения ОС сегменты являются логическими сущностями и их главное назначение хранение и защита однородной информации (кода, данных и т.д.).

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

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

Рис. 9.3  Формирование физического адреса при сегментно-страничной организации памяти.

Сегментно-страничная организация виртуальной памяти позволяла совместно использовать одни и те же сегменты данных и программного кода в виртуальной памяти разных задач (для каждой виртуальной памяти существовала отдельная таблица сегментов, но для совместно используемых сегментов поддерживались общие таблицы страниц).

9.2.3 Таблица страниц

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

Итак, виртуальный адрес состоит из виртуального номера страницы (high-order bits) и смещения (low-order bits). Номер виртуальной страницы используется как индекс в таблице страниц для нахождения  записи (entry) о виртуальной странице.  Из этой записи в таблице страниц находится  номер кадра (page frame number), затем прибавляется  смещение и формируется  физический адрес.  Помимо этого запись  в таблице страниц содержит информацию об атрибутах страницы, в частности биты защиты.

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

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

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

Для того чтобы избежать необходимости  иметь огромную таблицу в памяти все время, а хранить лишь несколько ее фрагментов (это возможно опять же на основании свойства локальности!), многие компьютеры  используют многоуровневую таблицу страниц.

Рассмотрим модельный пример (см. рис. 9.4). Предположим, что  32-разрядный  адрес делится на 10-разрядное поле Рtr1, 10-разрядное поле Рtr2 и 12-разрядное смещение Offset. 12 разрядов смещения позволяют локализовать байт внутри страницы размером 4К (2**12), а всего имеем 2**20 страниц.  Как видно из рис. 9.4  1024 строки в  таблице верхнего уровня при помощи поляPtr1 ссылаются на 1024  таблицы второго уровня, каждая из которых содержит  также 1024 строки. При помощи поля Ptr2  каждая строка  таблицы второго уровня указывает на  конкретную страницу. Смысл такой организации в том, чтобы  избежать поддержки всех таблиц второго уровня (а их 1024) в памяти  постоянно.  Рассмотрим  пример с круглыми цифрами.  Допустим, что процессу нужны 12М памяти: 4М в нижней части памяти для кода, 4М в нижней части для данных и 4М в верхней части памяти для стека. Между дном стека и верхом данных гигантское пространство  размером 4Gb-12Mb, которое  не используется.  Для этого случая необходимы лишь 1 таблица верхнего уровня и 3 таблицы второго уровня.

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

Такой подход естественным  образом обобщается на три и более уровней таблицы.

Рассмотрим  одну  из  записей  таблицы страниц. Ее размер колеблется от системы к системе, но 32 бита - наиболее общий случай. Самое важное поле - номер кадра.  Цель страничного отображения - локализовать эту величину.  Далее бит присутствия.  Далее биты защиты (например,  0 - read/write, 1 - read only ...) Есть еще биты модификации (если на нее писали) и биты ссылки, которые  помогают выделить мало используемые страницы, биты разрешающие кэширование. Заметим, что адреса страниц на диске не являются частью таблицы страниц.

Как наличие нескольких уровней сказывается на производительности менеджера памяти?  Если предположить, что каждый уровень - отдельная таблица в памяти, преобразование адреса может потребовать нескольких  обращений к памяти.

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

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