В Ubuntu, когда я смотрю на meminfo, я замечаю, что общее виртуальное адресное пространство намного больше, чем общее физическое значение оперативной памяти:

/proc $ cat meminfo
MemTotal:        6113156 kB
...
VmallocTotal:   34359738367 kB

Я думал, что виртуальное адресное пространство напрямую отображается в адресное пространство RAM. Так как же это может быть намного больше?

1 ответ1

0

Процессор сохраняет отображение виртуальной страницы на физическую. Это правда.

Поскольку возникает исключение (то есть вызывается ядро), когда процесс пытается получить доступ к памяти на странице, которой он не должен делать, ядро может воспользоваться этим фактом для замены страницы, хранящейся на диске, и затем возобновить процесс, где он остановился, а не просто segfaulting процесса.

Таким образом, вы можете получить файл подкачки, в котором есть страницы, которые на самом деле полностью "выгружены" из ОЗУ и не живут в ОЗУ. Это на самом деле не является частью аппаратного дизайна MMU, но включает физическое ядро, выполняющее обмен за кулисами процесса пользовательского пространства.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .