操作系统-进程管理
程序
程序组成
- 顺序执行
- 有向无环图
flowchart LR;
A((输入))--->B((计算))--->C((输出));
- 并发执行
- AOE 网
- 失去程序封闭
- 程序顺序和执行数序不再对应
- 并发程序相互作用
进程
进程组成
- 程序
- 数据(进程工作区)
- 进程控制块
- 进程标识符
- 状态
- 三态模型
- 运行
- 就绪
- 阻塞
- 五态模型
- 新建
- 运行
- 就绪
- 阻塞
- 终止
- 挂起
- 在系统资源紧张或突发情况下,将进程放到磁盘交换区
- 活跃就绪(激活)
- 静止就绪(挂起)
- 活跃阻塞(恢复)
- 静止阻塞(挂起)
- 三态模型
- 地址
- 控制信息
- 队列指针
- 优先级
- 现场保护区
进程管理
- 原语
- 由内核实现
- 执行是原子性的
- 包含进程管理相关功能
进程通信
- 同步
- 进程间的协同问题
- 互斥
- 进程间的临界资源争夺问题
- 临界资源
- 只能同时提供一个进程访问的资源
- 临界区
- 进程访问临界资源的程序段
- 临界区管理
- 临界区虚位以待,进程可进入临界区运行一段时间
- 临界区有进程运行,则需要等待,待临界区释放后,与其他进程争夺
- 有限等待,让进程在有限的等待时间内进入临界区
- 让权等待,进程无法进入临界区,应该立即释放处理机
信号量
控制进程同步/互斥的方式
- 整型信号量
- 公用信号量实现互斥,值表示资源的数目
- 私用信号量实现同步,值表示进程间通信的消息
- 记录型型号量
- 信号量集机制
高级通信原语
改善 PV 操作实现困难,效率低,操作不当容易死锁等问题
- 共享存储,同步进程间共享内存实现数据交换
- 消息传递,同步进程数据交换以消息为单位
- 管道通信,连接写进程和读进程实现数据交换
管程/监视器
理解为进程管理的线程间同步/互斥
- 多个彼此可以交互并共用资源的线程
- 多个与资源使用有关的变数
- 一个互斥锁
- 一个用来避免竞态条件的不变量
进程调度
为进程分配 cpu 的问题
- 当更高优先级的进程等待进入时,可选择剥夺当前运行的进程的 CPU 权利,或者不剥夺,等待当前进程运行完毕。
- 三级调度
- 高级调度
- 后被作业调入主系统,成为就绪状态
- 中级调度
- 决定处于交换区的哪个就绪进程可以调入内存参与 CPU 竞争
- 低级调度
- 决定内存中的哪个进程可以占用 cpu
- 高级调度
- 调度策略
- 先到先服务
- 按照作业提交时间或进程就绪先后一次顺序分配 CPU
- 时间片轮转
- 固定时间片,分配每个进程相同的时间片
- 可变时间片,根据进程不同的要求分配不同时间片
- 优先级调度
- 静态优先级,在创建时确定优先级
- 动态优先级,在进程生命周期中优先级会改变
- 多级反馈调度
- 设置多个优先级队列 每个队列优先级不同
- 若进程在中为完成,则投入到中,按此模式继续直到进程被投入最后队列按照时间片轮转调度
- 先执行高优先级队列中的进程,如果第优先级进程在在运行,有高优先级进程等待,则第优先级让权等待
- 先到先服务
- 进程优先级确定
- I/O 型进程,高优先级且分配时间片
- 计算型进程,每次执行完进入更低级队列,最后分配大时间片
- 使用 CPU 为主的进程,I/O 完成后返回原队列
- 动态分配,I/O 完成时提高优先级,时间片用完时降低优先级
死锁
- 条件
- 互斥条件
- 请求保持条件
- 不可剥夺条件
- 环路条件
- 处理
- 鸵鸟策略,不理睬策略
- 预防策略
- 预先静态分配
- 🙂 预先分配所需资源,降低并发度
- 🙃 有时所需资源未知
- 资源有序分配
- 🙂 把资源分类按顺序排列
- 🙃 排列资源的开销
- 预先静态分配
- 避免策略
- 银行家算法
- 🙂 检测每个进程发出的的资源请求,若发现资源分配后系统进入不安全的状态就不允许访问
- 🙃 大量开销
- 银行家算法
- 检测与解除
- 系统定时检测死锁
- 强行剥夺资源分配给进程
- 逐个撤销死锁进程
银行家算法
在时刻有进程请求资源
进程 | 最大需求量 R1/已分配 | 最大需求量 R2/已分配 | 最大需求量 R3/已分配 |
---|---|---|---|
P1 | 6/1 | 4/1 | 2/1 |
P2 | 2/2 | 2/1 | 2/1 |
P3 | 8/2 | 1/1 | 1/0 |
P4 | 2/1 | 2/2 | 1/1 |
P5 | 3/1 | 4/1 | 2/1 |
剩余 | 1 | 1 | 0 |
线程
- 线程是进程中的一个实体
- 线程作为调度和分配的基本单元
- 进程作为独立分配资源的单位
- 用户级线程不依赖于内核
- 内核支持线程依赖于内核