В чем разница между «виртуальной памятью» и «пространством подкачки»?

85

Может ли кто-нибудь объяснить мне, в чем разница между виртуальной памятью и пространством подкачки ?

И почему мы говорим, что для 32-битной машины максимальная доступная виртуальная память составляет всего 4 ГБ?

компьютерщики
источник
@startblue, как данная вами ссылка является ответом на мой вопрос ..
algo-geeks
@ algo-geeks - На самом деле это не ответ, но я думаю, что это ссылка на ответ, который может быть весьма полезным для этой темы. И написано в комментарии, именно там, где и должно быть, имхо. :)
Мухамед Хусейнбашич

Ответы:

113

На суперпользователе есть отличное раскрытие виртуальной памяти .

Проще говоря, виртуальная память - это комбинация оперативной памяти и дискового пространства, которую могут использовать запущенные процессы.

Пространство подкачки - это часть виртуальной памяти на жестком диске, используемая при заполнении ОЗУ.

Что касается того, почему 32-битный процессор ограничен виртуальной памятью 4 ГБ, здесь это хорошо решено :

По определению 32-битный процессор использует 32 бита для обозначения местоположения каждого байта памяти. 2 ^ 32 = 4,2 миллиарда, что означает, что адрес памяти длиной 32 бита может относиться только к 4,2 миллиардам уникальных ячеек (то есть 4 ГБ).

Виральный Шах
источник
1
Так действительно ли RAM = виртуальная - своп?
user48956
4
Это совершенно неверный ответ. Человек может 100 раз отобразить в памяти файл размером 1 ГБ и использовать 100 ГБ виртуальной памяти на машине всего с 1 ГБ ОЗУ. Невозможно добавить оперативную память и дисковое пространство, чтобы получить 100 ГБ виртуальной памяти, которые будут использоваться.
Дэвид Шварц
@DavidSchwartz не совсем. Отображение файла в память не загружает его в память. Таким образом, простое отображение файла размером 1 ГБ 100 раз не потребует 100 ГБ.
Felix
1
@Felix Вы ошибаетесь. Когда вы говорите, что он «не загружает его в память», вы используете слово «память» для обозначения физической памяти, то есть ОЗУ. Мы говорим о виртуальной памяти, а не о физической памяти. Виртуальная память обычно создается по мере необходимости, а не берется из фиксированного пула, как физическая память.
Дэвид Шварц
Тогда это просто вопрос для отчета? Есть ли смысл вообще подсчитывать, сколько памяти занято? Поскольку на самом деле вы никогда не будете использовать столько, будь то в ОЗУ или подкачке.
Felix
60

Существует некоторая путаница в отношении термина виртуальной памяти, и на самом деле он относится к следующим двум очень различным концепциям.

  1. Использование дисковых страниц для увеличения концептуального объема физической памяти компьютера. Правильный термин для этого - пейджинг.
  2. Абстракция, используемая различными ОС / ЦП для создания иллюзии, что каждый процесс работает в отдельном непрерывном адресном пространстве.

Пространство подкачки, OTOH, - это имя части диска, используемой для хранения дополнительных страниц ОЗУ, когда они не используются.

Важно понять, что первое возможно прозрачно благодаря аппаратной поддержке второго.

Чтобы лучше понять все это, вы должны рассмотреть, как «виртуальная память» (как в определении 2) поддерживается процессором и ОС.

Предположим, у вас есть 32-битный указатель (64-битные точки похожи, но используют несколько другие механизмы). После включения «виртуальной памяти» процессор считает, что этот указатель состоит из трех частей.

  • Старшие 10 бит - это запись в каталоге страниц.
  • Следующие 10 бит - это запись в таблице страниц.
  • Последние 12 бит составляют смещение страницы.

Теперь, когда ЦП пытается получить доступ к содержимому указателя, он сначала обращается к таблице каталога страниц - таблице, состоящей из 1024 записей (в архитектуре X86, на расположение которой указывает регистр CR3). 10-битная запись каталога страниц является индексом в этой таблице, который указывает на физическое расположение таблицы страниц . Это, в свою очередь, еще одна таблица из 1024 записей, каждая из которых является указателем в физической памяти, и несколькими важными управляющими битами. (Мы вернемся к ним позже). После того, как страница найдена, последние 12 битов используются для поиска адреса на этой странице.

Есть еще много деталей (TLB, большие страницы, PAE, селекторы, защита страниц), но краткое объяснение выше отражает суть вещей.

Используя этот механизм трансляции, ОС может использовать разные наборы физических страниц для каждого процесса, тем самым создавая иллюзию того, что у каждого процесса есть вся память для себя (поскольку каждый процесс получает свой собственный каталог страниц)

