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

14

Допустим, мы работаем с системой, которая имеет 40 бит физического адреса. Общее физическое адресное пространство (при условии адресной памяти в байтах ) составляет байтов или 1 ТиБ. И если виртуальные адреса имеют длину 48 бит, это означает, что виртуальной памяти доступно больше адресов, чем мест в физической памяти.240

Это имеет смысл для меня, потому что «избыточные» адреса могут относиться и к расположению жесткого диска. Однако я не понимаю, как происходит перевод между виртуальными и физическими адресами. Я предполагаю, что где-то хранится отображение, которое связывает местоположения VAS с физическими местоположениями. Если виртуальных адресов больше, чем физических, как все эти сопоставления могут храниться в памяти? Как минимум вам потребуется 48 бит для хранения каждого виртуального адреса, а затем еще 40 для хранения физического местоположения, на которое он отображается. Поэтому очевидно, что вы не можете просто сохранить отображение 1: 1 каждого виртуального адреса на его физический аналог, поскольку отображение каждого местоположения потребует больше памяти, чем сама физическая память.

Что именно мне здесь не хватает?

Брэд Пауэр
источник
Вы не можете сделать это даже с небольшим объемом памяти и адресного пространства. Если бы у вас были 16-битные физические адреса и 16-битные виртуальные адреса, вы все равно не смогли бы хранить все отображения 1: 1!
user253751
2
Проблема сложнее, чем вы думаете. Компьютеры редко имеют ТБ памяти, поэтому физическая память НАМНОГО меньше, чем виртуальное адресное пространство. Хуже того: у каждого процесса есть отдельное виртуальное адресное пространство!
Mooing Duck
В дополнение к расположению жесткого диска у вас есть только биты / пространство, которое можно сэкономить. Например, вы можете иметь большую область ниже стека без отображения, чтобы предотвратить необнаруженные переполнения. Вы можете рандомизировать то, что загружаете, где предотвращается другой класс атак . Хотите обозначить один бит, если адрес принадлежит ядру или пользователю - продолжайте, даже если вы тратите половину пространства. В то время как большинство учебников сконцентрированы на аспекте виртуальной памяти, это намного больше.
Мацей Пехотка
(Также обратите внимание, что адреса могут быть псевдонимами, что иногда полезно, поэтому VA A и адрес B относятся к одному и тому же PA P, даже если A! = B.)
Maciej Piechotka

Ответы:

26

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

Если вам нужно только отслеживать страницы, а не каждый отдельный байт, сопоставление становится намного дешевле. Если у вас 48-разрядное адресное пространство и 4096-байтовые страницы, вам нужно только отследить, какая из 2 ^ 36 страниц (примерно 69 миллиардов страниц). Это намного проще! Запись о том, где находятся все страницы, называется «таблицей страниц».

Если вам на самом деле требуется 1-256 ТБ памяти, то отказ от нескольких гигабайт для хранения этой таблицы страниц не имеет большого значения. На практике, однако, мы будем делать такие вещи, как использование многоуровневых таблиц страниц , что позволяет нам быть немного более эффективными, сохраняя страницы только для тех областей адресного пространства, которые мы фактически используем.

Корт Аммон
источник
6
Файл страницы - это термин Windows для физического файла на диске, который содержит содержимое физических страниц, которые были восстановлены из-за недостатка памяти, содержимое которых необходимо сохранить. Если я не ошибаюсь, структура данных, отображающая адреса виртуальных страниц в адреса физических страниц, должна называться таблицей страниц .
Восстановить Монику - Dec--
@hexafraction Я думаю, ты прав. Я сделал изменения.
Корт Аммон
2
Когда фактическая память велика, другой способ уменьшить объем памяти, необходимый для таблиц страниц, состоит в том, чтобы предусмотреть большие страницы. В x86 есть возможность смешивать 4 КиБ-страницы с 2/4 МиБ-страницами.
Нейт Элдридж