Почему в windows адреса называются «виртуальными»?
Добрый день!
При чтении одной из статьи про разбор PE файла наткнулся на такую аббревиатуру: RVA. Гугл сказал, что это адрес, относительно image base. Теперь вопрос: почему он виртуальный? Ведь если 2 процесса проецируют свои image base по одинаковому адресу (например, 0x400000), естественно, что оба образа не могут находится по одному и тому-же адресу, ведь ОС преобразует адреса в виртуальные, однако делает это скрыто от разработчика, то-есть на момент разработки разработчик оперирует такими адресами, будто программа будет запущена на компьютере только одна и что она эгоистично заберет себе "хорошие цифры". Для чего все эти приставки "виртуальный" к этим терминам, если никаких виртуальных адресов разработчик вообще не видит? Почему именно relative virtual address, а не по-простому -
relative base address? Подскажите пожалуйста, может чего не понял
Потому что система работает в защищённом режиме процессора, в котором напрямую с памятью работает только ядро.
Каждому процессу ядро выделяет адресное пространство, которое проецируется на реальные адреса оперативной памяти.
Спасибо за ссылку на википедию, но вопрос был в другом: почему RVA имеет в аббревиатуре слово "virtual", если вычисление виртуальных адресов - не работа программы, а работа ОС
Виртуа́льная па́мять (англ. virtual memory) — метод управления памятью компьютера, позволяющий выполнять программы, требующие больше оперативной памяти, чем имеется в компьютере, путём автоматического перемещения частей программы между основной памятью и вторичным хранилищем (например, жёстким диском)[1][2][3]. Для выполняющейся программы данный метод полностью прозрачен и не требует дополнительных усилий со стороны программиста, однако реализация этого метода требует как аппаратной поддержки, так и поддержки со стороны операционной системы
sddvxd, А при чём тут "виртуальная память", она же немного про другое? Но в любом случае, ты сам выделил ключевую мысль, странно, что тебе этого не хватило и ты прицепился к виртуальности адресов и к программистам.
Адреса в коде задачи теперь формируются в предположении, что задача
будет работать в адресном пространстве, начинающемся с нуля. Операционная система может загрузить задачу в любой свободный участок памяти:
проблема адаптации программы к адресам решается установкой соответствующего значения базового и предельного регистров. Более того, при необходимости задачу можно переместить в другое место памяти для этого достаточно скопировать содержимое ее адресного пространства в память по новым адресам и изменить соответствующим образом значения базы и предела.
Идея виртуальной памяти состоит в том, что исполнительные адреса, фигурирующие в машинных командах, считаются не адресами физических ячеек памяти, а некоторыми абстрактными виртуальными адресами. Все множество виртуальных адресов называется виртуальным адресным пространством. Виртуальные адреса преобразуются процессором в адреса ячеек памяти (физические адреса) по некоторым правилам, причем эти правила могут
динамически изменяться.
sddvxd, не надо сыпать цитатами, отвечающие вам умеют читать. Скажите своими словами, где вы видите противоречия или что именно вам непонятно в том, что написано. Потому что тем, кто знает, как работает защищённый режим, всё и так понятно, и мы не телепаты, чтобы определить, что не доходит до вас.
sddvxd, если ваш вопрос сводится к тому, почему для этого механизма используется слово "виртуальный", то ответ очень прост: "Потому что так решили". Название - это условность. Плюс, нужно ещё помнить о том, что речь также и о механизме, который включает виртуальную оперативную память, то есть swap file, позволяющий запихнуть в RAM больше, чем физический размер RAM.
Ezhyg, был не прав. Перечитал, что читал - оказывается, адреса уже являются виртуальными изначально, операционная система прибавляет просто значение специального регистра (base) для данного участка памяти, чтобы преобразовать адрес в физический
Извиняюсь за дезинформацию. Адреса изначально представлены виртуальными, физический же адрес вычисляются по-разному в различных моделях представления виртуальной памяти