我正在关注walk through of the GDT。我可以了解如何实现数据结构及其目的。
但是,我不了解GDT的使用方式。在哪种情况下,CPU需要加载段,GDT如何执行此操作?如果GDT涉及键盘驱动的中断,那将是一个很好的示例。
答案 0 :(得分:0)
GDT或全局描述符表包含有关内存段的信息。 GDT的地址存储在一个称为GDTR的特殊寄存器中。每个段都映射到一个内存区域。该段的目的是提供硬件内存保护。 CPU并不会真正加载整个段,因为段通常是指内存区域。相反,当您使用一个带偏移的段寄存器(CS,DS,SS等)之一来寻址存储区时,CPU将使用存储在GDT中的信息执行检查。例如,如果您将段之一设置为只读,然后稍后尝试对其进行写入,则cpu将阻止访问。对于确实使用系统的段,每次有人访问内存时都会涉及GDT。
当今的OS很少使用细分。他们中的大多数人都建立了“平面内存模型”,每个部分都跨越了整个内存空间。分页和虚拟内存用于内存保护。存在细分市场主要是因为向后兼容。 您可以在osdev
上阅读有关GDT的更多信息。答案 1 :(得分:0)
对于不使用分段的现代OS(很多);您可能会发现GDT包含:
swapgs
的64位而言,不是很多)每个CPU一个或两个描述符,用于查找“ CPU本地”数据和/或“线程本地”数据< / li>
对于其他操作系统,GDT可能包含任何内容。