目录
一、 P、V操作 1
二、 银行家问题 15
三、 页面置换算法 23
四、 磁盘调度 28
五、 逻辑地址转换物理地址 30
六、 进程状态转换 33
七、 作业调度 34
一、P、V操作
1、在南开大学和天津大学之间有一条弯曲的小路,其中从 S 到 T 一段路每次只允许一辆自行车通过,但中间有一个小的“安全岛” M (同时允许两辆自行车停留),可供两辆自行车已从两端进小路情况下错车使用,如图所示。试设计一个算法使来往的自行车均可顺利通过。
答:首先中间的安全岛 M 仅允许两辆自行车通过,应作为临界资源设置信号量。但仔细分析发现,在任何时刻进入小路的自行车最多不会超过两辆(南开和天大方向各一辆),因此不需为安全岛 M 设置信号量。在路口 S 处,南开出发的若干辆自行车应进行路口资源的争夺,以决定谁先进入小路 SK 段,为此设置信号量 S ,用以控制路口资源的争夺;同理,设置信号量 T ,控制天大方向自行车对路口 T 的争夺。又小路 SK 段仅允许一辆车通过,设置信号量 SK 初值为 1 ,同理设置小路 LT 段信号量 LT 初值为 1 。
程序如下:
S : = l; T : =1; SK := 1; LT : =1 ;
Parbegin
进程 P: (南开方向自行车)
begin
P(S) ; { 与其它同方向的自行车争夺路口 S}
P(SK); {同对面自行车争夺路段 SK }
通过 SK;
进入 M ; **
V (SK); {一旦进入 M ,便可释放路段 SK }
P (LT) ; { 同对面的自行车争夺路段 LT}
通过 LT;
V (LT) ;{将路段 LT 释放}
V(S); {将路口 S 释放给同方向的正在路口 S 处等待的自行车}
end ,
进程 Q: (天大方向自行车)
begin
P(T) ;
P(LT) ;
通过 LT;
进入 M;
V(LT) ;
P(SK) ;
通过 SK;
V(SK) ;
V(T) ;
End ;
Parend 。
说明:
P 进程进入安全岛 M 后,释放了路段 SK ,但没有释放路口 S ,原因在于它是向对面的 4 进程释放路段资源 SK ,而在 P 进程离开小路 LT 后,才会将路口 S 释放给其他 P 进程,如不这样,就会死锁。请考虑如下情况:两个方向各有一辆车前进,若在 P 进程到达安全岛 M 后,执行 V (S) 及 V (SK) 操作,则有可能使得同方向的其它 P 进程得到路段 SK 的使用权,而进入小路;同理, Q 进程到达安全岛后执行 V (LT) 及 V (T) 操作,有可能使得同方向的其它 Q 进程得到路段 LT 而进入小路。此时共有四辆车在整个路径中,最终出现死锁状态。
2、某寺庙,有小、老和尚若干,有一水缸,由小和尚提水 入 缸(向缸中倒水)供老和尚饮用。水缸可容 10 桶水,水取自同一井中。水井径窄,每次只能容一个捅取水。水桶总数为 3 个。每次人、取缸水仅为 1 桶,且不可同时进行。试给出有关从缸中取水和向缸中倒水的算法描述。
答:应首先考虑清楚本题需要几个进程。从井中取水后向缸中倒水为连续动作,可算同一进程,从缸中取水为另一进程。
再考虑信号量.有关互斥的资源有水井(一次仅一个水桶进出)和水缸(一次入、取水为一桶),分别为之设信号量 mutexl , mutex2 控制互斥;
另有同步问题存在:三个水桶无论从井中取水还是人出水缸都是一次一个,应为之设信号量 count ,抢不到水桶的进程只好等待;还有水缸满时,不可人水,设信号量 empty 控制入水量.水缸空时不可出水,设信号量 full ,控制出水量。
mutexl := 1 ; mutex 2 : = 1; empty: = 10; full := 0 ; count := 3;
parbegin
入水 : begin
Ll: P(empty) ;
P( count) ;
P (mutexl) ;
从井中取水;
V(mutext1);
P(mutex2);
送入水缸;
V(mutex2);
V(count);
V(full) ;
Goto Ll ;
End;
取水: begin
L2: P(full) ;
P(count);
P(mutex2) ;
从缸中取水;
V (mutex2) ;
V(empty);
V(count) ;
Goto L2 ;
End;
Parend.
3、桌子上有一只盘子,最多可容纳两个水果,每次只能放 入 或取出一个水果。爸爸专向盘子中放苹果( apple ),妈妈专向盘子中放橘子( orange ),两个儿子专等吃盘子中的橘子,两个女儿专等吃盘子中的苹果。请用 P, V 操作来实现爸爸、妈妈、儿子、女儿之间的同步与互斥关系。
答:盘子为互斥资源,因可以放两个水果, empty 初值为 2; father 放苹果前先看看有无空间,若有则抢盘子,放 apple 。后向女儿发信号( V (apple) ) ; mother 放橘子前先看看有无空间,若有则抢盘子,放橘子后向儿子发信号( V (orange) );女儿先看有无苹果,若有则抢盘子,取走苹果后将盘子置空( V (empty) );儿子先看有无橘子,若有则抢盘子,取走橘子后将盘子置空。
该题是生产者/消费者问题的变形,有两对生产者和消费者。生产者需指明是给哪个消费者的产品,但消费者取走产品后无须特别通知某个生产者,因为空出的缓冲区(盘子)可由两个生产者随意争夺。
设信号量 mutex 初值为 1 ,控制对盘子的互斥访问; apple 表示盘中苹果个数, orange 表示盘中橘子个数,初值均为 0.
parbegin
father:
begin
Ll : P( empty) ;
P(mutex ) ;
放苹果;。
V (mutex) ;
V(apple) ;
Goto Ll ;
End;
mother:
begin
L2: P(empty) ;
P(mutex) ;
放橘子;
V (mutex ) ;
V(orange) ;
Coto L2;
End;
daughter:
begin
L3: P(apple) ;
P(mutex) ;
取苹果
V (mutex) ;
V(empty) ;
Goto L3 ;
End;
son:
begin
L4: P(orange);
P(mutex) ;
取橘子
V (mutex) ;
V (empty) ;
Goto L4 ;
End;
Parend
4、在 4 × 100 米 接力赛中, 4 个运动员之间存在如下关系,运动员 1 跑到终点把接力棒交给运动员 2 ;运动员 2 一开始处于等待状态,在接到运动员 1 传来的接力棒后才能往前跑,他跑完 100 米 后交给运动员 3 ,运动员 3 也只有在接到运动员 2 传来的棒后才能跑,他跑完 100 米 后交给运动员 4 ,运动员 4 接到棒后跑完全程。请试用信号量机制对其上过程进行分析。
答:P1: P2: P(Sl); P3: P(S2); P4: P(S3);
起跑,前进 l 00m ; 起跑,前进 l 00m ; 起跑,前进 l 00m ; 起跑,前进 l 00m ;
V(S1); V(S2); V(S3) ; 到达终点。
5、在公共汽车上,司机和售票员各行其职,司机负责开车和到站停车;售票员负责售票和开、关车门;当售票员关好车门后驾驶员才能开车行驶。试用 wait 和 signal 操作实现司机和售票员的同步。
问题描述:设公共汽车上,司机和售票员的活动分别如下:司机的活动:启动车辆:正常行车;到站停车。售票员的活动:关车门;售票;开车门。在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用信号量和 P 、 V 操作实现它们的同步。
问题分析:
在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开门让乘客上下车。因此,司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步。应设置两个信号量: S1 、 S2 ;
S1 表示是否允许司机启动汽车(其初值为 0 )
S2 表示是否允许售票员开门(其初值为 0 )
用 P 、 v 原语描述如下:
The P,V code Using Pascal
var S1,S2 : semaphore ;
S1=0 ; S2=0 ;
cobegin
procedure driver
begin
while TRUE
begin
P(S1);
Start;
Driving;
Stop;
v(S2);
end
end
procedure Conductor
begin
while TRUE
begin
关车门;
v(s1);
售票;
p(s2);
开车门;
上下乘客;
end
end
Coend
6、有一只铁笼子,每次只能放入一只动物,猎手向笼子里放入老虎,农民向笼子里放入猪;动物园等待取笼子里的老虎,饭店等待取笼子里的猪。现请用 wait 和 signal 操作写出能同步执行的程序。
var Sempty, Stiger, Spig,: semaphore:= 1,0,0;
begin
parbegin
Hunter: begin
repeat
wait(Sempty);
<put tiger in cage>;
signal(Stiger);
until false;
end;
Farmer: begin
repeat
wait(Sempty);
<put pig in cage>;
signal(Spig);
until false;
end;
Zoo: begin
repeat
wait(Stiger);
<take tiger>;
signal(Sempty);
until false;
end;
Hotel: begin
repeat
wait(Spig);
<take pig>;
signal(Sempty); until false;
end;
parend;
end;
7、假设有 3 个并发进程 P , Q , R ,其中 P 负责从输入设备上读入信息,并传送给 Q,Q 将信息加工后传送给 R , R 负责打印输出。进程 P , Q 共享一个有 m 个缓冲区组成的缓冲池;进程 Q , R 共享一个有 n 个缓冲区组成的缓冲池(假设缓冲池足够大,进程间每次传输信息的单位均小于等于缓冲区长度),请写出满足上述条件的并发程序。
答: var mutex1,mutex2,Sip,Siq,Soq,Sor:semaphore:=1,1,m,0,n,0;
begin
parbegin
Process P
begin
repeat
< 读入信息 >
wait(Sip);
wait(mutex1);
< 数据放入缓冲区 >
signal(mutex1);
signal(Siq);
until false
end;
Process Q
begin
repeat
wait(Siq);
wait(mutex1);
< 从缓冲区中取出数据 >
signal(mutex1);
signal(Sip);
< 数据处理〉
wait(Soq);
wait(mutex2);
< 处理后的数据放入缓冲区 >
signal(mutex2);
signal(Sor);
until false
end;
Process R
repeat
wait(Sor);
wait(mutex2);
< 把数据送入打印机完成打印 >;
signal(mutex2);
signal(Soq);
until false
end
parend
End
8、理发店里有一位理发师,一把理发椅和 n 把供等候理发的顾客坐的椅子。如果没有顾客,理发师便在理发椅上睡觉,当一个顾客到来时,他必须先叫醒理发师,如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,他们就坐下来等 ; 如果没有空椅子,他就离开。
1) 控制变量 waiting 用来记录等候理发的顾客数,初值均为 0 ;
2) 信号量 customers 用来记录等候理发的顾客数,并用作阻塞理发师进程,初值为 0 ;
3) 信号量 barbers 用来记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为 0 ;
4) 信号量 mutex 用于互斥,初值为 1
int waiting=0 ; // 等候理发的顾客数
int chairs=n ; // 为顾客准备的椅子数
semaphore customers=0, barbers=0,mutex=1;
cobegin
barber()
begin
while(TRUE); // 理完一人 , 还有顾客吗 ?
P(cutomers); // 若无顾客 , 理发师睡眠
P(mutex); // 进程互斥
waiting := waiting – 1; // 等候顾客数少一个
V(barbers); // 理发师去为一个顾客理发
V(mutex); // 开放临界区
cut-hair( ); // 正在理发
end
customer()
begin
P(mutex); // 进程互斥
if (waiting)
begin
waiting := waiting+1; // 等候顾客数加 1
V(customers); // 必要的话唤醒理发师
V(mutex); // 开放临界区
P(barbers); // 无理发师 , 顾客坐着养神
get-haircut( ); // 一个顾客坐下等理 /
end
else
V(mutex); // 人满了 , 走吧 !
end
Coend
9、有一阅览室,共有 100 个座位。读者进入时必须先在一种登记表上登记,该表为每一座位列一个表目,包括座号和读者姓名。读者离开时要注销掉登记内容。试用 wait 和 signal 原语描述读者进程的同步问题。
var mutex, readcount :semaphore := 1,100;
Begin
Parbegin
Process Reader:begin
repeat
wait(readcount);
wait(mutex);
< 填入座号和姓名完成登记 > ;
signal(mutex);
< 阅读 >
wait(mutex)
< 删除登记表中的相关表项,完成注销 >
signal(mutex);
signal(readcount);
until false;
end;
parend;
End;
10、假定系统有三个并发进程read, move和print共享缓冲器B1和B2。进程read负责从输入设备上读信息,每读出一个记录后把它存放到缓冲器B1中。进程move从缓冲器B1中取出一记录,加工后存入缓冲器B2。进程print将B2中的记录取出打印输出。缓冲器B1和B2每次只能存放一个记录。要求三个进程协调完成任务,使打印出来的与读入的记录的个数,次序完全一样。请用PV操作,写出它们的并发程序。
答:begin SR,SM1,SM2,SP:semaphore;
B1,B2:record;
SR:=1;SM1:=0;SM2:=1;SP:=0
cobegin
process read
X:record;
begin R: (接收来自输入设备上一个记录)
X:=接收的一个记录;
P(SR);
B1:=X;
V(SM1);
goto R;
end;
Process move
Y:record;
begin
M:P(SM1);
Y:=B1;
V(SR)
加工 Y
P(SM2);
B2:=Y;
V(SP);
goto M;
end;
Process print
Z:record;
begin
P:P(SP);
Z:=B2;
V(SM2)
打印Z
goto P;
end;
coend;
11、某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。若把一个购票者看作一个进程,请回答下列问题:
(1)用PV操作管理这些并发进程时,应怎样定义信号量,写出信号量的初值以及信号量各种取值的含义。
(2)根据所定义的信号量,把应执行的PV操作填入下述方框中,以保证进程能够正确地并发执行。
COBEGIN PROCESS PI(I=1,2,……)
begin ;
进入售票厅;
购票;
退出;
end;
COEND
(3)若欲购票者最多为n个人,写出信号量可能的变化范围(最大值和最小值)。
答:(1)定义一信号量S,初始值为20。
意义:
S>0 S的值表示可继续进入售票厅的人数
S=0 表示售票厅中已有20名顾客(购票者)
S<0 |S|的值为等待进入售票厅的人数
(2)上框为P(S)
下框为V(S)
(3)S的最大值为20
S的最小值为20-n
注:信号量的符号可不同(如写成t),但使用时应一致(即上述的s全应改成t)。
12、桌子有一个盘子,每次只能放入一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,女儿专等吃盘中的苹果,儿子专等吃盘中的桔子,试用P,V操作写出他们能正确同步的并发过程。
答:设公用信号量S=1表示盘子,私用信号量S1=0表示苹果,私用信号量S2=0表示桔子。他们能正确同步的并发过程如下:
爸爸P1 妈妈P2 女儿P3 儿子P4
P(S) P(S) P(S1) P(S2)
放苹果 放桔子 取苹果 取桔子
V(S1) V(S2) V(S) V(S)
13、用P、V操作说明互斥量,写出司机与售票员之间的同步算法。司机和售票员活动如下图所示。
答:司机和售票员之间有这样的同步关系:司机开车后,则售票员卖票,车到站时,司机先停车,售票员再开门,乘客下、上车结束以后,售票员关门,关好门、司机再开车.
解法 开车与开门是互斥的,停车与卖票是互斥的,用S1表示停车的状态,S1≥0时,车为停车状态允许开门,否则不允许开门,用S2表示关门的状态,S2≥0时,关好门状态,此时允许开车。下图表示司机与售票员之间利用P、V的同步算法。
14、假定一个阅览室可供50个人同时阅读。读者进入和离开阅览室时都必须在阅览室入口处的一个登记表上登记,阅览室有50个座位,规定每次只允许一个人登记或注销登记。
要求:(1)用PV操作描述读者进程的实现算法(可用流程图表示,登记、注销可用自然语言描述);
(2)指出算法中所用信号量的名称、作用及初值。
S1:阅览室可供使用的空座位,其初值为50
S: 是否可通过阅览室,其初值为1
Process READ_in(i=1…50)
{
到达阅览室入口处;
P(S1);P(S);
在入口处登记座位号;
V(s);
进入座位并阅读;
}
Process READ_out(j=1…50)
{
结束阅读到达阅览室入中处;
P(S);
在入口处注销座位号;
V(S1);V(S);
离开入口处;
}
二、银行家问题
1、设系统中有三种类型的资源(A,B,C)和五个进程(P1,P2,P3,P4,P5),A资源的数量17,B资源的数量为5,C资源的数量为20。在T0时刻系统状态如下表所示。系统采用银行家算法来避免死锁。请回答下列问题:
(1)T0时刻是否为安全状态?若是,请给出安全序列。
(2)若进程P4请求资源(2,0,1),能否实现资源分配?为什么?
(3)在(2)的基础上,若进程P1请求资源(0,2,0),能否实现资源分配?为什么?
T0时刻系统状态
进程 |
最大资源需求量 |
已分配资源量 |
系统剩余资源数量 |
||||||
A |
B |
C |
A |
B |
C |
A |
B |
C |
|
P1 |
5 |
5 |
9 |
2 |
1 |
2 |
2 |
3 |
3 |
P2 |
5 |
3 |
6 |
4 |
0 |
2 |
|||
P3 |
4 |
0 |
11 |
4 |
0 |
5 |
|||
P4 |
4 |
2 |
5 |
2 |
0 |
4 |
|||
P5 |
4 |
2 |
4 |
3 |
1 |
4 |
答:(1)T0时刻为安全状态。其中的一个安全序列为(P4,P5,P3,P2,P1)
(其他可能的安全序列有:(P4,P5,X,X,X),(P4,P2,X,X,X),(P4,P3,X,X,X),(P5,X,X,X,X))
(2)可以为P4分配资源,因为分配后的状态还是安全的,其安全序列的分析如下表:
|
WORK |
NEED |
ALLOCATION |
新WORK |
FINISH |
|
2,3,3 |
分配给P4:(2,0,1) |
0,3,2 |
|
|
P4 |
0,3,2 |
0,2,0 |
4,0,5 |
4,3,7 |
True |
P5 |
4,3,7 |
1,1,0 |
3,1,4 |
7,4,11 |
True |
P1 |
7,4,11 |
3,4,7 |
2,1,2 |
9,5,13 |
True |
P2 |
9,5,13 |
1,3,4 |
4,0,2 |
13,5,15 |
True |
P3 |
13,5,15 |
0,0,6 |
4,0,5 |
17,5,20 |
True |
(3)进程P1再请求资源(0,2,0),则不能为之分配资源。因为分配资源后,不存在安全序列,其分析如下表:
|
WORK |
NEED |
ALLOCATION |
新WORK |
FINISH |
|
0,3,2 |
分配给P1:(0,2,0) |
0,1,2 |
|
|
P4 |
|
0,2,0 |
此时,WORK不能满足任何一个进程的请求使之运行结束,即进入了不安全状态。 |
False |
|
P5 |
|
1,1,0 |
False |
||
P1 |
|
3,2,7 |
False |
||
P2 |
|
1,3,4 |
False |
||
P3 |
|
0,0,6 |
False |
2、某系统有A 、B 、C 类型的3种资源,在T0时刻进程P1、P2、P3、P4对资源的占用和需求情况见下表。此刻系统可用资源向量为(2,1,2)。问:
(1)将系统中各种资源总数和进程对资源的需求数目用向量或矩阵表示出来。(2)判定此刻系统的安全性。如果是安全的,写出安全序列,如果是不安全的,写出参与死锁的进程。
(3)如果此时P1和P2均再发出资源请求向量Request (1,0,1),为了保持系统安全性,应该如何分配资源给这两个进程?说明你所采用策略的原因。
(4)如果(3)中的请求都立刻满足后,系统此刻是否处于死锁状态?最终能否进入死锁状态?若能,说明参与死锁的进程,若不能,说明原因。解:(1)系统资源总数向量=available+Allocation =(2,1,2)+(7,2,4)=(9,3,6)进程对资源的需求矩阵
答:(1)1004112110
2
3226133144
2
2
P1P2P2P4
A B C A B C 已分配资源
Allocation
最大需求量max
资源
请求进程2222021034
2
need=max -Allocation=322
613
314422
1004112110
2
—=
(2)采用银行家算法进行计算步骤如下:
work=(2,1,2)
finish=(false,false,false,false)
①因为:need[2]<available,故
系统可以满足P2对资源的请求,将资源分配给P2后,P2可执行完成,然后释放它所占有的资源。因此,
finish[2]=true;
work=work+allocation[2]=(2,1,2)+(4,1,1)=(6,2,3)
②此时,need[1]<work,故:
P1可执行完成。finish[1]=true;
work=work+allocation[1]=(6,2,3)+(1,0,0)=(7,2,3)
③此时,need[3]<work,故:
P3可执行完成。finish[3]=true;
work=work+allocation[3]=(7,2,3)+(2,1,1)=(9,3,4)
④此时,need[4]<work,故:
P4可执行完成。finish[4]=true;
work=work+allocation[4]=(9,3,4)+(0,0,2)=(9,3,6)
结论:
系统至少可以找到一个安全的执行序,如(P2,P1,P3,P4)可使各进程正常运行终结。
(3)系统不能将资源分配给进程P1,因为虽然可利用资源还可以满足进程P1现在的需求,但是一旦分配给进程P1后,就找不到一个安全执行的序列保证各进程能够正常运行终结。所以进程P1应该进入阻塞状态。
(4)系统满足进程P1和P2的请求后,没有立即进入死锁状态,因为这时所有进程没有提出新的资源申请,全部进程均没有因资源没有得到满足而进入阻塞状态。只有当进程提出资源申请且全部进程都进入阻塞状态时,系统才处于死锁状态。但最终会进入死锁状态。
3、某系统有同类资源m个,n个并发进程可共享该类临界资源。求:每个进程最多可申请多少个该类临界资源,保证系统一定不会发生死锁。
解:设每个进程最多申请该类资源的最大量为x。
每个进程最多申请x个资源,则n个进程最多同时申请的该类临界资源数为:n*x。
为保证系统不会发生死锁,应满足下列不等式:
n(x-1)+1≤m(*)
则系统一定不会发生死锁。这是因为进程最多申请x个资源,最坏的情况是每个进程都已得到了(x-1)个资源,现均申请要最后一个资源。只要系统至少还有一个资源就可使其中一个或几个进程得到所需的全部资源,在它们执行结束后归还的资源可供其他进程使用,因而不可以发生死锁。
解不等式(*),可得:
x≤1+[(m-1)/n]
即:x的最大值为1+[(m-1)/n]。因而,当每个进程申请资源的最大数值为1+[(m-1)/n]时,系统肯定不会发生死锁。
4、设系统中有3中类型的资源(A,B,C )和5个进程P1、P2、P3、P4、P5,A 类资源的数目为17,B 类资源的数目为5,C 类资源的数目为20。在T 0时刻系统状态如下表所示。系统采用银行家算法实施死锁避免策略。
(1)T 0时刻是否为安全状态?若是,给出安全序列。
(2)若在T 0时刻进程P2请求资源(0,3,4),是否能实施资源分配?为什么?(3)在(2)的基础上,若进程P4请求资源(2,0,1),是否能实施资源分配?为什么?
(1)由题目所给出的最大资源需求量和已分配的资源数量,可以计算出T 0时刻各进程的资源需求量Need ,Need =Max-Allocation ,利用银行家算法对T 0时刻0T 0时刻的状态是安全的。(6分)
(2)若在T 0时刻进程P2请求资源(0,3,4),因请求资源数(0,3,4)大于剩余资源数(2,3,3),所以不能分配。(2分)
(3)在(2)的基础上,若进程P4请求资源(2,0,1),按银行家算法进行检查:
P4请求资源(2,0,1)<=P4需求资源(2,2,1)P4请求资源(2,0,1)<=剩余资源数(2,3,3)
试分配并修改相应的数据结构,由此形成的资源分配情况如下表所示:
此时,如题(1)利用银行家算法检查系统的安全状态,存在一个安全序列{P4、P5、P3、P2、P1},故该状态是安全的,可以立即将P4请求的资源分配给它。
5、某系统有同类资源m个,n个并发进程可共享该类临界资源。求:每个进程最多可申请多少个该类临界资源,保证系统一定不会发生死锁。
解:设每个进程最多申请该类资源的最大量为x。
为保证系统不会发生死锁,应满足下列不等式:
n(x-1)+1≤m(*)
解不等式(*),可得:
x≤1+[(m-1)/n]
即:x的最大值为1+[(m-1)/n]。因而,当每个进程申请资源的最大数值为1+[(m-1)/n]时,系统肯定不会发生死锁。
某系统中有5个并发进程,都需要同类资源3个,试问该系统不会发生死锁的最少资源数是(11)。
某系统中有4个并发进程,都需要同类资源3个,试问该系统不会发生死锁的最少资源数是(9)。
某计算机系统中有8台打印机,有K个进程竞争使用,每个进程最多需要3台打印机.该系统可能会发生死锁的K的最小值是(4)
系统中有3个进程,每个进程需2台打印机,如果系统配有4台打印机,则系统______不可能________出现死锁的情况(本题要判断出现死锁的可能性:可能或不可能)。
若系统运行中出现如下表所示的资源分配情况,该系统是否安全?若是,给出安全序列;如果进程P2此时提出资源申请(1,2,2,2),系统能否将资源分配给它?为什么?
答:(1)利用安全性算法对此刻的资源分配情况进行如下表的安全性检:
(2)P2请求资源(1,2,2,2)<=P2需求资源(2,3,5,6)&<=剩余资源数(1,6,2,2)
此时,可利用资源(0,4,0,0)已不能满足任何进程的需要,故系统进入不安全状态,故不能将资源分配给P2。
资源分配图。系统死锁可以利用资源分配图来描述。该图是由一组方框、圆圈和一组箭头线组成的,
(1)资源分配图。资源分配图采用图素的含义分别是:
方框:表示资源。有几类资源就画几个方框,方框中的小圆圈表示该类资源的个数。当个数较大时可以在方框内用阿拉伯数字表示。
圆圈:表示进程。有几个进程就画几个圆圈,圆圈内标明进程名称。
箭头线:表示资源的分配与申请。由方框指向圆圈的箭头线表示资源的分配线,由圆圈指向方框的箭头线表示资源的请求线。
(2)死锁定理。在死锁检测时,可以利用把资源分配图进行简化的方法来判断系统当前是否处于死锁状态。具体方法如下:
①在资源分配图中,找出一个既非阻塞又非孤立的进程结点Pi。如果Pi 可以获得其所需要的资源而继续执行,直至运行完毕,就可以释放其所占用的全部资源。这样,就可以把Pi所有关连的资源分配线和资源请求线消去,使之成为孤立的点。
②重复进行上述操作。在一系列的简化后,如果消去了资源分配图中所有的箭头线,使所有进程结点都成为孤立结点,则称该资源分配图是可完全简化的;反之,则称该资源分配图是不可完全简化的。
如果当前系统状态对应的资源分配图是不可完全简化的,则系统处于死锁状态,该充分条件称为死锁定理。
什么是死锁定理?利用死锁定理判断下图的当前状态是否会产生死锁?
死锁定理:S为死锁状态的充分条件是,当且仅当S状态的资源分配图不可完全简化。
简化过程,结论:不会产生死锁。
死锁的检测
1.利用资源分配图
系统对资源的分配情况可以用有向图加以描述:该图由结对组成:G=(V ,E )。其中,V 是顶点的集合,E 是有向边的集合,顶点集合可分为两部分:P={P1,P2,…Pn},它由系统中全部进程组成;R={r1,r2,r3},它由系统中的全部资源组成。
由边组成的集合E 中,每一个元素都是一个有序结对(pi,rj )或(rj,pi )。其中,pi 是P 中的一个进程(pi ∈P ),rj 是R 中的资源类型(rj ∈R )。如果(pi ,rj )∈E ,则存在一条从进程pi 指向资源rj 的有向边,进程pi 申请一个rj 资源单位。当前pi 在等待资源。如果(pi ,rj )∈E ,则有向边是从资源rj 指向进程pi ,就表示有一个rj 资源分配给进程pi 。边(pi ,rj )称为申请边,而(rj,pi )称为赋给边。在资源分配图中,我们用圆圈表示每个进程,用方框表示各种资源的类型。
方框中圆点的数量表示该类资源的个数。当然,申请边只能指向方框,而赋给边必须指向方框中的一个圆点。例如
如图所示的资源分配图表示:P1申请临界资源R ,同时R 已被进程P2占有。临界资源R 类中只有一个资源。
P1
P2
●资源分配图
R
2.资源分配图的简化
在利用资源分配图进行死锁检测时,目的是为了决定当前状态是否发生死锁。如果满足下列条件,那么一个连续可重被利用的资源图就能够通过进程P来进行化简:
(1)进程没有被阻塞
(2)进程没有请求边
(3)有分配边指向P
通过消除所有指向P的分配边,可以化简资源分配图。如果一个资源分配图不能通过任一个进程化简,那么它就是不可被简化的;如果有一个化简序列,导致图中没有任何种类的边,那么它就是可完全简化的。
3.死锁定理
通过资源分配图,我们就可以很直观地看出系统中的进程使用资源的情况。很显然,如果图中不出现封闭的环路,则系统中不会存在死锁。但如果系统出现由各有向边组成的环路,则是否产生死锁,还需进一步分析:如果环路可以通过化简的方式取消,则系统一定不产生死锁;如果环路通过化简的方式仍不能取消,即不能再进行简化,则系统一定会产生死锁。这就是著名的死锁定理。
某系统状态S为死锁状态的充分必要条件是:当且仅当S状态的资源分配图是不可完全简化的。即:如果资源分配图中不存在环路,则系统不存在死锁;如果资源分配图中存在环路,则系统中可能产生死锁,如果不可再简化,则系统产生死锁。
三、页面置换算法
1、在一个请求分页系统中,假如一个作业的页面走向为:1,2,3,6,4,7,3,2,1,4,7,5,6,5,2,1。当分配给该作业的物理块数为4时,分别采用最佳置换算法、LRU和FIFO页面置换算法,计算访问过程中所发生的缺页次数和缺页率。
(1)T0时刻为安全状态。其中的一个安全序列为(P4,P5,P3,P2,P1)
(其他可能的安全序列有:(P4,P5,X,X,X),(P4,P2,X,X,X),
(P4,P3,X,X,X),(P5,X,X,X,X))
(2)可以为P4分配资源,因为分配后的状态还是安全的,其安全序列的分析如下表:
|
WORK |
NEED |
ALLOCATION |
新WORK |
FINISH |
|
2,3,3 |
分配给P4:(2,0,1) |
0,3,2 |
|
|
P4 |
0,3,2 |
0,2,0 |
4,0,5 |
4,3,7 |
True |
P5 |
4,3,7 |
1,1,0 |
3,1,4 |
7,4,11 |
True |
P1 |
7,4,11 |
3,4,7 |
2,1,2 |
9,5,13 |
True |
P2 |
9,5,13 |
1,3,4 |
4,0,2 |
13,5,15 |
True |
P3 |
13,5,15 |
0,0,6 |
4,0,5 |
17,5,20 |
True |
(3)进程P1再请求资源(0,2,0),则不能为之分配资源。因为分配资源后,不存在安全序列,其分析如下表:
|
WORK |
NEED |
ALLOCATION |
新WORK |
FINISH |
|
0,3,2 |
分配给P1:(0,2,0) |
0,1,2 |
|
|
P4 |
|
0,2,0 |
此时,WORK不能满足任何一个进程的请求使之运行结束,即进入了不安全状态。 |
False |
|
P5 |
|
1,1,0 |
False |
||
P1 |
|
3,2,7 |
False |
||
P2 |
|
1,3,4 |
False |
||
P3 |
|
0,0,6 |
False |
答:最佳置换算法的情况如下表:
页面走向 |
1 |
2 |
3 |
6 |
4 |
7 |
3 |
2 |
1 |
4 |
7 |
5 |
6 |
5 |
2 |
1 |
物理页0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|||||||
物理页1 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
||||||||
物理页2 |
3 |
3 |
3 |
3 |
4 |
5 |
5 |
|||||||||
物理页3 |
6 |
4 |
7 |
7 |
7 |
6 |
||||||||||
缺页否 |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
缺页次数为9,缺页率为9/16
LRU算法的情况如下表:
页面走向 |
1 |
2 |
3 |
6 |
4 |
7 |
3 |
2 |
1 |
4 |
7 |
5 |
6 |
5 |
2 |
1 |
物理页0 |
1 |
1 |
1 |
1 |
4 |
4 |
4 |
1 |
1 |
1 |
1 |
6 |
6 |
6 |
||
物理页1 |
2 |
2 |
2 |
2 |
7 |
7 |
7 |
4 |
4 |
4 |
4 |
2 |
2 |
|||
物理页2 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
7 |
7 |
7 |
7 |
1 |
||||
物理页3 |
6 |
6 |
6 |
2 |
2 |
2 |
2 |
5 |
5 |
5 |
5 |
|||||
缺页否 |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
缺页次数为14,缺页率为14/16
FIFO算法的情况如下表:
页面走向 |
1 |
2 |
3 |
6 |
4 |
7 |
3 |
2 |
1 |
4 |
7 |
5 |
6 |
5 |
2 |
1 |
物理页0 |
1 |
1 |
1 |
1 |
4 |
4 |
4 |
4 |
5 |
5 |
||||||
物理页1 |
2 |
2 |
2 |
2 |
7 |
7 |
7 |
7 |
6 |
|||||||
物理页2 |
3 |
3 |
3 |
3 |
2 |
2 |
2 |
2 |
||||||||
物理页3 |
6 |
6 |
6 |
6 |
1 |
1 |
1 |
|||||||||
缺页否 |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
缺页次数为10,缺页率为10/16
2、某系统对主存采用页式管理,供用户使用的主存区域共640K字节,被分成160块,块号为0,1,2……159。现有一作业的地址空间共占4页,其页号为0,1,2,,3,被分配到主存的第2,4,1,5块中,回答:
(1)作业每一页的长度为多少字节?
(2)写出该作业被装入主存时,其对应的页表。
(3)把该作业的每一页在主存中的起始地址(用16进制表示)填在下表中
页号 起始地址
0
1
2
3
答:(1)4K字节
(2)
逻辑页号 主存块号
0 2
1 4
2 1
3 5
(3)
页号 起始地址
0 002000
1 004000
2 001000
3 005000
3、在一个请求分页系统中,若采用LRU页面置换算法时,假如一个作业的页面走向为:4,3,2,1,4,3,5,4,3,2,1,5,当分配给该作业的物理块数M分别3和4时,求出在访问过程中所发生的缺页次数和缺页率?比较所得结果。
答:(1)当分配给该作业的物理块数为3时产生缺页情况如下所示。
在访问过程中所发生的缺页次数为10次,缺页率为10/12*100%=83.3%
(2)当分配给该作业的物理块数为4时产生缺页情况如下所示。
在访问过程中所发生的缺页次数为8次,缺页率为8/12*100%=66.7%
通过计算可知,当作业的页面走向相同时,分配给该作业的物理块数越多,缺页次数越少,缺页率越低。
4、在一个请求分页系统中,假设系统分配给某进程的物理块数为3,开始时内存为空,执行如下访问页号序列:
1,2,3,4,1,2,5,1,2,3,4,5
试说明采用先进先出(FIFO) 、最近最少使用(LRU)和最佳置换算法(OPT)进行页面置换时,缺页次数各是多少?
答:(1)FIFO: 9次
(2)LRU:10次
(3)OPT:7次
5、 在一个请求分页存储管理系统中,设某作业占有7个页面,进程P的访问次序为1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,当分配给该进程的物理块为4时,请用FIFO算法和LRU置换算法计算访问过程中发生的缺页次数和缺页率以及分别淘汰的页面号序列。
答:FIFO缺页次数:10次,
缺页中断率:10/16=62.5%
淘汰的序列:1,2,3,4,5,6
LRU缺页次数:9次,
缺页中断率:9/16=56.3%
淘汰的序列: 3,4, 5,6,1
6、在一个请求式存储管理系统中,采用FIFO页面置换算法,假设一进程分配了4个页框,按下面页面进行:1、8、1、7、8、2、7、6、5、8、3、6请给出缺页的次数和缺页率。
页面走向 |
1 |
8 |
1 |
7 |
8 |
2 |
7 |
6 |
5 |
8 |
3 |
6 |
缺页标记 |
* |
* |
* |
* |
* |
* |
* |
* |
||||
M1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
6 |
6 |
6 |
6 |
6 |
M2 |
8 |
8 |
8 |
8 |
8 |
8 |
8 |
5 |
5 |
5 |
5 |
|
M3 |
7 |
7 |
7 |
7 |
7 |
7 |
8 |
8 |
8 |
|||
M4 |
2 |
2 |
2 |
2 |
2 |
3 |
3 |
缺页次数=8
缺页率=8/12*100%
7、在一个请求分页系统中,采用LRU页面置换算法,例如一个作页的页面走向为4,3,2,1,4,3,5,4,3,2,1,5,当分配给该作业的物理块数M分别为3和4时,试计算访问过程中所发生的缺页次数和缺页率?(注意,所有内存块最初都是空的,所以,凡第一次用到的页面都产生一次缺页),并比较所得结果。
答:(1)当M=3时,
页面走向 |
4 |
3 |
2 |
1 |
4 |
3 |
5 |
4 |
3 |
2 |
1 |
5 |
缺页标记 |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
||
M1 |
4 |
4 |
4 |
1 |
1 |
1 |
5 |
5 |
5 |
2 |
2 |
2 |
M2 |
3 |
3 |
3 |
4 |
4 |
4 |
4 |
4 |
4 |
1 |
1 |
|
M3 |
2 |
2 |
2 |
3 |
3 |
3 |
3 |
3 |
3 |
5 |
缺页次数=10
缺页率=缺页次数/总页数*100%=10/12*100%=83.3%
(2)当M=4时
页面走向 |
4 |
3 |
2 |
1 |
4 |
3 |
5 |
4 |
3 |
2 |
1 |
5 |
缺页标记 |
* |
* |
* |
* |
* |
* |
* |
* |
||||
M1 |
4 |
4 |
4 |
4 |
4 |
4 |
4 |
4 |
4 |
4 |
4 |
5 |
M2 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
|
M3 |
2 |
2 |
2 |
2 |
5 |
5 |
5 |
5 |
1 |
1 |
||
M4 |
1 |
1 |
1 |
1 |
1 |
1 |
2 |
2 |
2 |
缺页次数=8
缺页率=8/12*100%=67%
8、在一个请求分页系统中,假如一个作业的页面走向为:1,2,3,6,4,7,3,2,1,4,7,5,6,5,2,1。当分配给该作业的物理块数为4时,分别采用最佳置换算法、LRU和FIFO页面置换算法,计算访问过程中所发生的缺页次数和缺页率。
答:最佳置换算法的情况如下表:
页面走向 |
1 |
2 |
3 |
6 |
4 |
7 |
3 |
2 |
1 |
4 |
7 |
5 |
6 |
5 |
2 |
1 |
物理页0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|||||||
物理页1 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
||||||||
物理页2 |
3 |
3 |
3 |
3 |
4 |
5 |
5 |
|||||||||
物理页3 |
6 |
4 |
7 |
7 |
7 |
6 |
||||||||||
缺页否 |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
缺页次数为9,缺页率为9/16
LRU算法的情况如下表:
页面走向 |
1 |
2 |
3 |
6 |
4 |
7 |
3 |
2 |
1 |
4 |
7 |
5 |
6 |
5 |
2 |
1 |
物理页0 |
1 |
1 |
1 |
1 |
4 |
4 |
4 |
1 |
1 |
1 |
1 |
6 |
6 |
6 |
||
物理页1 |
2 |
2 |
2 |
2 |
7 |
7 |
7 |
4 |
4 |
4 |
4 |
2 |
2 |
|||
物理页2 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
7 |
7 |
7 |
7 |
1 |
||||
物理页3 |
6 |
6 |
6 |
2 |
2 |
2 |
2 |
5 |
5 |
5 |
5 |
|||||
缺页否 |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
缺页次数为14,缺页率为14/16
FIFO算法的情况如下表:
页面走向 |
1 |
2 |
3 |
6 |
4 |
7 |
3 |
2 |
1 |
4 |
7 |
5 |
6 |
5 |
2 |
1 |
物理页0 |
1 |
1 |
1 |
1 |
4 |
4 |
4 |
4 |
5 |
5 |
||||||
物理页1 |
2 |
2 |
2 |
2 |
7 |
7 |
7 |
7 |
6 |
|||||||
物理页2 |
3 |
3 |
3 |
3 |
2 |
2 |
2 |
2 |
||||||||
物理页3 |
6 |
6 |
6 |
6 |
1 |
1 |
1 |
|||||||||
缺页否 |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
缺页次数为10,缺页率为10/16
四、磁盘调度
1、设某作业占有7个页面,如果在主存中只允许装入4个工作页面(即工作集为4),作业运行时,实际访问页面的顺序是1, 2, 3, 6, 4, 7, 3, 2, 1, 4, 7, 5, 6, 5, 2, 1。试用FIFO与LRU页面调度算法,列出各自的页面淘汰顺序和缺页中断次数,以及最后留驻主存4页的顺序。(假设开始的4个页面已装入主存)
答:FIFO:
1 2 3 6 4 7
6次
2 1 5 6
LRU:
1 2 6 4 7 3 2 1 4 7
10次
6 5 2 1
注:假定前面四页1 2 3 6 已在主存
2、假设一个可移动磁头的磁盘具有200个磁道,其编号为0~199,当前它刚刚结束了125道的存取,正在处理149道的服务请求,假设系统当前I/O请求序列为:88,147,95,177,94,150,102,175,138。试问对以下的磁盘I/O调度算法而言,满足以上请求序列,磁头将如何移动?并计算总的磁道移动数。
(1)先来先服务算法(FCFS)
(2)扫描法(SCAN)
(1)FCFS算法:
当前149 |
下一磁道 |
88 |
147 |
95 |
177 |
94 |
150 |
102 |
175 |
138 |
|
移动距离 |
61 |
59 |
52 |
82 |
83 |
56 |
48 |
73 |
37 |
总的磁道移动数为:61+59+52+82+83+56+48+73+37=551
(2)SCAN算法:
当前149 |
下一磁道 |
150 |
175 |
177 |
147 |
138 |
102 |
95 |
94 |
88 |
|
移动距离 |
1 |
25 |
2 |
30 |
9 |
36 |
7 |
1 |
6 |
总的磁道移动数为:1+25+2+30+9+36+7+1+6=117
3、设磁盘共有200个柱面,柱面编号为0-199,当前存取壁的位置在125 柱面上,并且刚刚完成了对128号柱面的服务请求,在此之前如果存在以下的请求服务序列:
75, 182, 90, 110, 170, 150, 102, 68, 42
试问:为完成上述请求, 下列算法存取臂移动顺序如何?移动的总量是多少?
(1) 先来先服务(FCFS)
(2) 最短寻找时间优先(SSTF)
(3) 循环扫描法(CSCAN)
解:(1)先来先服务存取臂移动顺序是75,182,90,110,170,150,102,68,42
移动的总量=50+107+92+20+60+20+48+34+26=457
(2)最短寻道时间优先存取臂移动顺序是110,102,90,75,68,42,150,170,182。
移动的总量=15+8+12+15+7+26+108+20+12=223
(3)循环扫描法存取臂移动顺序是42,68,75,90,102,110,150,170,182。
移动的总量=83+26+7+15+12+8+40+20+12=223
五、逻辑地址转换物理地址
1、考虑一个由 8 个页面,每页有 1024 个字节组成的逻辑空间,把它装入到有 32 个物理块的存储器中,问:
( 1 )逻辑地址需要多少二进制位表示?
( 2 )物理地址需要多少二进制位表示?
分析 在分页存储管理中,逻辑地址结构如下图所示。
它由两个部分组成:前一部分表示该地址所在页面的页号 p ;后一部分表示页内地址(页内位移) d 。页号的地址位数决定了页的多少,假设页号有 20 位,则地址空间中最多可容纳的页面数为 2 20 ,即 1MB 个页面。页内地址位数确定了每页的大小,若页内地址为 12 位,则每页大小为 2 12 ,即 2KB 。
同理,物理地址中块号的地址位数决定了块的数量。由于页式存储管理内存空间块的大小与页面大小相同,所以物理地址中块内地址与逻辑地址中的页内地址位数相同。
答:因为页面数为 8=2 3 ,故需要 3 位二进制数表示。每页有 1024 个字节, 1024=2 10 ,于是页内地址需要 10 位二进制数表示。 32 个物理块,需要 5 位二进制数表示( 32=2 5 )。
( 1 )页的逻辑地址由页号和页内地址组成,所以需要 3+10=13 位二进制数表示。
( 2 )页的物理地址由块号和页内地址的拼接,所以需要 5+10=15 位二进制数表示。
2、若在一分页存储管理系统中,某作业的页表如下所示。已知页面大小为 1024 字节,试将逻辑地址 1011 , 2148 , 4000 , 5012 转化为相应的物理地址。
页号 |
块号 |
0 1 2 3 |
2 3 1 6 |
分析: 页式存储管理的地址结构是一维的,即逻辑地址(或物理地址)只用一个数值即可表示。若给定逻辑地址 A ,页面的大小为 L ,则页号 p 和页内地址 d 可按照下式求得:
p=int [A/L] d=A mod L
其中, int 是取整函数(取数值的整数部分), mod 是取余函数(取数值的余数部分)。
下图显示了页式管理系统的地址转换机构。
页表的作用是实现从页号到物理块号的地址映射。以逻辑地址的页号检索页表,得到该页的物理块号;同时将页内地址 d 直接送入物理地址寄存器的块内地址字段中。这样物理块号和块内地址拼接成了实际访问内存的地址,从而完成了从逻辑地址到物理地址的转换。
所以物理地址的计算公式为:
物理地址=块的大小(即页的大小 L ) 块号 f +页内地址 d
答:本题中,为了描述方便,设页号为 p ,页内位移为 d ,则:
( 1 )对于逻辑地址 1011 , p = int ( 1011/1024 )= 0 , d = 1011 mod 1024 = 1011 。查页表第 0 页在第 2 块,所以物理地址为 1024 2 + 1011 = 3059 。
( 2 )对于逻辑地址 2148 , p = int ( 2148/1024 )= 2 , d = 2148 mod 1024 = 100 。查页表第 2 页在第 1 块,所以物理地址为 1024 + 100 = 1124 。
( 3 )对于逻辑地址 4000 , p = int ( 4000/1024 )= 3 , d = 4000 mod 1024 = 928 。查页表第 3 页在第 6 块,所以物理地址为 1024 6 + 928 = 7072 。
( 4 )对于逻辑地址 5012 , p = int ( 5012/1024 )= 4 , d = 5012 mod 1024 = 916 。因页号超过页表长度,该逻辑地址非法。
3、某虚拟存储器的用户编程空间共 32 个页面,每页为 1KB ,内存为 16KB 。假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如下:
页号 |
物理块号 |
0 |
5 |
1 |
10 |
2 |
4 |
3 |
7 |
则逻辑地址 0A5C ( H )所对应的物理地址是什么?
分析: 页式存储管理的逻辑地址分为两部分:页号和页内地址。
由已知条件“用户编程空间共 32 个页面”,可知页号部分占 5 位;由“每页为 1KB ”, 1 K=2^10 , 可知内页地址占 10 位。由“内存为 16KB ”,可知有 16 块,块号为 4 位。
逻辑地址 0A5C ( H )所对应的 二进制表示形式是: 000 10 10 0101 1100 ,根据上面的分析,下划线部分为页内地址,编码 “ 000 10 ” 为页号,表示该 逻辑地址对应的页号为 2 。 查页表,得到物理块号是 4 (十进制),即物理块地址为: 01 00 ,拼接块内地址 10 0101 1100 ,得 01 00 10 0101 1100 ,即 125C ( H )。
解 逻辑地址 0A5C ( H )所对应的物理地址是 125C ( H )。
4、设某文件的物理存储方式采用链接方式,该文件由5个逻辑记录组成,每个逻辑记录的大小与磁盘块大小相等,均为512字节,并依次存放在50、121、75、80、63号磁盘块上。(10分)
① 文件的第1569逻辑字节的信息存放在哪一个磁盘块上?
② 要访问第1569逻辑字节的信息,需要访问多少个磁盘块?(假如该文件的FCB在内存)
答:因为:1569=512×3+33
所以要访问字节的逻辑记录号为3,对应的物理磁盘块号为80。故应访问第80号磁盘块。
由于采用链接方式,所以要访问第3个逻辑记录的信息,必须访问逻辑记录第0、1、2后,才能访问第3个逻辑记录,所以要访问第1569逻辑字节的信息,需要访问4个磁盘块。
页号 |
物理块号 |
0 |
3 |
1 |
4 |
2 |
6 |
5、在一个分页存储管理系统中,页长为4KB,
某一作业的页表如图1所示,虚拟地址3000对应的物理地址为12K+3000=152888 。
六、进程状态转换
1、请画出进程的状态转换图。并说明是什么事件引起每种状态的变迁?
答:状态转换图如下:
2、请画出进程的状态转换图。并说明是什么事件引起每种状态的变迁?
答:
就绪到执行:处于就绪状态的进程,在调度程序为之分配了处理器之后,该进程就进入执行状态。
执行到就绪:正在执行的进程,如果分配给它的时间片用完,则暂停执行,该进程就由执行状态转变为就绪状态。
执行到阻塞:如果正在执行的进程因为发生某事件(例如:请求I/O,申请缓冲空间等)而使进程的执行受阻,则该进程将停止执行,由执行状态转变为阻塞状态。
阻塞到就绪:处于阻塞状态的进程,如果引起其阻塞的事件发生了,则该进程将解除阻塞状态而进入就绪状态。
3、请用信号量实现下图所示的前趋关系。
答:Var a,b,c,d,e,f:semaphore:=0,0,0,0,0,0;
Begin
Parbegin
Begin S1;signal(a);sigan(b);signal(c);end;
Begin wait(a);S2;signal(d);end;
Begin wait(c);S3;signal(e);end;
Begin wait(d);S4;signal(f);end;
Begin wait(b);wait(e);wait(f);S5;end;
parend
end
七、作业调度
1、假设有三道作业,它们的提交时间及运行时间由下表给出,
作业 |
提交时刻(时) |
运行时间(小时) |
1 |
10 |
2 |
2 |
10.1 |
1 |
3 |
10.25 |
0.25 |
采用非多道程序设计,并且采用“先来先服务”作业调度算法。指出它们的调度顺序,并分别计算平均周转时间和平均带权周转时间.
采用非多道程序设计,即采用单道程序设计。先来先服务调度算法调度题中给出的作业流:
作业号 |
提交时间 (时) |
运行时间 (小时) |
开始时刻 (时) |
完成时刻 (时) |
周转时间 (小时) |
带权周转时间 (小时) |
1 |
10 |
2 |
10 |
12 |
2 |
1 |
2 |
10.1 |
|
12 |
13 |
2.9 |
2.9 |
3 |
1O.25 |
O.25 |
13 |
13.25 |
3 |
12 |
平均周转时间T=7. 90/3=1.63 平均带权周转时间W=15.9/3=5.3 |
7.9 |
15. 9 |
1)有一组作业,其提交时间及运行时间如下表所示,在单道程序管理系统中,采用响应比高者优先高度算法,给出调度顺序,各作业的周转时间,并算出平均周转时间和平均带权周转时间。(按十进制计算)
作业号 |
提交时间 |
运行时间 |
1 |
10.00 |
0.30 |
2 |
10.20 |
0.50 |
3 |
10.40 |
0.10 |
4 |
10.50 |
0.40 |
2)某移动磁盘的柱面由外向里从0开始顺序编号,假定当前磁头停在100号柱面,而且移动方向是向外的,现有一个请求队列在等待访问磁盘,访问的柱面号分别为190、10、160、80、90、125、30、20、140、25。请写出分别采用最短寻找时间优先和电梯调度算法处理上述请求的次序。
答:1)解:响应比=响应时间/要求服务时间=(等待时间+要求服务时间)/要求服务时间
由于作业1与作业2开始执行时,作业3和4均未到达,所以1、2按到达顺序执行,作业2执行完后,
作业3:响应比=(10.8-10.4+0.1)/0.1=5
作业4:响应比=(10.8-10.5+0.4)/0.4=1.75
因为作业3的响应比高于作业4,所以作业3先执行。
周转时间=完成时间-提交时间
作业1的周转时间T1=0.3
T2=10.8-10.2=0.6
T3=10.9-10.4=0.5
T4=11.3-10.5=0.8
平均周转时间=(0.3+0.6+0.5+0.8)/4=0.5
带权周转时间=周转时间/运行时间(用P表示)
P1=0.3/0.3=1 P2=0.6/0.5=1.2 P3=0.5/0.1=5 P4=0.8/0.4=2
平均带权周转时间=(1+1.2+5+2)/4=2.3
2)
磁道号 |
最短寻找时间优先 (调度次序) |
电梯算法 |
190 |
6 |
10 |
10 |
10 |
6 |
160 |
5 |
9 |
80 |
2 |
2 |
90 |
1 |
1 |
125 |
3 |
7 |
30 |
7 |
3 |
20 |
9 |
5 |
140 |
4 |
8 |
25 |
8 |
4 |
2、设有一组作业,它们的提交时间及运行时间如下所示:
作业号 |
提交时间 |
运行时间(分钟) |
1 |
8:00 |
70 |
2 |
8:40 |
30 |
3 |
8:50 |
10 |
4 |
9:10 |
5 |
在单CPU方式下,试计算采用先来先服务调度算法(FCFS)、最短作业优先调度算法(SJF)和响应比高者优先调度算法时的平均周转时间,并指出它们的调度顺序。
3、在一个单道批处理系统中,一组作业的提交时间和运行时间作业 提交时间 运行时间
J1 8 : 00 1.0
J2 8 : 50 0.50
J3 9 : 00 0.20
J4 9 : 10 0.10
试计算以下三种作业调度算法的平均周转时间和平均带权周转时间
( 1 )先来先服务 ( 2 )短作业优先 ( 3 )响应比高者优先
答:( 1 )先来先服务
平均周转时间= (1.0+0.67+0.7+0.63)/4=0.75
平均带权周转时间= (1.0+1.34+3.5+6.3)/4=3.035
作业 |
提交时间 |
运行时间 |
开始时间 |
完成时间 |
周转时间 |
带权周转时间 |
J1 |
8:00 |
1.0 |
8:00 |
9:00 |
1.0 |
1.0 |
J2 |
8:50 |
0.50 |
9:00 |
9:30 |
0.67 |
1.34 |
J3 |
9:00 |
0.20 |
9:30 |
9:42 |
0.7 |
3.5 |
J4 |
9:10 |
0.10 |
9:42 |
9:48 |
0.63 |
6.3 |
(2) 短作业优先
作业执行顺序: J1 J3 J4 J2
平均周转时间=( 1.0+0.94+0.2+0.13 ) /4=0.5675
平均带权周转时间=( 1.0+1.94+1.0+1.3 ) =1.31
作业 |
提交时间 |
运行时间 |
开始时间 |
完成时间 |
周转时间 |
带权周转时间 |
J1 |
8:00 |
1.0 |
8:00 |
9:00 |
1.0 |
1.0 |
J2 |
8:50 |
0.50 |
9:18 |
9:48 |
0.97 |
1.94 |
J3 |
9:00 |
0.20 |
9:00 |
9:12 |
0.2 |
1.0 |
J4 |
9:10 |
0.10 |
9:12 |
9:18 |
0.13 |
1.3 |
(3) 响应比高者优先
同( 1 )