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



Организация виртуальной памяти позволяет адресовать пространство памяти, гораздо большее, чем емкость реальной памяти компьютера. Впервые виртуальная память была реализована в вычислительной машине Atlas, созданной в Манчестерском университете в Англии в 1960 г. В настоящее время системы виртуальной памяти нашли широкое распространение.

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

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

 

Пространство имен Логическое имя Первый этап Пространство виртуальных адресов Виртуальный адрес Второй этап Физическая память Физический адрес  

 

Рис.3.4. Этапы отображения адресов

 

За выполнение первого этапа преобразования (перевод логических имен в виртуальные (логические) адреса, используемые программой) отвечают обычно системы программирования (перевод осуществляется на этапе трансляции). Транслятор в качестве виртуального адреса вырабатывает относительный адрес (смещение) и информацию для настройки базового адреса.

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

Таким образом, в основе виртуальной памяти лежат следующие средства:

¨ относительная адресация памяти,

¨ разрывное распределение памяти,

¨ возможность динамической настройки адресов.

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

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

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

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

Таким образом, логический адрес состоит из двух компонентов:

(Block, Offset),

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

Реализация динамического преобразования адресов строится на использования табличного отображения (рис.3.5).

 

Виртуальная память Механизм отображения адресов Реальная память
.....   .....
  Таблица отображения  
     
     
.....    
     
     
     
     
     
   
    .....
     
     
     
     
.....    

Внешняя память

 
 
.....
 
 

 

Рис.3.5. Отображение элементов виртуального адресного пространства на реальное адресное пространство

 

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

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

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

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

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

Схема вычисления линейного адреса физической памяти по двухкомпонентному (“двумерному”) виртуальному адресу показана на рис.3.6.

Адрес самой таблицы отображения блоков (ТОБ) обычно содержится в специальном регистре процессора.

Таблица содержит по одной строке для каждого блока процесса, причем эти строки нумеруются последовательно (0 - строка, представляющая блок с номером Block= 0, 1 - строка для блока Block= 1 и т.д.). В каждой строке есть поле базового физического адреса соответствующего блока в реальной памяти (Base). Кроме того, для каждого блока в представляющей его строке необходимо хранить признак его присутствия в первичной памяти (поле Present). Это поле представляется единственным битом, который устанавливается в 1 при загрузке блока в память и сбрасывается в 0 при его замещении в первичной памяти (выталкивании во вспомогательную память).

Каждая строка таблицы имеет фиксированный формат и имеет длину L. Для выбора нужной строки к адресу таблицы прибавляется номер адресуемого блока, умноженный на длину строки таблицы. Таблицы могут быть общими для всех процессов (глобальными) или локальными, используемыми отдельными процессами.

 


Дата добавления: 2016-01-05; просмотров: 29; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!