¿Cómo se divide un espacio de direcciones virtuales de proceso de 64 bits en Linux?

12

La siguiente imagen muestra cómo se divide un espacio de direcciones virtuales de proceso de 32 bits:

ingrese la descripción de la imagen aquí

Pero, ¿cómo se divide un espacio de direcciones virtuales de proceso de 64 bits?

Christopher
fuente

Respuestas:

10

El mapa de memoria virtual x86 de 64 bits divide el espacio de direcciones en dos: la sección inferior (con el bit superior establecido en 0) es el espacio del usuario, la sección superior (con el bit superior establecido en 1) es el espacio del núcleo. (Tenga en cuenta que x86-64 define las direcciones "canónica" de "mitad inferior" y "mitad superior", con una cantidad de bits efectivamente limitada a 48 o 56; consulte Wikipedia para más detalles).

El mapa completo está documentado en detalle en el núcleo ; actualmente parece

========================================================================================
    Start addr    | Offset  |     End addr     |  Size   | VM area description
========================================================================================
                  |         |                  |         |
 0000000000000000 |    0    | 00007fffffffffff |  128 TB | user-space virtual memory
__________________|_________|__________________|_________|______________________________
                  |         |                  |         |
 0000800000000000 | +128 TB | ffff7fffffffffff | ~16M TB | non-canonical
__________________|_________|__________________|_________|______________________________
                  |         |                  |         |
 ffff800000000000 | -128 TB | ffffffffffffffff |  128 TB | kernel-space virtual memory
__________________|_________|__________________|_________|______________________________

con direcciones virtuales de 48 bits. (La variante de 56 bits tiene la misma estructura, con 64 PB de espacio de direcciones utilizable a cada lado de un agujero de 16K PB).

A diferencia del caso de 32 bits, el mapa de memoria de "64 bits" es un reflejo directo de las restricciones de hardware.

Stephen Kitt
fuente
Para aclarar: esta limitación es impuesta por el hardware. Actualmente no existe una implementación de procesador de 64 bits que no deje un gran agujero de direcciones inutilizables en el medio del espacio de direcciones virtuales. La cantidad de memoria física que las CPU pueden abordar también está muy por debajo de 2 a la potencia de 64.
Johan Myréen
Gracias @Johan, he tratado de resaltar esto.
Stephen Kitt