返回信息流最近看了80386,看到有讲特权级的地方,有点晕。不知道具体的判别规则是什么?
还有,在任务切换的时候那个TSS存放在哪里?又怎么和特权级对应呢?
还请高人指点哈!
这是一条镜像帖。来源:北邮人论坛 / soft-design / #22130同步于 2007/11/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
问:80386上特权级的概念和具体使用方法
hman
2007/11/4镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
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存放在哪里?又怎么和特权级对应呢?
: 还请高人指点哈!
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比较?