引言
操作系统是管理计算机硬件的程序。操作系统的核心目标是运行用户程序,以用户视角来看,操作系统的主要目的是更方便的使用计算机,在系统视角来看,操作系统的目的是更高效的使用计算机。而在OS的执行过程中,为什么要分成内核态和运行态?怎么从运行态转到内核态?这些都是我们需要了解的问题。
操作系统的双重模式
现代操作系统是中断驱动的,如果没有进程需要执行,没有I/O设备需要服务,没有用户需要响应,OS就会等待某个事件进行触发。事件总是由中断或者陷阱引起的。陷阱(或异常)是一种软件生成的中断,或源于出错,或源于用户程序的特定请求。 程序在运行中会遇到这些软件错误或特定请求产生异常或陷阱还有一些如死循环等进程问题,为了确保操作系统的正常运行,必须区分操作系统代码和用户代码的执行,允许操作系统保护自身和其他系统组件,也就是双重模式。计算机硬件会通过一个模式位来表示当前模式:内核模式和用户模式。
程序运行的过程其实就是CPU执行一条一条机器指令的过程。 当计算机系统执行用户应用时,系统处于用户模式。However,当用户应用通过系统调用,请求OS服务时,系统必须从用户模式转换到内核模式,以满足请求请求。
双重模式为操作系统提供了保护手段,以防止操作系统和用户程序受到错误用户程序的影响。将可能引起损害的机器指令作为特权指令(可能引起系统奔溃的指令,只能运行在内核模式),并且硬件只有在内核模式下,才允许执行特权指令,如果在用户模式下,硬件不会执行特权指令请求并且还会当作陷阱形式通知操作系统。用户程序需要使用特权指令时,就需要通过系统调用,回到内核态。像I/O控制、定时器管理、中断管理和切换到用户模式等指令都是特权指令。控制权从用户模式回到内核模式的方法有中断、陷阱和系统调用。 当要执行系统调用时,硬件通常将它作为软件中断。控制通过中断向量转到操作系统的中断服务程序,并且模式位也设定为内核模式。系统调用服务程序请求何种服务。请求所需的其他信息可以通过寄存器、堆栈和内存(内存指针也可以通过寄存器传递)来传递。内核首先验证参数是否合法和正确,然后执行请求,最后控制返回到系统调用之后的指令。
注:
- 在CPU设计和生产的时候就划分了特权指令,因此CPU执行一条指令前就能判断出其类型。
- 指令就是CPU能识别执行的最基本的命令,指二进制机器指令。
- 内核是计算机上配置打的底层软件,是计算机功能的延申,甚至可以说,操作系统只要有内核就够了。内核是操作系统最核心的部分,也是最接近硬件的部分。操作系统的功能未必都在内核中,如图形化用户界面(GUI),就不在内核中。
- 一条高级语言的代码翻译过来可能会对应多条机器指令。
- 系统中的各种共享资源都由操作系统统一管理,因此在用户程序中,凡是与资源有关的操作都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。
- 用户程序可以执行陷入指令来发起系统调用,用户程序执行陷入指令相当于把CPU的使用权主动交给操作系统内核程序。
- 陷入指令(发出系统调用)是在用户态执行的,而系统调用的相应处理是在内核态进行。
后续
如果想了解更多物联网、智能家居项目知识,可以关注我的关注公众号了解更多。
编写不易,感谢支持。