GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué mi sistema muestra solo 3,2 GiB de RAM cuando definitivamente tengo 4,0 GiB?

Un espacio de direcciones de 32 bits significa que tiene espacio para 4 GB de direcciones. Idealmente, al kernel le gusta poder mapear toda la memoria física, toda la memoria de la tarea actual y toda su propia memoria. Si la memoria física por sí sola ocupa todos los 4 GB disponibles, eso no funcionará. Por lo tanto, la memoria física se divide en memoria baja, que se asigna todo el tiempo, y memoria alta, que se debe asignar cuando está en uso. A menos que esté ejecutando un kernel parcheado, en la arquitectura ix86, se dedican 128 MB de espacio de direcciones al código del kernel y las estructuras de datos, y 896 MB se dedican a mapear la memoria física (para un total de 1 GB).

Lectura de antecedentes sobre las complejidades de la administración de la memoria cuando su espacio de direcciones no es cómodamente más grande que su memoria total:

  • Alta memoria en la wiki del administrador de memoria de Linux
  • Alta memoria en el kernel de Linux en Kernel Trap
  • Capítulo de asignación de memoria en LDD3

Extractos de los registros de su kernel:

BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
BIOS-e820: 00000000cdce0000 - 00000000cdce3000 (ACPI NVS)
BIOS-e820: 00000000cdce3000 - 00000000cdcf0000 (ACPI data)
BIOS-e820: 00000000cdcf0000 - 00000000cdd00000 (reserved)
BIOS-e820: 00000000d0000000 - 00000000e0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
2404MB HIGHMEM available.
887MB LOWMEM available.
Zone PFN ranges:
DMA      0x00000000 -> 0x00001000
Normal   0x00001000 -> 0x000377fe
HighMem  0x000377fe -> 0x000cdce0

Aquí tienes 887 MB de memoria baja:el máximo teórico de 896 MB menos unos pocos MB de búfer DMA (zonas de memoria utilizadas para comunicarse con dispositivos de hardware).

De su memoria física, 3328 MB se asignan a direcciones inferiores a 4 GB y 768 MB se asignan a direcciones superiores a 4 GB (el rango 0x100000000–0x130000000). No tiene acceso a estos 768 MB, lo que explica por qué solo tiene 3242 MB disponibles (4096 MB de RAM menos 768 MB inaccesibles menos 9 MB de búfer DMA menos 75 MB utilizados por el propio kernel para código y datos). No sé por qué el BIOS asigna algo de RAM por encima de la marca de 4 GB, pero como punto de datos, estoy publicando esto desde una PC con 4 GB de RAM que también tiene RAM asignada en 0x100000000–0x130000000.

La asignación de memoria física por encima de 4 GB requiere el uso de PAE. PAE incurre en una pequeña sobrecarga de rendimiento (en particular, requiere estructuras de datos más grandes en el administrador de memoria), por lo que no se habilita sistemáticamente. El kernel de Ubuntu predeterminado se compila sin compatibilidad con PAE. Consigue el -generic-pae núcleo para poder acceder a hasta 64 GB de RAM.

TL, DR:Linux funciona como se esperaba. El firmware no es tan útil. Obtenga un kernel habilitado para PAE.


Linux
  1. Linux:¿por qué Linux muestra más y menos memoria de la que tengo instalada físicamente?

  2. En `while Ifs=Read..`, ¿por qué Ifs no tiene efecto?

  3. ¿Por qué '/' tiene una entrada '..'?

  4. ¿Por qué malloc() llama a mmap() y brk() indistintamente?

  5. ¿Por qué yum updateinfo no muestra todas las actualizaciones?

¿Por qué “ls -all” muestra la hora para algunos archivos pero solo el año para otros?

Linux – ¿Por qué Linux permite ‘init=/bin/bash’?

Linux:¿el sistema se cuelga cuando se queda sin memoria?

¿Por qué Shotwell tiene las posiciones X e Y invertidas cuando se usa Recortar?

¿Por qué cambia MemTotal en /proc/meminfo?

¿Qué asesinos de procesos tiene Linux?