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


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 МиБ-страницами.
Нейт Элдридж
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.