鱼C论坛

 找回密码
 立即注册

特权级规则

已有 610 次阅读2012-9-15 20:19 |个人分类:一个操作系统的实现

当当前代码段要去访问其他段或门时,首先检查对方的权限如何,也就是检查对方的DPL。有些情况还要检查选择子的权限,即RPL,因为我们通过 选择子:偏移的方式去访问一个段,这算是一个访问请求动作,因此称为请求访问权限RPL。

一致代码段:之所以有“一致代码段”的定义,是为了是系统更安全。由于内核与用户程序分开,互不干涉,但是用户程序又必须读取内核数据,于是OS在内核开辟一些可供用户访问的段,但是不允许写入。此代码段不访问受保护的资源和某些类型的异常处理的系统代码

1.内核不知道用户程序的数据

2.用户程序不能访问内核的非共享段

3.用户只能访问到内核的共享段。这里所谓的共享段就是“一致代码段”。

所以“一致代码段”就是内核中为用户程序提供的只读共享段。

由于“一致代码段”是提供给用户程序的,而用户程序的特权级始终比内核低。换句话说,“一致代码段”就是提供给比该“一致代码段”特权级低的用户程序使用,所以用户程序访问“一致代码段”时,必须满足CPL>=DPL,此时RPL不考虑。

非一致代码段:避免低特权级的程序访问受保护的系统代码。此时要求(CPL==DPL)&&(RPL<=DPL)。

还有一种情况就是系统调用,通过系统调用,操作系统过程(被调用者)从一个用户程序(调用者)接收一个选择子时,选择子的RPL必须设置成调用者的CPL,以避免调用者越级。

数据段都是非一致的。


更详细的解释参考http://paxhujing.blog.163.com/blog/static/20190212020120845120901/

总结:

访问数据段和堆栈段,MAX{CPL,RPL}<=DPL 高特权级可以访问低特权级,低特权级不能访问高特权级,同级之间可以访问

一致代码段:CPL>=DPL 高特权级不能访问低特权级,低特权级可以访问高特权级,同级之间可以访问

非一致代码段:(CPL==DPL)&&(RPL<=DPL),高特权级不能访问低特权级,低特权级不能访问高特权级,同级之间的访问


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 06:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部