操作系统第三章--处理机调度与死锁
        
      
操作系统第三章--处理机调度与死锁
- 处理机调度的基本概念
- 高级、中级和低级调度
 - 进程调度
- 解决问题
- WHAT:按什么原则分配CPU--调度算法
 - WHEN:何时分配CPU--调度的时机
 - HOW:如何分配CPU--调度过程及进程的上下文切换
 
 - 主要功能
- 按某种算法选取进程(调度)
 - 保存处理机的现场信息(上下文切换第一步)
 - 把处理器分配给进程(上下文切换第二步)
 
 - 三个机制
- 排队器
 - 分派器(调度程序)
 - 上下文切换机制
 
 - 调度方式
- 非抢占方式:进程不会抢占其他进程已经分派的处理机
 - 抢占方式:允许调度程序暂停正在执行的进程
 - 抢占原则
- 优先权原则
 - 短作业优先原则
 - 时间片原则
 
 
 
 - 解决问题
 
 - 调度队列模型和调度准则
- 调度队列模型
- 仅有进程调度的调度模型
- 在给定时间片内完成:进入完成状态
 - 在给定时间片内未完成:回到就绪队列的末尾
 - 因为某事件被阻塞:进入阻塞队列
 
 - 具有高级和低级调度的调度队列模型
- 按照作业调度算法,从外存的后备队列中选择一批作业调入内存,建立进程送入就绪队列
 
 - 具有三级调度的调度队列模型
- 就绪状态分为内存就绪(表示进程在内存中就绪)和外存就绪(进程在外存中就绪)
 
 
 - 仅有进程调度的调度模型
 - 选择调度方式和调度算法的准则
- 调度目标
- 提高处理机的利用率
 - 提高系统吞吐量
 - 尽量减少进程的响应时间
 - 防止进程长期得不到运行
 
 - 准则
- 面向用户的准则
- 周转时间短
 - 响应时间快
 - 截至时间的保证
 - 优先权准则
 
 - 面向系统的准则
- 系统吞吐量高
 - 处理机利用率高
 - 各类资源的平衡利用
 
 
 - 面向用户的准则
 
 - 调度目标
 
 - 调度队列模型
 - 调度算法
- 先来先服务FCFS(批处理系统)
- 按照作业/进程进入系统的先后次序进行调度,先进入系统者先调度
 
 - 短作业(进程)优先SJ(P)F
- 短作业优先SJF:从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行
 - 短进程优先SPF:从就绪队列中选出一估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时,再重新调度
 
 - 优先权调度算法PSA
- 非抢占式优先权算法(用于批处理、要求不严的实时)
 - 抢占式优先权调度(用于要求严格的实时、性能要求较高的批处理和分时)
 - 优先权的类型
- 静态优先权:创建进程时确定,运行期间不再变化
- 进程类型
 - 进程对资源的需求
 - 用户要求
 
 - 动态优先权:权重动态变化
 
 - 静态优先权:创建进程时确定,运行期间不再变化
 - 高响应比优先调度算法(动态优先权机制)HRRN
- 优先权随着等待时间的增加而增大
 - 优先权=(等待时间+要求服务时间)/要求服务时间
 
 
 - 基于时间片的轮转调度算法
- 时间片轮转法
- 所有就绪进程按照先来先服务原则,排成队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片;当时间片用完时,由一个计时器发出时钟中断请求,调度程序把它送往就绪队列的末尾。
 
 - 时间片大小的确定
- 太大:退化成FCFS
 - 太小:切换开销大
 - 考虑因素
- 系统对响应时间的要求
 - 就绪队列中的进程数目
 - 系统的处理能力
 
 
 
 - 时间片轮转法
 - 混合多种调度算法--多级队列调度
- 多个就绪队列,不同的队列采用不同调度方法
 - 前台的就绪队列是交互性作业的进程,采用时间片轮转
 - 后台的就绪队列是批处理作业的进程,采用优先权或短作业优先算法
 - 调度方式
- 优先调度前台
 - 分配占用CPU的时间比例
 
 
 - 更成熟的多级队列调度--多级反馈队列
- 任务可以在队列之间移动,更细致的区分任务
 - 调度算法
- 设置多个就绪队列,并为各个队列赋予不同的优先级;规定在优先权越高的队列,每个进程的时间片就越小
 - 一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度;若将该时间片内未完成,则移入下一队列
 - 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行
 
 
 - 基于公平原则的调度算法
- 保证调度算法(CPU分配给比率最小的进程)
- 进程获得CPU的时间比率=进程已经执行的时间/(进程创建以来经历的时间/n)
 
 - 公平分享调度算法
- 以用户为单位进行调度,保证公平
 
 
 - 保证调度算法(CPU分配给比率最小的进程)
 
 - 先来先服务FCFS(批处理系统)
 - 实时调度
- 实现实时调度的基本条件
- 提供必要的调度信息
- 就绪时间
 - 开始截止时间和完成截止时间
 - 处理时间
 - 资源要求
 - 优先级
 
 - 系统处理能力强
