Виртуальные адреса, как следует из их названия, virtual .Они обрабатываются только процессором и не соответствуют фактическим адресам до тех пор, пока они не будут переведены.
Перевод выполняется аппаратно, благодаря таблицам, которые заполняются операционной системой.Эти таблицы указывают для каждого потенциального адреса виртуальной страницы, которому соответствует физический адрес страницы.Поэтому в основном виртуальные адреса сопоставляются с физическими (RAM) адресами.
Не удалось понять, где находится виртуальное адресное пространство, в ОЗУ или на HARD-DISK?Если он присутствует в оперативной памяти, то как его адресное пространство больше физического адресного пространства?
Процесс всегда имеет одинаковую структуру памяти в терминах виртуальных адресов.В нижней части адреса находятся инструкции, глобальные данные и куча, которые организованы в несколько секций .На верхнем торце находятся параметры программы (argv) и стек.Между ними есть свободное пространство, которое позволяет стеку и куче расти.
Таким образом, есть адреса, равные 0 (первая инструкция программы) и 0xfffffffffffffffff (начало стека).
Очевидно, что is isдалеко за пределами возможностей большинства (всех?) присутствующих ОЗУ.С 64-битными виртуальными адресами и 4 ГБ ОЗУ (32 бита) можно использовать максимум одну страницу более 1 млрд.
Но механизм преобразования возможен благодаря переводу на основе страниц.В свободном пространстве между кучей и стеком большинство адресов никогда не будут использоваться.В этом случае ОС не создает таблицу страниц для перевода.
Если вы генерируете случайный адрес в программе, наиболее вероятно, что он не будет соответствовать адресу, отображаемому системой в ОЗУ.Если вы попытаетесь получить доступ по этому адресу, процессор обнаружит, что страницы не существует, и выдаст исключение, которое будет обработано системой.Скорее всего, система остановит вашу программу и отобразит сообщение об ошибке типа «нарушение прав доступа».
Тот же механизм используется для отображения части памяти на диск.Чтобы каким-то образом увеличить размер памяти, система может заменить часть диска физической памяти, назначенной процессу, на диск, чтобы выделить ее другому процессу.Если первый процесс попытается получить к нему доступ, снова будет сгенерировано исключение, но ОС обнаружит, что адрес соответствует зоне памяти, сохраненной на диске.Он прочитает диск, определит физический адрес для этой страницы, заполнит соответствующую таблицу страниц, восстановит содержимое памяти и вернется к программе, которая теперь может осуществлять доступ к памяти.