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

97

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

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

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

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

er4z0r
источник
11
В книге, должно быть, говорилось конкретно о текущей реализации архитектуры AMD64 (x86-64). Используются только младшие 48 бит. Однако это не аппаратное ограничение - доступны все 64 бита.
Коди Грей
7
Всегда полезно идентифицировать книгу.
Хенк Холтерман
1
Я предполагаю, что физические адресные строки не являются бесплатными (вам нужно как минимум 16 дополнительных выводов процессора). И я еще не знаю об оборудовании, которое могло бы заполнить 48-битное пространство физическими микросхемами ОЗУ на том же процессоре. Когда это станет возможным, я уверен, что AMD добавит недостающие 16 контактов :)
Torp
7
даже, The 32-bit processors have 2^32 possible addressesэто не обязательно верно, может существовать 32-битный ЦП только с 24 "контактами" для адресации памяти. Например, 68EC020 (более дешевая версия 68020) - это 32-битный процессор, но с 24 битами для адресации памяти.
ShinTakezou
21
Существует реальная проблема с 64-битной физической адресацией, размер страницы виртуальной памяти слишком мал. Это создает огромные каталоги страниц и чрезвычайно дорогую очистку кеша TLB при каждом переключении контекста. Переход со страниц 4 КБ на 4 МБ - это вариант, но он очень несовместим с текущими операционными системами.
Hans Passant

Ответы:

134

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

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

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

Jalf
источник
118
640кб хватит любому.
7
Вы все еще используете систему 8088, bdares?
Joe
23
@bdares: Плохая аналогия. В набор инструкций арки 8088/8086 встроено ограничение в 640 КБ. Только создание нового ISA (386) позволило преодолеть барьер. x86_64 с другой стороны поддерживает все 64 бита в ISA. Это просто оборудование текущего поколения, которое не может использовать их все ...
R .. GitHub ПРЕКРАТИТЕ ПОМОЩЬ ICE
16
@Р. Собственно ограничение в ЦП составляло один мегабайт. IBM PC выделил часть этого для периферийных устройств с отображением памяти, BIOS и т. Д. Некоторые другие конструкции 8088/8086 (Zenith Z100, если память обслуживает) предназначены меньше для периферийных устройств и т. П. И, соответственно, больше для прикладных программ.
Джерри Коффин,
25
lwn.net/SubscriberLink/655437/9a48cd3e7a8cbe8a <- через три года после этого ответа мы уже достигли этих пределов :) Машина HP будет иметь 320 ТБ памяти, и они не могут предоставить ее в качестве плоского адресного пространства из-за 48 ограничение -разрядной адресации.
назад
18

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

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

R .. GitHub НЕ ПОМОГАЕТ ICE
источник
14
«Быть ​​дешевым», я полагаю, вы имеете в виду, что вы не добавляете контакты, которые никогда не будут использоваться, не занимаете место на чипе для транзисторов, которые не будут использоваться, и используете освободившееся пространство для ускорения существующих инструкций? Если это дешево, я в деле!
Olof Forshell
80386 позволяет использовать 2 * 4096 селекторов, каждый из которых содержит до 4 ГБ памяти (всего 32 ТБ). 80286 допускал 2 * 4096 селекторов, каждый из которых содержал до 64 КБ (1 ГБ).
Olof Forshell
Нелинейные сегментированные хаки не считаются адресным пространством в моей книге. Портативное программное обеспечение не может их использовать.
R .. GitHub НЕ ПОМОГАЕТ ICE
@R .. - Я думал, что портативное программное обеспечение может работать . :-) Например, C ++ запрещает сравнивать указатели на разные массивы, чтобы они могли находиться в отдельных сегментах по 4 ГБ.
Bo Persson
Если ваша компиляция действительно генерирует огромные указатели и загружает сегментный регистр для каждого разыменования памяти, тогда да. Но на самом деле это ужасно медленно, и вместо этого все использовали маленькие модели памяти и __far(или, что еще хуже, FAR/ far!) Указатели ...
R .. GitHub ПРЕКРАТИТЕ ПОМОЩЬ ICE
10

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

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

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

