Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы и ответы по ОС.doc
Скачиваний:
37
Добавлен:
27.08.2019
Размер:
3.35 Mб
Скачать

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

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

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

Минусы: сегменты разного размера, фрагментация ==> нужно двигать сегменты, а это непроизводительно ==> память нужно выделять одинаковыми небольшими частями.

31 Вопрос. Преобразование виртуального адреса в физический при страничном преобразовании

В процессе страничного преобразования старшие 20 бит 32-х битного линейного адреса заменяются новым значением – номером физической страницы. Младшие же 12 бит линейного адреса определяют положение байта внутри страницы и остаются неизменными.

Для уменьшения размера таблицы страниц в микропроцессорах x86 предусмотрена двухуровневая схема преобразования адреса. Основой страничного преобразования служит регистр управления CR3, содержащий 20-ти битный физический базовый адрес каталога страниц текущей задачи. Предполагается, что каталог выровнен по границе страничного кадра, постоянно находится в памяти и не участвует в свопинге.

Корневая страница, называемая каталогом страниц, содержит 1024 32-х битных дескриптора, называемых элементами каталога страниц PDE (Page Directory Entry). Каждый из них адресует подчиненную таблицу страниц. Каждая из этих таблиц содержит 1024 32-х битных дескриптора, называемая элементами таблицы страниц. PTE (Page Table Entry). Каждый PTE содержит адрес страничного кадра в физической памяти.

Собственно преобразование линейных адресов в физические состоит из следующих действий:

  1. старшие 10 бит (31 – 22) линейного адреса, дополненные двумя младшими нулями, служат индексом PDE;

  2. средние 10 бит (21 – 12) линейного адреса, дополненные двумя младшими нулями, индексируют таблицу страниц PTE. Элемент PTE содержит 20-битный базовый адрес страничного кадра в физической памяти;

  3. этот базовый адрес из элемента PTE объединяется с младшими 12-ю битами линейного адреса, образуя 32-х битный физический адрес;

Таким образом, используется многоуровневая таблица страниц:

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

Слева на рисунке находится таблица страниц верхнего уровня с 1024 записями, соответствующими 10-разрядному полю PT1. Когда виртуальный адрес предстает перед диспетчером памяти, он сначала выделяет поле PT1 и использует его значение как индекс таблицы верхнего уровня. Каждая из этих 1024 записей представляет 4 М, потому что целое 4-гигабайтное (то есть 32-разрядное) виртуальное адресное пространство было нарезано на куски по 1024 байта.

Запись, место которой определяется по индексу в таблице страниц верхнего уровня, выдает адрес или номер страничного блока таблицы страниц второго уровня. Запись 0 в таблице страниц первого уровня указывает на таблицу страниц для текста программы, запись 1 указывает на таблицу страниц для данных, запись 1023 указывает на таблицу страниц для стека. Другие (заштрихованные) записи не используются. Поле PT2 теперь используется как индекс в выбранной таблице второго уровня для поиска номера страничного блока самой страницы.

В случае 64-х битного линейного адреса идея остается той же: виртуальный адрес делится на номер виртуальной страницы (старшие биты) и сдвиг (младшие биты), просто при этом увеличивается вложенность таблиц страниц: