Возможно ли, что таблица страниц больше, чем физическая память? Если да, где хранится таблица? - PullRequest
0 голосов
/ 30 октября 2018

Предположим, у вас есть 64-разрядный компьютер (что означает 64-разрядное виртуальное адресное пространство ), который имеет 4 КБ страниц и 4 ГБ физической памяти. Если у нас есть одноуровневая таблица страниц, как вы предлагаете, то она должна содержать одну запись для каждой виртуальной страницы на процесс.

Одна запись на виртуальную страницу - 2 64 адресуемых байтов / 2 12 байтов на страницу = 2 52 записей таблицы страниц

Одна запись таблицы страниц содержит: биты контроля доступа (биты, такие как страница присутствует, RW и т. Д.) + Физический номер страницы

4 ГБ физической памяти = 2 32 байтов .

2 32 байт памяти / 2 12 байт на страницу = 2 20 физических страниц

20 бит требуется для физического номера страницы.

Таким образом, каждая запись таблицы страниц составляет приблизительно 4 байта . (20-битный номер физической страницы составляет примерно 3 байта, а контроль доступа составляет 1 байт)

Теперь размер таблицы страниц = 2 52 записей таблицы страниц * 4 байта = 2 54 байтов ( 16 петабайт )!

, что больше, чем физическая память, так как и где мы можем хранить таблицу страниц?

спасибо!

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Я не проверял вашу математику, но давайте отступим назад и зададим немного другой вопрос, зачем вам отображать все возможное физическое адресное пространство?

На типичном ЦП с MMU, поддерживающим подкачку, только небольшая часть существующих физических адресов адресована либо ОЗУ, либо MMIO. Остальная часть физического адреса не используется. Как правило, вы получите какое-то исключение, если сопоставите физические адреса без адресации устройства с виртуальными адресами, а затем попытаетесь получить к ним доступ.

Таким образом, на практике практический размер таблицы страниц ограничен объемом ОЗУ и пространством MMIO, которые могут быть адресованы. Если у вас небольшой объем оперативной памяти, вам не нужна массивная таблица страниц, описанная в примере. Большинство записей будут недействительными.

И наоборот, если ваша система имела большой объем ОЗУ, который занимал большую часть физического адресного пространства, у вас было бы больше ОЗУ для хранения таблиц страниц.

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

0 голосов
/ 16 декабря 2018

Я немного опоздал к этой игре, но несколько комментариев и уточнений.

Во-первых, вопрос слегка (но не ужасно) преувеличен на данный момент. Причина в том, что, хотя большинство 64-разрядных архитектур допускают будущее расширение до 64-разрядного виртуального адресного пространства, я не знаю ни одного, который бы поддерживал сегодня полные 64-разрядные архитектуры (декабрь 2018 г.). Например, серверы Xeon в настоящее время поддерживают 48 бит. Однако даже 48-разрядного пространства виртуальной машины достаточно, чтобы поднять проблему.

Второй ответ, данный (VxWizard), в котором говорится о дырах в физическом адресном пространстве, мне кажется, упускает суть. Поскольку одна из основных точек виртуальной адресации - иметь больше пространства VA, чем PA, дыры в пространстве PA не имеют отношения к размеру таблиц страниц.

Теперь вернемся к исходной проблеме. Очевидно, что размер таблиц страниц может быть больше, чем вся физическая память, и ясно, что это означает, что части таблицы страниц могут быть выгружены. Но как же тогда пропустить TLB? Может показаться, что промах TLB подразумевает выборку из таблицы страниц - и если таблица страниц выгружается, то вы должны извлечь ее с диска. Но указатель, который говорит, где на диске для получения хранится ... в таблице страниц, которая находится на диске!

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

Есть множество способов сделать это. Могут помочь многоуровневые таблицы страниц, а также разделение пространства пользователя и ядра. Но главное, что все они должны удовлетворить, это то, что у вас должно быть достаточно таблиц страниц в физической памяти, чтобы можно было найти остальные таблицы страниц на диске.

0 голосов
/ 30 октября 2018

Возможно иметь таблицу страниц больше, чем физическая память. То, что вам нужно сделать, это перенести часть таблицы во вторичное хранилище.

Некоторые процессоры действительно могут это делать. Они избегают очевидной проблемы курицы и яйца благодаря наличию отдельных таблиц системы и пользователей. Таблицы системных страниц отображаются на физические фреймы страниц, а таблицы пользовательских страниц отображаются на логические адреса в системном пространстве.

Возможно, есть другие способы реализовать таблицы страниц, размер которых превышает объем физической памяти, чем тот, который я описал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...