Damien_The_Unbeliever
источник
Откуда 4 в 4 петабайтах? Если мы говорим о 64 адресных строках, мы должны получить квадрат адресного пространства, образованный 32 адресными строками, что составляет 4 гигабайта. Возведите в квадрат, и у нас должно получиться 16, а не 4 петабайта. Я что-то упускаю?
Olof Forshell
1
Это связано с текущим физическим пределом (52 бита) - суть в том, что мы не можем поместить в ПК достаточно ОЗУ для поддержки этого ограниченного диапазона, не говоря уже о том, что потребуется для полного 64-битного адресного пространства.
Damien_The_Unbeliever
9

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

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

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


источник
1
но 68000 считается «16/32 битным» процессором, а не «полным» 32-битным процессором, поэтому можно сказать, что он все еще находится в 16-битном прошлом; В качестве примера я выбрал 68020, так как его недорогая версия 68EC020 имеет 24 бита только для адресов, хотя 68020 - это «полный» 32-битный ЦП ... +1, чтобы рассмотреть это замечательное семейство процессоров!
ShinTakezou
@ShinTakezou: честно говоря, 80386SX был 16-битным процессором (потому что у него было адресное пространство как у 80286) или 32-битным (потому что у него была внутренняя архитектура 80386DX)? Один может сказать, как и вы, но другой (этот) говорит: «Главное - это внутреннее» - и вы можете процитировать меня по этому поводу.
Olof Forshell
@Olof Я думаю, что в контексте "памяти" (которая является внешним миром), внешнее значение имеет значение, поэтому 68000 - это 16-битный ЦП (для чтения 32-битных данных требуется 2 "шага"): D
ShinTakezou
@ShinTakezou: контекст памяти, даже кеши, всегда является внешним по отношению к самому процессору, даже несмотря на то, что они чрезвычайно тесно связаны в современных процессорах. 8088 был внутренне равен 8086, хотя у него было восемь линий шины данных против шестнадцати 8086. Я не считаю очевидным то, что вы, по-видимому, считаете очевидным: 8088 следует отнести к той же группе, что и Z80, 8080, 8085 и т. Д. Вопрос о ширине шины данных кажется тривиальным в этом контексте
Олоф Форшелл,
Я вообще не эксперт в этом вопросе, поэтому у меня нет ничего очевидного для меня. Я просто хотел заметить необходимость более резкого сокращения с прошлым, когда можно было подумать, что 68000 все еще является процессором "старого времени", поэтому что может показаться "естественным", что его адресное пространство ограничено менее чем 32-битным; в то время как 68020 может 32-битный, так что существование 68EC020 с его ограничением ясно показывает, что это выбор не из-за "ограничения этого ( или это) время », но другое соображение (например, чтобы сделать его дешевле, если нет реального преимущества в наличии 64 контактов), что более или менее является аргументом этого ответа.
ShinTakezou
7

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

Брендан
источник
1
Intel предлагает пятиуровневую схему подкачки для расширения с нынешних 48 бит до 57 бит. (Те же 9 бит на уровень / страницы 4k, что и текущие таблицы страниц x86-64). Использование 10 или 11 бит на уровень потребовало бы изменения аппаратного обеспечения обхода страниц, поэтому это может быть не оптимальная конструкция для огромной памяти, но это разумное расширение для двухрежимного процессора, который также должен поддерживать максимальную производительность для 4- таблицы уровней в текущем формате.
Питер Кордес
Конечно, с огромными страницами 2M или 1G это всего лишь 4 или 3 уровня таблиц страниц от верхнего уровня до записи таблицы огромных страниц вместо указателя каталога страниц.
Питер Кордес
6

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

Линьцзоцзянь
источник
4

Чтобы ответить на исходный вопрос: не было необходимости добавлять более 48 бит PA.

Серверам нужен максимальный объем памяти, поэтому попробуем копнуть глубже.

1) Самая большая (обычно используемая) конфигурация сервера - это система с 8 разъемами. Система 8S - это не что иное, как 8 серверных ЦП, соединенных высокоскоростным когерентным межсоединением (или просто высокоскоростной «шиной»), чтобы сформировать единый узел. Существуют более крупные кластеры, но их немного, и здесь мы говорим о часто используемых конфигурациях. Обратите внимание, что в реальном мире система с двумя сокетами является одним из наиболее часто используемых серверов, а 8S обычно считается очень высокопроизводительным.

