一、进程同步
1、设有两个进程P、Q,P的优先级高于Q,同时进入就绪队列。各自运行的程序段如下所示:
进程P |
进程Q |
P1 Y=12 |
Q1 X=18 |
P2 Y=A+Y |
Q2 A=X+A |
P3 P(S1) |
Q3 V(S1) |
P4 A=Y+X |
Q4 X=A+Y |
P5 V(S2) |
Q5 P(S2) |
P6 X=Y+A |
Q6 A=X-Y |
其中S1、S2为信号量,初值为0;已知X、Y、A为共享变量,X的初值为83,Y的初值为35,A的初值为38;若调度程序执行的策略为抢占式优先权原则,试问:
(1) 执行序列?
(2) 变量X、Y、A的运行结果依次是?
解析:
(1) 执行序列:
P1 P2 P3 Q1 Q2 Q3 P4 P5 P6 Q4 Q5 Q6
(2) 运行结果:X=118,Y=50,A=68
执行序列 |
运行过程 |
P1 |
Y=12 |
P2 |
Y=A+Y=38+12=50 |
P3 |
P(S1),所以S1=-1<0,block |
Q1 |
X=18 |
Q2 |
A=X+A=18+38=56 |
Q3 |
V(S1),所以S1=0≤0,wake up,P>Q |
P4 |
A=Y+X=50+18=68 |
P5 |
V(S2),S2=1,go on |
P6 |
X=Y+A=50+68=118 |
Q4 |
X=A+Y=68+50=118同上 |
Q5 |
P(S2),S2=0,go on |
Q6 |
A=X-Y=118-50=68 |
2、若调度程序执行的策略为非抢占式优先权原则
(1) 执行序列
(2) 变量X、Y、A的运行结果依次是
解析:
(1) 执行序列:
P1 P2 P3 Q1 Q2 Q3 Q4 Q5 P4 P5 P6 Q6
(2) 运行结果:X=206 Y=50 A=156
执行序列 |
运行过程 |
P1 |
Y=12 |
P2 |
Y=A+Y=38+12=50 |
P3 |
P(S1),所以S1=-1<0,block |
Q1 |
X=18 |
Q2 |
A=X+A=18+38=56 |
Q3 |
V(S1),所以S1=0≤0,wake up,go on |
Q4 |
X=A+Y=56+50=106 |
Q5 |
P(S2),S2=-1<0,block |
P4 |
A=Y+X=50+106=156 |
P5 |
V(S2),S2=0<=0,wake up,go on |
P6 |
X=Y+156=50+156=206 |
Q6 |
A=X-Y=206-50=156 |
二、时间片轮转
1、设有5个进程P1、P2、P3、P4、P5,它们到达时间和要求服务时间如下表(单位为ms),请按时间片轮转调度算法完成,时间片大小为3。
Process |
P1 |
P2 |
P3 |
P4 |
P5 |
到达相对时刻 |
0 |
3 |
5 |
9 |
13 |
执行或服务时间 |
7 |
6 |
10 |
8 |
2 |
(1) 写出进程的实际调度序列:
(2) 计算平均带权周转时间(结果保留两位小数):
解析:
(1) 进程的调度序列:
P1 P2 P1 P3 P2 P4 P1 P3 P5 P4 P3 P4 P3
(2) 平均带权周转时间:
(2.7+2+2.8+2.9+5.5)÷5 = 15.9÷5 = 3.18
就绪队列 |
P1 |
P2 |
P1 |
P3 |
P2 |
P4 |
P1 |
P3 |
P5 |
P4 |
P3 |
P4 |
P3 |
执行队列 |
P1 3 |
P2 6 |
P1 9 |
P3 12 |
P2 15 |
P4 18 |
P1 19 |
P3 22 |
P5 24 |
P4 27 |
P3 30 |
P4 32 |
P3 33 |
Process |
P1 |
P2 |
P3 |
P4 |
P5 |
到达相对时刻 |
0 |
3 |
5 |
9 |
13 |
执行或服务时间 |
7 |
6 |
10 |
8 |
2 |
完成时间 |
19 |
15 |
33 |
32 |
24 |
周转时间 |
19 |
12 |
28 |
23 |
11 |
带权周转时间 |
19/7 |
12/6=2 |
28/10=2.8 |
23/8 |
11/2=5.5 |
三、银行家算法
1、假定系统中有5个进程(P0,P1,P2,P3,P4)和4种类型的资源(A,B,C,D),全部资源的数量(Vector)为(3,12,14,14);在T0时刻的资源分配情况如下表:
Process |
Max |
Allocation |
||||||
A |
B |
C |
D |
A |
B |
C |
D |
|
P0 |
0 |
0 |
4 |
4 |
0 |
0 |
3 |
2 |
P1 |
2 |
7 |
5 |
0 |
1 |
0 |
0 |
0 |
P2 |
3 |
5 |
9 |
8 |
1 |
3 |
4 |
4 |
P3 |
0 |
8 |
8 |
4 |
0 |
3 |
3 |
2 |
P4 |
0 |
6 |
6 |
11 |
0 |
0 |
1 |
4 |
(1) 此时系统中的可利用资源向量ABCD为?
(2) 用银行家算法判断T0时刻系统状态是否安全?如为安全状态,请写出按照P0-P4循环的安全序列。
(3) 若进程P2提出请求 Request(0,1,1,0),系统能否将资源分配给它?
解析:
Process |
Max |
Allocation |
Need |
Available |
||||||||||||
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
|
P0 |
0 |
0 |
4 |
4 |
0 |
0 |
3 |
2 |
0 |
0 |
1 |
2 |
1 |
6 |
3 |
2 |
P1 |
2 |
7 |
5 |
0 |
1 |
0 |
0 |
0 |
1 |
7 |
5 |
0 |
|
|
|
|
P2 |
3 |
5 |
9 |
8 |
1 |
3 |
4 |
4 |
2 |
2 |
5 |
4 |
|
|
|
|
P3 |
0 |
8 |
8 |
4 |
0 |
3 |
3 |
2 |
0 |
5 |
5 |
2 |
|
|
|
|
P4 |
0 |
6 |
6 |
11 |
0 |
0 |
1 |
4 |
0 |
6 |
5 |
7 |
|
|
|
|
Need(Pi) = Max(Pi)-Allocation(Pi)
(1) 系统中可利用资源向量ABCD:
Vector(3,12,14,14)-Allocation(2,6,11,12)=Available(1,6,3,2)
(2) T0时刻系统的安全性:
Process |
Allocation |
Need |
Work+Allocation |
Finish |
|||||||||
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
||
P0 |
0 |
0 |
3 |
2 |
0 |
0 |
1 |
2 |
1 |
6 |
6 |
4 |
true |
P3 |
0 |
3 |
3 |
2 |
0 |
5 |
5 |
2 |
1 |
9 |
9 |
6 |
true |
P1 |
1 |
0 |
0 |
0 |
1 |
7 |
5 |
0 |
2 |
9 |
9 |
6 |
true |
P2 |
1 |
3 |
4 |
4 |
2 |
2 |
5 |
4 |
3 |
12 |
13 |
10 |
true |
P4 |
0 |
0 |
1 |
4 |
0 |
6 |
5 |
7 |
3 |
12 |
14 |
14 |
true |
令Work=Available(1,6,3,2)
用安全性算法对T0时刻的资源分配进行分析,存在一个安全序列:P0 P3 P1 P2 P4。所以此刻系统是安全的。
(3) 进程P2提出请求 Request(0,1,1,0),系统按银行家算法进行检查:
① Request1(0,1,1,0)≤Need2(2,2,5,4)
② Request1(0,1,1,0)≤Work(1,6,3,2)
③ 系统假定为进程P2分配资源,并修改Allocation2、Need2、Available2的值
Process |
Max |
Allocation |
Need |
Available |
||||||||||||
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
|
P0 |
0 |
0 |
4 |
4 |
0 |
0 |
3 |
2 |
0 |
0 |
1 |
2 |
1 |
5 |
2 |
2 |
P1 |
2 |
7 |
5 |
0 |
1 |
0 |
0 |
0 |
1 |
7 |
5 |
0 |
|
|
|
|
P2 |
3 |
5 |
9 |
8 |
1 |
4 |
5 |
4 |
2 |
1 |
4 |
4 |
|
|
|
|
P3 |
0 |
8 |
8 |
4 |
0 |
3 |
3 |
2 |
0 |
5 |
5 |
2 |
|
|
|
|
P4 |
0 |
6 |
6 |
11 |
0 |
0 |
1 |
4 |
0 |
6 |
5 |
7 |
|
|
|
|
④ 再用安全性算法检查此时系统是否安全
Process |
Allocation |
Need |
Work+Allocation |
Finish |
|||||||||
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
C |
D |
||
P0 |
0 |
0 |
3 |
2 |
0 |
0 |
1 |
2 |
1 |
5 |
5 |
4 |
true |
P3 |
0 |
3 |
3 |
2 |
0 |
5 |
5 |
2 |
1 |
8 |
8 |
6 |
true |
P1 |
1 |
0 |
0 |
0 |
1 |
7 |
5 |
0 |
2 |
8 |
8 |
6 |
true |
P2 |
1 |
4 |
5 |
4 |
2 |
1 |
4 |
4 |
3 |
12 |
13 |
10 |
true |
P4 |
0 |
0 |
1 |
4 |
0 |
6 |
5 |
7 |
3 |
12 |
14 |
14 |
true |
此时存在一个安全序列:P0 P3 P1 P2 P4。所以系统可以将资源分配给进程P2。
四、Clock 页面置换算法
1、在请求分页系统中,假设系统为进程P分配4个物理块,并将页面5,7,3预先装入主存且访问位A为1,0,0;页面访问串如下,采用Clock页面置换算法。(说明:地物理地址优先,替换指针开始指向最低地址的物理块。)
6,5,2,5,6,3,0,5,6,1,0,7,6,5,2
(1) 缺页中断次数____次。
(2) 页面置换次数____次,依次被置换的页面为___(页号之间不留空格),最后主存中的页面P及对应的访问位A的值(用PA形式表示,如51)_____。
解析:
|
6 |
5 |
2 |
5 |
6 |
3 |
0 |
5 |
6 |
1 |
0 |
7 |
6 |
5 |
2 |
5 1 * |
5 |
5 1 |
5 1 |
5 1 |
5 1 |
5 1 * |
0 1 |
0 1 |
0 1 |
0 1* |
0 1* |
7 1 |
7 1 |
7 1 |
7 1 * |
7 |
6 1 |
6 1 |
6 1 |
6 1 |
6 1 |
6 1 |
6 * |
5 1 |
5 1 |
5 1 |
5 1 |
5 * |
5 * |
5 1 * |
5 |
3 |
3 * |
3 * |
2 1 |
2 1 |
2 1 |
2 1 |
2 |
2 * |
6 1 |
6 1 |
6 1 |
6 |
6 1 |
6 1 |
6 |
* |
* |
* |
** |
** |
** |
3 1 |
3 |
3 |
3 * |
1 1 |
1 1 |
1 |
1 |
1 |
2 1 |
缺页 |
√ |
|
√ |
|
|
√ |
√ |
√ |
√ |
√ |
|
√ |
|
|
√ |
置换 |
7 |
|
3 |
|
|
无 |
5 |
6 |
2 |
3 |
|
0 |
|
|
1 |
(1) 缺页中断次数:9
(2) 页面置换次数:8
依次被置换的页面:73562301
最后主存中的页面P及对应的访问位A的值:
71 50 60 21
五、磁盘调度算法
1、设系统已完成某进程对103#磁道的访问请求,正在为访问107#磁道的请求者服务,还有若干进程在等待服务,它们依次请求访问的磁道号队列(FIFO)为:
117,133,217,161,206,223,101,187,136,24,80,15,81,82,284,143,95,77,235,50,184
(1) 采用N-Step-SCAN(N=9)磁盘调度算法时,写出磁道访问序列
(2) 计算平均寻道长度ASL(保留两位小数)
解析:
(1) 磁道访问序列:107# -> 117 -> 133 -> 136 -> 161 -> 187 -> 206 -> 217 -> 223 -> 101-> 95 -> 82 -> 81 -> 80 -> 77 -> 24 -> 15 -> 143 -> 284 -> 235 -> 184 -> 50
(2) 平均寻道长度:827/21=39.38
因为N=9,即每个子队列的长度为9;SCAN算法磁头双向移动
第一个子队列的访问序列:
107# -> 117 -> 133 -> 136 -> 161 -> 187 ->
206 -> 217 -> 223 -> 101
第二个子队列的访问序列:
-> 95 -> 82 -> 81 -> 80 -> 77 -> 24 -> 15 ->
143 -> 284
第三个子队列的访问序列:
-> 235 -> 184 -> 50
寻道总长度:223-107+223-15+284-15+284-50=1014-187=827
2、设系统已完成某进程对188#磁道的访问请求,正在为访问129#磁道的请求者服务,还有若干进程在等待服务,它们依次请求访问的磁道号序列(FIFO)为:
284,33,197,23,281,188,113,12,160,179,91,
293,235,161,278,146,151,100,157,44
(1) 采用N-Step-CSCAN(N=9)磁盘调度算法时,写出磁道访问序列
(2) 计算平均寻道长度ASL(保留两位小数)
解析:
(1) 磁道访问序列:129# -> 113 -> 33 -> 23 -> 12 -> 284 -> 281 -> 197 -> 188 -> 160-> 151 -> 146 -> 100 -> 91 -> 293 -> 278 -> 235 -> 179 -> 161-> 157 -> 44
(2) 平均寻道长度:1033/20=51.65
因为N=9,即每个子队列的长度为9;CSCAN算法磁头单向移动
第一个子队列的访问序列:
129# -> 113 -> 33 -> 23 -> 12 -> 284 -> 281 -> 197 -> 188 -> 160
第二个子队列的访问序列:
-> 151 -> 146 -> 100 -> 91 -> 293 -> 278 ->
235 -> 179 -> 161
第三个子队列的访问序列:
-> 157 -> 44
寻道总长度:129-12+284-12+284-91+293-91+293-44=1283-250=1033