【发布时间】:2019-04-28 00:58:52
【问题描述】:
我正在关注walk through of the GDT。我可以了解数据结构的实现方式及其用途。
但是,我不明白 GDT 是如何使用的。 CPU需要加载段的场景是什么?GDT是如何做到的?如果 GDT 涉及键盘驱动的中断,那将是一个很好的解释示例。
【问题讨论】:
标签: operating-system memory-segmentation gdt
我正在关注walk through of the GDT。我可以了解数据结构的实现方式及其用途。
但是,我不明白 GDT 是如何使用的。 CPU需要加载段的场景是什么?GDT是如何做到的?如果 GDT 涉及键盘驱动的中断,那将是一个很好的解释示例。
【问题讨论】:
标签: operating-system memory-segmentation gdt
GDT 或全局描述符表包含有关内存段的信息。 GDT 的地址存储在称为 GDTR 的特殊寄存器之一中。每个段映射到一个内存区域。该段的目的是提供硬件内存保护。 CPU 并不真正加载整个段,因为段通常指的是内存区域。相反,当您使用具有偏移量的段寄存器(CS、DS、SS 等)之一来寻址内存区域时,CPU 将使用存储在 GDT 中的信息执行检查。例如,如果您已将其中一个段设置为只读,然后您尝试写入它,cpu 将阻止访问。对于系统确实使用段,每次有人访问内存时都会涉及 GDT。
今天的操作系统很少使用段。他们中的大多数建立了“平面内存模型”,每个段跨越整个内存空间。分页和虚拟内存用于内存保护。段的存在主要是因为向后兼容。 您可以在osdev 上阅读有关 GDT 的更多信息
【讨论】:
对于不使用分段的现代操作系统(很多);您可能会发现 GDT 包含:
swapgs)每个 CPU 有一个或两个描述符,用于查找“CPU 本地”数据和/或“线程本地”数据对于其他操作系统,GDT 可以包含任何内容。
【讨论】: