|
当当前代码段要去访问其他段或门时,首先检查对方的权限如何,也就是检查对方的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),高特权级不能访问低特权级,低特权级不能访问高特权级,同级之间的访问
小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)
GMT+8, 2024-4-28 06:38
Powered by Discuz! X3.4
© 2001-2023 Discuz! Team.