本文已参与「新人创作礼」活动,一起开启掘金创作之路。
第三章 处理机调度与死锁
处理机调度的层次和调度算法的目标
按照层次划分
高级调度 外《----》内 中级调度 外《----》内 但PCB在内 低级调度 内存之中
按OS类型划分
批处理调度、分时调度、实时调度、多处理机调度
调度算法的共同目标
- 资源利用率
- 公平性(防止进程饥饿)
- 平衡性(CPU型进程和I/O型进程)
- 策略强制执行(抢占)
批处理系统的目标
- 平均周转时间
周转时间:驻外存等待调度时间+驻内存等待调度时间+执行时间+阻塞时间=结束时间-到达时间 平均周转时间= 平均周转时间可以衡量不同调度算法对相同作业流的调度性能。 带权周转时间= 带权周转时间越小越好
- 系统吞吐量
- 处理机利用率高
分时系统的目标
- 响应时间快
- 均衡性
实时系统的目标
- 截止时间保障
- 可预测性
作业调度(高级调度)
作业与作业步
Job是指,计算机用户在一次上机过程中要求计算机系统为其所做的工作的集合;作业中的每项相对独立的工作称为作业步; 一个典型的作业可分为三个作业步:1.编译作业步 2.连结装配作业步 3.运行作业步
作业运行的三阶段和三状态
- 收容阶段 后备状态
- 运行阶段 执行状态
- 完成阶段 停止状态
FCFS(先来先服务)
基本思想:按进程(作业)进入就绪(后备)队列的先后次序来分配处理机(为其创建进程)。
调度方式:非剥夺
优点:简单、有利于CPU繁忙型作业
缺点:I/O不利、短作业不利
SJF(最短作业优先)
基本思想:从后备作业中选择一个或若干个估计运行时间最短的作业,将他们调入内存运行
调度方式:非剥夺
优点:有效降低作业的平均等待时间、提高了吞吐量
缺点:长作业不利、不考虑紧迫性、作业执行时间、剩余时间仅为估计
PSA(优先级调度算法)
- 静态优先级
- 动态优先级
HRRN(高响应比优先算法)
基本思想: 既考虑了作业的等待时间,也考虑了作业的运行时间,是一种动态优先级调度算法。
优先权=等待时间+要求服务时间/要求服务时间
进程调度(低级调度)
进程调度任务
- 保存处理机的现场信息
- 按某种算法选取进程
- 把处理器分配给进程
进程调度机制
- 排队器
- 分派器
- 上下文切换器
进程调度方式
- 非抢占式 优点:简单、系统开销小 缺点:不适用于分时系统和实时系统
- 抢占式 抢占原则:优先权原则、短进程优先原则、时间片原则
SRT(最短剩余时间优先)
基本思想:它总是选择预期剩余时间最短的进程。只要新进程就绪,且有更短的剩余时间,调度程序就可能抢占当前正在运行的进程 方式:抢占式 优点:抢占 缺点:必须记录过去的服务时间,从而增加了开销。
RR(时间轮转调度算法)
基本思想:系统将所有就绪进程按FCFS的原则,排成一个队列依次调度,把 CPU 分配给队首进程,并令其执行一个时间片,通常为 10-100ms。时间片用完后,系统的计时器发出时钟中断,该进程将被剥夺 CPU并插入就绪队列末尾。 优点:非常公平 进程切换时机:
- 若一个时间片尚未用完进程便已经完成,就立即再调度就绪队列中队首进程运行,并启动一个新的时间片。
- 如果在一个时间片用完时进程尚未运行完毕,则剥夺 CPU,调度程序把它送往就绪队列的末尾。 响应时间T = 时间片q × 就绪队列进程数n 时间片的选择:略大于一次典型的交互所需要的时间(在一个时间片内能完成80%左右的进程)
MFQ(多级反馈队列调度算法)
- 基本思想
实时调度
实现实时调度的基本条件
- 提供必要的调度信息
- 系统处理能力强
- 采用抢占式的调度机制
- 具有快速切换机制
实时调度算法的分类
- 按实时任务性质
- 硬实时
- 软实时
- 按调度方式
- 非抢占
- 抢占
EDF(最早截止时间优先算法)
- 非抢占式
- 抢占式
LLF(最低松弛度优先算法)
基本思想:算法是根据任务紧急(或松弛)的程度,来确定任务的优先级。任务的紧急度越高,其优先级越高,并使之优先执行。 方式:抢占式 松弛度 = 必须完成时间 - 本身剩余运行时间 - 当前时间
优先级倒置
- 原因 高优先级进程(或线程)被低优先级进程(或线程)延迟或阻塞。临界资源
- 解决方法
死锁概述
死锁定义
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态,这些永远在互相等待的进程称为死锁进程。 扩:饥饿是指一个进程一直得不到资源1
死锁产生原因
- 竞争不可抢占资源引起死锁
- 竞争可消耗资源引起死锁
- 进程间推进顺序不当引起死锁
死锁产生的条件
- 互斥条件
- 请求和保持条件
- 不可剥夺条件
- 环路等待条件 前三个是必要条件、最后一个是前三个条件产生的结果
处理死锁的方法
- 鸵鸟方法
- 预防死锁(破坏四个条件中的一个或几个)
- 避免死锁
- 检测死锁
- 解除死锁
避免死锁(银行家算法)
- 定义 在资源的动态分配过程中, 采用某种策略防止系统进入不安全状态2, 从而避免发生死锁。(确保系统不进入不安全状态)。 并非所有不安全状态都是死锁状态,只要系统处于安全状态,则可避免进入死锁状态。
- 银行家算法
实质:设法保证系统动态分配资源后不进入不安全状态,以避免可能产生的死锁。
前提条件:要求进程必须预先提出自己的最大资源请求数量,这一数量不能超过系统资源的总量,系统资源的总量是一定的。
数据结构:
算法描述:
自然语言描述:
系统提出请求后,先判断请求是否合法,如果合法,则尝试修改,判断修改后是否存在安全状态,如果存在则确认修改。
如何判断是否存在安全状态:
当前系统可用资源分配给某个进程后,可以完成该进程,并释放该进程资源。循环直至全部完成;
死锁的检测与解除
- 资源分配图
重要结论:如果资源分配图中不存在环路,则系统中不存在死锁;反之,如果资源分配图中存在环路,则系统中可能存在死锁,也可能不存在死锁。
- 死锁定理
死锁的解除
- 资源剥夺法
- 撤销进程法