Операционные системы/Виртуальная оперативная память
Материал из eSyr's wiki.
(Новая: Рассмотрим некоторые проблемы организации адресации в программах/процессах и связанные с ними пробл...) |
(Новая: Рассмотрим некоторые проблемы организации адресации в программах/процессах и связанные с ними пробл...) |
Текущая версия
Рассмотрим некоторые проблемы организации адресации в программах/процессах и связанные с ними проблемы использования ОЗУ в целом.
В общем случае, схема получения исполняемого кода программы следующая:
Данная схема достаточно очевидна, так как она связана с привычным для нас процессами трансляции. Остановимся подробней на исполняемом модуле. Данный модуль представляет собой готовую к выполнению программу в машинных кодах. При этом внутри программы к моменту образования исполняемого модуля используется модель организации адресного пространства программы (эта модель, в общем случае, не связана с теми ресурсами ОЗУ, которые предполагается использовать позднее). Для простоты будем считать, что данная модель представляет собой непрерывный фрагмент адресного пространства, в пределах которого размещены данные и команды программы. Будем называть подобную организацию адресации в программе программной адресацией или логической/виртуальной адресацией.
Итак, повторяем, на уровне исполняемого кода имеется программа в машинных кодах, использующая адреса данных и команд. Эти адреса, в общем случае, не являются адресами конкретных физических ячеек памяти, в которых размещаются эти данные при размещении программы в ОП, более того, в последствии мы увидим, что виртуальным (или программным) адресам могут ставиться в соответствие произвольные физические адреса памяти. То есть при реальном исполнении программы далеко не всегда виртуальная адресация, используемая в программе совпадает с физической адресацией, используемой ЦП при выполнении данной программы.
[править] Базирование
Элементарное программно-аппаратное решение – использование возможности базирования адресов. Суть его состоит в следующем: пусть имеется исполняемый программный модуль. Виртуальное адресное пространство этого модуля лежит в диапазоне [0, Aкон]. В ЭВМ выделяется специальный регистр базирования Rбаз, который содержит физический адрес начала области памяти, в которой будет размещен код данного исполняемого модуля. При этом исполняемые адреса, используемые в модуле будут автоматически преобразовываться в адреса физического размещения данных путем их сложения с регистром Rбаз. Таким образом, код используемого модуля может перемещаться по пространству физического ОЗУ. Эта схема является элементарным решением организации простейшего аппарата виртуальной памяти (то есть аппаратных средств, позволяющих автоматически преобразовывать виртуальные адреса программы в адреса физической памяти).
[править] Организация страничной памяти
Рассмотрим более сложные механизмы организации виртуальной памяти.
Пусть имеется вычислительная система, функционирующая в мультипрограммном режиме. То есть одновременно в системе обрабатываются несколько программ/процессов. Один из них занимает ресурсы ЦП. Другие ждут завершения операций обмена, третьи – готовы к исполнению и ожидают предоставления ресурсов ЦП. При этом происходит завершение выполнявшихся процессов и ввод новых, это приводит к возникновению проблемы фрагментации ОЗУ. Путь решения этой проблемы – использование более развитых механизмов организации ОЗУ и виртуальной памяти, позволяющие отображать виртуальное адресное пространство программы/процесса не в одну непрерывную область физической памяти, а в некоторую совокупность областей.
Страничная организация памяти предполагает разделение всего пространства ОЗУ на блоки одинакового размера – страницы. Обычно размер страницы равен 2k.