32位Intel处理器拥有三种基本模式:
****保护模式:纯32位保护执行环境。该模式拥有一个子模式,虚拟8086模式:
****虚拟8086模式:是运行在保护模式中的实模式,为了在32位保护模式下执行纯16位实模式程序。它不是一个真正的CPU模式,还属于保护模式。
****实模式:纯16位无保护执行环境。
保护模式下的特权级
在保护模式下提供4级特权级PL(Privilege Level),呈现环形保护(ring-protection)结构。最内的环具有PL=0的最高特权级,依内向外逐层PL值增加,特权级降低。最外的环PL=3,特权级最低。特权级有以下几种形式表述:DPL(Descriptor Privilege Level):描述符的特权级,CPL(Current Privilege Level):当前任务的特权级,RPL(Requestor Privilege Level):请求特权级(选择符的特权级),EPL(Effective Privilege Level):有效特权级,IOPL(I/O Privilege Level):I/O特权级 ,目前Windows,Linux等只用到了其中两级,即:0级(核心态)和3级(用户态).
保护模式同实模式的根本区别是进程内存受保护与否。可寻址空间的区别只是这一原因的果。实模式将整个物理内存看成分段的区域,程序代码和数据位于不同区域,系统程序和用户程序没有区别对待,而且每一个指针都是指向"实在"的物理地址。这样一来,用户程序的一个指针如果指向了系统程序区域或其他用户程序区域,并改变了值,那么对于这个被修改的系统程序或用户程序,其后果就很可能是灾难性的。为了克服这种低劣的内存管理方式,处理器厂商开发出保护模式。这样,物理内存地址不能直接被程序访问,程序内部的地址(虚拟地址)要由操作系统转化为物理地址去访问,程序对此一无所知。至此,进程(这时我们可以称程序为进程了)有了严格的边界,任何其他进程根本没有办法访问不属于自己的物理内存区域,甚至在自己的虚拟地址范围内也不是可以任意访问的,因为有一些虚拟区域已经被放进一些公共系统运行库。这些区域也不能随便修改,若修改就会有: SIGSEGV(linux 段错误);非法内存访问对话框(windows 对话框)。
Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用。如果普通应用程序企图执行RING0指令,则Windows会显示“非法指令”错误信息。因为有CPU的特权级别作保护。




