【问题标题】:File in which the data structure for Global Descriptor and Local Descriptor table is defined?定义全局描述符和局部描述符表的数据结构的文件?
【发布时间】:2019-08-07 05:17:48
【问题描述】:

我正在阅读Understanding Linux Kernel,其中我阅读了有关全局描述符表和本地描述符表的信息。

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

【问题讨论】:

    标签: linux linux-kernel


    【解决方案1】:

    谷歌搜索“Linux Kernel file gdt”这个词会得到你正在寻找的确切结果。 This 是本书搜索结果的链接,内容描述了 GDT 和 LDT 的定义位置。

    • 所有 GDT 都存储在 cpu_gdt_table 数组中。

    • 如果查看源代码索引,可以看到这些符号是在文件arch/i386/kernel/head.S 中定义的。不过我觉得有本书的时候可以查看源代码索引。但是,仍然给出了定义 GDT 的文件。

    【讨论】:

    • 据我所知,这个答案对于 4.* 内核来说已经过时了。新内核使用asm volatile C 代码而不是head.S 汇编代码。但我无法弄清楚新内核如何定义这些数组常量。
    【解决方案2】:

    对于最新的内核,GDT 似乎定义在至少 3 个单独的文件中。

    • arch/x86/include/asm/desc_defs.h
    • arch/x86/include/asm/desc.h
    • arch/x86/include/asm/segment.h

    主 GDT 的布局似乎在 arch/x86/include/asm/segment.h 中定义在 line 91 周围。这条线以上的布局有cmets。

    已完成的表通过函数static inline void native_load_gdt(const struct desc_ptr *dtr) 加载到arch/x86/include/asm/desc.h 中,该函数只调用程序集操作码lgdt。这与旧内核将表加载到处理器中的方式是一致的。见第 303 行here。但是,我在代码库中找不到对此函数的任何调用。请有人帮忙解决这个问题。

    我也找不到在较新的内核中定义实际表的常量的等价物,如line 479

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      相关资源
      最近更新 更多