如何添加LDT到GDT中

 LDT=local descriptor table 是多任务的雏形。

(写给自己看的,路过的勿骂)

首先说明下GDT,gdt=global descriptor table。保护模式下的索引每个段的表。

gdt中每一项为一个entry称之为descriptor描述符,使用selectorXXX来进行保护模式下的运行(其实就是个偏移),这个表项的属性指示决定了该描述符该怎么使用。
比如数据段的属性的宏是:DA_RW,32位代码段的属性是:DA_C + DA_32.

其中还有一种entry属性称之为:DA_LDT.这就是LDT所在GDT中的属性。
可以把LDT想象成多任务中针对单个任务中的各个段的一个表。


如何添加呢?

  1. 首先写出这个ldt中所包含的所有段的定义。
  2. 对所有的这些段在ldt表中定义其descriptor数据结构。并相应的写出selectorXX,其中descriptor中的起始地址处可为0,即是为定义,当对所有的“描述符表”进行初始化的时候,再统一进行初始化。并且要注意在selector中的地址中要加上SA_TIL这个属性,代表这个selector是一个ldt的selector,这样在使用这个selector的时候,cpu就知道是在gdt中查找还是在当前ldt中查找了.
  3. 将这个ldt表所在的段加到gdt表中,属性为DA_LDT(为了好理解,都定义为宏),加上相应的选择子,这个ldt在gdt中的选择子不做属性变化。
  4. 在dt表格初始化的地方对所有这些新加的不乱是ldt还是gdt的段的基址进行初始化,然后各种必要操作进入保护模式。
  5. 在保护模式中使用ldt中的段的时候,先要将ldt表在gdt表中的selector加载到ldtr寄存器中。才能使用。这样cpu才知道当前ldt是哪一个/


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值