GDTR、LDTR、GDT、LDT的理解’

网上关于GDT与LDT的内容很多,这里只是在别人的基础上加入了自己理解的内容,首先贴一段LDTR的百度百科说明:LDTR(Local Descriptor Table Register)即局部描述符表寄存器,为自intel 80386起引入的寄存器。其中存放内容由两部分构成,第一部分为16位的LDT(局部描述符表)段的段选择子;第二部分为LDT段的段描述符的内容,intel 80386起引入的
摘要由CSDN通过智能技术生成

           网上关于GDT与LDT的内容很多,这里只是在别人的基础上加入了自己理解的内容,首先贴一段LDTR的百度百科说明:

          LDTR(Local Descriptor Table Register)即局部描述符表寄存器,为自intel 80386起引入的寄存器。其中存放内容由两部分构成,第一部分为16位的LDT(局部描述符表)段的段选择子;第二部分为LDT段的段描述符的内容,intel 80386起引入的寄存器。(保护模式下为32位,IA_32e模式下为64位)、段限、段的性质描述。当进程切换时,LDTR中自动载入新进程描述符的选择子(其实是该描述符在GDT中的索引),地址转换时,若相应段寄存器(DS,CS,SS,ES)TI=1时,会根据LDTR中的描述符选择子(索引)在GDT中找到LDT的描述符,该描述符中记录着LDT的基址,然后再根据相应段寄存器(保护模式下应该叫段选择子)的高13位(该段描述符在LDT中的索引)在LDT中找到该段的描述符,而段基址就在该描述符中,段基址+偏移地址=线性地址,然后在根据是否启用分页ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GDT(全局描述符表)和IDT(中断描述符表)是操作系统中用于管理内存和中断的重要数据结构。 GDT是一个表,用于存储所有内存段的描述符,描述符包含了段的基地址、段的长度、访问权限等信息。在x86体系结构的保护模式下,所有的内存访问都必须通过段寄存器来实现。当CPU执行一条访存指令时,它会把段寄存器的值当做段描述符的索引,在GDT中找到对应的描述符,从而确定要访问的内存地址的范围和访问权限。因此,初始化GDT是操作系统启动时的必要步骤。 IDT是另一个表,用于存储所有中断和异常处理程序的描述符。当CPU收到一个中断请求或异常时,它会从IDT中找到对应的描述符,从而确定要执行的中断或异常处理程序的地址。因此,初始化IDT也是操作系统启动时的必要步骤。 GDT和IDT的初始化大致可以分为以下几个步骤: 1.创建并填充GDT和IDT的表项,每个表项对应一个内存段或中断处理程序。 2.创建并填充GDTRGDT寄存器)和IDTR(IDT寄存器),这两个寄存器分别存储GDT和IDT表的地址和大小信息。 3.使用LGDT和LIDT指令将GDTR和IDTR的值加载到CPU中,从而告诉CPU如何寻找GDT和IDT表。 需要注意的是,为了保证安全性,GDT和IDT表通常被放置在内核态的固定位置,并且只有内核态的代码才能够修改它们。此外,为了简化实现,现代操作系统通常会使用一些预定义的GDT和IDT表项,而不是每次都手动填充表项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值