我正在阅读Understanding Linux Kernel,其中我读到了全局描述符表和本地描述符表。
在哪个源文件(linux内核)中定义了GDT和LDT的数据结构?
答案 0 :(得分:2)
谷歌搜索术语“ Linux内核文件gdt ”会产生您正在寻找的确切结果。 This是书籍搜索结果的链接,其内容描述了GDT和LDT的定义位置。
所有GDT都存储在 cpu_gdt_table 数组中。
如果查看源代码索引,可以看到这些符号在文件arch/i386/kernel/head.S
中定义。但是,我认为当您拥有该书的副本时,可以查看源代码索引。但是,给出了定义GDT的文件。
答案 1 :(得分:0)
对于最新的内核,GDT似乎至少在3个单独的文件中定义。
aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --instance-type "{\"Value\": \"m1.small\"}"
arch/x86/include/asm/desc_defs.h
arch/x86/include/asm/desc.h
主要GDT的布局似乎在line 91的arch/x86/include/asm/segment.h
中定义。在此行上方有关于布局的评论。
已完成的表通过函数arch/x86/include/asm/segment.h
加载到arch/x86/include/asm/desc.h
中,该函数仅调用程序集操作码static inline void native_load_gdt(const struct desc_ptr *dtr)
。这与旧内核将表加载到处理器的方式一致。参见第303行here。但是,我在代码库中找不到对此函数的任何调用。有人请帮忙解决这个问题。
在新内核中,我也找不到在line 479中定义实际表常量的等效方法。