Может ли кто-нибудь объяснить мне, в чем разница между виртуальной памятью и пространством подкачки ?
И почему мы говорим, что для 32-битной машины максимальная доступная виртуальная память составляет всего 4 ГБ?
Может ли кто-нибудь объяснить мне, в чем разница между виртуальной памятью и пространством подкачки ?
И почему мы говорим, что для 32-битной машины максимальная доступная виртуальная память составляет всего 4 ГБ?
Ответы:
На суперпользователе есть отличное раскрытие виртуальной памяти .
Проще говоря, виртуальная память - это комбинация оперативной памяти и дискового пространства, которую могут использовать запущенные процессы.
Пространство подкачки - это часть виртуальной памяти на жестком диске, используемая при заполнении ОЗУ.
Что касается того, почему 32-битный процессор ограничен виртуальной памятью 4 ГБ, здесь это хорошо решено :
По определению 32-битный процессор использует 32 бита для обозначения местоположения каждого байта памяти. 2 ^ 32 = 4,2 миллиарда, что означает, что адрес памяти длиной 32 бита может относиться только к 4,2 миллиардам уникальных ячеек (то есть 4 ГБ).
Существует некоторая путаница в отношении термина виртуальной памяти, и на самом деле он относится к следующим двум очень различным концепциям.
Пространство подкачки, OTOH, - это имя части диска, используемой для хранения дополнительных страниц ОЗУ, когда они не используются.
Важно понять, что первое возможно прозрачно благодаря аппаратной поддержке второго.
Чтобы лучше понять все это, вы должны рассмотреть, как «виртуальная память» (как в определении 2) поддерживается процессором и ОС.
Предположим, у вас есть 32-битный указатель (64-битные точки похожи, но используют несколько другие механизмы). После включения «виртуальной памяти» процессор считает, что этот указатель состоит из трех частей.
Теперь, когда ЦП пытается получить доступ к содержимому указателя, он сначала обращается к таблице каталога страниц - таблице, состоящей из 1024 записей (в архитектуре X86, на расположение которой указывает регистр CR3). 10-битная запись каталога страниц является индексом в этой таблице, который указывает на физическое расположение таблицы страниц . Это, в свою очередь, еще одна таблица из 1024 записей, каждая из которых является указателем в физической памяти, и несколькими важными управляющими битами. (Мы вернемся к ним позже). После того, как страница найдена, последние 12 битов используются для поиска адреса на этой странице.
Есть еще много деталей (TLB, большие страницы, PAE, селекторы, защита страниц), но краткое объяснение выше отражает суть вещей.
Используя этот механизм трансляции, ОС может использовать разные наборы физических страниц для каждого процесса, тем самым создавая иллюзию того, что у каждого процесса есть вся память для себя (поскольку каждый процесс получает свой собственный каталог страниц)
В дополнение к этой виртуальной памяти ОС может также добавить концепцию разбиения на страницы . Один из рассмотренных ранее управляющих битов позволяет указать, является ли запись «Присутствует». Если его нет, попытка доступа к этой записи приведет к исключению ошибки страницы . ОС может зафиксировать это исключение и действовать соответствующим образом. Таким образом, ОС, поддерживающие свопинг / разбиение на страницы, могут решить загрузить страницу из пространства подкачки , исправить таблицы трансляции и затем снова выполнить доступ к памяти.
Здесь объединяются два термина: ОС, поддерживающая виртуальную память и разбиение на страницы, может создать иллюзию наличия у процессов большего объема памяти, чем имеется на самом деле, путем разбиения на страницы (подкачки) страниц в области подкачки и из нее.
Что касается вашего последнего вопроса (почему сказано, что 32-разрядный процессор ограничен 4 ГБ виртуальной памяти). Это относится к «виртуальной памяти» из определения 2 и является непосредственным результатом размера указателя. Если процессор может использовать только 32-битные указатели, у вас есть только 32-битные для выражения разных адресов, это дает вам 2 ^ 32 = 4 ГБ адресуемой памяти.
Надеюсь, это проясняет ситуацию.
ИМХО ужасно ошибочно использовать концепцию пространства подкачки как эквивалента виртуальной памяти. ВМ - это понятие гораздо более общее, чем пространство подкачки. Помимо прочего, виртуальная машина позволяет процессам ссылаться на виртуальные адреса во время выполнения, которые преобразуются в физические адреса с поддержкой оборудования и таблиц страниц. Таким образом, процессы не заботятся о том, сколько физической памяти имеет система, или где инструкция или данные фактически находятся в иерархии физической памяти. ВМ позволяет это сопоставление. Указанный элемент (инструкция или данные) может находиться в L1, L2 или RAM, или, наконец, на диске, и в этом случае он загружается в основную память.
Место подкачки - это просто место во вторичной памяти, где страницы хранятся, когда они неактивны. Если ОЗУ недостаточно, ОС может принять решение об обмене страниц процесса, чтобы освободить место для других страниц процесса. Процессор никогда не выполняет инструкции или не читает / не записывает данные непосредственно из области подкачки.
Обратите внимание, что пространство подкачки можно было бы использовать в системе без виртуальной машины. То есть процессы, которые напрямую обращаются к физическим адресам, все равно могут иметь их части на диске.
Хотя тема довольно старая и уже ответили. Тем не менее, я хотел бы поделиться этой ссылкой, поскольку это самое простое объяснение, которое я нашел до сих пор. Ниже по ссылке есть диаграммы для лучшей наглядности.
Ключевое отличие: виртуальная память - это абстракция основной памяти. Он увеличивает доступную память компьютера, сохраняя неактивные части содержимого RAM на диске. Всякий раз, когда контент требуется, он загружает его обратно в ОЗУ. Память подкачки или пространство подкачки - это часть жесткого диска, которая используется для виртуальной памяти. Таким образом, оба они взаимозаменяемы.
Виртуальная память немного отличается от физической. Программисты получают прямой доступ к виртуальной памяти, а не к физической. Виртуальная память - это абстракция от основной памяти. Он используется, чтобы скрыть информацию о реальной физической памяти системы. Он увеличивает доступную память компьютера, сохраняя неактивные части содержимого RAM на диске. Когда контент требуется, он загружает его обратно в ОЗУ. Виртуальная память создает иллюзию целого адресного пространства с адресами, начинающимися с нуля. В основном он предпочтителен из-за функции оптимизации, благодаря которой уменьшается потребность в пространстве. Он состоит из доступной оперативной памяти и дискового пространства.
Память подкачки обычно называется пространством подкачки. Пространство подкачки относится к части виртуальной памяти, которая зарезервирована как место временного хранения. Пространство подкачки используется, когда доступная оперативная память не может удовлетворить требования к системной памяти. Например, в системе памяти Linux ядро находит каждую страницу в физической памяти или в области подкачки. Ядро также поддерживает таблицу, в которой хранится информация о выгруженных страницах и страницах в физической памяти. Страницы, к которым не было доступа долгое время, отправляются в область подкачки. Этот процесс называется заменой. Если требуется та же страница, она заменяется в физической памяти путем замены другой страницы. Таким образом,
«Виртуальная память» - это общий термин. В Windows это называется разбиением на страницы или разбиением на страницы. В Linux это называется Swap.