Процесс может использовать до 4 ГБ виртуальной памяти (включая пользователя и ядро), но когда он не использует виртуальную память, имеет ли ядро и пользовательскую память в оперативной памяти?
1 ответ
Использование виртуальной памяти не является обязательным, приложение не может избежать этого. Предполагая, что мы говорим о защищенной памяти x86, это то, что большинство современных операционных систем, таких как Linux, OS X и Windows, используют в x86.
По сути, каждый процесс видит виртуальное адресное пространство 4 ГБ (VAS). Операционная система совместно с аппаратным обеспечением устанавливает так называемые таблицы дескрипторов страниц (PDT), которые описывают, как отображается этот VAS, с гранулярностью страниц (обычно 4 КБ). Страница может быть сопоставлена с физической памятью, она может быть сопоставлена с файлом (это означает, что когда процесс пытается прочитать из этой части VAS, он попадает в ОС, которая затем считывает страницу из файла на диске и поместите его в память), иначе он может вообще не отображаться, и в этом случае попытка доступа к этой части VAS приведет к сбою процесса. Кроме того, в то время как память ядра отображается в процессе, процесс не может получить к ней прямой доступ и завершится сбоем, если попытается это сделать.
Кроме того, ОС может использовать файл подкачки или раздел подкачки, что позволяет ОС перемещать менее использованные страницы памяти на диск и использовать память для чего-то более полезного. Опять же, если это происходит, PDT должны быть соответственно обновлены и аналогично файлам, отображенным в память, если процесс попытается получить доступ к страницам, которые были выгружены, он попадет в ОС, которая вернет страницу в память. (Хотя возможность обмена часто ассоциируется с виртуальной памятью как таковой, фундаментальная идея виртуальной памяти заключается в том, что виртуальные адреса отличаются от адресов физической памяти.)