进程调度:系统按照某种算法,动态的把处理机分配给就绪队列中的进程或线程,使之运行。
死锁:在多个进程并发执行中,某进程申请的资源被其他等待进程占有,如果该等待进程永远无法改变其等待状态,这种情况称之为死锁。
安全序列:系统中所有进程能够按照某一种次序合理分配资源,并且依此地运行完毕。所有进程完成次序的全集就是安全序列。
资源分配图:所谓资源分配图就是用有向图描述进程和资源的关系。
死锁定理:死锁定理:S为死锁状态的充分必要条件是当且仅当S状态的资源分配图是不可化简的。
饥饿:在多个进程并发执行中,某进程申请的资源被其他等待进程占有,如果该等待进程长期无法改变其等待状态,这种情况称之为饥饿。
鸵鸟算法:鸵鸟算法就是像鸵鸟一样对死锁视而不见的算法。
1.常用的调度算法有那些?在抢占调度方式中,抢占的原则是什么?
先来先服务调度算法、最高响应比优先算法、时间片轮转法、优先级算法、多级队列算法等。
优先级原则和时间片原则。
2.请解释什么是先来先服务算法、时间片轮转法和优先级算法?有什么用途?
(1)先来先服务调度算法,总是把处理机分配给最先进入就绪队列的进程或线程。该算法适合于进程调度、线程调度、任务调度、作业调度和其它资源调度等。
(2)时间片轮转法调度算法是专门为分时系统而设计的,时间片轮转算法主要用于微观调度。时间片轮转法属于抢占方式算法,该算法适合于线程调度、进程调度或任务调度。
(3)优先级算法(Highest Priority First---HPF)总是把处理机分配给就绪队列中具有最高优先级的进程,优先级算法即人们经常讲的“急事先办”,需要考虑,以下因素,如进程时间极限、内存要求、打开文件的数量等。该算法是常用调度算法,适合于进程调度、线程调度、任务调度、作用调度和资源调度等。
3.多级队列算法的基本思想是什么?
多级队列算法(Multiple—level Queue,MLQ)是先来先服务算法、时间片轮转算法和优先级算法的综合。其基本思想是将就绪队列分成多个独立队列,根据进程的某些属性确定进程的优先级,如系统进程、用户交互进程、I/O进程、计算进程等。相同优先级的进程按FIFO原则排成一个队列,按时间片轮转算法分派CPU。不同队列可有不同的优先级、不同的时间片长度。在多级队列算法中,优先调度优先级高的队列,当优先级高的队列为空时,才可以调度下一级队列,依次类推,同一队列按时间片轮转算法分派CPU。
4.在批处理系统、分时系统和实时系统中,各采用哪几种进程调度算法?
在批处理系统中,可采用先来先服务调度算法、短作业优先调度算法、非抢占式优先级调度算法、高响应比优先调度算法等作业调度算法;
对于分时系统和实时系统的进程调度,则可采用时间片轮转调度算法和优先级调度算法。
5.何谓静态优先级和动态优先级?确定优先级的依据是什么?
(1)静态优先级是指在创建进程时确定进程优先级,并一直保持到进程结束,即“终生”不变。影响进程的静态优先级的主要因素包括进程的资源需要和用户要求。
(2)动态优先级是指在创建进程时赋予进程的优先级,在进程的生命内优先级可以动态的变化,在进程运行过程中可以自动改变优先级,以便获得更好的调动性能,影响进程动态优先权变化的因素包括进程等待时间和占用处理机时间等,一个进程在就绪队列中等待的时间越长,它的优先级会越高。
6.何谓死锁?产生死锁的原因是什么?
在多个进程并发执行中,某进程申请的资源被其他等待进程占有,如果该等待进程永远无法改变其等待状态,这种情况称之为死锁。
产生死锁的原因是:①资源不足,引起资源竞争;②进程推进顺序不合理。
7.什么是产生死锁的必要条件?
⑴互斥条件。进程要求对所分配的资源进行排他性使用,即在一段时间内某资源仅为一个进程所占用。
⑵不剥夺条件。进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放。
⑶请求和保持条件。进程每次申请所需要的一部分资源,在等待新资源的同时,进程继续占有已分配到的资源。
⑷循环等待条件。存在进程资源的循环等待链,链中的每一个进程已获得资源,同时被链中的下一个进程所请求。
8.预防死锁的有几种方法?
(1)摒弃请求和保持条件
(2)摒弃不剥夺条件
(3)摒弃环路等待条件
(4)摒弃互斥条件
9.在解决死锁问题的几个方法中,哪种方法最易于实现?哪种方法使资源利用率最高?
在解决死锁问题的四种方法中,死锁预防最容易实现,而死锁的检测和解除方法可使系统的资源利用率最高。
10.银行家算法主要思路是什么?它能够用来解决实际中的死锁问题吗?为什么?
银行家算法是指银行家在向顾客贷款时如何保证资金的安全。假设一个银行家把他的流动资金贷给若干顾客时,只要存在顾客使用资金的安全序列,银行家的资金就是安全的,银行家需要一个算法保证借出去的资金可在有限时间内收回。
银行家算法具有较好的理论意义,但在实际系统中难以实施,实施代价太大。其原因是难以预见获得进程申请的最大资源数,进程运行过程的个数是不断变化的。所以银行家算法难以用来解决实际中的死锁问题。
11.如何对资源分配图化简?
通过对进程请求的资源进行分析,若有可用资源时,可使其请求边改为分配边。当某一进程全部是分配边没有请求边时,可以认为该进程在一有限时间内完成并将释放所有资源,因而将所有指向该进程的分配边“抹去”,成为孤立结点。这种将一个资源分配图上各个结点逐个化为孤立结点的过程称之为简化过程。
12.什么是鸵鸟算法?有实用价值吗?
(1)鸵鸟算法就是像鸵鸟一样对死锁视而你见的算法。
(2)从数学的角度看,不管花费多大的代价也要防止死锁,从工程角度看,需要考虑其它因素一起决策,如死锁的频率,死锁的后果和危害,如果平均一年发生一次死锁,不管花费多大的代价也要防止死锁的决策就是错误的,如果平均5min发生一次死锁,不管花费多大代价也要防止死锁的决策就是正确的。
13.为什么说多级反馈队列调度算法能较好地满足各种类型用户的需要?
多级反馈队列调度算法适合于该算法适合于线程调度、进程调度或任务调度。多级反馈队列调度算法是自适应算法,能交好地满足各类型用户的需要。对终端型用户而言,由于他们所提到的大多属于交互型进程,进程通常比较短小;对于短进程用户而言,在第一个队列中执行一个时间片即可完成;对于稍长的进程,通常也只需要在前第几个队列中各执行几个时间片即可完成,其周转时间仍然较短;对于长进程而言,长进程将依次在第1,2,……,直到第n个队列中运行,然后再按轮转方式运行,用户不必担心其进程长期得不到处理。
14.将一组进程按优先级分为4类,如图4-11所示,各类进程之间采用优先级调度,而同类进程采用时间片轮转法调度。请简述P1、P2、P3、P4、P5、P6、P7、P8进程的调度过程。
图4-11优先级示意图
按优先级原则,调度优先级为4的P1和P2,进程P1和P2按时间片轮转法分派CPU,待进程P1和P2执行完毕;再调度优先级为3的P3、P4、P5,进程P3、P4、P5按时间片轮转法分派CPU,待进程 P3、P4、P5执行完毕;再调度优先级为2的P6、P7、P8,进程P6、P7、P8按时间片轮转法分派CPU,待进程P6、P7、P8执行完毕,调度完毕。
15.若系统运行中出现如表4-8所示的资源分配情况,该系统是否安全?如果进程P2此时提出资源申请(1,2,2,2),系统能否将资源分配给它?为什么?
资源情况 进程 | Allocation | Need | Available |
P0 | 0 0 3 2 | 0 0 1 2 | 1 6 2 2(0400) |
P1 | 1 0 0 0 | 1 7 5 0 |
|
P2 | 1 3 5 4(2576) | 2 3 5 6(1134) |
|
P3 | 0 3 3 2 | 0 6 5 2 |
|
P4 | 0 0 1 4 | 0 6 5 6 |
|
表4-8资源分配情况
找到一个安全序列{ P0, P3,P4,P1,P2 },系统是安全的。
进程P2此时提出资源申请(1,2,2,2),不能找到安全序列,所以系统进入不安全状态,P2的请求不能分配。
16.一台计算机有8台磁带机,他们由N个进程竞争使用,每个进程可能需要3台磁带机。请问N为多少时,系统没有死锁危险,并说明原因。
N=3、N=2、N=1时,系统没有死锁危险。
原因:当N=4时,如果每个进程已经分配2台磁带机时,不能找到安全序列,系统有死锁危险。
17.试化简资源分配图,并利用死锁定理给出相应的结论。
图4-12资源分配图
①资源分配图不能化简,死锁。
②资源分配图可以化简,没有死锁险。
18.如何理解进程共享资源的三个层次(互斥、死锁和饥饿)?
多个进程共享资源的程度可以分成以下三个层次:互斥、死锁和饥饿。互斥是指多个相关进程中只允许一个进程访问临界资源,这是正确使用资源的最基本要求。防止死锁是指避免多个进程互不相让,都得不到足够的资源的情况出现,从而保证系统功能的正常运行。避免饥饿是指避免某些进程一直得不到资源或得到资源的概率很小,从而保障系统内资源使用的公平性。
19.简述处理死锁综合措施?
(1)内部资源系统本身使用的资源,如I/O通道,进程控制块,设备控制块,系统保留区等。对内部资源通道破坏循环等待条件,既对此资源使用有序资源分配法预防死锁。
(2)内存资源可以按帧或段分配给进程的存储空间,对内存有实行剥夺方法预防死锁是最合适的策略,当一个进程被剥夺后,它仅仅被换到外存释放空间以解决死锁。
(3)进程资源用于进程的可分配设备,如打印机,文件等,对这类资源死锁避免策略常常是很有效的,这是因为进程可以事先声明他们将需要这类资源,也可以采用有序资源分配法预防策略。
(4)交换空间进程交换所使用的外存交换区,通过要求一次性分配所有请求的资源来预防死锁,也可以采用死锁避免措施。
20.解除死锁的常用办法有哪些?
①系统重新启动。
②撤消进程。最简单的撤消方法是将所有死锁的进程都撤销。稍微温和一些的方法是按照某种顺序逐个的撤消进程,直至有足够的资源可用,把死锁状态消除为止。在出现死锁时,可采用各种策略来撤消进程,以撤消进程所花代价最小来解除死锁的方法是解除死锁的常用方法。
③剥夺资源。从其他进程中剥夺资源,以满足死锁进程的需要,使之逐个脱离死锁状态。