x86-64 в настоящее время поддерживает только 48 бит виртуального адреса. Более значимые биты должны быть расширением знака наиболее значимого бита действительной/переменной (48-й), то есть эти биты совпадают с 48-м битом. Это является следствием формата иерархической таблицы страниц, поддерживающего только четыре уровня. (Будущее расширение может добавить еще один уровень, добавив еще девять бит к виртуальному адресу или предоставить другой способ расширения размера действительного виртуального адреса.)
Физические адреса ограничены в нескольких точках. Во-первых, записи таблицы страниц определяют, какие биты используются для обеспечения преобразования адресов. x86-64 имеет некоторые зарезервированные биты, доступные в записях таблицы страниц, поэтому этот предел может быть увеличен в будущем без необходимости использования искажений, таких как требование использования страниц с размером 2MiB (или более) для обеспечения больших физических адресов. (Так как большие страницы будут иметь менее значимые физические биты адреса, то по определению - нулевые страницы - они могут быть исправлены для расширения диапазона физических адресов. Это было сделано для 4 страниц MiB для 32-разрядного x86.) Этот предел осуществляется с помощью MMU (TLB и walker). Вероятно, это 39-битный адрес, указанный в разделе/proc/cpuinfo.
Другим ограничением является поддержка тегов кеша. Это ограничивает количество кэш-памяти. Физические адреса также могут использоваться для устройств ввода/вывода и (теоретически) для несказуемой памяти.
И, наконец, размер обычной физической памяти (за исключением устройств ввода/вывода) ограничен контроллерами памяти (и их физическим интерфейсом для DRAM). Это ограничение, как правило, будет таким же, как ограничение тега кэша (поскольку некорпоративная основная память обычно не считается очень полезной), хотя с количеством каналов памяти, не имеющим силы в два раза, она может быть меньше ограничения тега кеша (например, , с тремя каналами памяти каждый канал может поддерживать 8GiB, общая сумма 24GiB, в то время как теги кеша, ограниченные полными битами, поддерживают 32GiB). Это ограничение 32 гигабайта, указанное на связанной странице Intel ARK.
Относительно x86-64 является продолжением IA-32, это означает, что 32-битный код будет работать (корректно) на x86-64 реализации. (Краткий обзор см. В разделе Wikipedia's x86-64 operating modes table.)
Действительно ли литература действительно говорит о том, что адреса памяти имеют 64-разрядную ширину? Потому что я могу только вспомнить, что он говорит о том, что регистры могут хранить 64 бита данных. В любом случае максимальная ОЗУ и размер адреса в основном являются аспектом «аппаратной реализации». AFAIK еще не реализовал полный 64-битный размер адреса, так как пока он практически не используется, и есть недостатки в увеличении размера адреса (снижение производительности) – UnholySheep
@UnholySheep, wiki http://en.wikipedia.org/wiki/64 -bit_computing говорит, что адресация памяти - 64-разрядная.Итак, какие-либо отчеты/proc/cpuinfo являются фактическим размером адресации на платформе? – Mark
Ну, я никогда бы никогда не рассматривал википедию как надежную литературу, однако даже в этой статье есть раздел «Ограничения практических процессоров». поэтому да, в основном/proc/cpuinfo сообщает фактические значения. – UnholySheep