Я немного опоздал к этой игре, но несколько комментариев и уточнений.
Во-первых, вопрос слегка (но не ужасно) преувеличен на данный момент. Причина в том, что, хотя большинство 64-разрядных архитектур допускают будущее расширение до 64-разрядного виртуального адресного пространства, я не знаю ни одного, который бы поддерживал сегодня полные 64-разрядные архитектуры (декабрь 2018 г.). Например, серверы Xeon в настоящее время поддерживают 48 бит. Однако даже 48-разрядного пространства виртуальной машины достаточно, чтобы поднять проблему.
Второй ответ, данный (VxWizard), в котором говорится о дырах в физическом адресном пространстве, мне кажется, упускает суть. Поскольку одна из основных точек виртуальной адресации - иметь больше пространства VA, чем PA, дыры в пространстве PA не имеют отношения к размеру таблиц страниц.
Теперь вернемся к исходной проблеме. Очевидно, что размер таблиц страниц может быть больше, чем вся физическая память, и ясно, что это означает, что части таблицы страниц могут быть выгружены. Но как же тогда пропустить TLB? Может показаться, что промах TLB подразумевает выборку из таблицы страниц - и если таблица страниц выгружается, то вы должны извлечь ее с диска. Но указатель, который говорит, где на диске для получения хранится ... в таблице страниц, которая находится на диске!
Причина, по которой это не бесконечная рекурсия, заключается в том, что не вся таблица страниц может быть выгружена целиком. Часть этого - в частности, часть, которая сообщает, где находится сама таблица страниц - не может быть выгружена. Пока эта часть остается в физической памяти, все в порядке.
Есть множество способов сделать это. Могут помочь многоуровневые таблицы страниц, а также разделение пространства пользователя и ядра. Но главное, что все они должны удовлетворить, это то, что у вас должно быть достаточно таблиц страниц в физической памяти, чтобы можно было найти остальные таблицы страниц на диске.