Ich stelle fest, dass SMBios Type 20 hier helfen würde, aber es ist ab Version 2.5 (05.09.2006), S. 25, L796 und S. 131 optional , wohingegen die Typen 16, 17 und 19 obligatorisch sind, aber nicht ganz Hilfe.
Physisches Speicherarray (Typ 16)
Es gibt eine dieser Strukturen für das gesamte System, die erklärt, was auf dieser Platine möglich ist.
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
Speichergerät (Typ 17)
Es gibt einen Datensatz pro Dimm, der die auf der Platine installierten physischen Dimms angibt.
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
Zugeordnete Speicherarrayadresse (Typ 19)
Es können mehrere dieser Datensätze vorhanden sein, und jeder Datensatz listet einen Bereich von physischen Adressen auf.
Hier ist die Ausgabe mit zwei 2 GB Sticks:
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
Und hier ist die Ausgabe mit 4 Sticks; 2 * 2GB und 2 * 4GB:
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
Beachten Sie, dass in der obigen ersten Beispielausgabe zwei 2-GB-DIMMs vorhanden waren, jedoch zwei Bereiche von 3,3 GB und 0,7 GB. Mit 4 Dimms wird das System auch den Adressbereich des Speicherarrays in zwei Blöcke zusammenfassen, da er genau das Gleiche darstellt wie die e820-Karte, dh die gültigen physikalischen Adressbereiche des Speichers.
1 bis viele Typ 20-Datensätze sind an genau ein Typ 17-Speichergerät gebunden, sodass der gesamte physikalische Bereich bekannt sein kann:
Beispiel
$ 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
Es scheint möglich zu sein, von der Adresse zum DIMM zu EDAC - Error Detection & Correction - Zwecken zu wechseln , aber nicht vom DIMM zum gesamten Bereich.
Betrachtet man den Quellcode von mcelog , verwendet es auch Typ 20 für seine Dekodierung.
dmidecode
undlshw
, aber ich glaube , Sie suchen mehr als das, was diese zur Verfügung stellen?lshw
Verwendetdmidecode
als Codebasis unddmidecode -t 20
gibt gewünschte Informationen. Wie bereits erwähnt, ist in Version 2.5 von SMBIOS die Struktur mit dieser Information "Memory Device Mapped Address" (Speicheradresse), auch als Typ 20 oder Speicherort der Bank bekannt, optional. Q ist also, wenn es eine andere Möglichkeit gibt, die gleichen Informationen abzurufen. - Verknüpfung zwischentype 17
dem Locator- Wert und dem physischen Adressbereich (optional bereitgestellt vonType 20
).dmidecode -t 20
Sie den Locator-Wert von Typ 17 im Vergleich zu der physikalischen Adresse von Typ 20 erläutern?Antworten:
Wenn Sie mehrere DIMMS haben, konfiguriert das BIOS diese möglicherweise in einem Interleave. Ein 2G-DIMM ist also möglicherweise physisch 0G-> 4G, Bytes 0-7 und überspringt 8-15. (dh 64 Bit niedrig) Das andere 2G-DIMM ist physisch 0G-> 4G, Bytes 8-15, überspringt 0-7. (64 Bit hoch). Beachten Sie, dass ich denke, dass das Interleave tatsächlich größer ist als das, weil ich denke, dass, wenn Sie QDR-Speicher haben, das System 1 Adresse ausführen kann, 8x 64-Bit-Datenzyklen, so dass das Interleaving durch Einheiten von 64-Bytes besser wäre.
Die physischen Vorkehrungen für 0,7G und 3,3G haben damit zu tun, dass einige der unteren 4G für PCI-Geräte, VGA-Puffer, klassischen <1M 8086-Mist usw. offen bleiben müssen. Dies erfolgt über die North Bridge. Sie haben also eine Karte wie: 0-> 640K, 1M-> 3,3G, 0,7G für BIOS, PCI usw. bis zu 4G. Und dann 4G-> 4,7G für RAM.
quelle
Die Brute Force-Lösung scheint zu sein
quelle
Welches Betriebssystem verwenden Sie? Wenn Linux wie diesen Befehl ausführen?
die erste Spalte ist die physikalische Adresse;
Referenzen: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Reference_Guide/s2-proc-iomem.html /superuser/480451/what-kind-of Die Speicheradressen sind diejenigen, die von proc ioports and proc iomem angezeigt werden
quelle
Alles ist heutzutage virtuell.
In der Hardware gibt es eine sogenannte MMU, die bereits Adressen für das Betriebssystem in reale physikalische Adressen übersetzt. Es kann auch die Last zwischen den DIMMs verteilen und andere Teile der Hardware dem Adressraum zuordnen. Was auf Betriebssystemebene als physischer Adressraum bezeichnet wird, ist bereits eine über den TLB übersetzte Ansicht.
/programming/36639607/how-exactly-do-kernel-virtual-addresses-get-translated-to-physical-ram ist eine nette Erklärung.
quelle