一直弄不懂这个问题

来源:百度知道 编辑:UC知道 时间:2024/06/22 21:02:24
请问CPL(当前特权级),DPL(描述符特权级),RPL(请求特权级)分别有什么作用呢?在哪儿能体现它们的作用呢?

任务内相同特权级的转移:
段间直接转移和段间直接调用:
1.检查目标地址指针内的选择子指示的描述符是否为空,目标代码段描述符不能为空描述符,即该选择子的高14位不能为0
2.由选择子内的TI位(第2位)决定是从GDT还是从LDT中读出目标代码段的描述符
3.检查描述符类型是否正确
4.普通代码段,要求CPL=DPL,RPL<=DPL;一致代码段,要求CPL>=CPL
5.目标代码段描述符中的P位必须为1
6.把目标代码段描述符中的段基址、段限、属性装入CS的高速缓冲寄存器中
7.检查目标地址的偏移是否越过目标代码段的段界限,这也是不允许的,即目标地址的偏移不允许越过该代码段
8.装入指令指针寄存器EIP,并把CPL装入CS内的RPL字段

任务内相同特权级的转移途径: 任务内相同特权级的转移可用段间直接或间接转移指令JMP和段间直接或间接调用指令CALL、段间返回指令RET、中断指令INT、中断返回指令IRET.其中利用段间接转移指令JMP和段间调用指令CALL的任务内相同特权级的转移是指用到了调用门.

任务内不同特权级的转移:
任务内不同特权级的转移分为向内层转移和向外层转移
通过调用门(下面的都是指间接转移):
一.向内层转移:
1.首先要检查调用门,必须符合CPL<=DPL,RPL<=DPL
2.检查目标地址指针内的选择子指示的描述符是否为空,目标代码段描述符不能为空描述符,即该选择子的高14位不能为0
3.由选择子内的TI位(第2位)决定是从GDT还是从LDT中读出目标代码段的描述符
4.检查描述符类型是否正确,调整RPL=0
5.这里的检查类似于任务内相同特权级的转移中的第4步,但这里的DPL不是调用门的DPL,而是调用门内选择子所指向的目标代码段描述符的DPL,因为对于段间转移指令JMP和段间调用指令CALL所做的检查不一致,所以分别加以描述:
1) 对于使用调用门的段间转