2014-10-14 1 views
0

У меня процессор Intel Xeon E3-1230 процессор с 4 ядрами:регистры процессора ширина, и адресации памяти (32-битовый или 64-битовый)

Это 64-битный процессор, который означает, что адреса памяти 64- бит, однако спецификация для этого CPU на http://ark.intel.com/products/75054/Intel-Xeon-Processor-E3-1230-v3-8M-Cache-3_30-GHz говорит, что максимальный объем оперативной памяти составляет 32G.

Кроме того, почему размер адреса, сообщаемый/proc/cpuinfo, отличается?

% grep ^address /proc/cpuinfo | uniq 
address sizes : 39 bits physical, 48 bits virtual 
% uname -sr 
% Linux 3.16.2-201.fc20.x86_64 
% 

UPDATE x86_64 или Intel-64 называются расширения для архитектуры IA-32. Означает ли это, что процессор все еще 32-разрядный с 64-разрядными расширениями?

Заранее спасибо.

+1

Действительно ли литература действительно говорит о том, что адреса памяти имеют 64-разрядную ширину? Потому что я могу только вспомнить, что он говорит о том, что регистры могут хранить 64 бита данных. В любом случае максимальная ОЗУ и размер адреса в основном являются аспектом «аппаратной реализации». AFAIK еще не реализовал полный 64-битный размер адреса, так как пока он практически не используется, и есть недостатки в увеличении размера адреса (снижение производительности) – UnholySheep

+0

@UnholySheep, wiki http://en.wikipedia.org/wiki/64 -bit_computing говорит, что адресация памяти - 64-разрядная.Итак, какие-либо отчеты/proc/cpuinfo являются фактическим размером адресации на платформе? – Mark

+0

Ну, я никогда бы никогда не рассматривал википедию как надежную литературу, однако даже в этой статье есть раздел «Ограничения практических процессоров». поэтому да, в основном/proc/cpuinfo сообщает фактические значения. – UnholySheep

ответ

2

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.)

+0

благодарим вас за комментарий. Каков лимитирующий фактор для фактического размера виртуальной памяти в системе? Думаю, это не только количество физической памяти? Другими словами, хотя x86_64 поддерживает 2^48 байт виртуальной памяти, это скорее теоретическое число, не так ли? – Mark

+1

@Mark Размер адресного пространства виртуальной памяти (для плоской адресации, игнорирования сегментов и других усложняющих факторов) ограничен сначала размером регистра, используемого для адресации (64 бит в x86-64) и вторым (для ISA с аппаратным TLB заполнить как x86 и ARM) по характеру таблицы страниц. x86 использует иерархическую таблицу страниц, где база таблицы указывает на страницу указателей (и метаданных, таких как разрешения), каждая из которых указывает на другую страницу указателей и т. д. Поскольку каждая запись имеет значение 8b, а размер страницы - 4KiB, каждый уровень имеет 512 записей, с индексом 9 virt. адр. биты. ... –

+1

С четырьмя уровнями, каждая из которых охватывает 9 бит и 12 бит, которые являются смещением на странице 4KiB, таблица страниц может обрабатывать 48 бит виртуального адресного пространства (9 + 9 + 9 + 9 + 12). Добавление уровня добавит еще 9 бит. В ISA без аппаратного заполнения TLB размер виртуального адресного пространства может варьироваться более свободно, главным образом, это дизайнерское решение относительно тегов TLB и совместимость с программным обеспечением для предыдущих реализаций. Во всяком случае, да, размер адресного пространства виртуальной памяти несколько произволен. –