¿Por qué no hay pagetable_init en init_64.c del kernel de Linux?
Actualmente estoy aprendiendo el proceso de inicialización de la tabla de páginas del kernel en Linux. Mientras leo los códigos, descubrí que hay una función pagetable_init()
en init_32()
para inicializar la tabla de páginas del kernel en sistemas de 32 bits. Sin embargo, descubrí que no hay una función similar en init_64.c
para sistemas de 64 bits. Así que me pregunto cómo inicializa Linux la tabla de páginas del kernel en x86_64.
davy.ai
La inicialización de la tabla de páginas del kernel para x86_64 en Linux se realiza de manera diferente a su contraparte de 32 bits. En lugar de tener una función separada llamada
pagetable_init()
eninit_64.c
, el proceso de inicialización se integra en el proceso de arranque en sí mismo.Durante el arranque, se crea la primera tabla de páginas, llamada tabla de páginas de arranque, con la ayuda de las funciones
early_mem
. Esta tabla asigna la memoria física desde 0 hasta la memoria física máxima disponible. Una vez que esto se ha hecho, el kernel crea una segunda tabla de páginas, llamada direct map, con la ayuda de la funciónpopulate_mapping()
.El direct map se utiliza para asignar el espacio de direcciones virtuales del kernel a la memoria física. Esto significa que las direcciones del kernel se asignan directamente a direcciones físicas. La función
populate_mapping()
mapea las páginas del kernel en el direct map, lo que permite al kernel tener acceso directo a la memoria física.Después de crear el direct map, el kernel inicializa las tablas de páginas restantes utilizando la función
kernel_physical_mapping_init()
. Esta función inicializa las tablas de páginas del kernel utilizando el mapeo directo. Esto garantiza que las regiones de memoria del kernel se asignen a la misma región de memoria física que ocuparían si no hubiera direccionamiento virtual.En resumen, el proceso de inicialización de la tabla de páginas del kernel en x86_64 Linux se integra en el proceso de arranque en sí mismo, y se utiliza el direct map para asignar el espacio de direcciones virtuales del kernel a la memoria física. Se utiliza la función
kernel_physical_mapping_init()
para inicializar las tablas de páginas restantes.