Почему системы x86-64 имеют только 48-битное виртуальное адресное пространство?
в книге я прочитал следующее:
32-разрядные процессоры имеют 2^32 возможных адреса, в то время как текущие 64-разрядные процессоры имеют 48-разрядное адресное пространство
Я ожидал, что если это 64-разрядный процессор, адресное пространство также должно быть 2^64.
поэтому мне было интересно, в чем причина этого ограничения?
9 ответов:
потому что это все, что нужно. 48 бит дают вам адресное пространство 256 терабайт. Это очень много. Вы не увидите систему, которая нуждается в большем, чем это в ближайшее время.
поэтому производители процессоров взяли ярлык. Они используют набор инструкций, который позволяет использовать полное 64-разрядное адресное пространство, но текущие процессоры используют только нижние 48 бит. Альтернативой было тратить транзисторы на обработку большего адресного пространства, которое не понадобится многим годы.
поэтому, как только мы приблизимся к 48-битному пределу, это просто вопрос освобождения процессоров, которые обрабатывают полное адресное пространство, но это не потребует никаких изменений в наборе инструкций, и это не нарушит совместимость.
любой ответ, относящийся к размеру шины и физической памяти, немного ошибочен, так как вопрос OP был о виртуальное адресное пространство не физическое адресное пространство. Например, предположительно аналогичный предел на некоторых 386 - х был пределом физической памяти, которую они могли использовать, а не виртуальным адресным пространством, которое всегда было полным 32 бит. В принципе, вы можете использовать полный 64 бит виртуального адресного пространства даже с несколькими МБ физической памяти; конечно, вы это можно сделать путем замены или для специализированных задач, где вы хотите сопоставить одну и ту же страницу по большинству адресов (например, некоторые операции с разреженными данными).
Я думаю, что реальный ответ заключается в том, что AMD просто был дешевым и надеялся, что теперь никто не будет заботиться, но у меня нет ссылок на цитирование.
прочитайте раздел ограничения статья в Википедии:
ПК не может содержать 4 петабайта памяти (из-за размера текущих чипов памяти, если ничего другого), но AMD предусмотрела большие серверы, кластеры общей памяти и другие виды использования физического адресного пространства, которые могут приблизиться к этому в обозримом будущем, а 52-битный физический адрес обеспечивает достаточно места для расширения, не требуя затрат на реализацию 64-битного физического адреса адреса
то есть, на данный момент нет смысла реализовывать полную 64 - битную адресацию, потому что мы не можем построить систему, которая могла бы использовать такое адресное пространство в полном объеме, поэтому мы выбираем что-то практичное для сегодняшних (и завтрашних) систем.
внутренняя собственная ширина регистра/операции не нужно для отражения в ширине внешней адресной шины.
скажем, у вас есть 64-разрядный процессор, который только должен получить доступ к 1 мегабайт оперативной памяти. 20-битная адресная шина-это все, что требуется. Зачем беспокоиться о стоимости и аппаратной сложности всех дополнительных контактов, которые вы не будете использовать?
Motorola 68000 была такой; 32 бит внутри, но с 23-битной адресной шиной (и 16-битной шиной данных). Процессор мог получить доступ к 16 мегабайтам оперативной памяти, а для загрузки собственного типа данных (32 бита) потребовалось два доступа к памяти (каждый из которых содержал 16 бит данных).
с моей точки зрения, это результат от размера страницы.Каждая страница содержит не более 4096/8 =512 записей таблицы страниц. И 2^9 =512. Так 9 * 4 + 12=48.
существует более серьезная причина, чем просто сохранение транзисторов в адресном пути процессора: если вы увеличиваете размер адресного пространства, вам нужно увеличить размер страницы, увеличить размер таблиц страниц или иметь более глубокую структуру таблиц страниц (то есть больше уровней таблиц перевода). Все эти вещи увеличивают стоимость промаха TLB, что вредит производительности.
неверно, что используются только младшие 48 бит 64-битного VA, по крайней мере, с Intel 64. Верхние 16 бит используются, вроде, вроде.
раздел 3.3.7.1 каноническая адресация в руководство разработчика программного обеспечения Intel® 64 и IA-32 Architectures говорит:
канонический адрес должен иметь биты от 63 до 48, установленные в нули или единицы (в зависимости от того, является ли бит 47 нулем или единицей)
таким образом, биты 47 через 63 образуют a Супер-Бит, либо все 1, либо все 0. Если адрес не находится в канонической форме, реализация должна ошибаться.
на AArch64, это другое. Согласно Обзор Набора Инструкций ARMv8, это 49-битный VA.
система преобразования памяти AArch64 поддерживает 49-битный виртуальный адрес (48 бит на таблицу преобразования). Виртуальные адреса расширяются по знаку с 49 бит и хранятся в 64-разрядном указателе. Опционально, под управлением системы регистр, наиболее значимые 8 бит 64-битного указателя могут содержать "тег", который будет игнорироваться при использовании в качестве адреса загрузки/хранения или цели косвенной ветви
процессор считается "N-битным" в основном по размеру шины данных, и на большую часть его сущностей (внутренняя архитектура): регистры, аккумуляторы, арифметико-логический блок (ALU), набор команд и др. Например: старый добрый процессор Motorola 6800 (или Intel 8050)-это 8-битный процессор. Он имеет 8-битную шину данных, 8-битную внутреннюю архитектуру и 16-битную адресную шину.
- хотя N-разрядный процессор может иметь некоторые другие объекты, кроме N-размера. Например impovments в 6809 над 6800 (оба из них являются 8-битным процессором с 8-битной шиной данных). Среди существенных усовершенствований, введенных в 6809, было использование двух 8-битных накопителей (A и B, которые могут быть объединены в один 16-битный регистр, D), двух 16-битных индексных регистров (X, Y) и двух 16-битных указателей стека.
многие люди имеют это заблуждение. Но я обещаю вам, если вы прочтете это внимательно, после прочтения этого все ваши заблуждения будут ясны.
чтобы сказать, что процессор 32 бит или 64 бит не означает, что он должен иметь 32-битную адресную шину или 64-битную адресную шину соответственно!...Повторяю, это не так!!
32-разрядный процессор означает, что он имеет 32-разрядный ALU (арифметический и логический блок)...это означает, что он может работать на 32-разрядных двоичных операндов (или попросту говоря двоичное число имея 32 цифры) и аналогично 64-битный процессор может работать на 64-битном двоичном операнде. Таким образом, погода процессор 32 бит или 64 бит не означает, что максимальный объем памяти может быть установлен. Они просто показывают, насколько большим может быть операнд...(для аналогии вы можете подумать о 10-значном калькуляторе, который может вычислять результаты до 10 digits...it не может дать нам 11 цифр или каких-либо других больших результатов... хотя это в десятичной системе счисления, но я говорю эту аналогию для простоты)...но то, что вы говорите-это адрес пространство, которое является максимальным непосредственно взаимодействующим размером памяти (ОЗУ). Максимальный возможный размер ОЗУ определяется размером адресной Шины, и это не размер шины данных или даже ALU, на котором определяется размер процессора (32/64 бит). Да, если процессор имеет 32-битную "адресную шину", то он может адресовать 2^32 байта=4 ГБ ОЗУ (или для 64-битного это будет 2^64)...но говоря, что процессор 32 бит или 64 бит не имеет никакого отношения к этому адресному пространству (адресное пространство=как далеко он может доступ к памяти или максимальный размер ОЗУ) и это зависит только от размера его ALU. Конечно, шина данных и адресная шина могут иметь одинаковый размер, и тогда может показаться, что 32-разрядный процессор означает, что он будет обращаться к 2^32 байт или 4 ГБ памяти...но это всего лишь совпадение, и оно не будет одинаковым для всех....например, intel 8086-это 16-битный процессор (так как он имеет 16-битный ALU), поэтому, как вы говорите, он должен был получить доступ к 2^16 байт=64 Кб памяти, но это не так. Он может получить доступ до 1 МБ память для 20 бит шины адреса....Вы можете google, если у вас есть какие-либо сомнения:)
Я думаю, что я ясно дал понять свою точку зрения.Теперь перейдем к вашему question...as 64-битный процессор не означает, что он должен иметь 64-битную адресную шину, поэтому нет никакой ошибки в том, чтобы иметь 48-битную адресную шину в 64-битном процессоре...они сохранили адресное пространство меньше, чтобы сделать дизайн и изготовление cheap....as никто не будет использовать такую большую память (2^64 байта)...где 2^48 байт в настоящее время более чем достаточно.
Comments