[操作系统系列]核心态和用户态
操作系统的核心态和用户态
核心态和用户态: 为了保护操作系统及其数据结构,处理机的运行状态分成两种模式。操作系统运行于核心态,具有较高的特权,能执行一切命令,访问所有寄存器和存储区。用户程序运行于用户态,具有较低特权, 只能执行规定的命令,访问指定的寄存器和存储区。 【指令的划分】 特权指令:只能由操作系统使用、用户程序不能使用的指令(举例:启动I/O,内存清零,修改程序状态字,设置时钟, 允许/禁止终端,停机)。 非特权指令:用户程序可以使用的指令(举例:控制转移,算数运算,取数指令,访管指令(使用户程序从用户态陷入内 核态))
【CPU状态之间的转换】 用户态—>内核态:唯一途径是通过中断、异常、陷入机制(访管指令) 内核态—>用户态:设置程序状态字PSW (访管指令:是可以在目态(用户态)下执行的指令。当源程序中有需要操作系统服务的要求时,编译程序就会在由源程 序转换成的目标程序中安排一条“访管指令”并设置一些参数。当目标程序执行时,中央处理器若取到了“访管指令”就产生 一个中断事件,中断装置就会把中央处理器转换成管态(核心态),并让操作系统处理该中断事件。操作系统分析访管指 令中的参数,然后让相应的“系统调用”子程序为用户服务。系统调用功能完成后,操作系统把中央处理器的管态改为目态, 并返回到用户程序) 通常来说,以下三种情况会导致用户态到内核态的切换: 1)系统调用 这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工 作。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现。 2)异常 当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常 的内核相关程序中,也就转到了内核态,比如缺页异常。 3)外围设备的中断 当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而 去执行与中断信号对应的处理程序, 如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操 作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。 这3种方式是系统在运行时由用户态转到内核态的最主要方式,其中系统调用可以认为是用户进程主动发起的,异常和 外围设备中断则是被动的。
【内核态与用户态的区别】 [内核]硬件的第一次延伸,系统将一些与硬件紧密相关的模块放在内核(中断处理,时钟管理)内核在执行类似进程控制 等基本操作时,往往是利用原语操作实现的。 [原语]由若干条指令构成、用于完成一定功能的过程。原语是“原子操作”。操作中的所有动作,要么全做,要么全不做。 1)内核态与用户态是操作系统的两种运行级别,当程序运行在3级特权级上时,就可以称之为运行在用户态。因为这是 最低特权级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态; 2)当程序运行在0级特权级上时,就可以称之为运行在内核态。 3)运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。当我们在系统中执行一个程序时,大部分时间是 运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态。 4)这两种状态的主要差别是: 处于用户态执行时,进程所能访问的内存空间和对象受到限制,其所占有的处理机是可被抢占的 ;而处于核心态执行中的进程,则能访问所有的内存空间和对象,且所占有的处理机是不允许被抢占的。