在多道批处理系统中,一个作业从提交、到获得处理机执行、直至运行完毕,需要经历多级处理机调度。
处理机调度的层次
1.高级调度
高级调度又称为长程调度或作业调度,调度对象是作业。根据某种算法,决定将外存上处于后备队列中的哪些作业调入内存,为它们创建进程、分配资源,并放入就绪队列。高级调度主要用于多道批处理系统中,而在分时系统和实时系统中,不设置高级调度。
2.低级调度
低级调度又称为短程调度或进程调度,调度对象是进程。根据某种算法,决定就绪队列中的哪个进程应获得处理机,并由分派程序将处理机分配给被选中的进程。低级调度是最基本的一种调度,在多道批处理、分时和实时这3种系统中,都必须配置这种调度。
3.中级调度
中级调度又称为内存调度。把暂时不能运行的进程调至外存等待,也就是挂起。当已具备运行条件且内存稍有空闲时,由中级调度来决定把外存上的那些已具备运行条件的就绪进程再重新调入内存,并修改它们的状态为就绪状态,插入就绪队列。
以上3种调度中,低级调度的运行频率最高,高级调度的运行频率最低。
作业调度
评估作业调度算法好坏的标准:
①CPU利用率
②吞吐量
单位时间内CPU完成作业的数量
③周转时间
作业周转时间=作业完成时间-作业提交时间
作业周转系数(带权周转时间)=周转时间/执行时间
n个作业的平均周转时间=n个作业周转时间之和/n
n个作业的平均周转系数=n个作业周转系数之和/n
对于用户来说,总是希望周转时间=执行时间,周转系数=1。
作业的平均周转时间越短,作业在系统中停留的时间越短,系统的吞吐量就越高。
进程调度
进程调度的任务主要有三:①保存现场;②选取进程;③把CPU分配给进程,布置现场。
进程调度方式有二:①非抢占方式(不能用于分时系统和大多数实时系统)②抢占方式。
调度算法(作业调度与进程调度混着说的)
1.先来先服务(first come first server,FCFS) 既可用于作业调度,也可用于进程调度。
2.少工作优先(short job first,SJF)既可用于作业调度,也可用于进程调度。
3.优先级。优先级既可以是静态的,也可以是动态的。既可用于作业调度,也可用于进程调度。
用于进程调度时,可进一步分为非抢占式和抢占式。
①非抢占式:除非主动放弃CPU或时间片用完,负责不会被优先级更高的进程抢用CPU 。
②抢占方式:当前的进程在其时间片未用完时就可被优先级更高的进程抢用CPU(自己进入就绪态)。
高响应比优先(highest response ratio next,HRRN)是非抢占式优先,通常用于作业调度。
响应比RP=响应时间/预计运行时间
=(等待时间+预计运行时间)/预计运行时间
=1+等待时间/预计运行时间
4.时间轮转(round robin,RR)用于进程调度
将就绪进程按FCFS策略排成一个就绪队列。设置每隔一定时间便产生一次中断,激活进程调度程序,把处理机分配给队首进程,并令其执行一个时间片。当一个时间片用完时,如果进程尚未运行完毕,则插入就绪队列的末尾,把处理机分配给就绪队列中新的队首进程,让它执行一个时间片。
6.多级反馈队列(抢占式时间轮转)用于进程调度
在系统中设置多个就绪队列,优先级依次降低,时间片依次倍增。
7. 最早截止时间优先(earliest deadline first,EDF)任务的截止时间越早,排得越前
8. 最低松弛度优先(least laxity first,LLF)(抢占式)
死锁产生的四个必要条件(都齐备了才会产生死锁)
1)资源互斥
2)资源不可剥夺
3)进程请求资源而不得,继而陷入阻塞状态时,并不释放已占有的资源
4)环路等待
死锁产生的几个实例
1.P、V操作不当
2.进程申请顺序不当
3.同类资源分配不当
4.进程通信
死锁的预防(破坏死锁产生的四个条件之一便可)
1、破坏“资源互斥”这一条件(行不通)
2、破坏“资源不可剥夺”这一条件(只适用于处理及和存储器资源)
3、破坏“进程请求资源而不得,继而陷入阻塞状态时,并不释放已占有的资源”这一条件(静态分配)
静态分配是指当一个进程得到了它所需要的所有资源后方可执行。缺点:资源利用率低下,系统效率不高。
4、破坏“环路等待”这一条件(资源的有序分配)
有序资源分配是指系统给资源由高到低编好号,进程必须按从小到大的顺序递增申请资源。缺点:新增资源不便(原序号已排定)、进程不自由、浪费资源。
死锁条件 | 预防方法 |
互斥 | 对资源进行spooling操作 |
请求和保持 | 进程创建时申请所有资源 |
不可剥夺 | 将资源剥夺 |
循环等待 | 对资源进行编号,递增申请 |
死锁的避免
死锁避免的关键:让系统在动态分配资源时,不得进入不安全状态。
算法实现:银行家算法
死锁的检测
资源分配图
若能完全简化消去所有的有向边,系统便未进入死锁状态。
死锁的解除
- 重新启动:简单粗暴,但会使之前的工作全部白费,造成很大的损失和浪费。
- 撤消进程:撤消造成死锁的进程。
- 剥夺资源:保留死锁进程,只剥夺死锁进程占有的资源,直到解除死锁。
- 进程回退:根据保留的历史信息,让死锁的进程从当前状态向后退回到某种状态,直到死锁解除。可以通过结合检查点或和回退机制实现。
若有k个进程,对于同类资源,k个进程分别需要w1,w2,……,wk个资源,而该资源的数量为n,则当满足 (w1-1)+(w2-1)+……(wk-1)+1<=n时,不会产生死锁。