PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

Фьючерс на медь цена.

Память. Верхний уровень

Виртуальная память

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

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

Идея виртуальной памяти возникла из желания выполнять программы большего размера чем ОЗУ. Вначале стали использовать оверлейную структуру программ, когда большая программа разбивается на отдельные модули перекрытия — оверлеи (overlays). Первый модуль загружается в память и работает. Если ему нужен код или данные, содержащиеся в других модулях, то работающий модуль вызывает функции, загружающие другие модули. При этом программист сам должен отследить:

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

При этом отметим, что, поскольку вновь загружаемые модули "ложатся" в память на место находившихся там ранее, то

  1. разные объекты программы, находящиеся в разных модулях, но попадающие в одно и то же место физической памяти получают одни и те же физические адреса;
  2. расходуется время на перезагрузку модулей;
  3. фрагментируется память, поскольку модули имеют разные размеры;
  4. для работы в другой конфигурации памяти требуется перекомпоновка программы.

Как альтернатива оверлейной структуре, возникла концепция виртуальной памяти (1961 г, Манчестер). Фактически используется та же идеология перезагрузки модулей — свопинг (swapping), однако замена осуществляется аппаратурой и операционной системой автоматически, без какого-либо участия программиста и незаметно для него (см. рисунок ниже).

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

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