文章目录
- 1.3_1 操作系统的运行机制
- (一)预备知识:程序是如何运行的
- (二)内核程序 vs 应用程序
- (三)特权指令 vs 非特权指令
- (四)内核态 vs 用户态
- 内核态、用户态的切换
- 总结
1.3_1 操作系统的运行机制
(一)预备知识:程序是如何运行的
“指令”就是处理器(CPU)能识别、执行的最基本命令。
注:很多人习惯把Linux、Windows、MacOS等的“小黑框”中使用的命令也称为“指令”,其实那是“交互式命令接口”。
本节所指的“指令”指的就是CPU读得懂的、二进制机器指令。
(二)内核程序 vs 应用程序
我们普通程序员写的、跑在操作系统之上的,就是“应用程序”。比如QQ、微信。
还有一些人,比如微软、苹果有一帮人负责实现操作系统的,他们写的是“内核程序”。由很多内核程序组成了“操作系统内核”,或简称“内核(Kernel)”。内核是操作系统最重要最核心的部分,也是最接近硬件的部分。
操作系统最主要的角色,就是系统资源的管理者。而操作系统对系统资源的管理,也就是通过内核来实现的。
甚至可以说,一个操作系统只要有内核就够了。内核中都是操作系统最重要、最核心、最必不可少的功能。
操作系统的功能未必都在内核中,如图形化用户界面GUI。不过这些功能也可以没有,例如没有GUI,还可以用命令行。
(三)特权指令 vs 非特权指令
操作系统内核作为“管理者”,有时会让CPU执行一些“特权指令”,如:内存清零指令。这些指令影响重大,只允许“管理者”——操作系统内核来使用。
应用程序只能使用“非特权指令”,如:加法指令、减法指令等。
在CPU设计和生产的时候就划分了特权指令和非特权指令,因此CPU执行一条指令前就能判断出其类型。
(四)内核态 vs 用户态
问题:CPU能判断出指令类型,但是它怎么区分此时正在运行的是内核程序 or 应用程序?
CPU有两种状态,“内核态”和“用户态”。
处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令。
处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令。
CPU中有一个寄存器叫“程序状态字寄存器(PSW)”,其中有个二进制位,1表示“内核态”,0表示“用户态”。
别名:内核态 = 核心态 = 管态。用户态 = 目态。
内核态、用户态的切换
问题:内核态、用户态是怎样来回切换的?
举例
1.刚开机时,CPU为“内核态”,操作系统内核程序先上CPU运行。
2.开机完成后,用户可以启动某个应用程序。
此时就会有一个问题:刚开机时,CPU是内核态,现在想要运行应用程序,肯定得先从内核态切换到用户态才行。
3.操作系统内核程序在合适的时候主动让出CPU,让该应用程序上CPU运行。
具体做法:操作系统内核在让出CPU之前,会用一条特权指令把PSW的标志位设置为“用户态”。
4.应用程序在“用户态”下运行。
5.此时,如果该应用程序中被植入了一条特权指令、企图破坏系统……?
6.CPU会发现接下来要执行的这条指令是特权指令,但是自己又处于“用户态”。
7.这个非法事件会引发一个中断信号。
具体过程:CPU检测到中断信号后,会立即变为“核心态”,并停止运行当前的应用程序(拒绝运行该应用程序中的这一特权指令),转而运行处理中断信号的内核程序。
8.“中断”使操作系统再次夺回CPU的控制权。
9.操作系统会对引发中断的事件进行处理,处理完了再把CPU使用权交给别的应用程序。
总结
1)内核态 —> 用户态:执行一条特权指令——修改PSW标志位为“用户态”,这个动作意味着操作系统将主动让出CPU使用权。
2)用户态 —> 内核态:由“中断”引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回CPU的使用权。
注:除了“非法使用特权指令”之外,还有很多事件也会触发中断信号。总之,一个共性是,但凡需要操作系统介入的地方,都会触发中断信号。
总结
注:
1.都是高频考点,很重要。
2.到这里不太理解也没关系,先往后学习,随着后面的学习,对此处相关知识的理解会逐渐加深。