Противоречивые определения виртуальной памяти
Кажется, что есть два определения виртуальной памяти, и мне интересно, оба ли они описывают одно и то же или же два одинаковых, но разных понятия называются одним и тем же?
Определение 1: средство расширения ОЗУ с использованием вторичного хранилища
"Виртуальная память - это особенность операционной системы (ОС), которая позволяет компьютеру компенсировать нехватку физической памяти" - techtarget
"Виртуальная память - это имитация ОЗУ. Когда вы израсходуете всю свою ОЗУ, ваш компьютер перенесет данные на свободное место на жестком диске". - удалить компьютерную историю
"Виртуальная память - это метод, который позволяет выполнять процессы, которые не полностью доступны в памяти"
Определение 2: система, к которой обращена память
"Виртуальная память - это метод управления памятью... Он отображает адреса памяти, используемые программой, называемые виртуальными адресами, в физические адреса в памяти компьютера". - википедия
и виртуальная память - это то, что отвечает за предоставление программе собственного адресного пространства, поэтому она может предположить, что ее начало находится по адресу 0x00
Вопрос: я в замешательстве? Как эти определения совместимы?
3 ответа
Виртуальная память - это любая память, которая не обязательно отображается один на один в физической памяти. Обычно он описывает концепцию или архитектуру и подразумевает некоторый интерфейс для ее использования.
Таким образом, в принципе, могут применяться оба ваших указанных определения: это может быть память, которая хранится на другом носителе, кроме основной памяти, и может иметь адреса, которые не соответствуют физическим адресам.
Например, в Windows ваши приложения могут иметь области памяти, совместно использующие один и тот же виртуальный адрес, но имеющие различное содержимое, в то время как некоторые другие области по одинаковым адресам совместно используют одно и то же содержимое, например код из библиотек, и вы также можете иметь общее содержимое по разным адресам для каждого приложения. особенно с ASLR, где адреса рандомизированы.
В то же время виртуальная адресация также обеспечивает прозрачное отображение виртуальной памяти на диск, обычно с помощью исключений или прерываний ЦП, которые возникают, когда код обращается к памяти, которая не сопоставима с физической ОЗУ, так что операционная система может автоматически загрузить данные в оперативную память и затем предоставить доступ к ней.
Они описывают две (связанные) вещи. Первый описывает, как система справляется с нехваткой физической памяти путем обмена некоторой информацией назад и вперед между физической памятью и дисководом. Это скрыто от запущенных программ операционной системой и делает физическую память больше, чем она есть на самом деле. Попробуйте поискать файлы подкачки ОЗУ
Второй описывает, как процессор решает, к какой части памяти (обычно фактической физической памяти) обращаться к каждой программе, работающей в системе. Это может быть лучше описано как адресация виртуальной памяти. Таким образом, каждая программа, работающая на машине, может думать, что у нее есть собственный выделенный блок памяти, начиная с адреса 00000, но на самом деле блоки памяти фактически распределяются по физической памяти. Попробуйте поискать адресацию памяти, указатели
Они описывают одно и то же. Статья в Википедии - это техническое объяснение. Я думаю, что введение статьи плохо / неловко сформулировано, все же. Основная часть статьи описывает это довольно тщательно.
Виртуальная память, как существительное, - это любая часть памяти, используемая для хранения того, что в противном случае было бы в памяти, но ее нет, обычно потому, что там недостаточно места или она не понадобится какое-то время (относительно; в то время как "может быть доли секунды). Обычно это место на каком-то долговременном хранилище, заимствованном для этой цели (распространенными примерами являются файлы подкачки на жестких дисках). В некоторых ситуациях (например, для серверов) это может быть аппаратное обеспечение для этой цели.
В статье Википедии говорится об этом, но она расширяет концепцию до подсистем (таких как виртуальная адресация), которые помогают сделать реализацию возможной.