Управление виртуальной памятью — это способ управления памятью компьютера, который позволяет исполнять программы, требующие большего объема оперативной памяти, чем есть в персональном компьютере, путем автоматического перемещения фрагментов программы между основной памятью и вторичным хранилищем.
Введение
Следует отметить, что, хотя за различным передовым оборудованием, предназначенным для хранения информации, скрыты на самом деле очень сложные технологии, рядовому системному администратору не нужно обладать знаниями по всем деталям. Но в реальности системные администраторы обязаны всегда иметь в виду лишь одно обстоятельство, а именно, оперативной памяти практически всегда не хватает.
Данный посыл может казаться шуткой, однако большинство конструкторов операционных систем затрачивают большое количество времени, пытаясь уменьшить последствия данного фактически существующего недостатка. Для этого они формируют так называемую виртуальную память, то есть метод объединения оперативного запоминающего устройства (ОЗУ) с работающим более медленно информационным хранилищем. Причем, они стараются сделать так, чтобы это воспринималось пользователями, как будто в компьютере имеется больше памяти.
То есть, некоторая часть приложения располагается на диске. Иными словами, диск является своеобразным дополнением оперативной памяти; большое хранилище в некотором смысле способно поддерживать более быструю память, обладающую меньшим объемом.
Управление виртуальной памятью
Все способы управления памятью преследуют одну и ту же цель, а именно, сохранить в памяти мультипрограммный набор, необходимый для мультипрограммирования. Стандартные способы предполагают, что все программное приложение перед его исполнением должно быть размещено в основной памяти. Виртуальная память является технологией, позволяющей осуществлять процесс, который может лишь фрагментарно находиться в основной памяти. Это означает, что виртуальная память предоставляет возможность выполнения программы, объем которой превышает размеры физического адресного пространства.
Понятие «адрес памяти» можно рассматривать с разных точек зрения. С одной стороны, при формировании любой программы программист или должен явно указать, по каким адресам должны быть размещены переменные и команды, что необходимо при программировании на языке ассемблера, или же назначение конкретных адресов может быть доверено системе программирования. Тот набор адресов памяти, которые указаны в программе, принято именовать виртуальными адресами.
С другой стороны, всем ячейкам памяти персонального компьютера должен соответствовать ее адрес, который обязан размещаться на шине адреса при любом обращении к ячейке. Такой набор адресов принято называть физическими адресами. Сегодня программирование в области физических адресах используется только в достаточно специализированных случаях. Обычно ни программисты, создающие программы, ни программы компиляции, транслирующие ее в машинные коды, не рассчитывают на применение конкретных физических адресов.
Переход от использования виртуальных адресов к физическим адресам может осуществляться разными способами. В системах, которые не рассчитаны на применение специального аппаратного обеспечения для преобразования адресов, подмена виртуальных адресов физическими может выполняться лишь программным путем. Это необходимо сделать до начала использования программы, то есть, или на этапе осуществления компоновки программы, или (в более поздних системах) при выполнении загрузки программы из файла в память.
В передовых системах, которые предназначены для работы на процессорах с сегментной или страничной структурной организацией памяти, программа может даже после загрузки в память содержать виртуальные адреса. Переход к физическим адресам должен выполняться при считывании каждой команды из памяти, при обращении к ячейкам данных, то есть, при любом применении адреса. Естественно, это может быть реализовано лишь в том случае, когда есть специальное оборудование, которое позволяет преобразовать адреса фактически без потери времени. На рисунке ниже представлена структурная организация виртуальной памяти.
Рисунок 1. Структурная организация виртуальной памяти. Автор24 — интернет-биржа студенческих работ
По существу, виртуальная память является не такой уж сложной структурой, то есть, недостаток оперативной памяти здесь может компенсироваться имеющимся свободным дисковым пространством, которое выступает в роли оперативной памяти. Следует понимать, что фрагменты программ, которые не поместились в оперативной памяти из-за ее недостаточного объема, должны будут размещаться на диске, что будет являться эквивалентном размещения в оперативной памяти. Виртуальная память состоит из совокупности всех ячеек памяти, то есть, оперативной и внешней, которые имеют сквозную нумерацию от нуля до конечного значения адреса. Системы виртуальной памяти способны создать для процессов иллюзию присутствия больших объем оперативной памяти, чем реально имеющиеся в компьютере.
Виртуальная память наиболее часто формируется на основе страничной организации памяти, которая совмещена со свопингом, то есть, подкачкой страниц. Свопингу должны подвергаться лишь те страницы, которые требуются процессору. Таким образом, передвижение страниц по запросам означает, что:
- Программа может исполняться центральным процессором, когда отдельные страницы расположены в основной памяти, а остальная их часть находится во внешней памяти.
- В процессе исполнения новая страница не должна перемещаться в основную память до того момента, пока в ней не возникла потребность.
Для того чтобы организовать учет распределения страниц между внешней и основной памятью, все строки таблицы страниц должны быть дополнены битом местоположения страницы (valid/invalid bit). В том случае, когда процессор совершает попытку использования страницы, которая помечена значением invalid, происходит событие, именуемое страничной недостаточностью (paging fault).