Подтвердить что ты не робот

Почему в 64-битных системах имеется только 48-битное адресное пространство?

В книге я прочитал следующее:

32-разрядные процессоры имеют 2 ^ 32 возможных адреса, а текущие 64-разрядные процессоры имеют 48-битное адресное пространство

Мое ожидание состояло в том, что если это 64-разрядный процессор, адресное пространство также должно быть 2 ^ 64.

Итак, мне было интересно, в чем причина этого ограничения?

4b9b3361

Ответ 1

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

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

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

Ответ 2

Любой ответ, относящийся к размеру шины и физической памяти, немного ошибочен, так как вопрос OP касался виртуального адресного пространства, а не физического адресного пространства. Например, предположительно аналогичный предел для некоторых 386 был пределом физической памяти, которую они могли использовать, а не виртуальным адресным пространством, которое всегда было полным 32 бит. В принципе вы могли бы использовать полные 64 бита виртуального адресного пространства даже с несколькими МБ физической памяти; конечно, вы могли бы сделать это путем замены или для специализированных задач, где вы хотите сопоставить одну и ту же страницу по большинству адресов (например, некоторые операции с разреженными данными).

Я думаю, что реальный ответ в том, что AMD просто дешево и надеется, что никто не позаботится об этом, но у меня нет ссылок на цитирование.

Ответ 3

Ознакомьтесь с разделом ограничений статьи в википедии:

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

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

Ответ 4

Внутренняя собственная ширина регистров/операций не должна отражаться в ширине внешней адресной шины.

Скажем, у вас 64-битный процессор, которому требуется только 1 мегабайт оперативной памяти. Для этого требуется 20-разрядная адресная шина. Зачем беспокоиться о стоимости и сложности оборудования всех дополнительных выводов, которые вы не будете использовать?

Motorola 68000 была такой: 32-битный внутренний, но с 23-разрядной адресной шиной (и 16-битной шиной данных). CPU мог получить доступ к 16 мегабайтам ОЗУ, а для загрузки собственного типа данных (32 бита) потребовалось два обращения к памяти (каждый из которых содержит 16 бит данных).

Ответ 5

С моей точки зрения, это результат размера страницы. На самой странице содержится 4096/8 = 512 записей таблицы страниц. И 2 ^ 9 = 512. Итак, 9 * 4 + 12 = 48.

Ответ 6

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

Ответ 7

Неверно, что используются только младшие 48 бит 64 бит VA, по крайней мере, с Intel 64. Используются верхние 16 бит, своего рода.

Раздел 3.3.7.1 Каноническая адресация в руководствах разработчиков программного обеспечения Intel® 64 и IA-32 Architects:

канонический адрес должен иметь биты с 63 по 48, установленные на нули или единицы (в зависимости от того, является ли бит 47 нулевым или одним)

Итак, биты с 47 по 63 образуют супербиты, либо все 1, либо все 0. Если адрес не в канонической форме, реализация должна быть неисправна.

В AArch64 это другое. Согласно Общему набору инструкций ARMv8, это 49-битный VA.

Система перевода памяти AArch64 поддерживает 49-битный виртуальный адрес (48 бит на таблицу перевода). Виртуальные адреса выходят из 49 бит и сохраняются в 64-битном указателе. При необходимости, под управлением системного регистра, наиболее значимые 8 бит 64-битного указателя могут содержать "тег", который будет игнорироваться при использовании в качестве адреса загрузки/хранения или цели непрямой ветки