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