【复习408】处理机调度与死锁浅析

一、处理机调度核心知识体系

1.1 调度的层次性与时机控制

操作系统调度分为三个层次: 高级调度(作业调度)‍ 、 中级调度(内存调度)‍ 和 低级调度(进程调度)‍。其中,进程调度是其中重点,其触发时机包括进程终止、进程阻塞、时间片用完、I/O中断以及抢占式调度中的优先级变化等场景。

调度过程的本质是上下文切换:保存当前进程状态、选择新进程、恢复新进程状态。该过程需严格保证原子性,防止状态不一致导致系统错误。

1.2 调度准则与评价指标

评价算法优劣的核心指标包括:

  • CPU利用率:CPU有效工作时间占比
  • 吞吐量:单位时间完成作业数量
  • 周转时间(Turnaround Time):从作业提交到完成的总时间,计算公式为 T = 完成时间 - 到达时间
  • 等待时间:进程在就绪队列中的累计等待时长
  • 响应时间:从请求提交到首次响应的时间间隔
  • 公平性:各进程获得CPU时间的均衡程度

这些指标在分析算法时需综合权衡,例如高吞吐量可能伴随长作业的不公平等待。

1.3 经典调度算法深度解析

1.3.1 先来先服务调度算法(FCFS)

原理:严格按进程到达就绪队列的先后顺序分配CPU,属于不可抢占式算法 。

优点:

  • 实现简单,公平性直观
  • 无饥饿现象,所有进程最终必获服务

缺点:

  • 护航效应(Convoy Effect)‍ :短作业被迫等待长作业完成,平均等待时间恶化。例如,若长作业先到达,后续短作业周转时间将显著增加
  • 对CPU密集型与I/O密集型进程未作区分,资源利用率低
    适用场景:批处理系统或作为其他算法的基准对照。

1.3.2 短作业优先调度算法(SJF)

原理:选择预计执行时间最短的进程优先执行,可分为 抢占式(SRTF, Shortest Remaining Time First)‍非抢占式两种

优点:

  • 理论最优性:可证明SJF能获得最小平均周转时间
  • 系统吞吐量显著提升
    缺点:
  • 长作业饥饿:若短作业持续到达,长作业可能长时间无法执行
  • 执行时间预估困难:需依赖历史数据或用户估计,准确性难以保证
  • 不公平性:对长作业响应性差

重点:需掌握抢占式SJF的调度过程绘制,以及周转时间、等待时间的精确计算。例如,给定进程到达时间与执行时间,要求绘制甘特图并计算各指标。

1.3.3 时间片轮转调度算法(RR)

原理:将就绪队列组织为FIFO队列,每个进程分配固定时间片(Quantum),时间片用完后强制剥夺CPU并移至队尾。

时间片设计:

  • 过大:退化为FCFS,响应性下降
  • 过小:上下文切换开销占比过高,系统效率降低

优点:

  • 公平性:各进程获得均等CPU时间
  • 响应及时:适合交互式系统

缺点:

  • 平均周转时间通常劣于SJF
  • 进程切换带来的开销不可忽视

要点:需计算给定时间片下的调度序列,并分析时间片大小对性能指标的影响。

1.3.4 优先级调度算法(PSA)

原理:为每个进程分配优先级,调度器选择优先级最高者执行。优先级分为静态(固定不变)和动态(运行时可调整)两类。

动态优先级调整策略:

  • 等待时间越长优先级越高:防止饥饿
  • 执行时间越长优先级越低:避免长作业垄断CPU

问题:

  • 优先级反转:低优先级进程持有高优先级进程所需资源,导致高优先级进程阻塞
  • 饥饿:低优先级进程长期无法执行

解决方案:优先级继承协议(Priority Inheritance)、优先级天花板协议。

1.3.5 高响应比优先调度算法(HRRN)

原理:动态计算响应比 R = (等待时间 + 要求服务时间) / 要求服务时间,选择R最高者执行。

特性:

  • 融合优势:兼顾SJF的短作业优先和FCFS的长作业公平性
  • 自适应性:等待时间越长,响应比越高,防止长作业无限等待
  • 非抢占式:进程一旦开始执行便运行至完成

重点:需理解响应比公式中各项的权衡意义,并能计算特定时刻各进程的响应比以决定调度顺序。

1.3.6 多级反馈队列调度算法(MFQ)

原理:将就绪队列分为多级,每级队列拥有不同优先级和时间片大小。新生进程进入最高优先级队列,若未完成则降级至下一级队列。

核心机制:

  • 优先级与时间片负相关:高优先级队列时间片短(响应快),低优先级队列时间片长(批处理)
  • 降级惩罚:CPU占用久的进程逐步降低优先级
  • aging机制:低优先级队列进程等待过久可提升优先级,防止饥饿

