调度级别:
一、高级调度:又称作业调度/长程调度
它决定允许哪些作业参与竞争CPU和其它系统资源,将一个或一批作业从后备状态变为运行状态 高级调度是为作业分配虚拟处理机,也称宏观调度
运行频率较低
二、中级调度:又称内存调度/中程调度
中级调度决定哪些进程可参与竞争CPU
中级调度将进程从活动态(活动就绪、活动阻塞)变为静止的挂起态(静止就绪、静止阻塞);或相反
中级调度实际上是实现“挂起”和“激活”操作
中级调度也称为进程交换调度,通常仅用于分时系统
运行频率介于其他两个中间
三、低级调度:又称进程调度/短程调度
低级调度即进程(线程)调度
低级调度决定哪个进程可获得CPU
低级调度从活动就绪队列中挑选一个进程,将它变为运行态,同时启动CPU执行该进程
低级调度也称微观调度
进程调度可采取以下两种方式:
1、非抢占方式:进程获得CPU后,一直执行完成或自动阻塞
2、抢占方式:进程获得CPU后,允许其它进程依据一定的原则抢占CPU资源
⑴、时间片原则
⑵、优先权原则
⑶、短作业(进程)优先原则
仅有低级调度的调度队列模型:
每个进程执行时:
- 进程在时间片内已完成,进入完成状态
- 未完成,放在就绪队列后
- 因某事件,进入阻塞状态
具有高级和低级进程调度的调度队列模型:
具有三级调度的调度队列模型:
调度评估标准:
1、周转时间:
作业(进程)i从提交(进入时刻)到完成的时间称为该作业的周转时间Ti
Ti = 完成时刻 – 进入时刻
2、平均周转时间:
平均周转时间为n个作业(进程)周转时间的平均值
n个作业(进程)的平均周转时间:
3、带权周转时间:
作业(进程)周转时间Ti与实际运行时间Tsi之比称为该作业的带权周转时间Wi
4、平均带权周转时间:
平均带权周转时间为n个作业(进程)带权周转时间的平均值
n个作业(进程)的平均带权周转时间:
5、平均等待时间:
进程i从进入就绪队列到获得CPU的时间称为该进程的等待时间WTi
n个进程的平均等待时间:
调度原则:
1、面向用户的原则:
- 周转时间短
- 响应时间快
- 截止时间的保证
- 优先权准则
2、面向系统的原则:
- 系统吞吐量高
- 处理机利用率好
- 各类资源的平衡使用
调度算法:
处理机调度实际上是一种资源(处理机)分配
调度算法是指根据系统的资源分配策略所规定的资源分配算法
目标不同、系统不同,则调度算法各异
先来先服务(FCFS)调度算法:
最简单的调度算法,选最先进入就绪队列的进程投入执行
以非抢占方式工作,可用于作业与进程调度
优点: 简单,有利于CPU繁忙型作业(进程),有利于长时间作业(进程)
缺点: 对短时间作业(进程)不利,对I/O繁忙型作业(进程)不利,对紧迫作业(进程)不利
短作业(进程)优先(SF/SJF)调度算法:
选就绪队列中估计运行时间最短的进程投入执行
可以抢占方式和非抢占方式工作,可用于作业调度与进程调度
优点: 有利于短时作业(进程),在抢占方式中,最短时作业(进程)将以最快的速度完成
缺点:
⑴、对长时间作业(进程)不利
⑵、未考虑作业(进程)的紧迫程度
⑶、在抢占方式中,最短指总需要时间最短还是剩余时间最短(而且是估计值)
⑷、在抢占方式下,即使一个长作业(进程)正在运行,但也可能会被长时间地延迟
高响应比优先(HRRN/HRN)调度算法:
选择一个响应比Rp最高的进程投入执行
响应比RP:
⑴、可用于作业与进程调度,是FCFS和SF的折中算法
⑵、Rp与需要运行时间成反比,使短作业(进程)Rp较高
⑶、Rp与等待时间成正比,使等待时间长的作业(进程)Rp较高
⑷、HRN一般采用非抢占方式
优点: 有利于短时作业(进程) 有利于先来者
缺点: 每次调度前,必须计算Rp,增加系统开销 未考虑作业(进程)的紧迫程度
最高优先权(HPF)调度算法/优先级调度算法(PSA):
选择一个优先权最高的进程投入执行
- 进程调度的非抢占方式:系统一旦将CPU分配之后,一直到进程执行完成或自动进入阻塞状态
- 进程调度的抢占方式:只要进入就绪队列的进程优先权高于正在CPU上运行现进程的优先权,则将现进程放到就绪队列尾,并运行最高优先权进程
进程优先权分为静态和动态:
静态优先权:
⑴、在作业(进程)被调度之前赋值,之后一直不变
⑵、优先权的取值可根据:作业(进程)类型,对资源的要求,用户要求等
动态优先权:
⑴、在作业(进程)被调度之前赋初值
⑵、在作业(进程)运行过程中,动态改变优先权
- 可用于作业与进程调度,但动态优先权算法只用于进程调度
- 抢占方式可用于实时系统
采用非抢占方式 :
⑴、优先权只依据到达时间,则变为FCFS
⑵、优先权只依据运行时间,则变为SF
⑶、优先权只依据Rp,则变为HRN
优点: 可以根据要求,照顾到对系统、用户综合来说最优先的作业(进程)的执行
缺点: 优先权的计算可能比较复杂,增加系统开销
时间片轮转(RR)调度算法:
RR调度算法是一种抢占方式的进程调度算法
RR依据公平服务原则,在一定时间内,为每个进程轮转服务一次。RR每次为一个进程执行一个时间片,若进程未结束,则将进程插入到就绪队列的尾部
时间片大小的确定:
- 系统对响应时间T的要求
- 就绪队列中进程的数目N 与系统中的最大用户数相关 T=N x q(T一次轮转时间,N用户数,q时间片大小)
- 系统的处理能力 保证每个用户的普通命令能在一个时间片内完成
等长时间片: 在保证系统对响应时间的要求,满足最大用户数目需要的前提下,时间片应尽量长 不等长时间片:可以根据优先权,对优先权高的进程分配较长的时间片,但总的时间片轮转时间应满足要求
RR用于进程调度,适合于分时系统
时间片越长,越有利于缩短周转时间;如果时间片太长,RR退化为FCFS
优点: 有利于交互性、事务性进程 有利于I/O繁忙型的进程
缺点: 调度开销较大,未考虑实时响应要求
多级队列调度算法:
将就绪队列分成多种不同队列(前台轮转就绪队列、后台FCFS就绪队列)
每个进程固定地分属于一个队列
不同队列采用不同的调度算法(前台就绪队列采用RR调度算法,后台就绪队列采用FCFS算法)
只有当前台就绪队列空时,才执行后台队列中的进程
特性:同一计算机系统存在多个OS
优点:可以同时兼顾到分时及批量处理任务
缺点:未考虑紧迫性作业或进程
多级反馈队列调度算法:
设置多个就绪队列,并从高到低赋予不同的优先级
每个队列采用RR算法,时间片长度从高优先级到低优先级依次增加(一般加倍)(S1<S2<…<Sn)
- 新进程放到最高优先级就绪队列尾部
- 如果进程在当前就绪队列中执行一次未完成,则放到低一级就绪队列尾部
- 较高优先级就绪队列全部为空时,才执行当前队列进程
- 如果有更高优先级进程,则将当前进程放在当前就绪队列尾部,转而执行优先级高的进程
是一种比较好的进程调度算法,能满足各种类型用户的需要:
- ⑴、终端型用户:交互性作业小
- ⑵、短时作业用户:执行时间短
- ⑶、长时作业用户:在第n个队列中按RR算法轮转执行
优点:可以同时兼顾到实时、分时及批量处理作业(进程)
缺点:调度算法比较复杂,调度开销较大
实时调度:
实时任务特点:
- 紧迫性 必须在截止时间之前开始或结束
- 截止时间:最迟时间 开始截止时间,完成截止时间
实现实时系统调度的基本条件:
1、提供必要的调度信息:
- 就绪时间
- 开始截止时间/完成截止时间
- 处理时间
- 资源要求
- 优先级
2、系统处理能力强:
设系统中有m个周期性的硬实时任务,它们的处理时间为Ci,周期时间为Pi,则:
3、采用抢占式调度机制:
优先级高的任务必须优先投入运行
4、具有快速切换机制:
对外部中断的快速响应能力 快速的任务分派能力
实时系统调度方式:
一般采用抢占方式,如果采用非抢占方式,则所有的实时任务(进程)执行时间都必须很短,并能在执行完最关键的区域后,自动阻塞
实时调度算法:
1、时间片轮转调度算法:
可以满足响应时间在数秒的实时控制 可应用于一般实时系统
2、非抢占优先权调度算法:
可以满足响应时间在数百毫秒的实时控制,可用于要求不太严格的实时控制系统
3、基于时间中断的抢占优先权调度算法:
可以满足响应时间在几毫秒到几十毫秒的实时控制 可用于大多数实时控制系统
4、立即抢占的优先权调度算法:
可以满足响应时间在毫微秒到几毫秒的实时控制 基本可满足所有实时控制系统要求
常用的实时调度算法:
1、最早开始截止时间优先(EDF)算法:
根据任务的开始截止时间确定任务的优先级 开始截止时间越早,优先级越高
2、最低松驰度优先(LLF)算法:
根据任务的紧急(松驰)程度确定任务的优先级
松驰度(LLF)=完成时间-处理时间-当前时间
死锁:
死锁:
1、指多个进程因竞争资源而造成的一种僵局
2、若无外力作用,这些进程都将永远不能再向前进
产生死锁的原因:
1、竞争资源:当两个或以上进程需要两个或以上资源
竞争资源 :
1、可剥夺性资源:某进程获得该类资源后,可被其他进程或系统录夺(如CPU,RAM等)
2、非剥夺性资源:某进程获得该类资源后,其他进程或系统不可剥夺,只能在进程用完后自行释放(如打印机等)
3、临时性资源:由某进程产生,由另一进程临时使用的资源(如信号量)
竞争临时性资源:
举例(哲学学就餐问题):
2、进程推进顺序非法:请求和释放资源的顺序不当
进程推进顺序举例:
产生死锁的必要条件:
1、互斥条件:请求的资源为临界资源
2、请求和保持条件:申请新资源,保持旧资源
3、不剥夺条件:已获得的资源,在使用完之前,不被外力剥夺
4、环路等待条件:互相等待资源
预防死锁:
设置某些限制条件,破坏产生死锁的必要条件中的一个或几个条件
⑴.一次将资源全部分配(摒弃“请求和保持”条件)
优点:简单,易于实现且安全 缺点:资源浪费严重 ,进程延迟运行
⑵.当请求的资源得不到满足时,释放已分配的资源(摒弃“不剥夺”条件)
缺点:前期工作全部作废,代价高,反复申请,性能下降
⑶.对资源的申请必须按一定顺序进行(摒弃“环路等待”条件)
缺点:资源序号需要相对稳定,先获得的资源有可能长期闲置 ,对用户编程(资源申请时)有限制
避免死锁:
在资源的动态分配过程中,用某种方法,去防止系统进入不安全状态
检测死锁:
通过检测机构,及时地检测出死锁的发生及原因,并确定有关的进程和资源,采取措施,解除死锁
解除死锁:
剥夺资源或通过撤消进程,收回一些资源。 解除死锁与检测死锁是相互合作的关系。
死锁的避免:
分配资源之前,先判断是否会进入不安全区(危险区和禁区),如果会进入危险区,则不分配资源
Dijkstra银行家算法:
⑴.进程需求资源数如果大于现有资源数,不分配
⑵.预分配,检查是否存在一个进程序列,可以安全执行完成。存在则分配,否则不分配。
银行家算法数据结构:
1.Available[m]:可利用资源向量,表示系统中可被利用的各类(共m类)资源的数目
2.Max[n,m]:最大需求矩阵,表示每个进程(共n个进程)需要各类资源的最大数目
3.Allocation[n,m]:分配矩阵,表示系统为每个进程已分配各类资源的数目
4.Need[n,m]:需求矩阵,表示每一个进程尚需要的各类资源数目
Need[i,j] = Max[i,j] – Allocation[i,j]
5.Request[m]:请求向量,表示进程请求分配各类资源的数目
银行家算法:
1. 如果Request[j] > Need[i,j],出错
2. 如果Request[j] > Available[j],资源数目不够分配,进入等待状态
3. 执行安全性检查算法,如果系统处理安全状态(有一个安全进程执行序列),则分配资源;否则,不分配,进程进入等待状态
银行家算法中安全性算法数据结构:
1、Work[m]:工作向量,表示系统可提供进程继续运行所需要的各类资源数目,其初值为Available[m]
2、Finish[n]:完成向量,表示系统是否有足够的资源分配给进程(true/false)
银行家算法中安全性算法:
1、从进程集合中找到一个进程Pi,满足: Finish[i] = false,Need[i,j] <= Work[j]
2、Work[j] = Work[j]+Allocation[i,j] Finish[i] = true
3、重复1,2步骤
4、如果所有进程的Finish[i]=true,则存在一个安全执行序列;否则,系统处于不安全状态
Dijkstra银行家算法的缺点:
1.很少有进程能够在运行前就知道其所需资源的最大值
2.而且进程数也不是固定的,往往在不断地变化(如新用户登录或退出)
3.原本可用的资源也可能突然间变成不可用(如磁带机可能坏掉)
4.银行家算法的开销较大,实时性不是很好
死锁检测要求:
1、保存有关资源的请求和分配信息
2、提供一种算法,以利用这些信息来检测系统是否已进入死锁状态
死锁的解除:
- 剥夺资源
- 撤消进程:全部撤消法、最小代价撤消法