1.管态和目态
处理器有时执行用户程序,有时执行操作系统的程序。在执行不同程序时,根据运行程序对资源和机器指令的使用权限而将此时的处理器设置为不同状态。 多数系统将处理器工作状态划分为管态和目态。前者一般指操作系统管理程序运行的状态,具有较高的特权级别,又称为内核态、特权态(特态)、系统态;后者一般指用户程序运行时的状态,具有较低的特权级别,又称为用户态、普通态(普态)。另外,还有些系统将处理器工作状态划分为多个系统状态,例如核心状态、管理状态和用户程序状态(又称目标状态)三种,它们具体含义与前面的双状态分级大同小异。 作为一个实例,英特尔公司出品的x86系列处理器都支持4个处理器特权级别(特权环:R0、R1、R2和R3)。从RO到R3特权能力依次降低,RO相当于双状态系统的管态R3相当于目态,而R和R2则介于两者之间,它们能够运行的指令集合具有包含关系:IR0⊇IR1⊇IR2⊇IR3处理器在各个级别下的保护行检查(例如地址校验、L0限制)以及特权级别之间的转换方式也不尽相同。这4个级别被设计成运行不同类别的程序:RO运行操作系统核心代码;R1运行关键设备驱动程序和0处理例程;R2运行其他受保护的共享代码,例如语言系统运行环境;R3运行各种用户程序。 不过现有的基于x86处理器的操作系统,包括多数的UNX系统、Linx以及 Windows系列大都只用到了RO和R3两个特权级别。又这4个特权级别可以考虑安排运行不同类型的程序,R0运行最关键的代码,比如操作系统的内核代码;较外部的特权环运行其他一些相对来说不是关键的代码。 处理器处于管态时全部指令(包括特权指令)可以执行,可使用所有资源,并具有改变处理器状态的能力。当处理器处于目态时,就只有非特权指令能执行。不同处理器状态之间的区别就在于赋予运行程序的特权级别不同,可以运行的指令集合也不相同,一般说来,特权级别越高,可以运行的指令集合也越大,而且高特权级别对应的可运行指令集合包含低特权级别。
2.处理器工作状态的转换
在操作系统运行过程中,处理器的状态是动态改变的,时而运行于管态,时而运行于目态,即管态和目态这两种状态可以相互转换。 (1)目态到管态的转换 其转换的唯一途径是通过中断。中断响应时交换中断向量,新的中断向量中的PSW的处理器状态位标志为管态。 (2)管态到目态的转换 可通过设置PSW指令(修改程序状态字),实现从操作系统向用户程序的转换。 当中央处理器处于管态时可执行包括特权指令在内的一切机器指令;当中央处理器处于目态时不允许执行特权指令。系统启动时,处理器的初始状态为管态,然后装入操作系统程序。操作系统退出执行时,让用户程序在目态执行。要
3.限制用户程序执行特权指令
用户程序中不能使用特权指令。所以,当用户程序占用处理器时,应让处理器在目态下工作。若此刻取到了一条特权指令,则处理器将拒绝执行该指令,并形成一个“非法操作”事件。中断机制识别到该事件后,转交给操作系统去处理,由操作系统通知用户:“程序中有非法指令”。