1.程序是如何运行的?
c语言代码>编译器(翻译)>机器指令(二进制)
一条高级语言的代码翻译过来可能会对应多条机器指令。
程序运行就是CPU执行一条一条的机器指令的过程。
?
内核程序vs应用程序
应用程序:在操作系统之上跑的这些程序,程序员编写的。微信,QQ
内核程序:开发操作系统,许多的内核程序组成“操作系统的内核”,简称为“内核(kernel)”。
内核是操作系统最重要最核心的部分,也是最接近硬件的部分。
操作系统的功能不一定都在内核里面,比如图形化界面(GUI)
操作系统内核作为“管理者”,CPU会执行“特权指令”,比如内存清零等等,只能操作系统内核来执行。
应用程序只能执行非特权指令,内核程序可以执行特权指令
注意:CPU能判断指令的类型,如何判断是内核程序是内核程序还是内核程序。因为内核程序也可以执行非特权指令,不执行特权指令,此时和应用程序是一样的。
为了区分内核程序或者应用程序,CPU可以分为“内核态”和“用户态”。
处于内核态,说明此时正在运行的是内核程序,可以执行特权指令。
处于用户态,说明此时正在运行的是应用程序,只能执行非特权指令
(Linux的普通用户和root用户)
(Windows的普通用户和管理员)
如何判断什么状态,CPU中有个寄存器:程序状态寄存器(PSW),其中有个二进制位,1表示“内核态”,0表示“用户态”。
内核态=核心态=管态,用户态=目态
如何实现CPU状态切换:
1.刚开机,是内核态,要完成开机这个指令。
2.开完机后,运行某些应用程序。
3.操作系统的内核程序在合适的时候主动让出CPU,让该应用程序在CPU上运行。(让出CPU之前,会内核程序执行一条特权指令,讲PSW的标志位设置为0,也就是用户态,然后让出CPU使用权,使之运行)。
4.此时应用程序运行在“用户态”
5.有个黑客在应用程序中植入一条特权指令,企图破坏系统。
6.CPU发现是一条特权指令,但是现在运行在“用户态”。
7.这个非法事件会引发一个中断信号,CPU检测到中断信号后,会立即变成“内核态”,并停止运行当前应用程序,转而运行处理中断信号的内核程序。
8.“中断”使操作系统再次夺回CPU控制权。
9.操作系统会对引发中断的事件进行处理,处理完了再把CPU使用权交给别的程序。
内核态>用户态,执行修改PSW标志位为用户态,这个动作表示操作系统将主动让出CPU的使用权。
用户态>内核态,由中断引发,是硬件自发的完成变态的过程,触发中断信号意味着操作系统强行夺回CPU的使用权。
还有别的事件也会触发中断信号,但凡需要操作系统介入的地方,不是操作系统该干的,但是现在在干,就会触发中断信号。
?
?