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


Лекция 8. Логическая организация памяти

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

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

 

Эти проблемы решались и решаются до сих пор. Есть несколько способов, позволяющих согласовать разные объемы памяти, разные способы ее организации в представлении программистов и реально аппаратно существующей.

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

Развитие методов организации вычислительного процесса в этом направлении привело к появлению метода, известного под названием – виртуальная память,о чем мы будем говорить более подробно ниже.

Таким образом, виртуальная память - это совокупность программно-аппаратных средств, позволяющих пользователям писать программы, размер которых превосходит имеющуюся оперативную память; для этого виртуальная память решает следующие задачи:

· размещает данные в запоминающих устройствах разного типа, например, часть программы в оперативной памяти, а часть на диске;

· перемещает по мере необходимости данные между запоминающими устройствами разного типа, например, подгружает нужную часть программы с диска в оперативную память;

· преобразует виртуальные адреса в физические.

CPU


Виртуальный адрес

 
 
MMU


Данные

(или команды)

Кэш
Физический адрес

 

       
 
   


Физический адрес

 
 
Основная память

 

 


Данные Пересылка с применением ПДП

Дисковая память
(или команды)

 

 

Рис. 8.1 Организация виртуальной памяти

       
   
 
 


Все эти действия выполняются автоматически, без участия программиста, то есть механизм виртуальной памяти является прозрачным по отношению к пользователю. Трансляцию виртуальных адресов в физические выполняет модуль управления памятью или же диспетчер памяти (Memory Management Unit). Когда нужные данные (или команды) отсутствуют в основой памяти, диспетчер перемещает их туда с диска, для этого используется механизм ПДП. Наиболее распространенными реализациями виртуальной памяти является страничное, сегментное и странично - сегментное распределение памяти, а также свопинг.