x86的核心态与管态

X86与ibm pc不一样,我认为这个机制应该是intel向ibm学习并然后本地化的产物。

首先,x86处理器本质并没有管态与目态的定义。

X86把这个东西放在段属性中来说明。就是cs的低两位。所以它是通过定义段来定义了处理器的当前状态(管态与目态)的。这两位名称为CPL即当前特权级。

而关于特权级,x86又有自创的发明:即四个环。用环来表示是说正常情况下,所有的段组成一个一个的环,各自在自己的圈子中运行,互相不影响。

这是个模型,即:环与环的跃迁。

这里还有个多余的东西就是IOPL,它放在程序状态字中。用来定义可以IO的最低CPL即当前段特权级。一般把它设置为00即核心态环。注意这个只能限制IO指令是对处理器的约束不能约束段间的转移与访问(这可能就是x86实现了一个与IBM PC不同东西的原因:他们觉得这个更强大。看,不只是能够限制IO访问,还能限制代码间的访问(包括指令与数据))。

关于段的本质特权级与请求特权级,分别叫DPL, RPL。

下一个就是门。门的意思是入口。有各种入口所以门有各种门。最重要的就是调用门,它可以实现从外层环向内层环的跃迁。要调用中断门,就必须先跳至调用门完成身份的变更。提升CPL。因为所有的中断门的DPL都是00环的。这句话可能也是对“进入核心态的唯一途径是中断”的翻译。因为实际上有了调用门,根本就不需要中断就能完成向核心态的跃迁。但是系统调用都在中断中,所以的确也可以这么说。

存在一种情况,我自己写个核心段,然后通过调用门调它,然后我就获得了00环。这个好像的确是漏洞。IBM PC好像就没有这个漏洞。

这里没有说一致代码段。一致代码段基本上就是说,非一致的代码段只能同级调用就是在自己的环中游行,但是一致代码段可以调用更内层的代码。但是不跃迁特权级也就是只能实现代码一致化但不能实现权限跃迁。



你可能感兴趣的:(x86的核心态与管态)