ТЕОРЕТИЧЕСКОЕ ОПИСАНИЕ
Виртуальная память
Термин "виртуальная память" обычно ассоциируется с возможностью адресовать пространство, гораздо большее, чем емкость реальной (физической) памяти конкретной ЭВМ. Существуют два наиболее общих способа реализации виртуальной памяти - страничная и сегментная. Суть концепции виртуальной памяти заключается в том, что адреса, к которым обращается выполняющийся процесс, отделяются от адресов, реально существующих в оперативной памяти. Те адреса, на которые делает ссылки выполняющийся процесс, называются виртуальными адресами, а те адреса, которые существуют в первичной памяти, называются реальными (физическими) адресами. Диапазон виртуальных адресов, к которым может обращаться выполняющийся процесс, называется виртуальным адресным пространством V этого процесса. Диапазон реальных адресов, существующих в конкретной ЭВМ, называется реальным (физическим) адресным пространством R этой машины.
Несмотря на то, что процессы обращаются только к виртуальным адресам, в действительности они должны работать с реальной памятью. Таким образом, во время выполнения процесса виртуальные адреса необходимо преобразовывать в физические, причем это преобразование нужно выполнять быстро, иначе производительность ЭВМ будет снижаться до неприемлемых уровней и тем самым практически сведутся на нет преимущества, которые должна обеспечить концепция виртуальной памяти.
Для установления соответствия между виртуальными и физическими адресами наиболее часто используется механизм динамического преобразования адресов. Этот механизм обеспечивает преобразование виртуальных адресов в физические во время выполнения процесса. При таком преобразовании смежные адреса виртуального адресного пространства не обязательно будут смежными в физической памяти. Таким образом, программист освобождается от необходимости учитывать размещение своих процедур и данных в оперативной памяти.
Так как пространство V всегда будет больше, чем пространство R, и если операционная система работает в многозадачном режиме, то необходимо обеспечить средства хранения программ и данных в большой вспомогательной памяти. Такая необходимость следует из того, что ресурсы физической памяти совместно используются многими процессами, т.е., становятся разделяемыми. Обычно эта задача решается с помощью двухуровневой схемы построения памяти, показанной на рис. 1. Первый уровень представляет собой физическую память, в которой находятся выполняемые процессы. В этой же памяти должны размещаться данные, к которым обращается выполняющийся процесс. Второй уровень - это внешняя память большой емкости, способная хранить программы и данные, которые не могут все сразу разместиться в первичной памяти. Память этого уровня называется внешней, или вторичной.
Виртуальная память в современных операционных системах, в том числе и в ОС Windows, создается на дисковых устройствах и является расширением логического и физического адресных пространств. С точки зрения программы, виртуальная память является непрерывным адресным пространством, объем которого ограничен только возможностями устройств внешней памяти (дисков), имеющихся в конфигурации компьютера. Такая память может восприниматься программой как непрерывный участок памяти с прямым доступом, что позволяет выполнять обращение к ней как к обычному массиву. Это в значительной степени упрощает программирование задач, обрабатывающих большие объемы информации (видео файлы, базы данных и т. п.).
Рис 1. Двухуровневая организация виртуальной памяти.
Динамическое преобразование адресов
Механизм динамического преобразования адресов должен вести таблицы, показывающие, какие виртуальные адреса в текущий момент находятся в физической памяти, и где именно они размещаются. Если бы такое отображение осуществлялось побайтно, то информация об отображении была бы столь велика, что для ее хранения потребовалось бы столько же или даже больше физической памяти, чем для самих процессов. Поэтому, виртуальная память имеет, как правило, блочную организацию. Такая организация предполагает хранение виртуальных блоков во внешней памяти и их загрузку (подкачку) в оперативную память по мере необходимости. При этом происходит отображение виртуального адресного пространства на физическое адресное пространство ЭВМ. Это отображение выполняется средствами ОС.
Адреса в системе поблочного отображения являются двухкомпонентными ("двумерными"). Чтобы обратиться к конкретному элементу данных, программа указывает блок, в котором этот элемент располагается, и смещение этого элемента относительно начала блока. Виртуальный адрес v указывается при помощи упорядоченной пары (b, d), где b - номер блока, а d - смещение относительно начального адреса этого блока. Схема двумерной адресации показана на рис. 2.
Рис 2. Формат виртуального адреса в системе поблочного отображения.
Преобразование адреса виртуальной памяти V = (b,d) в адрес реальной памяти r осуществятся так, как это показано на рис. 3. Каждый процесс имеет собственную таблицу отображения блоков, которую операционная система ведет в реальной памяти.
Рис 3. Преобразование виртуального адреса при поблочном отображении.
Реальный адрес a этой таблицы загружается в специальный регистр центрального процессора, называемый регистром начального адреса таблицы блоков. Таблица отображения блоков содержит по одной строке для каждого блока процесса. Эти строки находятся в таблице в последовательном порядке. Номер блока b суммируется с базовым адресом a таблицы, образуя реальный адрес строки таблицы для блока b. Эта строка содержит реальный адрес b' блока b в реальной памяти. К этому начальному адресу прибавляется смещение d, и в результате образуется нужный реальный адрес r.
В случае, если блоки имеют фиксированный размер, говорят о страничной организации виртуальной памяти. В случае блоков переменной длины имеет место сегментная организация виртуальной памяти.