2) Основными типами памяти, используемой серверами, являются обычная память DRAM с байтовой адресацией (например, память DDR3 / DDR4), отображаемая память ввода-вывода - MMIO (например, память, используемая дополнительной картой), а также пространство конфигурации, используемое для настройки устройства, которые присутствуют в системе. Первый тип памяти обычно самый большой (и, следовательно, требует наибольшего количества адресных битов). Некоторые высокопроизводительные серверы также используют большое количество MMIO в зависимости от фактической конфигурации системы.

3) Предположим, что каждый процессор сервера может вмещать 16 модулей DDR4 DIMM в каждом слоте. С максимальным размером DDR4 DIMM 256 ГБ. (В зависимости от версии сервера это количество возможных модулей DIMM на сокет фактически меньше 16 модулей DIMM, но продолжайте чтение ради примера).

Таким образом, каждый сокет теоретически может иметь 16 * 256 ГБ = 4096 ГБ = 4 ТБ. Для нашей системы 8S размер DRAM может быть максимум 4 * 8 = 32 ТБ. Это означает, что максимальное количество битов, необходимых для адресации этого пространства DRAM, составляет 45 (= log2 32 ТБ / log2 2).

Мы не будем вдаваться в подробности о других типах памяти (MMIO, MMCFG и т. Д.), Но суть в том, что наиболее «требовательный» тип памяти для системы с 8 разъемами с самыми большими типами модулей DDR4 DIMM, доступных сегодня (256 ГБ DIMM) используют только 45 бит.

Для ОС, которая поддерживает 48 бит (например, WS16), остается (48-45 =) 3 бита. Это означает, что если бы мы использовали младшие 45 бит только для 32 ТБ DRAM, у нас все еще будет в 2 ^ 3 раза больше адресуемой памяти, которую можно использовать для MMIO / MMCFG, что в сумме составит 256 ТБ адресного пространства.

Итак, подведем итоги: 1) 48 бит физического адреса - это достаточно бит для поддержки крупнейших систем на сегодняшний день, которые «полностью загружены» большим количеством DDR4, а также множества других устройств ввода-вывода, которым требуется пространство MMIO. 256 ТБ, если быть точным.

Обратите внимание, что это адресное пространство 256 ТБ (= 48 бит физического адреса) НЕ включает никаких дисковых накопителей, таких как диски SATA, потому что они НЕ являются частью карты адресов, они включают только память с байтовой адресацией и доступную для ОС.

2) Аппаратное обеспечение ЦП может использовать 46, 48 или> 48 бит в зависимости от поколения сервера. Но еще один важный фактор - сколько бит распознает ОС. Сегодня WS16 поддерживает 48-битные физические адреса (= 256 ТБ).

Для пользователя это означает, что даже при наличии большого ультрасовременного серверного ЦП, который может поддерживать> 48 бит адресации, если вы запускаете ОС, которая поддерживает только 48 бит PA, вы можете использовать только 256 ТБ. .

3) В целом, есть два основных фактора, позволяющих использовать большее количество бит адреса (= больший объем памяти).

а) Сколько бит поддерживает аппаратное обеспечение вашего процессора? (Это можно определить по инструкции CPUID в процессорах Intel).

б) Какая у вас версия ОС и сколько бит PA она распознает / поддерживает.

Минимум (a, b) в конечном итоге определит количество адресного пространства, которым ваша система может воспользоваться.

Я написал этот ответ, не вдаваясь в подробности других ответов. Также я не вдавался в подробности в нюансах MMIO, MMCFG и в целом построения карты адресов. Но я очень надеюсь, что это поможет.

Спасибо, Ананд К. Энамандрам, архитектор серверной платформы Intel Corporation

Ананд К. Энамандрам
источник
Этот вопрос касается 48-битного размера виртуального адресного пространства (требуется, чтобы виртуальные адреса были каноническими). Вам действительно нужно больше виртуальных битов, чем физических, поэтому ядро ​​с высокой половиной может отображать всю физическую память в одно адресное пространство (собственное или пользовательское). Как вы говорите, HW необходимо реализовать столько бит PA, сколько контроллеры DRAM + MMIO могут использовать, и может использовать любое число до 52-битного предела в формате таблицы страниц x86-64. ( Почему в 64-битном виртуальном адресе на 4 бита меньше (48 бит) по сравнению с физическим адресом (52 бита)? )
Питер Кордес
1
Четырехуровневый формат таблицы страниц также накладывает ограничение на 48-битное виртуальное устройство, пока HW + SW не будет поддерживать таблицы страниц PML5 для 57-битных виртуальных машин. В любом случае, это полезный ответ, но, похоже, он размещен не по тому вопросу. Я не уверен, есть ли для него лучшее место, поэтому я думаю, мы можем оставить его здесь, надеюсь, с правкой, чтобы добавить заголовок, чтобы сказать что-то о PA против VA.
Питер Кордес
2

