首页
社区
课程
招聘
[原创]保护模式下的内存寻址初探
发表于: 2008-9-8 12:49 5595

[原创]保护模式下的内存寻址初探

2008-9-8 12:49
5595
学了一些保护模式的皮毛,困顿于GDT 和 LDT的概念纠葛不清。后来按照intel的设计思路,发现了所以然来,拿来分享。

其实Intel这么煞费苦心地设计出这样的寻址方式,说到底,和它为了支持多任务有关系。每个任务都是要保护起来的,这样,我们就必须保护每个任务对应的一些内存段,防止被其他任务破坏。保护这些内存段,关键在段描述符。段描述符内有对应内存段的“读\写\执行”控制字。这些控制字决定着该段内存是否可读,是否可写,是否可执行。特定进程的相关段描述符集合在一起,就构成了该进程的段描述符表。
每个进程都有一张自己相应的段描述符表。也就是LDT。有多少个进程就有多少个这样的表。每个表都放在内存的某一特定的位置上。这些位置的地址都被集中管理,放在了一个地方。这个地方就是GDT。也就是全局描述符表。当然,GDT除了各个LDT的地址以外,还保存着其他东西。这个我们先不管。
说到GDT,我们要说说全局描述符。内存里,除了进程还有操作系统。操作系统的一些数据是被所有进程共享的。这些数据所构成的段,也是需要段描述符去控制相关的读写安全的。这些段描述符的地址像进程中那些段描述符的地址一样,都被集中到一块内存中管理。也就是我们说的GDT。这个GDT的首地址,放在了什么地方呢?放在了GDTR(全局描述符表寄存器)中。想要找到GDT,直接就从GDTR中读取它的地址就好了。
先到这里,有时间再聊聊段描述符索引的问题。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
2
flat model起保护作用的是页表,LDT可有可无,建议重读intel manual v3。
2008-9-8 12:57
0
雪    币: 201
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
^_^,不要这么底层噻,我现在只想在VA层面上谈谈。而且,对新人,我不建议直接就看“三本书”。
2008-9-8 19:08
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
4
RPL

2008-9-8 19:42
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
5
对于没有金山词霸的不建议直接看
2008-9-8 20:31
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
6
“每个进程都有一张自己相应的段描述符表。也就是LDT”这句在xp下不适合吧?我记得现在的操作系统已经很大程度放弃实用段机制,LDT在xp下也没用到。段机制其实过于复杂,有分页机制管理已经很好了。
2008-9-9 18:12
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
7
看linux内核情景分析
里面说了,分段机制只是386为了兼容286保留的。
linux和windows都没有用到LDT
2008-9-9 21:29
0
雪    币: 315
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
是用SGDT指令读取GDT的基地址吧
2008-9-9 22:36
0
游客
登录 | 注册 方可回帖
返回
//