在多道程序环境下,一个作业从提交到执行,通常都要经历多级调度,如高级调度、低级调度、中级调度等。而系统的运行性能在很大程序上取决于调度,因此调度便成为多道程序的关键。
在多道程序环境下,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统的处理能力,然而,多个进程的并发执行也带来了新的问题----死锁。
处理机调度的基本概念
(内中断-主动释放,阻塞也会释放cpu)
注意!本篇大多计算和安全状态序列都有误!不必考虑计算结果!重点在思考方法!
在多道程序环境下,一个作业从提交直到完成,往往要经历多级调度。但在不同操作系统中所采用的调度层次不完全相同。在有的系统中仅采用一级调度,而在另一些系统中则可能采用两级或三级调度,在执行调度时所采用的调度算法也可能不同。
一个作业从提交开始,往往要经历三级调度:
高级调度
、低级调度
、中级调度
。
1、高级调度(长程/作业/宏观调度)
(1)从外存后备队列中选择作业进入就绪队列或挂起就绪
.
(2)在批处理系统
中,大多配有作业调度,但在分时系统及实时系统中,一般不配置.
(3)作业调度执行频率很低
,通常为几分钟一次
,甚至更久。
(批处理,计算密集进程)
(分时,I/O密集进程)
调度队列模型
在OS中的任何一种调度中,都将涉及到
进程队列
,由此形成了三种类型的调度队列模型。
1.仅有进程调度的调度队列模型
2.具有高级和低级调度的调度队列模型
3.同时具有三级调度的调度队列模型
周转时间(完成-到达)短:批处理系统
响应时间(开始-到达)快:分时系统
截止时间的保证-实时系统
优先权准则-实时系统
时钟中断-时间片
中级调度-》挂起-》活动
所有用户:平均···时间
到达时间=进入就绪时间
调度算法
进程调度的核心问题就是采用什么样的算法将处理机分配给进程,常用的进程调度算法有
1.先来先服务调度算法
2.短作业/进程优先调度算法
3.时间片轮转调度算法
4.优先权调度算法
5.高响应比优先调度算法
6.多级队列调度算法
7.多级反馈队列调度算法
1.FCFS
FCFS调度算法存在的问题:
从表面上,先来先服务于所有作业是公平
的,即按照它们到来的先后次序进程服务。但若一个长作业
先到达系统,就会使许多短作业等待
很长的时间,从而引起许多短作业用户的不满。
所以,现在操作系统中,已很少用该算法作为主要调度策略,尤其是在分时系统和实时系统中。但它常被结合在其它调度策略中使用。
2.SJF/SPF
(分时-RR)
(实时-优先权)
默认优先权越小,优先权越高
优先权类型:
1.静态优先权
优先权在创建进程时确定,且在进程的整个运行期间保持不变。一般用一整数表示,小表优先级高。
2.动态优先权
优先权在创建进程时确定,但在进程的运行期间会发生变化。
(响应比越大,优先权越大)
要求服务时间=剩余时间
实时系统中的调度
在一个实时系统中,时间起着非常重要的作用,即每一个实时进程或任务都有一个时间约束要求,如:在何时之前必须开始做,在何时之前必须完成等等。在一个实时应用系统,可能有多个实时进程或任务,每个实时任务都有其时间约束,所以需一种新的调度算法来合理地安排这些实时任务的执行次序,使它们能满足各个实时任务的的时间约束条件-----
实时调度
。
实时调度:满足实时任务各自时间约束条件的调度称为实时调度。
相关概念:
就绪时间:实时任务产生并可以开始处理的时间。
开始截止时间:实时任务最迟开始处理的时间。
处理时间:实时任务处理所需要的处理机的时间。
完成截止时间:实时任务最迟完成时间。(也叫结束截止时间,是实时系统中最需要考虑的)
发生周期:周期性实时任务的发生间隔时间。
优先级:实时任务相对紧廹程序。
实时调度算法的分类
按实时任务性质(即对时间约束强强弱程度)
1.硬实时调度
:必须满足任务截止期要求,错过可能导致严重后果。(例如工业)
2.软实时调度算法
:期望满足任务截止期要求,错过一般可容忍。(例如订票,多媒体系统)
按调度方式
1.非抢占式调度算法
1)非抢占式轮转调度算法: 用于工业生产的群控系统中。
2)非抢占式优先调度算法:用于有一定时间要求的实时控制系统之中。
2.抢占式调度算法
按抢占发生的时间 :
1)基于时钟中断抢占的优先权调度算法
2)立即抢占的优先权调度算法
(松弛度-留给别的进程的时间)
死锁
(临时性-会死锁)
(可剥夺-同时访问式)
(不可剥夺/临界资源-互斥共享式)
DL->C1ANDC2ANDC3ANDC4
所以
非c1或非c2或非c3或非c4->非DL
产生死锁的必要条件
产生死锁必须具备以下四个条件,这四个条件是Coffman首先提出的,所以称为Coffman 条件:
1.互斥条件(资源独占条件)
2.请求和保持条件(部分分配条件)
3.不剥夺条件
4.循环等待条件(环路条件)
处理死锁的基本方法
目前处理死锁的基本方法有四种:
1.预防死锁
:指通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来防止死锁的发生。
2.避免死锁
:指在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免死锁的发生。
3.检测死锁
:允许系统在运行过程中发生死锁,但可设置检测机构及时检测死锁的发生,并采取适当措施加以清除。
4.解除死锁
:当检测出死锁后,便采取适当措施将进程从死锁状态中解脱出来。
(检测与避免算法是一样的,都是银行家算法)
(2)可用AND型信号量
死锁的避免是动态型分配
系统的安全状态
指在某一时刻,系统能按某种进程顺序(p1,p2,…,pn)来为每个进程Pi分配其资源,直到满足每个进程对资源的最大需求,使每个进程都可顺利地完成,则称此时的系统状态为
安全状态
称序列(p1,p2,…,pn)为安全序列
。若某一时刻系统中不存在这样一个安全序列,则称此时的系统状态为不安全状态
。
注:在死锁避免的方法中,允许进程动态申请资源,系统在进行资源分配之前,先计算资源分配的安全性,若此次分配不会导致系统进入不安全状态,便将资源分配给进程,否则进程等待。
p2,p3,p1是错的
银行家算法三步-欲分配,安全性检查,分配资源
资源分配算法-欲分配
(安全状态找不到的话就回匦-就是那三条)
(应该是p1,p3,p0,p2,p4)
不能完全化简也是可能有死锁
孤立点就是执行完了的
资源分配图先找没有阻塞的(没有请求边)
(请求边,分配边)
(孤立点就是执行完了的)
死锁的解除
一旦检测出系统中出现了死锁,就应将陷入死锁的进程从死锁状态中解脱出来,常用的解除死锁方法有两种:
1.资源剥夺法
:当发现死锁后,从其他进程剥夺足够数量的资源给死锁进程,以解除死锁状态.
2.撤消进程法
:采用强制手段从系统中撤消一个/一部分死锁进程,并剥夺这些进程的资源供其它死锁进程使用.