GDT使用的理论示例是什么?

时间:2019-04-28 00:58:53

标签: operating-system memory-segmentation gdt

我正在关注walk through of the GDT。我可以了解如何实现数据结构及其目的。

但是,我不了解GDT的使用方式。在哪种情况下,CPU需要加载段,GDT如何执行此操作?如果GDT涉及键盘驱动的中断,那将是一个很好的示例。

2 个答案:

答案 0 :(得分:0)

GDT或全局描述符表包含有关内存段的信息。 GDT的地址存储在一个称为GDTR的特殊寄存器中。每个段都映射到一个内存区域。该段的目的是提供硬件内存保护。 CPU并不会真正加载整个段,因为段通常是指内存区域。相反,当您使用一个带偏移的段寄存器(CS,DS,SS等)之一来寻址存储区时,CPU将使用存储在GDT中的信息执行检查。例如,如果您将段之一设置为只读,然后稍后尝试对其进行写入,则cpu将阻止访问。对于确实使用系统的段,每次有人访问内存时都会涉及GDT。

当今的OS很少使用细分。他们中的大多数人都建立了“平面内存模型”,每个部分都跨越了整个内存空间。分页和虚拟内存用于内存保护。存在细分市场主要是因为向后兼容。 您可以在osdev

上阅读有关GDT的更多信息。

答案 1 :(得分:0)

对于不使用分段的现代OS(很多);您可能会发现GDT包含:

  • “ CPL = 0”和“ CPL = 3”代码的2或3个描述符(如果64位OS支持较旧的32位进程,则它可能会有“ 32位CPL = 3代码”和“ 64位”,除了“ 64位CPL = 0代码”之外)
  • “ CPL = 0”堆栈的描述符
  • “ CPL = 3”堆栈和数据的描述符
  • 每个CPU的描述符,用于CPU的TSS(任务状态段)
  • 对于32位(对于可以使用swapgs的64位而言,不是很多)每个CPU一个或两个描述符,用于查找“ CPU本地”数据和/或“线程本地”数据< / li>
  • (可选,可能性较小);定义内核API的调用门的描述符
  • (可选,出于特殊目的);一个或多个描述LDT的描述符(有时用于仿真)

对于其他操作系统,GDT可能包含任何内容。