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