- 调度条件:(处理时间/周期时间)之和小于1
 
 - 采用抢占式调度机制
 - 具有快速切换机制
- 具有快速响应外部中断的能力
 - 快速的任务分派能力
 
 
 - 提供必要的调度信息
 - 实时调度算法的分类
- 非抢占式调度算法
- 非抢占式轮转调度算法
 - 非抢占式优先权调度算法
 
 - 抢占式调度算法
- 基于时钟中断的抢占式优先权调度算法
 - 立即抢占的优先权调度算法
 
 
 - 非抢占式调度算法
 - 常用的几种实时调度算法
- 最早截止时间优先EDF
- 优先级确定:根据任务的开始截止时间来确定任务的优先级,截止时间越早,优先级越高
 - 实时任务就绪队列:按各任务截止时间的早晚排序
 - 调度顺序:选择就绪队列中的第一个任务
 - 适用范围:抢占式、非抢占式
 
 - 最低松弛度优先LLF
- 松弛度=完成截止时间-剩余运行时间-当前时间
 - 松弛度最小的任务排在队列最前面,最早执行
 - 可抢占调度
 - 抢占时机:当等待任务的松弛度值为0时才进行抢占
 
 
 - 最早截止时间优先EDF
 
 - 实现实时调度的基本条件
 - 产生死锁的原因和必要条件
- 死锁:多个进程因竞争资源或相互通信而造成的一种僵局,都在等待着对方释放出自己所需的资源,但同时又不释放出自己已经占用的资源
 - 产生死锁的原因
- 竞争资源
- 竞争不可抢占性资源
 - 竞争临时性(消耗性)资源
 
 - 进程间推进顺序不当
 
 - 竞争资源
 - 产生死锁的必要条件
- 互斥条件:排它性使用
 - 请求和保持条件:保持资源的进程提出新的资源请求
 - 不剥夺条件:进程已获得的资源,不可剥夺
 - 环路等待条件:存在进程-资源的环形链(有环路不一定死锁)
 
 - 处理死锁的基本方法
- 预防死锁
 - 避免死锁
 - 检查死锁
 - 解除死锁
 
 
 - 预防死锁的方法
- 摒弃“请求和保持”条件
- 协议1:系统要求所有进程一次性申请需要的全部资源
 - 协议2:允许一个进程只获得运行初期所需的资源便开始运行,运行过程中再逐步释放已分配给自己的、且使用完毕的资源,然后请求新的资源
 
 - 摒弃“不剥夺”条件
- 已经保持资源的进程,提出新的资源要求不能被满足时,应释放已有资源
 
 - 摒弃“环路等待”条件
- 系统将所有资源按类型进行线性排队,并赋予不同的序号。所有进程对资源的请求必须严格按照资源序号递增的次序提出,按序号递减的次序释放
 
 
 - 摒弃“请求和保持”条件
 - 避免死锁
- 安全状态:系统能按某种进程顺序(安全序列),来为每个进程分配其所需资源,直到满足每个进程对资源的最大需求
 - 利用银行家算法避免死锁
- 银行家算法思想--死锁避免策略
- 当前状态下,某进程申请资源
 - 系统假设将资源分给该进程,满足它的需求
 - 检查分配后的系统状态是否是安全的,如果是安全,就确认本次分配;如果是不安全的,就取消本次分配并阻塞该进程
 
 - 银行家算法中的数据结构
- 可利用资源向量Available[j]
 - 最大需求矩阵Max
 - 分配矩阵Allocation
 - 需求矩阵Need
 
 - 银行家算法
- 1. if Request[j]<=Need[i,j], turn step 2
 - 2. if Request[j]<=Available[j], turn step 3
 - 3. try to allocate resource to process
 - 4. execute secutity algorithm
 
 - 安全性算法Security Algorithm
- 设置两个向量
- 工作向量Work:表示系统可提供给进程继续运行所需的各种资源数目,Work=Available
 - Finish:表示系统是否有足够的资源分配给进程,使之运行成功
 
 - Finish[i] = false;Need[i,j]<=Work[j];
 - Work[j] = Work[j] + Allocation[i,j];Finish[i] = true;
 
 - 设置两个向量
 
 - 银行家算法思想--死锁避免策略
 
 - 死锁的检测与解除
- 死锁的检测
- 资源分配图
- 1. 先看系统还剩下多少资源没分配,再看有哪些进程是不阻塞的(系统有足够的空闲资源分配给它)
 - 2. 把不阻塞的进程的所有边都去掉,形成一个孤独的点,再把系统分配给这个进程的资源回收回来
 - 3. 看剩下的进程有哪些是不阻塞的,然后又把它们逐个变成孤立的点
 - 4. 所有资源和进程都变成孤立的点
 - 如果一个图可以完全简化,则不会产生死锁
 
 - 死锁定理:S为死锁状态当且仅当S状态的资源分配图是不可完全简化的
 
 - 资源分配图
 - 死锁的解除
- 剥夺资源
 - 撤销进程
 - 最小代价原则
 
 
 - 死锁的检测