¿Cómo gestiona el kernel de Linux menos de 1 GB de memoria física?
Estoy aprendiendo lo interno del kernel de Linux y mientras leía "Entendiendo el kernel de Linux", me sorprendieron bastantes preguntas relacionadas con la memoria. Una de ellas es cómo el kernel de Linux maneja la asignación de memoria si la memoria física de, digamos, solo 512 MB está instalada en mi sistema.
Mientras leo, los mapas del núcleo0 (o 16) MB-896MB RAM física en la dirección lineal 0xC0000000 y puede abordarla directamente. Entonces, en el caso descrito anteriormente donde solo tengo 512 MB:
¿Cómo puede el núcleo asignar 896 MB de solo 512 MB? En el esquema descrito, el kernel configura las cosas para que las tablas de página de cada proceso mapeen direcciones virtuales de 0xC0000000 a 0xFFFFFFFF (1GB) directamente a direcciones físicas de 0x00000000 a 0x3FFFFFFF (1GB). Pero cuando solo tengo 512 MB de RAM física, ¿cómo puedo asignar direcciones virtuales de 0xC0000000-0xFFFFFFFF a 0x00000000-0x3FFFFFFF físico? El punto es que tengo un rango físico de solo 0x00000000-0x20000000.
¿Qué pasa con los procesos en modo de usuario en esta situación?
Cada artículo explica solo la situación, cuando ha instalado 4 GB de memoria y el kernel asigna los 1 GB al espacio del kernel y los procesos del usuario usan la cantidad restante de RAM.
Agradecería cualquier ayuda para mejorar mi comprensión.
Gracias..!