首页 > 学院 > 操作系统 > 正文

RING0到RING3

2024-06-28 13:27:13
字体:
来源:转载
供稿:网友
RING0到RING3在前一篇文章里面,我们将了CPU保护模式中的几种特权RING0,RING1,RING2,RING3!操作系统通常运行在RING0,应用程序通常运行在RING3。CPU如何从RING0到RING3

先看实现代码

mov ax, SelectorTSS                             ltr ax ;                                                     push SelectorStack3push TopOfStack3   push SelectorCodeRing3  push 0retf

每一个特权等级对应一个自己的堆栈,

RING0 –- ESP0,SS0

RING1 –- ESP0,SS1

RING2 –- ESP0,SS2

CPU进行不同特权级别的跳转时,要改变堆栈!但是CPU只有一个SS和SP,要让跳转后能够恢复,就必须将每一个特权等级的堆栈信息都保存在内存中。保存各个特权堆栈的内存有一个专门的结构TSS,该结构的首地址应该被保存到CPU的任务寄存器(Task Register)。

retf 相当于一下汇编pop ippop cspop sppop ss

执行完retf之后CPU的下一个执行的指令cs:ip 就成了 SelectorCodeRing3:0 实际上就表示执行RING3的代码段的第一条指令


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表