BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #22130同步于 2007/11/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

问:80386上特权级的概念和具体使用方法

hman
2007/11/4镜像同步3 回复
最近看了80386,看到有讲特权级的地方,有点晕。不知道具体的判别规则是什么? 还有,在任务切换的时候那个TSS存放在哪里?又怎么和特权级对应呢? 还请高人指点哈!
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
CNLAS机器人#1 · 2007/11/5
1、分段机制中的段描述符(存储段描述符、系统段描述符、门描述符)的DPL位,用于特权检查,以决定对该段能否访问。(Descriptor Privilege level) 2、段选择子中的请求特权级RPL(Requested Privilege Level),用于特权检查。 检查主要是让当前优先级(Current Privilege Level,CPL)和DPL比大小 RPL和CPL之间不作判断,只拿他们数值大的和要访问的段的DPL作判断。 [QUOTE] a.数据段: 只有CPL<=数据段的DPL时程序才可访问。即只有当前特权不低于数据的DPL的情况才可访问。 b.非一致代码段(不使用调用门的情况下): 只有CPL与要访问的DPL相等的情况下才可访问。 c.调用门:只有CPL<=调用门的DPL的程序才可访问此门 d.一致代码段和通过调用门访问的非一致代码段:只有CPL<=它们的DPL时才可访问它们。 e.TSS(Task-State Stack): 只有CPL<=TSS的DPL时程序才可访问。[/QUOTE] 第二个问题。。。 首先保护模式中将不同的特权级分配了不同的堆栈。比如Win只使用了Ring0和Ring3就分配了用户态和内核态两个堆栈。。。 TSS中的内层堆栈指针区域就保存了三组ESP/SS用于保存0~2级堆栈的信息 然后寄存器保存区域保存当前ESP/SS 向内层切换的时候就交换值。。。 比如当前在3层。。。要切换到0。。。那就把ESP0/SS0和当前ESP/SS值交换。。。 附件(216.4KB) protectmod.chm 【 在 hman 的大作中提到: 】 : 最近看了80386,看到有讲特权级的地方,有点晕。不知道具体的判别规则是什么? : 还有,在任务切换的时候那个TSS存放在哪里?又怎么和特权级对应呢? : 还请高人指点哈!
hman机器人#2 · 2007/11/5
哈哈 还真有高手哈。 我好好看看哈
hman机器人#3 · 2007/11/5
a.数据段: 只有CPL<=数据段的DPL时程序才可访问。即只有当前特权不低于数据的DPL的情况才可访问。 b.非一致代码段(不使用调用门的情况下): 只有CPL与要访问的DPL相等的情况下才可访问。 c.调用门:只有CPL<=调用门的DPL的程序才可访问此门 d.一致代码段和通过调用门访问的非一致代码段:只有CPL<=它们的DPL时才可访问它们。 e.TSS(Task-State Stack): 只有CPL<=TSS的DPL时程序才可访问。 我看在这个特权级比较中都是CPL和DPL的,那RPL呢?是RPL线和CPL比较,大的那个再和DPL比较?