指令:
首先我们知道程序的运行就是,CPU在执行程序指令的的过程。而这些指令,可以分为两种,一种是特权指令、另一种是非特权指令。
-
非特权指令就是一些逻辑指令,比如:加减运算、乘除运算等
-
特权指令则是一些与系统相关的指令,比如:内存清零等
在CPU设计和生产的时候就已经划分了特权指令和非特权指令,因此在CPU执行指令的时候就已经能够判断指令的类别
CPU用户态和内核态:
用户态指的就是CPU处于处理用户程序的时期,在该时期内CPU只能够执行非特权指令,不能够执行特权指令
内核态则是指CPU处于处理系统程序的时期,在该时期内CPU既能够执行非特权指令,又能够执行特权指令
判断CPU是处于用户态还是内核态主要是根据程序状态字寄存器(PSW)来判断的,该寄存器通过二进制,0,1来判断CPU的状态。
CPU用户态和内核态之间的状态的转变:
内核态------》用户态:在执行用户态程序前,CPU会执行一条修改PSW状态的指令,将CPU状态转变为用户态(开机完后打开软件)
用户态------》内核态:发生中断,由硬件自动完成。
中断分为内中断和外中断:
-
异常(内中断):
-
当前的用户程序需要进行一些内核的操作,因此执行了一条陷入指令(非特权指令),主动的将CPU转变为内核态。也就是系统调用。
-
故障,缺页故障,由错误条件引起的,可能被内核程序修复。内核程序修复完后会把CPU使用权还给应用程序
-
终止,由致命错误引起的,内核程序无法进行修复,因此无法将CPU使用权交给应用程序。例如:整数除0、非法使用特权指令
-
-
中断(外中断):
-
与当前的程序指令无关,这种中断是来自CPU的外部。例如:时钟中断(CPU时间片),IO中断。每个指令的末尾都会检测是否有外中断请求需要进行处理。
-