一、OS的运行机制
1、内核程序vs应用程序
(1)程序运行的过程其实就是CPU执行一条一条的机器指令的过程
很多内核程序组成了“操作系统内核”,简称“内核Kernel”,内核是os最核心部分,也是最接近硬件的部分。
- 应用程序:只能使用“非特权指令”
- 内核程序:可以执行“特权指令”
2、内核态vs用户态
- 内核态(=核心态=管态):运行内核程序,可执行特权指令
- 用户态(=目态):运行应用程序,只能执行非特权指令
CPU有一个寄存器:程序状态字寄存器(PSW),其中二进制:1:内核态;0:用户态
3、内核态、用户态的切换
- 内核态-->用户态:修改psw,OS主动让出CPU使用权
- 用户态-->内核态:“中断”,硬件自动完成变态过程,触发中断信号 OS强行夺回CPU使用权
需要操作系统介入,则会触发中断信号
二、中断和异常
1、中断的作用
CPU运行两种程序:操作系统内核程序(系统管理者)、应用程序
“中断”是让操作系统内核夺回CPU使用权的唯一途径
2、中断的类型
- 内中断:与当前执行的指令有关,中断信号来源于CPU内部
- 外中断:与当前执行的指令无关,中断信号来源于CPU外部
(1)内中断:--异常、例外
如果执行陷入指令,会引发一个内部中断信号:意味着应用程序主动将CPU控制权还给内核。
“系统调用”--通过陷入指令完成
- 陷阱、陷入 trap:由陷入指令引发,应用程序故意引发
- 故障 fault:错误条件引起,可能被内核程序修复,如:故障缺页
- 终止 abort:致命错误引起,内核程序无法修复,直接终止,如:整数除0,、非法使用特权指令
(2)外中断:--中断
与当前指令无关,信号来源于外部;每条指令执行结束后,CPU会检查是否有外中断信号
- 时钟中断
- I/O中断请求
时钟中断--由时钟部件发来的中断信号
I/O中断:由输入/输出设备发来的中断信号
3、中断机制的基本原理
不同的中断信号,需要用不同的中断处理程序来处理。CPU检测到中断信号后,会根据中断信号类型查询“中断向量表”,来找到中断处理程序在内存中的存放位置。
中断处理一定是内核程序,需要运行在内核态
三、系统调用
1、系统调用
操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口、程序接口(由一组系统调用组成)
向上提供的接口:
给用户:
- GUI
- 命令接口--联机命令接口--脱机命令接口
给应用程序:
- 程序接口(系统调用)
“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口
应用程序可以通过系统调用来请求获得操作系统内核的服务
2、系统调用和库函数的区别
3、功能
系统调用(按功能分类):
- 设备管理:完成设备的 请求/释放/启动 等功能
- 文件管理:完成设备的 读/写/创建/删除 等功能
- 进程管理:完成进程的 创建/撤销/阻塞/唤醒 等功能
- 进程通信:完成进程之间的 消息传递/信号传递 等功能
- 内存管理:完成内存的 分配/回收 等功能
应用程序通过系统调用请求操作系统服务。
与共享资源有关的操作都要通过系统调用方式向系统内核提出服务请求
保证系统稳定性和安全性
4、系统调用的过程
传参指令----陷入指令----其他指令
- 传递系统调用参数---->执行陷入指令(用户态)---->执行相应的内请求核程序处理系统调用(核心态)---->返回应用程序
- 陷入指令是在用户态下执行的,陷入指令引发后会立即引发一个内中断,使CPU进入核心态
- 发出系统调用请求是在用户态,对系统调用的相应处理是在核心态。