Observo que SMBios Tipo 20 ayudaría aquí, pero es opcional a partir de la versión 2.5 (2006-09-05) pp. 25, L796 y pp. 131 , mientras que los tipos 16, 17 y 19 son obligatorios, pero no del todo ayuda.
Matriz de memoria física (tipo 16)
Existe una de estas estructuras para todo el sistema, que explica lo que es posible en este tablero.
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
Dispositivo de memoria (tipo 17)
Hay un registro por cada Dimm, que le indica los Dimms físicos instalados en el tablero.
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
Dirección asignada de matriz de memoria (tipo 19)
Puede haber varios de estos registros, y cada registro enumera un rango de direcciones físicas.
Aquí está la salida con dos unidades de 2GB:
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
Y aquí está la salida con 4 palos; 2 * 2GB y 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
Tenga en cuenta que en la primera salida de muestra anterior, había dos DIMM de 2GB, pero dos rangos de 3.3GB y 0.7GB. Con 4 Dimms, el sistema también fusionará la región de direcciones mapeadas de la matriz de memoria en dos fragmentos, ya que solo representa lo mismo que el mapa e820, es decir, los rangos de direcciones físicas de memoria válidas.
1 a muchos registros Tipo 20 están vinculados a exactamente un dispositivo de memoria tipo 17, lo que significa que se puede conocer todo el rango físico:
Ejemplo
$ 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
Parece posible pasar de la dirección al DIMM para EDAC - Detección de errores y propósitos de corrección , pero no del DIMM a todo el rango.
Mirando el código fuente de mcelog , también está usando el tipo 20 para su decodificación.
dmidecode
ylshw
, pero creo que está buscando más de lo que proporcionan?lshw
usadmidecode
como código base ydmidecode -t 20
proporciona la información deseada. Pero, como se señaló, en la versión 2.5 de SMBIOS, la estructura que contiene esta información "Dirección asignada del dispositivo de memoria", también conocida como Tipo 20 o ubicación del banco, es opcional, por lo tanto, Q es si hay otra forma de recuperar la misma información. - Enlace entretype 17
el valor del localizador y el rango de direcciones físicas (como lo proporciona opcionalmenteType 20
).dmidecode -t 20
resultados de muestra , ¿puede explicar el valor del localizador del tipo 17 en comparación con la dirección física, tipo 20?Respuestas:
Cuando tiene varios DIMMS, el BIOS puede configurarlos en alguna intercalación. Por lo tanto, es posible que tenga un DIMM 2G físico 0G-> 4G, bytes 0-7, omitiendo 8-15. (es decir, bajo-64 bits) El otro DIMM 2G es físico 0G-> 4G, bytes 8-15, omitiendo 0-7. (alto-64 bits). Tenga en cuenta que creo que la intercalación es en realidad más grande que eso, porque creo que si tiene memoria QDR, que el sistema puede hacer 1 dirección, 8 ciclos de datos de 64 bits, por lo que sería mejor intercalar unidades de 64 bytes.
Los arreglos físicos de 0.7G y 3.3G que ve tienen que ver con la necesidad de mantener abiertos algunos de los 4G inferiores para dispositivos PCI, memorias intermedias VGA, basura clásica <1M 8086, etc. Esto se hace por el puente norte. Entonces tiene un mapa como: 0-> 640K, 1M-> 3.3G, 0.7G para BIOS, PCI, etc., hasta 4G. Y luego 4G-> 4.7G para ram.
fuente
La solución de la fuerza bruta parece ser
fuente
qué sistema operativo estás ejecutando? Si Linux ¿cómo abunda este comando?
la primera columna es la dirección física;
referencias: 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-address-are-the-ones-shown-by-proc-ioports-and-proc-iomem
fuente
Todo es hoy en día virtual.
Hay algo llamado MMU en el hardware que ya traduce las direcciones del sistema operativo en direcciones físicas reales. También podría distribuir la carga entre los DIMM y asignar otras partes del hardware al espacio de direcciones. Lo que se llama espacio de direcciones físicas a nivel del sistema operativo ya es a través de la vista traducida TLB .
/programming/36639607/how-exactly-do-kernel-virtual-addresses-get-translated-to-physical-ram es una buena explicación.
fuente