处理机调度与死锁作业
-
为什么说多级反馈队列调度算法能较好地满足各方面用户的需要?
(1)终端型用户:由于终端型用户提交的作业多属于交互型作业,通常较小,系统只要能使这些作业在第一队列规定的时间片内完成,便可使终端型用户感到满意。
(2)短批处理作业用户:对于这类作业,如果可在第一队列中执行完成,便可获得于终端型作业一样的响应时间。对于稍长的短作业,也只需要在第二第三队列各执行一时间片即可完成,其周转时间仍然很短。
(3)长批处理作业用户:对于长作业,它将依次在1,2,,,,n个队列中运行,然后再按照轮转方式运行,用户不必担心其作业长期得不到处理。
2.何谓死锁? 产生死锁的原因和必要条件是什么?
(1)如果一组进程中每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的。
(2)原因:竞争不可抢占性资源、竞争可消耗资源、进程推进顺序不当
(3)必要条件:
a)互斥条件:在一段时间内,某资源只能被一个进程占用。
b)请求和保持条件:进程已经保持了一个资源,但又提出新的资源请求,而该资源已被其他进程占有,此时请求进程阻塞,但对自己已获得的资源仍不释放。
c)不可抢占条件:已获得的资源未使用完不可抢占,只能进程完成时自己释放。
d)循环等待条件:在发生死锁时,必然存在一个进程——资源的循环链。
-
考虑下面的系统场景:
-
Allocation
Max
Available
A
B
C
D
A
B
C
D
A
B
C
D
P0
2
0
0
1
4
2
1
2
3
3
2
1
P1
3
1
2
1
5
2
5
2
P2
2
1
0
3
2
3
1
6
P3
1
3
1
2
1
4
2
4
P4
1
4
3
2
3
6
6
5
根据银行家算法回答以下问题:
a、 找到进程可能执行完成的一个安全序列,说明系统处于安全状态。
b、来自进程P1的请求到达(1,1,0,0),该请求能否立即被批准?
c、来自进程P4的请求到达(0,0,2,0),可以立即批准该请求吗?
3
a) 找到进程可能执行完成的一个安全序列,说明系统处于安全状态。
安全性检查:
Work |
Need |
Allocation |
Work+Allocation |
Finish |
|||||||||||||
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
||
P0 |
3 |
3 |
2 |
1 |
2 |
2 |
1 |
1 |
2 |
0 |
0 |
1 |
5 |
3 |
2 |
2 |
True |
P3 |
5 |
3 |
2 |
2 |
0 |
1 |
1 |
2 |
1 |
3 |
1 |
2 |
6 |
6 |
3 |
4 |
True |
P1 |
6 |
6 |
3 |
4 |
2 |
1 |
3 |
1 |
3 |
1 |
2 |
1 |
9 |
7 |
5 |
5 |
True |
P2 |
9 |
7 |
5 |
5 |
0 |
2 |
1 |
3 |
2 |
1 |
0 |
3 |
11 |
8 |
5 |
8 |
True |
P4 |
11 |
8 |
5 |
8 |
2 |
2 |
3 |
3 |
1 |
4 |
3 |
2 |
12 |
12 |
8 |
10 |
True |
可能找到的安全队列为<P0,P3,P1,P2,P4>。将资源<A,B,C,D>分别拿出<2,2,1,1>给P0,使之继续进行,待P0完成后释放资源,可用资源数为<5,3,2,2>,拿出资源<0,1,1,2>给P3,使之继续运行,P3完成后释放资源,可用资源数为<6,6,3,4>,拿出资源<2,1,3,1>给P1,使之继续运行,P1完成后释放资源,可用资源数为<9,7,5,5>,拿出资源<2,1,0,3>给P2,使之继续运行,P2完成后释放资源,可用资源数为<11,8,5,8>,拿出资源<1,4,3,2>给P4,使P4能够运行完成,从而使P1,P2,P3,P4每一个进程都能顺利完成,因此处于安全状态。
b)来自进程P1的请求到达(1,1,0,0),该请求能否立即被批准?
Request(1,1,0,0)<=Need(2,1,3,1)
Request(1,1,0,0)<=Available(3,3,2,1)
系统假定可为P1分配资源,并修改Available,Allocation和Need的数值分别为(2,2,2,1),(4,2,2,1),(1,0,3,1);
再利用安全性检查算法检查此时的系统安全:
Work |
Need |
Allocation |
Work+Allocation |
Finish |
|||||||||||||
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
||
P0 |
2 |
2 |
2 |
1 |
2 |
2 |
1 |
1 |
2 |
0 |
0 |
1 |
4 |
2 |
2 |
2 |
True |
P3 |
4 |
2 |
2 |
2 |
0 |
1 |
1 |
2 |
1 |
3 |
1 |
2 |
5 |
5 |
3 |
4 |
True |
P1 |
5 |
5 |
3 |
4 |
1 |
0 |
3 |
1 |
4 |
2 |
2 |
1 |
9 |
7 |
5 |
5 |
True |
P2 |
9 |
7 |
5 |
5 |
0 |
2 |
1 |
3 |
2 |
1 |
0 |
3 |
11 |
8 |
5 |
8 |
True |
P4 |
11 |
8 |
5 |
8 |
2 |
2 |
3 |
3 |
1 |
4 |
3 |
2 |
12 |
12 |
8 |
10 |
True |
安全队列为(P0,P3,P1,P2,P4)处于安全状态
综上所述,请求可以被立即批准
c)来自进程P4的请求到达(0,0,2,0),可以立即批准该请求吗?
Request(0,0,2,0)<=Need(2,2,3,3)
Request(0,0,2,0)<=Avialiable(3,3,2,1)
系统假定可为P4分配资源,并修改Available,Allocation和Need的数值分别为(3,3,0,1),(1,4,5,2)(2,2,1,3);
再利用安全性检查算法检查此时的系统安全:
Work |
Need |
Allocation |
Work+Allocation |
Finish |
|||||||||||||
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
||
P0 |
3 |
3 |
0 |
1 |
2 |
2 |
1 |
1 |
2 |
0 |
0 |
1 |
False |
||||
P1 |
3 |
3 |
0 |
1 |
2 |
1 |
3 |
1 |
3 |
1 |
2 |
1 |
False |
||||
P2 |
3 |
3 |
0 |
1 |
0 |
2 |
1 |
3 |
2 |
1 |
0 |
3 |
False |
||||
P3 |
3 |
3 |
0 |
1 |
0 |
1 |
1 |
2 |
1 |
3 |
1 |
2 |
False |
||||
P4 |
3 |
3 |
0 |
1 |
2 |
2 |
1 |
3 |
1 |
4 |
5 |
2 |
False |
所有的进程Finish都为False,因此所有进程都没有分配到资源,系统处于不安全状态。
综上所述不能立即批准该请求
|
Work |
Need |
Allocation |
Work+Allocation |
Finish |
||||||||||||
|
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
|
P0 |
3 |
3 |
0 |
1 |
2 |
2 |
1 |
1 |
2 |
0 |
0 |
1 |
|
|
|
|
False |
P1 |
3 |
3 |
0 |
1 |
2 |
1 |
3 |
1 |
3 |
1 |
2 |
1 |
|
|
|
|
False |
P2 |
3 |
3 |
0 |
1 |
0 |
2 |
1 |
3 |
2 |
1 |
0 |
3 |
|
|
|
|
False |
P3 |
3 |
3 |
0 |
1 |
0 |
1 |
1 |
2 |
1 |
3 |
1 |
2 |
|
|
|
|
False |
P4 |
3 |
3 |
0 |
1 |
2 |
2 |
1 |
3 |
1 |
4 |
5 |
2 |
|
|
|
|
False |