5-特权级
来源:互联网 发布:打淘宝客服要话费吗 编辑:程序博客网 时间:2024/05/01 07:02
CPU分级
处于保护模式下的 CPU,有4种运行级别。
图1 CPU不同运行级别
围绕在最中心的那个圆心,叫 Ring 0,中文叫 0 环,这里运行特权级最高的代码。我在这里避免说这个级别运行操作系统内核,这是因为这是给设计操作系统的人看的。就目前来看,我不还不要和操作系统拉上关系,因为知识还不够。
中间的 1 环和 2 环很少使用。最外层的 3 环,是运行级别最低的。
怎样查看程序处于哪个运行级别?
打开你的 OD 程序,随便 open 一个 exe 程序,然后观察 cs 段寄存器的值。
图2 查看程序当前在哪个运行级别
可以观察到 CS 的值现在是 0x1B(剩余的80位隐藏位我们还不用关心)。然后看 0x1B 的最低 2 位进制位,这个值是 11b,换算成 10 进制数就是 3. 所以当前程序处于 3 环。
当前程序的运行级别有一个固定的名字,叫 CPL(当前特权级)。在这里 CPL = 3.
DPL
之前遗留的一个段描述符属性——DPL,这是段描述符的特权级。它的含义是,如果你(处于某个当前特权级下的程序)想访问我这个段,你应当具备什么样的级别。
比如某个政府机构,它规定了,只允许市长及其以上级别的人才能进入。这个机构要求的级别就是 DPL(=0),而市长本人的这个职称就是 CPL(=0)。倘若你一个村长(CPL=3)想进这个地方,必然会被拒绝。
RPL
RPL的值只存在于段选择子中。注意,不是段寄存器中,不是段寄存器中,不是段寄存器中。
段选择子就是一个数字,前面讲过,它有三段结构,分别是“索引-TI指示-RPL”
它的含义是当前我想以 RPL 这个级别来请求你把这个段选择子置入段寄存器。实际上 RPL 并没有什么用。因为请求者任何时刻都可以让 RPL = 0。但是如果请求者是 CPL = 0 的程序,用 RPL = 3 的级别来请求 DPL = 0的数据段,必然会失败。
这什么意思呢?举个例子:
省长以省长的身份去办事情的时候(CPL=0的程序以RPL=0的级别去请求DPL=0的数据段),肯定没什么问题。省长以平民的身份去办事情的时候(CPL=0的程序以RPL=3的级别去请求DPL=0的数据段),肯定会失败。
平民以省长的身份去办事情的时候(CPL=3的程序以RPL=0的级别去请求DPL=0的数据段),结果可想而知……失败!!!
总结
本篇中,可能难以理解的是 RPL,没关系,随着后面知识的跟进,你也会慢慢理解。
- 5-特权级
- 特权级转移总结
- 特权级1
- 特权级转换
- CPU特权级保护
- 特权级概述
- 特权级的意味
- 特权级保护
- 特权级保护
- 一个操作系统的实现(5)-关于特权级
- 3.保护模式5----特权级概述(转)
- 分段模式和特权级
- 特权级之间的转换
- 一致代码于特权级
- 【orange】特权级变换总结
- 特权级和调用门
- 特权级--ring0到ring3
- 特权级--ring3到ring0
- Android - 消息机制与线程通信
- C++ 派生类的构造函数和析构函数
- 中科院软件所、计算所保研复试回忆
- 数据库设计三大范式
- window下caffe图像数据转换
- 5-特权级
- log4j配置示例&Spring集成log4j
- Division (斜率dp)
- 面试题:两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
- 2016四川省赛 Floyd-Warshall
- [LeetCode]--67. Add Binary
- Linux 时钟模块分析2
- |洛谷|动态规划|P1156 垃圾陷阱
- framebuffer简介与应用