Многие люди имеют это заблуждение. Но я обещаю вам, если вы внимательно прочтете это, после прочтения все ваши заблуждения станут ясны.

Сказать, что процессор 32-битный или 64-битный, не означает, что он должен иметь 32-битную адресную шину или 64-битную адресную шину соответственно! ... Повторяю, НЕТ !!

32-битный процессор означает, что он имеет 32-битный ALU (арифметический и логический блок) ... это означает, что он может работать с 32-битным двоичным операндом (или просто говоря двоичное число, имеющее 32 цифры), и аналогично 64-битный процессор может работать с 64-битным двоичным операнд. Таким образом, 32-разрядный или 64-разрядный процессор НЕ означает, что максимальный объем памяти может быть установлен. Они просто показывают, насколько большим может быть операнд ... (для аналогии вы можете подумать о 10-значном калькуляторе, который может вычислять результаты до 10 цифр ... он не может дать нам 11 цифр или другие большие результаты ... хотя это и есть в десятичном формате, но я говорю эту аналогию для простоты) ... но то, что вы говорите, - это адресное пространство, которое является максимальным размером памяти (ОЗУ) с прямым интерфейсом. Баран' Максимально возможный размер определяется размером адресной шины, а не размером шины данных или даже ALU, на котором определяется размер процессора (32/64 бит). Да, если процессор имеет 32-битную «адресную шину», тогда он может адресовать 2 ^ 32 байт = 4 ГБ ОЗУ (или для 64-битных это будет 2 ^ 64) ... но говоря, что процессор 32-битный или 64-битный имеет ничего не имеет отношения к этому адресному пространству (адресное пространство = насколько далеко он может получить доступ к памяти или максимальный размер RAM), и это зависит только от размера его ALU. Конечно, шина данных и адресная шина могут быть одного размера, и тогда может показаться, что 32-битный процессор означает, что он будет иметь доступ к 2 ^ 32 байтам или 4 ГБ памяти ... но это только совпадение, и это будет не то же самое для всех.... например, Intel 8086 - это 16-битный процессор (поскольку он имеет 16-битный ALU), поэтому, как вы говорите, он должен был получить доступ к 2 ^ 16 байтам = 64 КБ памяти, но это неправда. Он может получить доступ к 1 МБ памяти для 20-битной адресной шины .... Если есть сомнения, можете погуглить :)

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

hafiz031
источник
Я думаю, вы очень четко изложили свою точку зрения, но есть одна вещь, которую я не понимаю в том, что вы сказали о 16-битном процессоре 8086: как 16-битный процессор может обрабатывать 20-битный адрес? Он справляется с этим с помощью двухэтапной операции? Даже если адресная шина имеет ширину 20 бит, как только она попадает в ЦП, ширина регистра, очевидно, может занимать только 16 бит ... Как они это делают?
программисты
2
Хм ... 2-х ступенчатая операция. Регистр сегмента содержит только старшие 16 бит. Затем он умножается на 10H, чтобы получить 20 бит, и затем добавляется смещение.
hafiz031
1

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

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

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

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

На AArch64 все по-другому. Согласно обзору набора команд ARMv8 , это 49-битная виртуальная машина.

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

