es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , , ,

Answer

  1. Avatar for 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() en init_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ón populate_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.

Comments are closed.