В книге я прочитал следующее:
32-битные процессоры имеют 2 ^ 32 возможных адреса, в то время как современные 64-битные процессоры имеют 48-битное адресное пространство.
Я ожидал, что если это 64-битный процессор, адресное пространство также должно быть 2 ^ 64.
Поэтому мне было интересно, в чем причина этого ограничения?
The 32-bit processors have 2^32 possible addresses
это не обязательно верно, может существовать 32-битный ЦП только с 24 "контактами" для адресации памяти. Например, 68EC020 (более дешевая версия 68020) - это 32-битный процессор, но с 24 битами для адресации памяти.Ответы:
Потому что это все, что нужно. 48 бит дают вам адресное пространство размером 256 терабайт. Это много. В ближайшее время вы не увидите систему, которой требуется больше.
Поэтому производители процессоров пошли по пути. Они используют набор команд, который позволяет использовать полное 64-битное адресное пространство, но текущие процессоры используют только младшие 48 бит. Альтернативой была трата транзисторов на обработку большего адресного пространства, в котором не было необходимости в течение многих лет.
Поэтому, когда мы приближаемся к 48-битному пределу, остается лишь выпустить процессоры, которые обрабатывают все адресное пространство, но это не потребует никаких изменений в наборе команд и не нарушит совместимость.
источник
Любой ответ, касающийся размера шины и физической памяти, немного ошибочен, поскольку вопрос OP касался виртуального адресного пространства, а не физического адресного пространства . Например, предположительно аналогичное ограничение для некоторых 386-х было ограничением физической памяти, которую они могли использовать, а не виртуального адресного пространства, которое всегда составляло 32 бита. В принципе, вы можете использовать все 64 бита виртуального адресного пространства даже с несколькими мегабайтами физической памяти; конечно, вы можете сделать это путем подкачки или для специализированных задач, когда вы хотите отобразить одну и ту же страницу по большинству адресов (например, некоторые операции с разреженными данными).
Я думаю, что реальный ответ заключается в том, что AMD просто была дешевой и надеялась, что сейчас никому будет до этого дела, но у меня нет ссылок, которые можно было бы цитировать.
источник
__far
(или, что еще хуже,FAR
/far
!) Указатели ...Прочтите раздел ограничений статьи в Википедии :
То есть на данном этапе нет смысла реализовывать полную 64-битную адресацию, потому что мы не можем построить систему, которая могла бы полностью использовать такое адресное пространство, поэтому мы выбираем что-то практичное для сегодняшних (и будущих) систем.
источник
Внутренний собственный регистр / рабочая ширина не нужно отражать в ширине внешней адресной шины.
Скажем, у вас есть 64-битный процессор, которому нужен только 1 мегабайт оперативной памяти. Все, что требуется - это 20-битная адресная шина. Зачем беспокоиться о стоимости и аппаратной сложности всех дополнительных контактов, которые вы не будете использовать?
Motorola 68000 была такой; 32-битный внутренний, но с 23-битной адресной шиной (и 16-битной шиной данных). ЦП мог получить доступ к 16 мегабайтам ОЗУ, а для загрузки собственного типа данных (32 бита) потребовалось два доступа к памяти (каждый из которых содержит 16 бит данных).
источник
Существует более серьезная причина, чем просто сохранение транзисторов в адресном пути ЦП: если вы увеличиваете размер адресного пространства, вам необходимо увеличить размер страницы, увеличить размер таблиц страниц или иметь более глубокую структуру таблицы страниц (которая больше уровней таблиц перевода). Все это увеличивает стоимость промаха TLB, что снижает производительность.
источник
С моей точки зрения, это результат размера страницы. Каждая страница содержит не более 4096/8 = 512 записей таблицы страниц. И 2 ^ 9 = 512. Итак, 9 * 4 + 12 = 48.
источник
Чтобы ответить на исходный вопрос: не было необходимости добавлять более 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
источник
Многие люди имеют это заблуждение. Но я обещаю вам, если вы внимательно прочтете это, после прочтения все ваши заблуждения станут ясны.
Сказать, что процессор 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 байтов в настоящее время более чем достаточно.
источник
Неправда, что используются только 48 младших разрядов 64-битного VA, по крайней мере, с Intel 64. Старшие 16 бит используются в некотором роде.
Раздел 3.3.7.1 Каноническая адресация в Руководстве разработчика программного обеспечения для архитектур Intel® 64 и IA-32 гласит:
Таким образом, биты с 47 по 63 образуют супербит, либо все 1, либо все 0. Если адрес не в канонической форме, реализация должна дать сбой.
На AArch64 все по-другому. Согласно обзору набора команд ARMv8 , это 49-битная виртуальная машина.
источник
[vsyscall]
страница. (Это может быть экспорт таких вещей, как текущий PID, так чтоgetpid()
это чисто пользовательское пространство. Такжеgettimeofday()
можно просто использовать rdtsc в пользовательском пространстве + масштабные коэффициенты, экспортируемые ядром. Хотя некоторые из них, я думаю[vdso]
, находятся в верхней части нижняя половина.)__VMALLOC_BASE
делает. Предположительно он не используется напрямую.Процессор считается "N-битным" в основном из-за его размера шины данных и большей части его объектов (внутренней архитектуры) : регистров, накопителей, арифметико-логического блока (ALU), набора команд и т. Д. Например: Старый добрый процессор Motorola 6800 (или Intel 8050) - это 8-битный процессор. Он имеет 8-битную шину данных, 8-битную внутреннюю архитектуру и 16-битную адресную шину.
источник