¿Qué son la memoria alta y la memoria baja en Linux?

Pregunta:

Me interesa la diferencia entre Highmem y Lowmem:

  1. ¿Por qué existe tal diferenciación?
  2. ¿Qué ganamos al hacerlo?
  3. ¿Qué características tiene cada uno?

Respuesta:

En una arquitectura de 32 bits, el rango de espacio de direcciones para direccionar la RAM es:

0x00000000 - 0xffffffff

o 4'294'967'295 (4 GB).

El kernel de Linux lo divide 3/1 (también podría ser 2/2 o 1/3 1 ) en espacio de usuario (memoria alta) y espacio de kernel (memoria baja) respectivamente.

El rango de espacio de usuario:

0x00000000 - 0xbfffffff

Cada proceso de usuario recién generado obtiene una dirección (rango) dentro de esta área. Los procesos de usuario generalmente no son de confianza y, por lo tanto, tienen prohibido acceder al espacio del kernel. Además, se consideran no urgentes, como regla general, el kernel intenta diferir la asignación de memoria a esos procesos.

El rango de espacio del kernel:

0xc0000000 - 0xffffffff

Un proceso del kernel obtiene su dirección (rango) aquí. El kernel puede acceder directamente a este 1 GB de direcciones (bueno, no al 1 GB completo, hay 128 MB reservados para un alto acceso a la memoria).

Los procesos generados en el espacio del kernel son confiables, urgentes y se asume que están libres de errores, la solicitud de memoria se procesa instantáneamente.

Cada proceso del kernel también puede acceder al rango de espacio de usuario si así lo desea. Y para lograr esto, el kernel mapea una dirección del espacio de usuario (la memoria alta) a su espacio del kernel (la memoria baja), los 128 MB mencionados anteriormente están especialmente reservados para esto.


1 La opción CONFIG_VMSPLIT_... controla si la división es 3/1, 2/2 o 1/3; probablemente pueda verificar en /boot/config* para ver qué opción fue seleccionada para su kernel.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım