Отмечу, что здесь поможет SMBios Type 20, но он не является обязательным для версии 2.5 (2006-09-05), стр. 25, L796 и стр. 131 , тогда как типы 16, 17 и 19 являются обязательными, но не совсем Помогите.
Массив физической памяти (тип 16)
Существует одна из этих структур для всей системы, объясняющая, что возможно на этой плате.
Handle 0x1000, DMI type 16, 23 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 768 GB
Error Information Handle: Not Provided
Number Of Devices: 24
Устройство памяти (тип 17)
На каждый Dimm есть одна запись, которая говорит вам о физических Dimms, установленных на плате.
Handle 0x1100, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x1000
Error Information Handle: Not Provided
Total Width: 72 bits
Data Width: 64 bits
Size: 2048 MB
Form Factor: DIMM
Set: 1
Locator: DIMM_A1
Bank Locator: Not Specified
Type: DDR3
Type Detail: Synchronous Registered (Buffered)
Speed: 1600 MHz
Manufacturer: XXXX
Serial Number: XXXX
Asset Tag: XXXX
Part Number: XXXX
Rank: 1
Configured Clock Speed: 1333 MHz
Адрес, сопоставленный массиву памяти (тип 19)
Таких записей может быть несколько, и каждая запись перечисляет диапазон физических адресов.
Вот вывод с двумя блоками по 2 ГБ:
Handle 0x1300, DMI type 19, 31 bytes
Memory Array Mapped Address
Starting Address: 0x00000000000
Ending Address: 0x000CFFFFFFF
Range Size: 3328 MB
Physical Array Handle: 0x1000
Partition Width: 2
Handle 0x1301, DMI type 19, 31 bytes
Memory Array Mapped Address
Starting Address: 0x00100000000
Ending Address: 0x0012FFFFFFF
Range Size: 768 MB
Physical Array Handle: 0x1000
Partition Width: 2
А вот и выход с 4 палками; 2 * 2 ГБ и 2 * 4 ГБ:
Handle 0x1300, DMI type 19, 31 bytes
Memory Array Mapped Address
Starting Address: 0x00000000000
Ending Address: 0x000CFFFFFFF
Range Size: 3328 MB
Physical Array Handle: 0x1000
Partition Width: 2
Handle 0x1301, DMI type 19, 31 bytes
Memory Array Mapped Address
Starting Address: 0x00100000000
Ending Address: 0x0032FFFFFFF
Range Size: 8960 MB
Physical Array Handle: 0x1000
Partition Width: 2
Обратите внимание, что в первом примере выходных данных было два модуля DIMM по 2 ГБ, но два диапазона: 3,3 ГБ и 0,7 ГБ. С помощью 4 диммов система также объединит область адресов, отображаемых в массиве памяти, на две порции, поскольку она просто представляет собой карту e820, то есть допустимые диапазоны физических адресов памяти.
От 1 до многих записей типа 20 связаны только с одним устройством памяти типа 17, что означает, что весь физический диапазон может быть известен:
пример
$ sudo dmidecode -t 20
# dmidecode 2.12
SMBIOS 2.6 present.
Handle 0x002F, DMI type 20, 19 bytes
Memory Device Mapped Address
Starting Address: 0x00000000000
Ending Address: 0x000FFFFFFFF
Range Size: 4 GB
Physical Device Handle: 0x002B
Memory Array Mapped Address Handle: 0x002E
Partition Row Position: 1
Handle 0x0030, DMI type 20, 19 bytes
Memory Device Mapped Address
Starting Address: 0x00100000000
Ending Address: 0x001FFFFFFFF
Range Size: 4 GB
Physical Device Handle: 0x002C
Memory Array Mapped Address Handle: 0x002E
Partition Row Position: 1
Кажется возможным перейти от адреса к DIMM для EDAC - Обнаружение и исправление ошибок , но не от DIMM до всего диапазона.
Глядя на исходный код mcelog , он также использует тип 20 для своего декодирования.
dmidecode
иlshw
, но я думаю, что вы ищете больше, чем то, что они предоставляют?lshw
использует вdmidecode
качестве базы кода иdmidecode -t 20
дает требуемую информацию. Но, как уже отмечалось, в версии 2.5 SMBIOS структура держит эту информацию «Memory Device Подключенные Адрес» ака Тип 20 или банк расположение не является обязательным - таким образом , Q, если есть другой способ получить ту же информацию. - Связь междуtype 17
«S Локатором стоимостью и физическим диапазоном адресов (как при необходимости обеспечиваетсяType 20
).dmidecode -t 20
вывода, можете ли вы объяснить значение локатора типа 17 по сравнению с физическим адресом, тип 20?Ответы:
Если у вас есть несколько модулей DIMMS, BIOS может настроить их на чередование. Таким образом, у вас может быть один 2G DIMM, физический 0G-> 4G, байты 0-7, пропуск 8-15. (т.е. младшие 64 бита) Другой модуль 2G DIMM - это физический 0G-> 4G, байты 8-15, пропуск 0-7. (старшие 64 бита). Обратите внимание, что я думаю, что чередование на самом деле больше, чем это, потому что я думаю, что если у вас есть память QDR, то система может выполнять 1 адрес, 8x 64-битных циклов данных, так что чередование по блокам по 64 байта было бы лучше.
Физическое устройство 0,7G и 3,3G, которое вы видите, связано с необходимостью держать некоторые нижние 4G открытыми для устройств PCI, VGA-буферов, классического дерьма <1M 8086 и т. Д. Это делается северным мостом. Таким образом, у вас есть карта типа: 0-> 640K, 1M-> 3.3G, 0,7G для BIOS, PCI и т. Д. До 4G. А потом 4G-> 4.7G для оперативной памяти.
источник
Решение грубой силы, кажется,
источник
на какой ОС вы работаете? Если Linux, то как abount этой команды?
первый столбец - это физический адрес;
ссылки: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Reference_Guide/s2-proc-iomem.html /superuser/480451/what-kind-of -Память-адрес-является-The-оны-показали-на-PROC-ioports-и-PROC-iomem
источник
В наше время все виртуально.
В оборудовании есть нечто, называемое MMU, которое уже переводит адреса для ОС в реальные физические адреса. Это также может распределить нагрузку между модулями DIMM и отобразить другие части оборудования в адресное пространство. То, что называется физическим адресным пространством на уровне операционной системы, уже является представлением в переводе TLB .
/programming/36639607/how-exactly-do-kernel-virtual-addresses-get-translated-to-physical-ram - хорошее объяснение.
источник