Una búsqueda en Google del término "Linux Kernel file gdt " arroja los resultados exactos que está buscando. Este es el enlace al resultado de la búsqueda del libro con el contenido que describe dónde se definen GDT y LDT.
-
Todos los GDT se almacenan en la cpu_gdt_table matriz.
-
Si observa el índice del código fuente, puede ver que estos símbolos están definidos en el archivo
arch/i386/kernel/head.S
. Sin embargo, creo que el índice del código fuente se puede ver cuando tienes una copia del libro. Sin embargo, se da el archivo donde se define GDT.
Para el kernel más reciente, la GDT parece estar definida en al menos 3 archivos separados.
arch/x86/include/asm/desc_defs.h
arch/x86/include/asm/desc.h
arch/x86/include/asm/segment.h
El diseño de la GDT principal parece estar definido en arch/x86/include/asm/segment.h
alrededor de la línea 91. Hay comentarios sobre el diseño encima de esta línea.
La tabla completa se carga en arch/x86/include/asm/desc.h
con la función static inline void native_load_gdt(const struct desc_ptr *dtr)
que simplemente llama al código de operación del ensamblado lgdt
. Esto es consistente con la forma en que los núcleos más antiguos cargan la tabla en el procesador. Vea la línea 303 aquí. Sin embargo, no puedo encontrar ninguna llamada a esta función en el código base. Alguien, por favor, ayude a resolver esto.
Además, no puedo encontrar el equivalente de definir las constantes de la tabla real como en la línea 479 en los núcleos más nuevos.