高级调度
又称作业调度、长程调度、接纳调度。根据某种算法把外存处于后备序列的作业调入内存。批处理系统需要有作业调度,分时和实时系统无需此调度
每次作业都需要做以下两个决定:接纳多少作业,接纳哪些作业
高级调度有以下三个属性:多道程序度(多少个作业可以同时进行)、周转时间(作业提交到作业完成的时间间隔)、吞吐量(值时间单位系统完成的作业量)
响应比=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间
主要用于批处理系统,目的是最大限度的发挥资源的利用率和保持相同内的各种活动的充分并行
低级调度
又称为进程调度、短程调度;调度的对象是进程,是最基本的调度,批处理、分时、实时三种类型的OS都必须配置。用于决定就绪队列的哪个进程应该获得处理机,然后由分派进程分配处理机给对应进程,调度方式分为抢占式和非抢占式
三个基本机制:排队器(提高进程调度效率,事先排成队列)、分派器(进行上下文切换,分配处理机)、上下文切换机制(当对处理机进行切换时,会发生两对上下文切换操作)
低级调度功能:按某种算法选取进程,保存处理机现场,把处理器分配给进程
非抢占式:新就绪的进程进入队列,上一个进程仍继续,指导完成进程才进行切换(优:算法简单、开销小;缺:紧急任务无法及时响应,短进程后到需要等待长进程结束)
抢占式:若有更为重要或紧迫 的进程进入就绪队列,立即暂停上一个进程,执行新进程。抢占原则:时间片原则、优先权原则、短作业优先原则(优:防止长进程长时间占用,更公平,满足严格实时性;缺:开销较大、算法复杂)
中级调度
又称为中程调度,目的是为了提高内存利用率和相同吞吐量
具体实现:把那些暂时不能运行的进程从内存转到外存,此时进程的状态称之为就绪驻外存状态或挂起状态;当这些进程有具备了运行条件,由从外存移到内存,并将其状态修改为就绪状态
处理机调度的层次
仅有进程调度的调度队列模型(分时系统)
在分时系统中,通常仅设有进程调度,系统把这些进程组成一个就绪队列;每个进程在执行时无外乎四字情况:CPU正在执行;在给定时间内完成;在给定时间片内未完成,进入队尾;因为某件事阻塞
具有高级与低级调度的调度队列模型
在批处理系统中,不仅需要进程调度,还需要作业调度;在批处理系统中,通常用高优先权队列,将优先权高的进程往前放;且根据阻塞原因不同设置了多个阻塞队列
同时具有三级调度的调度队列模型
在OS中引入中级调度后,进程的就绪就分为了内存就绪与外存就绪;同样,阻塞进一步分成内存阻塞和外存阻塞;通过操作,可以将内存就绪转为外存就绪,将内存阻塞转化为外存阻塞;在中级调度下,又可用使外村就绪转为内存就绪
调度的目标
提高处理机的利用率;
提高系统吞吐量;
尽量减少进程的响应时间;
防止进程长期得不到运行
算法准则
面向用户的准则:周转时间短、响应时间快、截止时间的保证、优先权准则
面向系统的准则:系统吞吐量高、处理机利用率高、各类资源的平衡利用
引起进程调度的因素
正在执行的进程执行完毕,或者因为发生某事件而不能继续执行
执行中的进程因为提出I/O请求而暂停执行
在进程通信或同步过程中执行了某种原语操作
进程切换的基本步骤
保存进程的上下文环境
更新当前运行进程的控制块内容,将状态改为就绪或者阻塞
将进程控制块一如相应队列
改变需要投入运行进程的控制块内容,将状态改为运行状态
恢复需要投入运行进程的上下文环境
## 进程切换:一个进程占用处理机执行完,换另一个进程占用处理机的行为 ##
## 进程调度:把处理机分给不同进程 ##
## 调度程序:实现分配处理机的程序 ##
## 进程的上下文:在执行切换时的现场 ##
## 并发:一个CPU交替执行多个程序;极大的提高资源使用率 ##
调度算法
先来先服务(FCFS)
先进入系统者先调度;即启动等待时间最长的作业/进程
优点:有利于长作业;有利于CPU繁忙型作业
缺点:不利于短作业,特别是晚来的短进程;不利于I/O繁忙型作业
## 用于批处理系统,不适于分时系统 ##
短作业优先调度算法(SJF/SPF)
以要求运行时间长短进行调度,即启动要求运行时间最短的作业,分别用于作业调度和进程调度
优点:能够有效降低作业/进程的平均等待时间;提高系统吞吐量
缺点:对长作业不利,可能使其长时间不调度;未考虑到作业紧迫性;根据用户估计的执行时间来确定,不一定是真正的短作业优先;无法实现人机交互
最短剩余时间优先算法(SRT)
当一个新进程加入时,比较谁后续的服务时间更短就执行谁,若二者相当,则执行原进程,否则执行剩余时间少的进程
## 周转时间=完成时间-到达时间 ##
## 带权周转时间=周转时间/要求服务时间 ##
## 等待时间=周转时间-服务时间 ##
优先权调度算法(PSA)
静态优先权(抢占/非抢占):优:简单易行,开销小;缺:不够精确
动态优先权(抢占/非抢占)(HRRN):介于FCFS和SJF之间的折中算法,增加了系统开销
## 动态优先权=(等待时间+要求服务时间)/要求服务时间 ##
时间片轮转法
系统将所有就绪进程按先来先服务原则,排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片;难点是,时间片大小的确定,太大退化为FCFS,太小系统开销过大;对于短的,计算型进程有利,但是对于I/O型进程不利
多级队列调度算法
前台的就绪队列是交互性作业的进程,采用时间片轮转;后台的就绪队列是批处理作业的进程,采用优先权或短作业优先算法——优先调度前台,前台无进程可运行,才调度后台
多级反馈序列
设置多个就绪队列,并为各个队列赋予不同的优先级--一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度,调度完成若进程结束则撤离系统,反之放入下一级队列末尾--仅当第1~(i-1) 队列均空时,才会调度第i队列中的进程运行
## 不需要指导进程执行所需的时间 ##
基于公平原则的调度算法
保证调度算法
保证的是绝对运行时间,即启动后在某个时间段内必须获得多少运行时间。
公平分享调度算法
按照用户数量平均分配时间,而不是进程间平均分配
实时调度系统
硬实时系统:硬实时系统有一个刚性的、不可改变的时间限制,不允许任何超出时限的错误
软实时系统:软实时系统的时限是柔性灵活的,它可以容忍偶然的超时错误。
## 二者差别:软实时只能提供统计意义上的实时 ##
实现实时系统的基本条件
提供必要的调度信息:就绪时间、开始截止时间、完成截止时间、处理时间、资源要求、优先级
系统处理能力强
采用抢占式调度机制
具有快速切换机制:具有快速响应外部中断的能力、快速的任务分派能力
实时调度算法
非抢占式轮转调度算法:队首运行,完毕后放置于队尾,不断循环
非抢占式优先权调度算法:对于有严格要求的任务赋予较高优先级
基于时钟中断的抢占式优先权调度算法
立即抢占的优先权调度算法
常用的几种实时调度算法
最早截止时间优先算法(EDF):任务开始截止时间越早优先级越高;按照截止时间的早晚进行队列排序;
最低松弛度优先算法(LLF):松弛度=完成截止时间–剩余运行时间–当前时间;该算法主要用于抢占调度方式----当松弛度等于0时进行抢占
优先级倒置
即高优先级进程被低优先级进程延迟或阻塞
产生死锁的原因与必要条件
死锁:指多个进程因竞争资源或相互通信而造成的一种僵局,都在等待着对方释放出自己所需的资源,但同时又不释放出自己已经占有的资源,若无外力作用,这些进程都将永远无法向前推进。
产生原因:资源竞争;进程顺序推进不当
产生死锁的必要条件:互斥、请求和保持条件、不剥夺条件、环路等待条件(有环路不一定死锁!)
处理死锁的基本方法:
预防死锁:易于实现、资源利用率和吞吐量降低
避免死锁:较弱限制条件可获得较高系统资源利用率和吞吐量,但有一定的实现难度
检测死锁:通过设置检测机构,检测出死锁后解除
解除死锁:常常撤销或者挂起进程,回收资源
预防死锁
预防死锁的方法是使四个必要条件中的第2、3、4条件之一不能成立
摒弃“请求和保持”条件
1.系统要求所有进程一次性申请所需的全部资源,只要有一种资源不能满足,那么就不会进行资源分配;优:简单、易于实现且安全;缺:资源浪费严重、进程延迟运行
2.允许一个进程只获得运行初期所需的资源后便开始运行,过程中逐步释放已分配的使用完毕的资源,在请求新的所需资源;优:更快的完成任务,提高设备利用率,减少饥饿概率
摒弃“不剥夺”条件
一个已经保持了某些资源的进程,在自己的请求得不到满足时,必须释放已保持的所有资源,后续在进行重新申请;优:摒弃了“不剥夺”条件;缺:实现复杂,代价大,延长了周转时间,增加了系统开销,降低了系统吞吐量
摒弃“环路等待”条件
系统将按照资源是否常用为资源编号,资源请求必须从低号到高号,资源释放要从高号到低号;优:资源利用率和吞吐量较前两者改善;缺:限制了新设备类型的增加;因进程使用各类资源顺序与系统规定不同而造成了资源的浪费;限制了用户简单、自主的编程
避免死锁
安全状态:是指系统能按某种进程顺序来为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。如果系统无法找到这样一个安全序列,则称系统处于不安全状态
## 不安全状态不等于死锁状态,但是进入不安全有概率死锁 ##
## 避免死锁的关键在于,如何准确的预测是否会出现死锁,最具代表性的就是银行家算法 ##
死锁的检测与解除
资源分配图
先看系统还剩下多少资源没分配,再看有哪些进程是不阻塞---把不阻塞的进程的所有边都去掉,形成一个孤立的点,再把系统分配给这个进程的资源回收回来---看剩下的进程有哪些是不阻塞的,然后又把它们逐个变成孤立的点---最后,所有的资源和进程都变成孤立的点。这样的图就叫做“可完全简化”。如果一个图可完全简化,则不会产生死锁;如果一个图不可完全简化(即:图中还有“边”存在),则会产生死锁。这就是“死锁定理”。
死锁解除
剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态
撤销进程:最简单的撤消进程的方法,是使全部死锁进程都夭折掉;或者按照某种顺序逐个地撤消进程,直至有足够的资源可用,使死锁状态消除为止
按照解除死锁复杂度递增的顺序列出解除死锁的方法
撤消死锁进程
把死锁进程恢复到前一个检查点,重新执行每个进程
按照某种原则逐个选择死锁进程进行撤消,直到解除系统死锁。
按照某种原则逐个剥夺进程资源,直到解除死锁
## 第3、4方法需要选择代价最小的进程:花费时间最少、产生输出最少、未执行部分最多、以获得资源最少、优先级最低 ##