Une recherche Google pour le terme "Linux Kernel file gdt " donne les résultats exacts que vous recherchez. Il s'agit du lien vers le résultat de la recherche du livre avec le contenu décrivant où le GDT et le LDT sont définis.
-
Tous les GDT sont stockés dans la cpu_gdt_table tableau.
-
Si vous regardez dans l'index du code source, vous pouvez voir que ces symboles sont définis dans le fichier
arch/i386/kernel/head.S
. Cependant, je pense que l'index du code source peut être consulté lorsque vous avez une copie du livre. Mais néanmoins, le fichier où GDT est défini est donné.
Pour le dernier noyau, le GDT semble être défini dans au moins 3 fichiers distincts.
arch/x86/include/asm/desc_defs.h
arch/x86/include/asm/desc.h
arch/x86/include/asm/segment.h
La disposition du GDT principal semble être définie en arch/x86/include/asm/segment.h
autour de la ligne 91. Il y a des commentaires sur la mise en page au-dessus de cette ligne.
La table complétée est chargée en arch/x86/include/asm/desc.h
avec la fonction static inline void native_load_gdt(const struct desc_ptr *dtr)
qui appelle simplement l'opcode d'assemblage lgdt
. Ceci est cohérent avec la façon dont les anciens noyaux chargent la table dans le processeur. Voir la ligne 303 ici. Cependant, je ne trouve aucun appel à cette fonction dans la base de code. Quelqu'un s'il vous plaît aider à comprendre cela.
De plus, je ne trouve pas l'équivalent de la définition des constantes de la table réelle comme à la ligne 479 dans les noyaux plus récents.