Некоторые процессоры поддерживают физические адреса 46 бит и виртуальные адреса 48 бит. Почему 46 бит, почему 48 бит? Разве x86 не поддерживает 64-битные адреса? Почему виртуальные адреса не имеют такую же длину, как физические адреса?

Нужно ли настраивать приложения на использование физического / виртуального адреса 46/48? Поддерживает ли это большинство приложений?

2 ответа2

2

Предел 48-битного виртуального адреса для x86-64 основан на глубине иерархии таблицы страниц. С 4 страницами КиБ и 64-битными записями таблицы страниц каждый уровень таблицы страниц использует девять битов. Использование трех поисков позволило бы получить 39-разрядные виртуальные адреса, что, по-видимому, было признано слишком краткосрочным решением, поскольку для добавления уровней требуется поддержка ОС. Использование четырех поисков обеспечивает 48-битное виртуальное адресное пространство.

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

Что касается ограничения по физическому адресу, запись таблицы страниц составляет 64 бита и содержит разрешение на доступ и другую информацию (9 бит: присутствует, чтение / запись, пользователь / супервизор, сквозная запись на уровне страницы, отключение кэша на уровне страницы, доступ к нему) , грязный, PAT и глобальный). Записи таблицы страниц x86-64 в настоящее время определены как включающие 14 битов, которые могут использоваться ОС [9:11, 52:62] и игнорируются аппаратными средствами. Это оставляет 41 бит доступным для указания номера страницы, которая (с учетом 4 страниц по КиБ) поддерживает 53-битные физические адреса.

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

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

Увеличение физического адресного пространства увеличивает размер тегов кэша (в обычных кэшах с физическим тегом) и приводит к дополнительным издержкам. Если адреса не будут полезны для ожидаемого использования системы, эти затраты будут непосредственно снижать прибыльность. (Может также быть какой-то стимул для ограничения возможностей, чтобы стимулировать будущие обновления.)

1

44 бита использовались в 64-битной версии Windows до Windows 8.1 (до ноября 2014 года, накопительный пакет обновления), чтобы упростить управление памятью. Начиная с Windows 8.1 Ноябрь 2014 Обновление или Windows 10, Windows теперь использует 64-битный для виртуальных адресов. С этим большим адресным пространством можно сделать Windows более безопасной, обеспечив Control Flow Guard (CFG)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .