我们用C语言写一个输出"hello world"程序,必须要编译过后才能运行。而编译的过程其实是将C语言代码准换位机器指令,也就是二进制。一条C语言语句,可能就对应几条机器指令。
程序运行的过程其实也就是CPU执行一条一条机器指令的过程。
指令:CPU能识别、执行的最基本命令。
终端输入的其实是:“交互式命令接口”,本节中的指令是二进制的机器指令。
应用程序:手机里下的应用软件
内核程序:操作系统里的内核程序,这些内核程序组成了操作系统内核,简称为”内核“。内核是操作系统最重要最核心的部分,也是最接近硬件的部分。系统对系统内资源的管理其实是内核实现的。(Docker)
操作系统的功能未必都在内核中,如图形化界面GUI。
特权指令:只能由内核才能使用特权指令,而普通应用程序无法使用特权指令
特权指令对系统影响重大,可能会出现不可挽回的操作,所以必须由内核来发出,不能让其他应用程序发出。
在CPU设计和生产过程中就划分了特权指令和非特权指令,因此CPU执行一条指令就能够区分出类型。
我的理解,比如关机这件事,不能一个应用软件就可以随便关机吧。也不可能随便就给电脑设置密码。
当然有些病毒可以做到。(我上初中时差点就被搞了,但是我意识到有问题就迅速关机然后没事了,事后还要敲诈我)。
❓这里又有一个问题:CPU时如何区别是应用程序发出的特权指令还是内核程序发出的特权指令。
CPU有两种状态:内核态和用户态
处于内核态时,说明此时正在运行的时内核程序,此时可以执行特权指令也可以执行非特权指令。
处于用户态时,说明此时正在运行的时应用程序,此时只能执行非特权指令。
CPU里有一个程序状态寄存器,用0/1表示状态
一个故事举例:
内核态–》用户态:执行了一条特权指令,修改程序状态寄存器为用户态标志,这意味着操作系统主动让出CPU使用权。
用户态–》内核态:由中断引发,硬件自动完成变态过程,除法终端信号意味着操作系统将强行夺回CPU的使用权。