Zwracam uwagę, że SMBios Type 20 pomógłby tutaj, ale jest opcjonalny od wersji 2.5 (2006-09-05) str. 25, L796 i str. 131 , podczas gdy typy 16, 17 i 19 są obowiązkowe, ale nie całkiem Wsparcie.
Tablica pamięci fizycznej (typ 16)
Istnieje jedna z tych struktur dla całego systemu, wyjaśniająca, co jest możliwe na tej płycie.
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
Urządzenie pamięci (typ 17)
Na każdy Dimm przypada jeden rekord, który informuje o fizycznych Dimmach zainstalowanych na płycie.
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
Odwzorowany adres tablicy pamięci (typ 19)
Może istnieć wiele takich rekordów, a każdy rekord zawiera zakres adresów fizycznych.
Oto dane wyjściowe z dwoma dyskami 2 GB:
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
A oto wynik z 4 pałeczkami; 2 * 2 GB i 2 * 4 GB:
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
Zauważ, że w pierwszym przykładzie wyjściowym powyżej były dwa moduły DIMM 2 GB, ale dwa zakresy 3,3 GB i 0,7 GB. Przy 4 Dimmach, system połączy również obszar adresu odwzorowanego w tablicy pamięci na dwie części, ponieważ reprezentuje on tylko to samo co mapa e820, tj. Prawidłowe zakresy adresów fizycznych pamięci.
Od 1 do wielu rekordów typu 20 jest powiązanych dokładnie z jednym urządzeniem pamięci typu 17, co oznacza, że można poznać cały zakres fizyczny:
Przykład
$ 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
Wydaje się, że można przejść z adresu do DIMM dla EDAC - w celu wykrywania i korekcji błędów , ale nie z DIMM do całego zakresu.
Patrząc na kod źródłowy mceloga , do dekodowania używa również typu 20.
dmidecode
ilshw
, ale myślę, że szukasz czegoś więcej niż to, co oferują?lshw
używadmidecode
jako podstawy kodu idmidecode -t 20
daje potrzebne informacje. Ale, jak zauważono, w wersji 2.5 SMBIOS struktura przechowująca tę informację „Adres urządzenia zmapowanego w pamięci”, czyli Typ 20 lub lokalizację banku, jest opcjonalna - dlatego Q jest, jeśli istnieje inny sposób na uzyskanie tych samych informacji. - Związek międzytype 17
„s Locator wartości i zakresu adresów fizycznych (jak ewentualnie zapewniaType 20
).dmidecode -t 20
dane wyjściowe, czy możesz wyjaśnić wartość lokalizatora typu 17 w porównaniu do adresu fizycznego, typ 20?Odpowiedzi:
Gdy masz wiele modułów DIMMS, BIOS może je skonfigurować w jakiś sposób. Więc możesz mieć jeden 2G DIMM będący fizycznym 0G-> 4G, bajty 0-7, pomijanie 8-15. (tzn. małe 64 bity) Drugi moduł DIMM 2G to fizyczne 0G-> 4G, bajty 8-15, pomijane 0-7. (wysokie-64 bity). Zauważ, że myślę, że przeplot jest w rzeczywistości większy, ponieważ uważam, że jeśli masz pamięć QDR, system może wykonać 1 adres, 8x 64-bitowych cykli danych, więc lepiej byłoby przeplatać jednostki 64-bajtowe.
Układy fizyczne 0,7G i 3,3G, które widzisz, mają związek z potrzebą utrzymania niektórych niższych 4G otwartych dla urządzeń PCI, buforów VGA, klasycznych bzdur <1M 8086 itp. Odbywa się to przez most północny. Masz więc mapę typu: 0-> 640K, 1M-> 3,3G, 0,7G dla BIOS, PCI itp. Do 4G. A następnie 4G-> 4,7G dla pamięci RAM.
źródło
Wydaje się, że jest to Brute Force
źródło
z jakiego systemu operacyjnego korzystasz? Jeśli Linux jak obliczyć to polecenie?
pierwsza kolumna to adres fizyczny;
referencje: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Reference_Guide/s2-proc-iomem.html /superuser/480451/what-kind-of -memory-adresy-są-te-te-pokazane-przez-proc-ioports-and-proc-iomem
źródło
Wszystko jest obecnie wirtualne.
W sprzęcie jest coś o nazwie MMU, które już tłumaczy adresy systemu operacyjnego na rzeczywiste adresy fizyczne. Może także rozkładać obciążenie między moduły DIMM i mapować inne części sprzętu w przestrzeni adresowej. To, co nazywa się fizyczną przestrzenią adresową na poziomie systemu operacyjnego, jest już tłumaczone przez widok TLB .
/programming/36639607/how-exactly-do-kernel-virtual-addresses-get-translated-to-physical-ram to miłe wytłumaczenie.
źródło