操作系统——保护模式下的GDT表,地址的映射

本文详细介绍了保护模式下的全局描述符表(GDT)和GDTR寄存器的工作原理,通过图解展示了GDT表的结构,包括段界限和段基址的组成。解释了GDT表中的64位分布,以及G位如何决定内存颗粒度。同时,文章还讨论了段选择子如何用于选择GDT表中的特定段,并提供了简单的汇编示例。
摘要由CSDN通过智能技术生成

  前言


    开始前讲讲废话,之所以写这篇文章,是因为当初在接触开发操作系统的时候,看过的相关文章也不少就是搞不懂GDT表的原理跟分页机制。可能是理解力的问题吧,个人比较喜欢图片,看太多字会眼困。编程对于我来说不过是业余爱好,当初接触开发OS的资料是因为学习C语言太过无聊,边研究边学习可以培养兴趣。不过想不到刚开始用汇编比用C的地方多。废话就不讲了,主要发发牢骚,见谅。


  正文


   1.万恶的概念


       在接触GDT表之前先说说GDTR这个东西,对于熟悉汇编的人来说当然知道是什么。GDTR是寄存器,全局描述符寄存器,相当于CPU里面的EAX,EBX,ECX……,它们都是“硬件”。(好吧,当初我把GDTR跟GDT表搞混了) 既然都是硬件当然有大小,就好象内存条一样。EAX 是32位(byte),而GDTR是48位(byte)

       说说GDT表吧,GDTR是硬件,而GDT表是软件中的“数据”,就好像是TXT文件里的文字,不过它不是放在TXT文件里,它放在物理内存里边。

       重点说一下的是在理解GDT的时候,区分好“硬件”与“数据”。


   2.占用64位的GDT表是如何的?


       重申一下,GDTR是“硬件”,48位寄存器。GDT表“数据”,64位。好吧,上图:



图1 GDT表(intel 手册第3卷第3章)


         这就是GDT表,上下都是32位总共64位,Base Address(基地址),Segment Limit(段界限),其他的都是属性,对属性不了解的可以看看intel手册,英语不好的可以找本于渊的《ORANGE’S:一个操作系统的实现》深入了解。

         图1中可以看到,下部32位中 Segment Limit 15:0(段界限0~15) 占用 GDT表0~15位(bit),上部32位中Segment Limit 19:16(段界限16~19) 占用 GDT表16~19位(bit)。虽然我说了一堆,还是有很多人不明白的吧,继续上图:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值