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

11

Я читал эту статью о 64-разрядных вычислениях, и она упоминает:

Например, архитектура AMD64 по состоянию на 2011 год допускала 52 бита для физической памяти и 48 бит для виртуальной памяти

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

Дополнительный вопрос: что значит «разрешить» 52 или 48 бит в 64-битной архитектуре? Для чего используются другие биты?

dougvk
источник
Для x86 неиспользуемые биты VA должны быть расширением знака MSbit VA. (ARM AArch64 предоставляет опцию, позволяющую аппаратно игнорировать 8 MSbit, чтобы их можно было удобно использовать для тегов. Процессор Azul Systems Vega - часть Java-устройства - предоставил 16 битов VA для тегов.) В таблице страниц зарезервированные биты PA должны быть равны нулю (прежде всего, чтобы программное обеспечение не пыталось их использовать и нарушало совместимость с более поздними аппаратными средствами).
Пол А. Клейтон

Ответы:

11

Вот изображение таблицы страниц AMD64 (из Руководства программиста по архитектуре AMD, том 2, версия 3.23, 2013, стр. 132).

AMD64 Longmode страница таблицы

«Естественный» размер страницы в архитектуре AMD64 составляет 2 12 = 4096 байт. (Существуют режимы, в которых вы можете иметь 2 21 = 2 Мбайт страниц, но сейчас мы их проигнорируем.)

Каждая запись таблицы страниц (PTE) (или, в зависимости от уровня, называемого PDE, PDPE или PML4E) составляет 64 бита = 2 3 байта. Таким образом, есть 2 9 записей на странице. Таким образом, 4 уровня таблицы страниц дают вам 4x9 + 12 = 48 бит виртуального адреса на процесс. Ходить по таблице страниц стоит дорого, поэтому они не расширятся до 5 или 6 уровней, если / пока не появится потребительский спрос.

Я не уверен, почему они выбрали 52-битный физический адрес. Это может быть расширено до 63 бит в будущем. В ценах октября 2013 года (около 1 долл. США / гигабит на чипы 4 Гбит) на создание 2 52- байтовой памяти потребуется более 32 000 000,00 долл. США , поэтому пройдет некоторое время, прежде чем возникнет значительный спрос на увеличение предела физических адресов. Существует множество причин, по которым вы хотите, чтобы физические адреса были как можно меньше: например, теги TLB и кеша должны содержать физические адреса.

Не обязательно назад, что физической памяти больше, чем виртуальной. Виртуальная память - это процесс, а физическая память используется всеми процессами. Таким образом, сервер с 48-битными виртуальными адресами и 2 52 байтами памяти может поддерживать 16 одновременных процессов и при этом гарантированно не менять местами.

Блуждающая логика
источник
Возможно, стоит отметить, что компьютерные архитекторы научились требовать, чтобы верхние биты использовались аппаратными средствами, обычно с помощью расширения знака, чтобы соответствовать общему использованию отрицательных адресов для ОС («Для чего используются другие биты?»). Кроме того, при кэшировании записей каталога Ln большую часть времени не нужно проходить по 5-уровневой таблице. Биты PTE 52:62 зарезервированы для программного обеспечения, поэтому их нельзя использовать для физических адресов, не нарушая совместимость, ограничивая страницы 4 КБ 52-битным PA. Кроме того, Линус Торвальдс классно злится на PAE (VA> PA, кажется, упрощает «традиционный» дизайн ОС).
Пол А. Клейтон
«Это может быть расширено до 63 бит в будущем». Ну нет, не без изменения структуры таблицы страниц. Как таковые, биты с 52 по 62 PxE зарезервированы для использования операционной системой. И ОС используют их (Windows использует это поле для «индекса рабочего списка»), поэтому разработчики процессоров не могут расширять поле PFN в них. Конечно, в будущем можно было бы иметь вариант, подобный PAE, который бы изменил структуру PT, чтобы позволить большее количество бит PFN, но это было бы значительным архитектурным изменением.
Джейми Ханрахан
3

Несколько моментов, которые нужно учитывать, физическая оперативная память стоит дорого Конечно, 16 ГБ теперь дешевле, чем 4 ГБ всего несколько лет назад, но 2 ^ 64 (16 эксабайт) смехотворно велики.

Таким образом, расширения AMD для x86 для x64 «позволили» до 2 ^ 52, ограничивая регистры . Это делает две вещи, снижает стоимость процессоров и повышает производительность. Больше регистров, которые не используются, означает, что есть много пустого пространства, которое все еще должно учитываться во время операций.

И, если вы не математик ... Разница между тремя размерами огромна! Я не математический гуру, но по десятичному разряду 52 бита это примерно 0,02% от 64 бита. 48 бит - это 6% от 52. (кто-нибудь проверяет мою математику?)

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

Мои собственные мысли: мы оставили время, когда оперативной памяти было крошечное, и жесткие диски должны были поддерживать оперативную память. Цена в ОЗУ упала до такой степени, что среднестатистическая персона может поставить более чем достаточно ОЗУ. Возьмите типичные приложения, такие как Office, которые требуют 1-2 ГБ оперативной памяти. Мой компьютер 7 лет назад мог справиться с этим. Хотя со скоростью чтения и записи на диск, я надеюсь, мне никогда не приходилось извлекать файл размером 7 ГБ из виртуальной памяти (используя старую философию PM * 2.5).

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

Остин Т Френч
источник