CoderMrWu

生活诚可期,爱情价更高!

处理器的特权指令和非特权指令以及工作状态

该文章转载于自考库,如有侵权,请联系删除!

二、特权指令和非特权指令

对于一个单用户、单任务方式下使用的微型计算机系统,普通的非系统用户通常都可使用该计算机指令系统中的全部指令。但是在多用户或多任务的多道程序设计环境中,则它的指令系统中的指令必须区分成两部分:特权指令和非特权指令

所谓特权指令是指:在指令系统中那些只能由操作系统使用的指令。这些特权指令是不允许一般的用户使用的,因为如果允许用户随便使用这些指令(如设置程序状态字、启动某设备、设置中断屏蔽、设置时钟指令、清内存指令和建立存储保护指令等等),就有可能使系统陷入混乱。所以一个使用多道程序设计技术的计算机的指令系统中的指令必须区分为特权指令和非特权指令。

用户只能使用非特权指令,只有操作系统才能使用所有的指令(包括特权指令和非特权指令)。如果一个用户程序需要使用特权指令,一般将引起一次处理器状态的切换,这时处理器通过特殊的机制,将处理器状态切换到操作系统运行的特权状态,然后将处理权移交给操作系统中的一段特殊代码。这一个过程通常形象地称为陷入(Trap)

如果在某种计算机的指令系统中不能区分特权指令和非特权指令,那么在这样的硬件环境下,要设计出一个具有多道程序运行的操作系统是相当困难的。至于处理器如何知道当前运行的是操作系统还是一般应用软件,则有赖于处理器状态的标识。

三、处理器的工作状态

1、管态和目态

处理器有时执行用户程序,有时执行操作系统的程序。在执行不同程序时,根据运行程序对资源和机器指令的使用权限而将此时的处理器设置为不同状态。

多数系统将处理器工作状态划分为管态和目态。前者一般指操作系统管理程序运行的状态,具有较高的特权级别,又称为内核态、特权态(特态)、系统态;后者一般指用户程序运行时的状态,具有较低的特权级别,又称为用户态、普通态(普态)。另外,还有些系统将处理器工作状态划分为多个系统状态,例如核心状态、管理状态和用户程序状态(又称目标状态)三种,它们具体含义与前面的双状态分级大同小异。

作为一个实例,英特尔公司出品的x86系列处理器都支持4个处理器特权级别(特权环:R0、R1、R2和R3)。从R0到R3特权能力依次降低,R0相当于双状态系统的管态,R3相当于目态,而R1和R2则介于两者之间,它们能够运行的指令集合具有包含关系:R0包含R1包含R2包含R3,处理器在各个级别下的保护行检查(例如地址校验、I/O限制)以及特权级别之间的转换方式也不尽相同。

这4个级别被设计成运行不同类别的程序:R0运行操作系统核心代码;R1运行关键设备驱动程序和L0处理例程;R2运行其他受保护的共享代码,例如语言系统运行环境;R3运行各种用户程序。不过现有的基于x86处理器的操作系统,包括多数的UNIX系统、Linx以及 Windows系列大都只用到了RO和R3两个特权级别。

这4个特权级别可以考虑安排运行不同类型的程序,R0运行最关键的代码,比如操作系统的内核代码;较外部的特权环运行其他一些相对来说不是关键的代码。

当处理器处于管态时全部指令(包括特权指令)可以执行,可使用所有资源,并具有改变处理器状态的能力。当处理器处于目态时,就只有非特权指令能执行。不同处理器状态之间的区别就在于赋予运行程序的特权级别不同,可以运行的指令集合也不相同,一般说来,特权级别越高,可以运行的指令集合也越大,而且高特权级别对应的可运行指令集合包含低特权级别。

2、处理器工作状态的转换

在操作系统运行过程中,处理器的状态是动态改变的,时而运行于管态,时而运行于目态,即管态和目态这两种状态可以相互转换。

(1)目态到管态的转换

转换的唯一途径是通过中断。中断响应时交换中断向量,新的中断向量中的PSW的处理器状态位标志为管态。

(2)管态到目态的转换

可通过设置PSW指令(修改程序状态字),实现从操作系统向用户程序的转换

当中央处理器处于管态时可执行包括特权指令在内的一切机器指令;当中央处理器处于目态时不允许执行特权指令。系统启动时,处理器的初始状态为管态,然后装入操作系统程序。操作系统退出执行时,让用户程序在目态执行。

3、限制用户程序执行特权指令

用户程序中不能使用特权指令。所以,当用户程序占用处理器时,应让处理器在目态下作。若此刻取到了一条特权指令,则处理器将拒绝执行该指令,并形成一个“非法操作”事件。中断机制识别到该事件后,转交给操作系统去处理,由操作系统通知用户:“程序中有非法指令”。

四、程序状态字(PSW)

为了解决处理器当前工作状态的问题,所有的处理器都有一些特殊寄存器,用以表明处理器当前的工作状态。比如用一个专门的寄存器来指示处理器状态,称为程序状态字(PSW);用程序计数器(PC)这个专门的寄存器来指示下一条要执行的指令。

处理器的状态字(PSW)通常包括以下状态代码。

1)CPU的工作状态代码—指明当前处理器的工作状态是管态还是目态,用来说明当前在处理器上执行的是操作系统还是一般用户,从而决定其是否可以使用特权指令或拥有其他的特殊权力。

2)条件码——反映指令执行后的结果特征

3)中断屏蔽码—指出是否允许中断。

不同机器的程序状态字的格式及其包含的信息都不同。现以微处理器 Pentium pro、PentiumⅡ和 PentiumⅢ的对应程序状态字寄存器( EFLAGS)中包含若干标志位为例,来介绍程序状态字PSW,如图2-1所示。

下面介绍图2-1中的某些标志位。

CF:进位标志位。

ZF:结果为零标志位

SF:符号标志位。

OF:溢出标志位。

几乎所有的微型计算机的PSW中都有与这4个标志位类似的标志位。有时称这4种标志位为标准条件位。

TF:陷阱标志位

IF:中断使能(中断屏蔽)标志位。

VIF:虚拟中断标志位。

VIP:虚拟中断待决标志位。

这里VF和VP用于支持对一类可屏蔽的硬件中断处理。

IOPL:IO特权级别,它的作用在前面已有叙述。

在图2-1中,还有其他许多标志位,从这些众多的标志位的设计,也可看出 Pentium系列微处理器的功能是非常强的,有兴趣的读者可以参考有关资料。

点赞