第三章、处理机调度与死锁
-
处理机调度的层次:
-
高级调度
又称为长程调度和作业调度。调度对象是作业 -
低级调度
低级调度又称为进程调度或短程调度,调度对象是进程(或内核级线程) -
中级调度
又称为内存调度。引入它的目的是提高内存利用率和系统吞吐量。 -
响应时间:指从用户通过键盘提交一个请求开始,直到屏幕上显示出处理结果为止的一段时间的间隔。
-
周转时间:从作业被提交给系统开始,到作业完成为止这段时间间隔。
-
作业调度算法
-
先来先服务(FCFS)
- 概念:系统按照作业到达的先后顺序进行调度
- 使用: 该算法即可用于作业调度,也可用于进程调度。
-
短作业优先(SJF)
* 概念:SJF以作业长短来计算优先级,作业越短,优先级越高。其中作业的长短是以作业所要求的运行时间来衡量的。
* 使用:该算法可用户作业调度和进程调度。
* 缺点:
* 必须预知作业的运行时间。
* 对长作业非常不利,长作业的周转时间会明显地增加。
* 在采用SJF算法时,人-机无法实现交互。 -
优先级调度算法(PSA)
- 概念:作业优先级越高,就越先调度。
-
高响应比优先调度(HRRN)
* 优先权 = (等待时间+要求服务时间)/要求服务时间。 -
进程调度的任务
- 保存处理机的现场信息
- 按某种算法选取进程
- 把处理器分配给进程。
-
进程调度方式
-
非抢占式:一旦把处理机分配给某进程以后,就一直执行,直到完毕。
-
抢占式:调度程序根据某种原则去暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另一个进程。
-
进程调度算法
- 轮转调度算法(RR)
- 概念:让就绪队列(按照FCFS排序)的每个进程每次仅运行一个时间片,如果就绪队列上有几个进程,则每个进程每次大约都可获得1/n的处理机时间。
- 最早截止时间有限(EDF)
- 概念:开始截止时间越早,优先级越高。
- 轮转调度算法(RR)
-
死锁相关知识
- 概念:是指多个进程在运行过程中因争夺资源而造成的一种僵局,但进程处于这种僵局后,若无外力作用他们都将无法在向前推进。
- 产生死锁的必要条件(一共四个,任何一个不成立都不会死锁):
- 互斥条件(自己理解:必须有临界资源)
一段时间内,某资源只能被一个进程调用,如果此时有其他进程请求该资源,那么请求进程等待,直到占有该资源的进程释放。 - 请求和保持条件 (自己理解:自己有,但是还想要,但是已经没有了,自己又不给出自己有的)
进程已经保持了一个至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已经获得的资源不释放。 - 不可抢占条件(自己使用完才能释放)
进程已获得的资源在未使用完之前不能被抢占,只能在进程使用完时自动释放。 - 循环等待条件
在发生死锁时,必然存在一个进程---资源的循环链,即进程集合{p0,p1,p2,,,,,pn}中的po正在等待一个P1占用的资源,P1正在等待P2占用的资源。。。。。。Pn正在等待Po占用的资源。
- 互斥条件(自己理解:必须有临界资源)
-
预防死锁的方法
-
破坏“请求和保持”条件
要想破坏该条件,必须做到:当一个进程在请求资源时,它不能持有不可抢占资源。可通过两种不同的协议实现:- 第一种协议
一次性把自己需要的资源都给他。优点:简单、易行且安全。缺点:资源严重浪费;使进程经常会发生饥饿现象。 - 第二种协议
它允许一个进程只获得运行初期所需的资源后,便开始运行。运行过程中再逐步释放已分配给自己的、且已用毕的资源,然后再请求新的所需要的资源。
- 第一种协议
-
破坏“不可抢占”条件
当请求资源得不到满足时,释放自己已经保持的资源,待需要时再重新申请。 -
破坏“循环等待”条件
将资源线性排序,并赋予不同的序号。然后规定:每个进程必须按序号递增的顺序请求资源。例如,一个进程开始后,可以请求某类资源Ri的单元,以后当且仅当F(Rj)>F(Ri)时,进程才可以请求资源Rj的单元。 -
产生死锁的原因
-
因为系统资源不足
-
进程运行推进的顺序不合适
-
资源分配不当。
-
避免死锁
利用银行家算法避免死锁,最具有代表性的避免死锁的算法是Dijkstra的银行家算法。
银行家算法中的数据结构:- 可利用资源向量Available。
- 最大需求资源MAX。
- 以分配资源Allocation。
- 还需要的资源Need。
Need = Max - Allocation。
-
银行家算法的举例
这里有一个链接:http://www.cnblogs.com/xuxu8511/archive/2012/04/06/2435053.html
讲的比较详细。