Страничная организация виртуальной памяти
Рассмотрим пример физической памяти, в которой изначально содержится 5 сегментов. Посмотрим, что происходит, если сегмент 1 удаляется, а сегмент 7, который меньше по размеру, помещается на его место. В результате между сегментом 7 и сегментом 2 оказывается неиспользованная («пустая») область. Затем сегмент 4 заменяется сегментом 5, а сегмент 3 — сегментом 6. Через некоторое время память разделится на ряд областей, одни из которых будут содержать сегменты, а другие — пустоты. Это называется внешней фрагментацией. В этом случае приходится принимать меры к освобождению для нового виртуального сегмента участка памяти необходимой длины за счет возможной подвижки в оперативной памяти других виртуальных сегментов или переписи информации (если она изменялась) из освобождаемого участка памяти во внешнюю память.
Страничная организация виртуальной памяти задачи исключаетнедостаток сегментной организации – внешнюю фрагментацию. Виртуальная память задачи разделяется на виртуальные “страницы” одинаковой длины, которые могут помещаться на любые физические “страницы” (области оперативной памяти той же длины, что и у виртуальных страниц задачи). Начальные адреса физических страниц имеют значения, кратные длине страницы. Часто используется величина, называемая номером физической страницы и являющаяся значением старших разрядов таких адресов. Количество младших разрядов определяется длиной страницы (младшие разряды, естественно, используются для указания смещения данных в странице).
Аналогично адресам по физической памяти также структурируются виртуальные адреса. Старшие разряды виртуального адреса являются номером виртуальной страницы, а младшие разряды указывают смещение данных в странице. Смещение данных в виртуальной и физической странице одинаковое. Объем виртуальной памяти задачи может не совпадать с объемом физической памяти машины (как правило, превосходит его) и, соответственно, может не совпадать длина виртуальных и физических адресов. При этом разным является лишь количество разрядов, отводимых под номер страницы.
Для замены виртуального адреса на физический адрес, используется создаваемая операционной системой таблица виртуальных страниц, каждая строка которой соответствует одной виртуальной странице и содержит номер физической страницы, содержащей информацию этой виртуальной страницы. В этой же строке таблицы находится признак наличия данной виртуальной страницы в физической памяти. Если необходимая виртуальная страница присутствует в физической памяти, то физический адрес для непосредственного обращения в память образуется заменой номера виртуальной страницы на номер физической страницы из соответствующей строки таблицы соответствия. Если же необходимая виртуальная страница в физической памяти отсутствует, то операционная система перемещает ее (“подкачивает”) из внешней памяти на физическую страницу, номер которой определяется с использованием применяемого алгоритма “замещения” страниц в физической памяти. Могут использоваться разные алгоритмы: “первым пришел – первым вышел”, по давности использования и др.
При этом в замещаемой странице может находиться информация как выполняемой задачи, так и других задач. Если содержимое страницы, выбранной для замены, изменялось с момента переписи в нее информации виртуальной страницы из некоторого места внешней памяти, то обратная перепись измененного содержимого страницы в то же место внешней памяти выполняется до осуществления переписи на выбранную физическую страницу информации требуемой виртуальной страницы из внешней памяти.
Использование для замещения страниц таблицы виртуальных страниц в оперативной памяти приводит к 100% накладных расходов. Свойство “локальности” программыпозволяет успешно использовать для замены адресов “быструю” таблицу “адресной трансляции” на регистрах. Строки такой таблицы содержат как виртуальный номер страницы, так и соответствующий ему номер физической страницы. Ассоциативный поиск для замены виртуального адреса на физический происходит в таблице адресной трансляции по номеру виртуальной страницы. В случае “промаха” при поиске в таблице адресной трансляции производится перепись необходимой строки в таблицу адресной трансляции из таблицы виртуальных страниц в оперативной памяти.
Несомненным преимуществом страничной виртуальной памяти является обеспечение плотного заполнения физической памяти и эффективной замены информации (страниц) в ней.
При заметном числе страниц, используемых задачей, недоиспользование объема последней страницы (“внутренняя фрагментация”) не является существенным.
Недостатком страничной организации виртуальной памяти является отсутствие имеющейся в сегментной организации виртуальной памяти возможности уникальной защиты объектов программы (программных модулей и модулей данных) в связи с тем, что несколько объектов, требующих разного типа защиты, могут быть помещены в одной странице.