首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GDT使用的理论示例是什么?

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

Stack Overflow用户
提问于 2019-04-28 08:58:53
回答 2查看 284关注 0票数 0

我正在跟踪一个walk through of the GDT。我可以掌握数据结构是如何实现的,以及它的用途。

然而,我不明白的是GDT是如何使用的。CPU需要加载段的场景是什么? GDT是如何做到这一点的?如果GDT涉及到键盘驱动的中断,这将是一个很好的例子来解释。

EN

回答 2

Stack Overflow用户

发布于 2019-05-08 08:42:44

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

今天的操作系统很少使用段。他们中的大多数人建立了“扁平记忆模型”,每个段跨越整个存储空间。分页和虚拟内存用于内存保护。Segment的存在主要是因为向后兼容。您可以在osdev上阅读更多关于GDT的内容。

票数 0
EN

Stack Overflow用户

发布于 2019-05-08 11:20:32

对于不太使用分段的现代操作系统,您可能会发现GDT包含:

用于"CPL=0“和" CPL=3”代码的

  • 2或3描述符(如果64位OS支持较老的32位进程,则它可能具有“32位CPL=3代码”和“64位CPL=3代码”,除了“64位CPL=0代码”之外)
  • 用于"CPL=0“堆栈的描述符
  • 用于"CPL=3”堆栈的描述符和数据
  • 用于CPU的TSS (任务状态段)的每个CPU的描述符
  • 32位(对于可以使用swapgs的64位没有那么多)用于查找"CPU本地“数据和/或”线程本地“数据的每个CPU的一个或两个描述符(不太可能);一个描述符,用于定义用于特殊目的的内核API
  • (optionally,的调用门);一个或多个描述符,用于描述

(有时用于仿真

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55886160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档