优点:

  • 自适应性:无需预知进程执行时间
  • 综合性:短作业快速完成,长作业也能获得合理CPU时间
  • 系统响应性优异:终端交互进程通常能快速完成

二、死锁核心知识体系

2.1 死锁的精确定义与必要条件

死锁是指多个进程因竞争资源而陷入永久阻塞的状态,若无外力干预,这些进程将无法继续推进

产生的四个必要条件(必须全部满足):

  • 互斥条件:资源一次仅允许一个进程占用
  • 持有并等待条件:进程已持有至少一个资源,同时等待其他进程占有的资源
  • 不可抢占条件:已分配资源不能被强制剥夺,必须由进程主动释放
  • 循环等待条件:存在进程等待环路,P1等P2,P2等P3,…,Pn等P1

要点:必须能判断给定资源分配场景是否满足四个必要条件,并理解破坏任一条件即可预防死锁。

2.2 死锁处理策略全景图

操作系统面对死锁有四种基本策略:

策略核心思想优点缺点适用场景
预防(Prevention)‍破坏死锁四个必要条件之一严格保证系统不死锁资源利用率低,进程行为受限实时系统、关键任务
避免(Avoidance)‍动态检查资源请求,确保系统始终处于安全状态资源利用率高算法复杂,需预知最大资源需求批处理系统、资源分配明确
检测与恢复(Detection & Recovery)‍定期检测死锁,发现后强制恢复资源利用率最高恢复代价大,可能造成数据不一致通用操作系统(如UNIX)
忽略(Ignore)‍假设死锁不会发生无开销风险极高个人计算机、开发环境

重点:需理解各策略的本质区别,特别是预防与避免的策略差异——预防是静态破坏条件,避免是动态规避风险。

2.3 死锁预防的具体实现

通过破坏四个必要条件实现:

破坏互斥条件:将独占资源改造为共享资源。例如,SPOOLing技术将打印机虚拟化为共享设备。但该方法不适用于所有资源(如临界区代码)。
破坏持有并等待条件:要求进程一次性申请所有资源,否则不得开始执行。缺点:

  • 进程需预知全部资源需求
  • 资源利用率极低,进程长期占用未使用资源

破坏不可抢占条件:允许抢占已分配资源。例如,高优先级进程可强制剥夺低优先级进程的资源。但需解决数据一致性问题,实现复杂。

破坏循环等待条件:对资源类型全局编号,进程必须按递增顺序申请资源。该方法效果显著,但限制了进程编程灵活性。

2.4 死锁避免与安全状态

核心思想:资源分配前进行安全性检查,仅当系统保持安全状态时才分配资源。

安全状态定义:存在至少一个安全序列 <P1, P2, …, Pn>,使得对每个进程Pi,其剩余资源需求可被当前可用资源加上所有Pj(j < i)已持有的资源满足。若不存在安全序列,则系统处于不安全状态。

重要结论:安全状态一定不会发生死锁,但不安全状态未必已死锁,而是存在死锁风险。

2.5 银行家算法深度剖析

银行家算法是死锁避免的经典实现,要求每个进程预先声明最大资源需求 Max[i,j]。

数据结构

  • Available[j] :资源类j的当前可用数量
  • Allocation[i,j] :进程i已分配资源j的数量
  • Need[i,j] = Max[i,j] - Allocation[i,j] :进程i仍需资源j的数量

算法流程:

  1. 请求检查:若 Request_i ≤ Need_i,否则出错
  2. 可行性检查:若 Request_i ≤ Available,否则等待
  3. 试探分配:修改 Available -= Request_i, Allocation_i += Request_i, Need_i -= Request_i
  4. 安全性检查:调用安全性算法,若找到安全序列则确认分配,否则回滚并阻塞进程

安全性算法:

  • 初始化 Work = Available,Finish[i] = false
  • 寻找满足 Finish[i] = false 且 Need_i ≤ Work 的进程i
  • 若找到,则 Work = Work + Allocation_i,Finish[i] = true,重复
  • 若所有 Finish[i] = true,则系统安全

2.6 死锁检测与恢复

检测:通过资源分配图简化法或矩阵法定期检查系统状态。若资源分配图中存在不可简化的环路,则死锁已发生。

恢复策略:

  • 进程终止:强制终止部分死锁进程直至环路消除
  • 资源抢占:选择牺牲品进程,强制回收其资源
  • 回滚:将进程回滚至先前的检查点

缺点:恢复代价高,可能造成数据损失或计算浪费,故实际系统较少采用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L.EscaRC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值