- 一致代码段:
同——> 同:O 相同总是可以的;
低——> 高:O 这就是一致的目的,当前的特权级将被延续下去;
例:应当允许应用程序调用操作系统提供的服务代码;
高——> 低:X 高特权级代码不应依赖于低特权级代码;
例:操作系统不应调用应用程序提供的服务代码
- 非一致代码段:
同——> 同:O 相同总是可以的
低——> 高:X 不想提供给应用程序调用的操作系统服务代码应放入非一致代码段;
注意:应用程序可以通过“调用门”和 ”任务门” 间接访问操作系统服务代码;
高——> 低:X 高特权级代码不应依赖于低特权级代码;
由上述描述可知:无论是一致或非一致代码段,“同同”和“高低”的设计对于代码段而言处理逻辑是相同的;不同的是“低高”,在一致代码段中,设计想法是很自然的,操作系统(系统层)当然应该提供服务给应用程序(用户层)访问;但操作系统中某些服务的误用会导致操作系统自身崩溃,因而出于保护操作系统自身运行环境的目的,此类服务应放置于非一致代码段中,一般情况下不直接提供给应用程序(用户层)访问,如需访问,可通过“调用门”和”任务门” 间接访问之。
值得一提的是:代码跳转时,通过某种手段(调用门)可以实现“低高”。然而“高低”无论是在一致或非一致代码段都是不允许的。我们知道,操作系统有从内核层到用户层的转移过程,那么操作系统是如何实现由“高低”的访问呢?答案是通过ret指令,ret指令的程序操作发生在堆栈(也就是数据段),因而可实现由高->低的转移。数据段特权级的关系如下:
- 数据段、堆栈 (总是非一致):
同——> 同:O 相同总是可以的;
低——> 高:X 操作系统的数据当然不应该让应用这种级别的代码访问;
高——> 低:O 操作系统的高特权级代码当然有权利使用应用程序提供的数据;
数据段、堆栈是非一致段,与非一致代码段不同的是,允许高特权级代码访问低特权级的数据段。