В дополнение к этой виртуальной памяти ОС может также добавить концепцию разбиения на страницы . Один из рассмотренных ранее управляющих битов позволяет указать, является ли запись «Присутствует». Если его нет, попытка доступа к этой записи приведет к исключению ошибки страницы . ОС может зафиксировать это исключение и действовать соответствующим образом. Таким образом, ОС, поддерживающие свопинг / разбиение на страницы, могут решить загрузить страницу из пространства подкачки , исправить таблицы трансляции и затем снова выполнить доступ к памяти.

Здесь объединяются два термина: ОС, поддерживающая виртуальную память и разбиение на страницы, может создать иллюзию наличия у процессов большего объема памяти, чем имеется на самом деле, путем разбиения на страницы (подкачки) страниц в области подкачки и из нее.

Что касается вашего последнего вопроса (почему сказано, что 32-разрядный процессор ограничен 4 ГБ виртуальной памяти). Это относится к «виртуальной памяти» из определения 2 и является непосредственным результатом размера указателя. Если процессор может использовать только 32-битные указатели, у вас есть только 32-битные для выражения разных адресов, это дает вам 2 ^ 32 = 4 ГБ адресуемой памяти.

Надеюсь, это проясняет ситуацию.

Йонатан
источник
12

ИМХО ужасно ошибочно использовать концепцию пространства подкачки как эквивалента виртуальной памяти. ВМ - это понятие гораздо более общее, чем пространство подкачки. Помимо прочего, виртуальная машина позволяет процессам ссылаться на виртуальные адреса во время выполнения, которые преобразуются в физические адреса с поддержкой оборудования и таблиц страниц. Таким образом, процессы не заботятся о том, сколько физической памяти имеет система, или где инструкция или данные фактически находятся в иерархии физической памяти. ВМ позволяет это сопоставление. Указанный элемент (инструкция или данные) может находиться в L1, L2 или RAM, или, наконец, на диске, и в этом случае он загружается в основную память.

Место подкачки - это просто место во вторичной памяти, где страницы хранятся, когда они неактивны. Если ОЗУ недостаточно, ОС может принять решение об обмене страниц процесса, чтобы освободить место для других страниц процесса. Процессор никогда не выполняет инструкции или не читает / не записывает данные непосредственно из области подкачки.

Обратите внимание, что пространство подкачки можно было бы использовать в системе без виртуальной машины. То есть процессы, которые напрямую обращаются к физическим адресам, все равно могут иметь их части на диске.

SavorALinux
источник
5

Хотя тема довольно старая и уже ответили. Тем не менее, я хотел бы поделиться этой ссылкой, поскольку это самое простое объяснение, которое я нашел до сих пор. Ниже по ссылке есть диаграммы для лучшей наглядности.

Ключевое отличие: виртуальная память - это абстракция основной памяти. Он увеличивает доступную память компьютера, сохраняя неактивные части содержимого RAM на диске. Всякий раз, когда контент требуется, он загружает его обратно в ОЗУ. Память подкачки или пространство подкачки - это часть жесткого диска, которая используется для виртуальной памяти. Таким образом, оба они взаимозаменяемы.

Виртуальная память немного отличается от физической. Программисты получают прямой доступ к виртуальной памяти, а не к физической. Виртуальная память - это абстракция от основной памяти. Он используется, чтобы скрыть информацию о реальной физической памяти системы. Он увеличивает доступную память компьютера, сохраняя неактивные части содержимого RAM на диске. Когда контент требуется, он загружает его обратно в ОЗУ. Виртуальная память создает иллюзию целого адресного пространства с адресами, начинающимися с нуля. В основном он предпочтителен из-за функции оптимизации, благодаря которой уменьшается потребность в пространстве. Он состоит из доступной оперативной памяти и дискового пространства.

Память подкачки обычно называется пространством подкачки. Пространство подкачки относится к части виртуальной памяти, которая зарезервирована как место временного хранения. Пространство подкачки используется, когда доступная оперативная память не может удовлетворить требования к системной памяти. Например, в системе памяти Linux ядро ​​находит каждую страницу в физической памяти или в области подкачки. Ядро также поддерживает таблицу, в которой хранится информация о выгруженных страницах и страницах в физической памяти. Страницы, к которым не было доступа долгое время, отправляются в область подкачки. Этот процесс называется заменой. Если требуется та же страница, она заменяется в физической памяти путем замены другой страницы. Таким образом,

разница между виртуальной памятью и памятью подкачки

баран619
источник
Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если ссылка на страницу изменится. - Из
отзыва
Спасибо, улучшил пост.
ram619 08
0

«Виртуальная память» - это общий термин. В Windows это называется разбиением на страницы или разбиением на страницы. В Linux это называется Swap.

Хемант Кумар Р
источник