Олсонист
источник
1
Только нижние 48 имеют значение, но оборудование проверяет правильность расширения знака до 64 бит. IDK, почему они не указали нулевое расширение; возможно, они хотели сделать более удобным проверку высокого и низкого половинного адреса (просто проверяя знаковый бит). Или, может быть, чтобы не делать особую границу 2 ^ 48, чтобы адреса, расположенные вверху, удобно помещались в 32-битные константы с расширенным знаком. Я думаю, что второе более вероятно.
Питер Кордес
В любом случае, текущая проверка HW на каноничность не позволяет программному обеспечению использовать проигнорированные биты для помеченных указателей, которые сломаются в будущем HW, поэтому это часть механизма, позволяющего расширять будущее оборудование, если / когда это необходимо. (Что могло произойти раньше, чем они ожидали, благодаря энергонезависимой памяти, подключенной непосредственно к физическому и виртуальному адресному пространству.)
Питер Кордес,
procfs в Linux на моем Core i5 сообщает, что он отображается на 7ffd5ea41000-7ffd5ea62000. Этот диапазон адресов имеет смысл в соответствии с приведенным выше «каноническим» правилом. Бит 48-63 равен 0, что делает его правильным каноническим адресом. Что немного странно, так это адреса в исходниках Linux. В include / asm / pgtable_64_types написано #define __VMALLOC_BASE _AC (0xff92000000000000, UL). Это НЕ канонический адрес. Такой адрес должен начинаться с 0xffff8. Не знаю почему.
Olsonist 05
Да, IIRC Linux использует нижнюю половину канонического диапазона для пользовательского пространства и (в основном) использует верхнюю половину для сопоставлений только ядра. Но некоторая память ядра экспортируется в пространство пользователя, как и [vsyscall]страница. (Это может быть экспорт таких вещей, как текущий PID, так что getpid()это чисто пользовательское пространство. Такжеgettimeofday() можно просто использовать rdtsc в пользовательском пространстве + масштабные коэффициенты, экспортируемые ядром. Хотя некоторые из них, я думаю [vdso], находятся в верхней части нижняя половина.)
Питер Кордес
ИДК что __VMALLOC_BASEделает. Предположительно он не используется напрямую.
Питер Кордес
0

Процессор считается "N-битным" в основном из-за его размера шины данных и большей части его объектов (внутренней архитектуры) : регистров, накопителей, арифметико-логического блока (ALU), набора команд и т. Д. Например: Старый добрый процессор Motorola 6800 (или Intel 8050) - это 8-битный процессор. Он имеет 8-битную шину данных, 8-битную внутреннюю архитектуру и 16-битную адресную шину.


  • Хотя N-битный процессор может иметь и другие сущности, кроме N-размера. Например, улучшения в 6809 по сравнению с 6800 (оба являются 8-битным ЦП с 8-битной шиной данных). Среди значительных улучшений, внесенных в 6809, было использование двух 8-битных аккумуляторов (A и B, которые можно было объединить в один 16-битный регистр, D), двух 16-битных индексных регистров (X, Y) и двух 16-битные указатели стека.
Амит Г.
источник
Уже есть ответ на этот вопрос на примере Motorola 68000/68020. Этот вопрос действительно касается x86-64, а не старых 8/16-битных процессоров. В случае x86-64 одним из основных факторов является то, что для более широких виртуальных адресов потребуется более глубокая таблица страниц, а этого фактора не существовало для старых чипов, о которых вы говорите.
Питер Кордес
ширина шины данных не обязательно должна соответствовать ширине регистра или ALU. Например, P5 Pentium имеет 64-битную шину данных (выровненные 64-битные загрузки / сохранения гарантированно являются атомарными), но регистры / ALU только 32-битные (за исключением встроенного FPU, а в более позднем Pentium MMX SIMD ALUs.)
Питер Кордес
OP write: «Я ожидал, что если это 64-битный процессор, адресное пространство также должно быть 2 ^ 64». ........ Вы пишете: «Этот вопрос действительно о x86-64, а не о старых 8/16-битных процессорах». ........ Думаю, вы упустили суть вопроса ОП. Вопрос OP является результатом неправильного предположения, что 64-битный процессор должен иметь 64-битную адресную шину. О ALU я написал большую часть его сущностей; Не все из них.
Amit G.
Перестаньте спамить меня, разместив репост этого комментария. Да, конечно, OP неверен по причине, которую вы описываете, но я указывал, что ваш ответ выглядит так, как будто он делает аналогичную ошибку. Вы говорите « и, следовательно, большая часть его сущностей: регистры и накопители, арифметическая логическая единица (ALU) ... », что звучит так, будто вы говорите, что эти вещи соответствуют ширине шины данных. Фраза «большая часть» подразумевает, что вы говорите, какие части, а не то, что это верно только иногда для этих частей.
Питер Кордес