是否定义了Global Descriptor和Local Descriptor表的数据结构的文件?

时间:2014-09-09 19:47:40

标签: linux linux-kernel

我正在阅读Understanding Linux Kernel,其中我读到了全局描述符表和本地描述符表。

在哪个源文件(linux内核)中定义了GDT和LDT的数据结构?

2 个答案:

答案 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 91arch/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中定义实际表常量的等效方法。