操作系统
进程
1. 进程、线程、协程
① 进程
- 进程是程序一次动态执行的过程,是程序运行的基本单位。
- 每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。
- 进程占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、页表、文件句柄等)比较大,但相对比较稳定安全。
② 线程
- 线程又叫做轻量级进程,是CPU调度的最小单位。
- 线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。
- 多个线程共享所属进程的资源,同时线程也拥有自己的专属资源。
- 程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。
③ 协程
- 协程是一种用户态的轻量级线程,协程的调度完全由用户控制。
- 一个线程可以拥有多个协程,协程不是被操作系统内核所管理,而完全是由程序所控制。
- 与其让操作系统调度,不如我自己来,这就是协程
2. 什么是抢占
就是当一个进程A在给定的优先级下运行,更高优先级的进程B此时处于阻塞态,但是当进程B等待的事件完成时,进程B转变为就绪态,由于优先级的原因,中断进程A,将处理器分配给进程B。这就是抢占。
3. 进程控制块PCB
进程控制块由操作系统创建和管理
意义:进程中断后,可以在恢复执行像进程未中断过一样
包含内容:
- 进程标识符
- 程序计数器
- 状态
- 上下文
- 优先级
- 记帐信息
- I/O状态信息
- 内存指针
4.进程的创建、切换与中断
进程的创建
① 给新进程分配一个唯一的进程标识符
② 给进程分配空间
③ 初始化进程控制块
④ 设置正确的连接
⑤ 创建或扩充其他数据结构(进程表等)
进程创建的原因
① 用户登陆
② 新的批处理作业
③ 操作系统提供的服务
④ 进程的派生
进程中断
机制类型
- 普通中断
- 陷阱
- 系统调用
I 普通中断
与当前正在运行的进程无关的某种类型的外部事件相关
普通中断类型
- 时钟中断
- I/O中断
- 内存失效
II 陷阱
与当前指令的执行相关
III 系统调用
用户的显示请求
进程切换★
- 保存处理器上下文环境(PC,其他寄存器)
- 更新当前运行态的进程控制块
- 将进程的PCB移到相应的队列
- 选择另一个程序执行
- 更新选择的进程的进程控制块
- 更新内存管理的数据结构
- 恢复处理器在被选择进程的最近一次切换出运行态时的上下文环境
模式切换
通常由中断触发
模式切换过程
- 将CPU工作模式切换为内核态,将eip,esp,eflags等压入内核堆栈
- 保存硬件未来得及保存的上下文信息
- 调用中断服务程序
- 中断程序返回,触发模式切换逆过程(恢复上下文信息,弹出eip,esp,eflages,将cpu切换为用户模式)
模式切换和进程切换
① 模式切换不改变正处于运行态的进程状态,保存和恢复上下文信息只需要很少的开销
② 模式切换不一定进程切换,但进程切换一定要经过模式切换
5.进程控制结构
进程的属性集合称为PCB
程序、数据、栈和属性的集合称为进程映像\
6.操作系统的控制结构
- 文件表
-
- 文件是否存在
-
- 文件在外村中的位置
-
- 当前状态和其他属性的信息
- 内存表
-
- 分配给进程的内存
-
- 分配给进程的外村
-
- 内存块或虚拟内存块的任何保护属性
-
- 管理虚拟内存所需要的任何信息
- I/O表
-
- I/O设备是否可用
-
- I/O操作的状态
-
- I/O传送的源于目标的内存单元
- 进程表
7. 两状态模型
非运行态
运行态
8. 五状态模型
提出原因?
存在一些厨余非运行态但已经就绪等待执行的进程,而同时存在另外一些处于阻塞状态等待I/O操作结束的进程
状态
新建态
就绪态
运行态
退出态
阻塞态
9. 七状态模型
提出原因?
交换的需要
处理器速度比I/O要快得多,以至于内存中所有进程都在等待I/O的情况很常见。
什么是交换
把内存的某个进程的部分或全部移到磁盘中
思考
交换也是一个I/O操作,也可能使得问题更加恶化。但是磁盘I/O是系统中最快的I/O,所以交换通常会提高性能。
五状态模型的改进
加入【阻塞/挂起】 和 【就绪/挂起】
就绪和阻塞态——进程在内存中
挂起态——进程在外存中
为什么加入两种挂起状态?
如果只有一个挂起态,所有已经挂起的进程在挂起时都是阻塞态,这是把阻塞的进程载入内存没有任何意义。但是当挂起进程等待的时间发生了,进程不再阻塞,可以继续执行。
进程挂起的原因
- 交换
- 其他OS原因
- 交互式用户请求
- 定时
- 父进程请求