Средство виртуальной памяти / пейджинга позволяет ядру "виртуализировать" память для процессов пользовательского пространства. Ядро может извлекать страницы из физической памяти и распределять их по страницам, чтобы они выглядели смежными с процессом пользовательского пространства.
Ограничение может быть установлено в памяти процесса пользовательского пространства, и если процесс выходит за его пределы, возникает "сбой страницы", который вызывает исключение ЦП, которое возвращается в ядро. Это не позволяет программе пространства пользователя связываться с памятью, выделенной для ядра или других программ, без разрешения ядра.
Обычно пользовательские программы просят ядро расширить этот лимит через четко определенные интерфейсы (например, вызываемые функциями C malloc()
и free()
.). Ядро отвечает за отслеживание того, сколько и какой памяти выделено программе.
Этот механизм "сбоя страницы" может также позволить ядру поменять местами страницу, к которой процесс пытался получить доступ, с одной страницы с диска, если ядро способно перепроверять память (и Windows, и Linux поддерживают это), поэтому это называется своппингом. Если доступ к памяти действительно был недействительным (то есть процесс пытается получить доступ к памяти, которую он не запрашивал первым), то обычно процесс будет завершен с помощью SIGSEGV.
Таким образом, "замена" - это дополнительная функция (в Linux вы можете отключить ее полностью, если хотите), которая зависит от виртуальной памяти / подкачки, но не обязательна только потому, что процессор имеет виртуальную память / подкачку. Концепции не одинаковы, но обмен зависит от существующей подкачки / виртуальной памяти.
Кроме того, после более внимательного прочтения вашего вопроса, "подкачка страниц" иногда используется как синоним для "подкачки", но я никогда не слышал о "подкачке", означающей, что вся память процесса выгружается, а "подкачке" означает только часть это поменяно.
Но зачем тогда linux раздел подкачки? Если физическая память заполнена, некоторые процессы будут переданы на внешний жесткий диск, а новый процесс будет сопоставлен с виртуальной памятью на физическую память.
"Виртуальная память" - это физическая память, просто "переназначенная". Аппаратное обеспечение MMU не может напрямую сопоставляться с любым устройством хранения. MMU может выдать ошибку, которая сообщает ядру, что процесс пытался получить доступ к памяти, которой у него не должно быть - и ядро может использовать этот механизм, чтобы увидеть, что процесс хочет получить что-то с диска, который, как он думал, находился в памяти, и затем выполнить " своп". Дело в том, что именно операционная система решает сохранить страницы на диск, чтобы они могли использовать эти страницы для других процессов, а не для аппаратного обеспечения.