最近恰好在学习操作系统,所以分享一下操作系统的题解,(有些是搜题得来的结果,就可能直接用啦,还有些是手画的图,我字丑,不要嫌弃哈哈哈哈)。最后整理,码字不易,帮忙点个赞哈哈哈,如果有错误的,可以在评论区交流,请原谅我的错误!
答:
设每个进程等待I/O 的百分比为P ,则n 个进程同时等待刀O 的概率是Pn ,当n 个进程同时等待I/O 期间CPU 是空闲
的,故CPU 的利用率为1-Pn。由题意可知,除去操作系统,内存还能容纳4 个用户进程,由于每个用户进程等待I/O
的时间为80 % , 故:
CPU利用率=l-(80%)4 = 0.59
若再增加1MB 内存,系统中可同时运行9 个用户进程,此时:
cPu 利用率=l-(1-80%)9 = 0.87
故增加IMB 内存使CPU 的利用率提高了:
87% / 59% - 100% = 47%
答:画出两道程序并发执行图如上:
(1)两道程序运行期间,CPU存在空闲等待,时间为100ms - 150ms之间
(2)程序A无等待现象,但程序B有等待。程序B有等待时间段为180ms - 200ms
答:① 多道运行方式(抢占式):(如下图)(ps:抢占式指的是,此时B进程占着CPU在运行,但是A进程优先级更高的话,会抢占B)
结果: 抢占式共用去190ms ,单道完成需要260ms (30+40+10+60+30+10+20+40+20 = 260ms),节省70ms 。
多道运行方式(非抢占式):(如下图)
结果:非抢占式共用去180ms ,单道完成需要260ms ,节省80ms 。
②调度执行时间1ms , 多道运行方式(抢占式)与多道运行方式(非抢占式)如下图:
答:画出三个作业并行工作图如下:
( 1 ) Job1 从投入到运行完成需110ms , Job2 从投入到运行完成需90ms , Job3 从投入到运行完成需110ms.
( 2 ) 从投入到完成CPU 的利用率:CPU 空闲时间段为:60ms 至70ms , 80ms 至90ms , 100ms 至110ms 。所以CPU 利用率为(110-30)/10 = 72.7 %。
( 3 ) I2设备利用率: 设备I2 空闲时间段为:30ms 至50ms,故I2的利用率为(110-20) / 110 = 81.8 %。
答:画出三个作业并行工作图如下(图中着色部分为作业等待时间):
( 1 ) Job1从投入到运行完成需80ms , Job2 从投入到运行完成需90ms , Job3 从投入到运行完成需90ms 。
( 2 ) CPU 空闲时间段为:60ms 至70ms , 80ms 至90ms 。所以CPU利用率为( 90-20 ) / 90 = 77.78 %。
( 3 )设备I1 空闲时间段为:20ms 至40ms ,故I1 的利用率为(90-20 ) / 90 = 77 . 78 %。设备I2 空闲时间段为:30ms 至50ms ,故I2 的利用率为(90-20 ) / 90=77.78 %。
答:画出三个作业并行工作图如下(图中着色部分为作业等待时间):
( 1 ) Job1从投入到运行完成需80ms , Job2 从投入到运行完成需90ms , Job3 从投入到运行完成需90ms 。
( 2 ) CPU 空闲时间段为:60ms 至70ms , 80ms 至90ms 。所以CPU利用率为( 90-20 ) / 90 = 77.78 %。
( 3 )设备I1 空闲时间段为:20ms 至40ms ,故I1 的利用率为(90-20 ) / 90 = 77 . 78 %。设备I2 空闲时间段为:30ms 至50ms ,故I2 的利用率为(90-20 ) / 90=77.78 %。
答:
答:画出三个作业并发执行的时间图,
( l ) 最早结束的程序为B ,最后结束的程序为C 。
( 2 ) 程序A 为250ms 。程序B 为220ms 。程序C 为310ms 。
( 3 ) CPU 利用率为( 310 - 120 ) / 310 = 61.3 %
答: 运行时间如上图所示,
① B先结束
② 234ms
③ (234 - 25 - 19 - 10 ) / 234 ✖ 100% = 77.35%
④ 0ms - 20ms 和 199 ms - 214 ms 累计时长为 35ms
⑤ 110 ms - 119 ms 和 159 ms - 169 ms 累计时长为 19ms
答: CPU利用率=CPU运行时间/程序运行时间=CPU有效工作时间/(CPU有效工作时间+CPU空闲等待时间)= (10 + 5 + 10 + 10 + 5) / (10 + 5 + 5 + 10 + 10 + 10 + 10 + 5 + 5 + 10) = 50 %
答:1/60 s = 50/3 ms
CPU用于时钟中断处理的时间比率: 2 / (50 / 3) = 12%
(2)(4)(5)(6)为时分复用共享,(1)(3)(7)为空分复用共享。
答:( 3 ) , ( 4 ) , ( 5 ), ( 6 ) , ( 7 ) .
答:因为I/O繁忙型作业忙于I/O,所以它CPU 用得少,按调度策略能优先执行。同样原因一个进程等待CPU 足够久时,由于它是“最近使用处理器较少的进程”,就能被优先调度,故不会饥饿。
答:并发进程之间的基本相互制约关系有互斥和同步两种。其中(1)、(3)为互斥问题.(2)、(4)为同步问题。
答:许多操作系统重新计算进程的优先数在时钟中断处理例程中进行,由于中断是随机碰到哪个进程,就插入哪个进程中运行处理程序,并把处理时间记在这个进程的账上。
答:采用短作业优先算法调度时,三个作业的总周转时间为:
Tl = = a + ( a +b ) + ( a + b + c ) = 3a + 2b + c ①
若不按短作业优先算法调度,不失一般性,设调度次序为:J2 、J1 、J3 。则三个作业的总周转时间为:
T2=b+(b+a ) +(b+a + c ) = 3b + 2a + c ②
令②-① 式得到:
T2 - Tl = b- a> 0
可见,采用短作业优先算法调度才能获得最小平均作业周转时间。
答:首先,对n 个作业按执行时间从小到大重新进行排序,则对n 个作业:J1 ' ,… ,Jn , 创门的运行时间满足:S1≤S2 ≤……≤S (n-l ) ≤ Sn ’。那么有:
由于任何调度方式下,S1' + S2' + S3'+…+Sn’为一个确定的数,而当S1 ’≤S2 ’≤…≤ S( n - 1 ) ’≤Sn ’时才有:0*S1+1*S2+2*S3+…(n-1)Sn的值最大,也就是说,此时T 值最小。所以,按短作业优先调度算法调度时,使得平均作业周转时间最短。
答: (1)
先来先服务算法: 1-2-3-4-5
时间片轮转算法: (设时间片为1) 1-2-3-4-5-l-3-5-1-5-1-5-1-5-1-l-l-1-1
短作业优先算法: 2-4-3-5-1
非强占优先权调度算法: 4-1-3-5-2
(2)
平均周转时间:
先来先服务算法:(10 + 11 + 13 + 14 + 19) / 5 = 13.4
时间片轮转算法:(19 + 2 + 7 + 4 + 14) / 5 = 9.2
短作业优先算法: (1 + 2 + 4 + 9 + 19) / 5 = 7
非强占优先权调度算法:(1 + 11 + 13 + 18 + 19) / 5 = 12.4
平均带权周转时间:
先来先服务算法:(10/10 + 11/1 + 13/2 + 14/1 + 19/5) / 5 = 7.26
时间片轮转算法:(19/10 + 2/1 + 7/2 + 4/1 + 14/5) / 5 = 2.84
短作业优先算法: (1/1 + 2/1 + 4/2 + 9/5 + 19/10) / 5 = 1.74
非强占优先权调度算法:(1/1 + 11/10 + 13/2 + 18/5 + 19/1) / 5 = 6.24
答:( l ) FCFS 调度算法
( 2 )优先级调度算法
( 3 )时间片轮转法 按次序ABCDEBCDECDEDEE 轮转执行。
( 4 ) SJF调度算法
( 1 ) FCFS 调度算法
( 2 )优先级调度算法
( 3 )时间片轮转法
按次序ABCDEABDEABEAEA 轮转执行。
作业 |
执行时间 |
等待时间 |
周转时间 |
带权周转时间 |
|
|
|
|
|
A B C D E |
10 6 2 4 8 |
20 l6 4 l2 20 |
30 22 6 16 28 |
3 3 .66 3 4 3. 5 |
作业平均周转时间作业平均带权周转时间 |
T = ( 30 + 22 + 6 + 16 + 28 ) / 5 = 20.4 W = ( 3 + 3.66 + 3 +4 + 3.5 ) / 5 = 3.43 |
答:处理器调度算法会考虑以下因素:作业响应时间要求;让CPU 尽量和外围设备并行工作;限制一个计算进程长时间霸占处理器。因而,( 1 ) FO 为主作业优先级高。(2 ) 输入输出为主作业优先级最高,输入输出均匀的作业其次,而计算为主作业的优先级最低。
答:该计算机有一个专用硬件寄存器,它始终存放指向当前运行进程的PCB 的指针。当系统中发生了一个事件,如FO 结束事件,CPU 便可把运行进程的上下文保存到专用硬件寄存器指针指向的PCB 中保护起来,然后,CPU 转向中断向量表,找到设备中断处理程序入口,让专用硬件寄存器指针指向(设备)中断服务例程,于是,便可启动中断服务例程工作。
作业 |
提交时间 |
运行时间 |
开始时间 |
完成时间 |
周转时间 |
带权周转时间 |
1 2 3 |
10 : 00 10 : 10 10 : 25 |
2 : 00 1 : 00 0 : 25 |
|
|
|
|
平均作业周转时间= 平均作业带权周转时间W = |
答:
答:( l )是先进先出算法。因为在就绪队列中的进程比在CPU 上运行的进程的优先数提高得快,故进程切换时,先进入就绪队列的进程优先权就越高。
( 2 )是后进先出算法。因为在就绪队列中的进程比在CPU 上运行的进程的优先权下降得快,故后进入就绪队列的进程此先进入的进程的优先权高。
作业 |
作业提交时刻 |
运行时间/h |
其中 |
|
I/O时间/h |
CPU时间/h |
|||
Job1 |
8.0 |
0.36 |
0.18 |
0.18 |
Job2 |
8.2 |
0.32 |
0.16 |
0.16 |
Job3 |
8.4 |
0.36 |
0.18 |
0.18 |
分析时间段:
① 8.0~8.2时间内: 只有Job1,不会浪费时间, 在这0.2h内, 由于(1)每道作业的I/O时间占总运行时间的一半,所以有0.1h的时间用于I/O,剩余0.1用于CPU,因此 在8.2时刻, Job1还剩余0.36-0.2 = 0.16h的时间需要运行
② 8.2~8.4时间内, Job2开始运行, 同时Job1也在运行, 由于CPU同一时刻只能处理一个作业, 因此会发生进程切换, 在这0.2h内, 会浪费0.2×20%=0.04h的时间, 那么实际可运行的时间就只有0.2-0.04=0.16h, 在前0.08h中,可以让Job1运行CPU0.08h,同时, Job2可以运行I/O 0.08h, 在后0.08h中,Job1运行I/O 0.08h, Job2运行CPU0.08h, 这时,也就是8.4时刻, Job1运行完毕。Job2还剩下0.16的运行时间, 其中各占一半。
③ 8.4时刻, 此时Job3也开始运行, 同样会发生调度, 那么在8.2~8.6这0.2h内, 可用运行时间同样为0.16, 前0.08: Job2 CPU, Job3 I/O 后0.08: Job3CPU, Job2 I/O, 然后8.6时刻, Job2也就运行完毕
④ 8.6时刻, 只有Job3, 不需要调度, 还剩下CPU和I/O各0.1, 也就是8.6+0.1+0.1=8.8, Job3结束
所以,job1,2,3运行完成的时刻分别为:8.4、8.6、8.8
答: T =( 155 + 95 + 20 + 55 + 15 + 20 ) / 6 = 60
( 1 )列出所有作业进入内存时间及结束时间。
( 2 )计算平均周转时间。
答:每个作业运行将经过两个阶段:作业调度(SJF 算法)和进程调度(优先数抢占式)。另外,批处理最多容纳2 道作业,更多的作业将在后备队列等待。
各作业周转时间为:作业A 70 ,作业B 30 ,作业C 90 ,作业D 90 。平均作业周转时间为70 分钟。
答:( l )作业调度选择的作业次序为:作业1 、作业3 、作业4 、作业2 和作业5 .
( 2 )全部作业运行结束的时间9 : 30 。
( 3 )周转时间:作业1 为30 分钟、作业2 为55 分钟、作业3 为40 分钟、作业4 为40 分钟和作业5 为55 分钟。
平均作业周转时间=44 分钟。
( 4 )最大作业周转时间为55 分钟。
答:( 1 ) FIFO 算法选中作业执行的次序为:A 、B 、D 、C 和E 作业平均周转时间为63分钟
( 2 ) SJF 算法选中作业执行的次序为:A 、B 、D 、E 和C 。作业平均周转时间为58分钟
答:
FIFO 算法选中作业执行的次序为:SJF 算法选中作业执行的次序为:
(l ) A 、B 、D 、E 和C。作业平均周转时间为58 分钟。
( 2 ) A 、B 、E 、D 和C。作业平均周转时间为56 分钟。
var B : array [ 0 , k-1 ] of item ;
sread : semaPhore : = k ;
smanage : semaPhore : = 0 ;
swrite : semaphore : = 0 ;
rptr : integer : = O ;
mptr : integer : = O ;
wptr :integer : = 0 ;
x : item
cobegin
process reader ; process manager ; process writer ;
begin begin begin
LI : read a message intox ; L2 : P ( smanage ) ; L3 : P ( swnte ) ;
P ( sread ) ; x:=B[mptr]; x:=B[swrite];
B[rptr]:=x; mptr:=(mptr+1) mod k; wptr:=(wptr+1) mod k;
Rptr:=(rptr+1) mod k; manage the message in x; V(sread);
V(smanage); B[mptr]:=x; print the message in x;
Goto L1; V(swrite); goto L3;
End; goto L2; end;
End;
coend
var A , B :array [ 0 , k -l ] of item ;
sPut1 : semaphore:=k;
SPut2: semaPhore:=k;
sget1 : semaPhore : = 0 ;
sget2 : semaphore : = 0 ;
put1 :integer :=O ;
put2:integer : = 0 ;
get1 :integer :=O ;
get2 : integer : = O ;
cobegin
process reader ; processn manager; process Writer ;
begin begin begin
Ll : read a message into x ; L2 : P ( sgetl ) ; L3 : P ( sgetZ ) ;
P ( SPut1 ) ; x : = A [ get1] ; x : = B [get2];
A [put1]:=x ; get1 :(get1+1 ) mod k ; get2:=(get2 + l ) mod k ;
Put1:=(put1+1) mod k; V(sput1); V(sput2);
V(sget1); manage the message into x; print the message in x;
Goto L1; P(sput2); goto L3;
Put2:=(put2+1) mod k;
V(sget2);
Goto L2;
End;
Coend
答:所采用的互斥信号量初值不同。
1 )互斥信号量初值为1 ,变化范围为[-n+l , 1 ]。
2 )互斥信号量初值为m ,变化范围为[-n+m , m ]。
答: 我们来分析一下,对于两个程序的语句,我们标上①②....
1 2 3和5 6 7基本不受并发编程的影响,所以此时 x = 10 y = 4;
如果③比⑧先运行,z = 5 , 此时如果④比⑧还要先运行的话, y = 9 z = 15,否则,z = 15 y = 19
如果⑧比③先运行, 那么x = 10 y = 9 z = 5;
所以有三种情况:
x = 10 y = 9 z = 15
x = 10 y = 9 z = 19
x = 10 y = 9 z = 5
答:
R(S2) = {a,b,x} W(S2) = {b} R(S3) = {c,x} W(S3) = {c} R(S4) = {b,c,d} W(S4) = {d}
使用Bernstein条件,因为,R(S2)∩W(S3)∪R(S3)∩W(S2)∪W(S2)∩W(S3) = ∅ 所以,S2和S3可以并发执行
因为,R(S3)∩W(S4)∪R(S4)∩W(S3)∪W(S3)∩W(S4) = {c} 所以,S3和S4不可以并发执行
答:1 )使用信号量和P 、v 操作:
var name :array [ l …100]of A ;
A = record
number :integer ;
name:string ;
end
for i : = 1 to 100 do {A [ i ].number :i;A [ i ].name :null;}
mutex , seatcount : semaphore ;
i : integer ;mutex : = l ; seatcount : = 100 ;
cobegin
{
process readeri ( var readename:string ) (i=1 , 2 …)
{
P ( seatcount ) ;
P (mutex ) ;
for i : = 1 to 100 do i++
if A [ i ].name=null then A [ i ].name:readername;
reader get the seat number=i;/*A[I].number
V ( mutex )
进入阅览室,座位号i ,座下读书;
P ( mutex ) ;
A[i]name:null ;
V (mutex ) ;
V(seatcount);
离开阅览室;
}
}
coend
2 )使用管程操作:
TYPE readbook=monitor
VAR R: condition ;
I,seatcount :integer;
name:array [ l:100] of string ;
DEFINE rcadercome, readerleave ;
USE check , wait , signal , release ;
Procedure readercome ( readername )
begin
check ( IM ) ;
if seatcount≥100 wait ( R,IM )
seatcount : = seatcount + 1 ;
for i=1 to 100 do i++
if name[i] ==null then name[i]:= readername;
get the seat number = i ;
release ( IM ) ;
end
procedure readerleave ( readername )
begin
check ( IM ) ;
seatcount--;
for i = 1 to 1 00 do i++
if name[i ]readername then name[i]:null;
release ( IM ) ;
end
begin
seatcount : = 1OO ; name:=null ;
end
cobegin
{
process readeri ( i = 1 , 2 .… )
begin
readercome ( readername);
read the book ;
readerleave ( readername);
leave the readroom;
end
}
coend.
答1 :实质上是两个进程的同步问题,设信号量s1 和s2 分别表示可拣白子和黑子,不失一般性,若令先拣白子。
var S1 , S2 : semaphore;
S1 : = l; S2 :=0;
cobegin
{
process P1
begin
repeat
P( S1 ) ;
拣白子
V ( S2 ) ;
until false ;
end
process P2
begin
repeat
P ( S2 ) ;
拣黑子
V (S1 ) ;
until false ;
end
}
coend .
答:可以采用形如waituntil <条件表达式>的同步原语。如waituntil ( numbersum + number < K ) 表示进程由于条件不满足而应等待,当进程号累加和小于K 时,系统应唤醒该进程工作.
在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开门让乘客上下车。因此,司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步。应设置两个信号量:S1 、S2 ;S1 表示是否允许司机启动汽车(其初值为0 ) ;S2 表示是否允许售票员开门(其初值为0 )。用P 、v 原语描述如下:
var S1 , S2 : semaphore ;
S1=0;S2=0;
cobegin
{
driver ( ) ;
busman ( ) ;
}
coend
driver ( )
begin
while ( 1 ) {
P ( S1 )
启动车辆;正常行车;到站停车;
V ( S2 ) ;
}
end
busman ( )
begin
while ( 1 ) {
关车门;
V ( 51 )
售票;
P ( S2 )
开车门;
上下乘客;
}
end
答:典型的进程同步问题,可设四个信号量51 、S2 、S3 和S4 来协调进程工作。
var S1 , S2 ,S3 , S4 : semaphore ;
S1 : = 1 ;S2 :=S3 : = S4 : = 0 ;
cobegin
{ process P1
begin
repeat
有顾客到来;
P ( S1 );
接受顾客点菜;
V ( 52 );
untile false;
end
process P2
begin
repeat
P (S2 ) ;
准备顾客的饭菜;
v ( S3 ) ;
untile false ;
end
process P3
begin
repeat
P (S3 ) ;
将做好的饭菜打包;
V ( S4 ) ;
untile false ;
end
process P4
begin
repeat
P( 54 ) ;
收款并提交食品;V ( 51 ) ;
ufltile false ;
end
}
coend.
答:
( 1 )共有10 种交错执行的路径:
A 、B 、C 、D 、E; A 、B 、D 、E 、C; A 、B 、D 、C 、E ;
A 、D 、B 、E 、C; A 、D 、B 、C 、E; A 、D 、E 、B 、C ;
D 、A 、B 、E 、C; D 、A 、B 、C 、E; D 、A 、E 、B 、C ; D 、E 、A 、B 、C 。
( 2 )把语句编号,以便于描述:
P 1 (){ P2(){
repeat repeat
k:=k×2 ;① print k ;③
k:=k+1 ; ② k:=0 ;④
until false ; until false ;
} }
首先, K 的初值为5 ,故P1 执行两个循环后,K = 23 。
其次,语句并发执行有以下情况:
① 、② 、③ 、④ ,这时的打印值为:47
③ 、④ 、① 、② ,这时的打印值为:23
① 、③ 、② 、④ ,这时的打印值为:46
① 、③ 、④ 、② ,这时的打印值为:46
③ 、① 、② 、④ ,这时的打印值为:23
③ 、① 、④ 、② ,这时的打印值为:23
由于进程P1和P2 并发执行,共享了变量K ,故产生了‘结果不唯一’。
答:( 1 )用信号量实现管程;
Hoare 是用信号量实现管程的一个例子,详见课文内容。下面介绍另一种简单方法:每一个管程都对应一个mutex ,其初值为1 ,用来控制进程互斥调用管程。再设一个初值为0 的信号量,用来阻塞等待资源的进程。相应的用信号量实现的管程库过程为:
Var mutex,c:semaphore ;
mutex:=1 ; c:=0 ;
void enter-monitor ( ) /*进入管程代码,保证互斥
P ( mutex ) ;
}
void leave-monitor-normally ( )/*不发信号退出管程
{
V ( mutex ) ;
}
void leave-with-sigal(c) /*在条件c 上发信号并退出管程,释放一个等待c 条件的进程。{注意这时没有开放管程,因为刚刚被释放的进程己在管程中。
V ( c ) ;
}
void wait(c) /*等待条件c ,开放管程
{
V ( mutex ) ;
P (c) ;
}
( 2 )用管程实现信号量。
TYPE semaphore=monitor
VAR S ; condition ;
C:integer ;
DEFINE P , V ;
USE check , wait , signal , release ;
procedure P
begin
check ( IM ) ;
C:= C-1 :
if C < 0 then wait ( S,IM ) ;
release ( IM ) ;
end
procedure V
begin
check ( IM ) :
C : = C + 1 ;
if C≤0 then signal ( S,IM ) ;
release ( IM ) ;
end
begin
C:=初值;
End.
答:( 1 )用消息传递实现管程;
用消息传递可以实现信号量(见13 ( 2 ) ) ,用信号量可以实现管程(见11 (1 ) ) ,那么,把两种方法结合起来,就可以用用消息传递实现管程。
( 2 )用管程实现消息传递。
TYPE mailbox=monitor
VAR r , k , count:integer ;
buffer :array[0…n-1] of message ;
full , empty:condition ;
DEFINE add , get ;
USE check , wait , signal , release ;
procedure add ( r ) ;
begin
check ( IM ) ;
if count=n then wait ( full,IM ) ;
buffer [r]:=message ;
r:=(r+1) mod n
count:=count + 1 ;
if count = 1 then sighal ( empty , IM ) ;
release ( IM ) ;
end
procedure get ( m ) ;
begin
check ( IM ) ;
if count = 0 then wait ( empty , IM ) ;
m:=buffer [ k 」;
count : = count-1 ;
if count=n-1 then signal ( full , IM ) ;
release ( IM ) ;
end
begin
r:= 0 ; k:= 0 ; count:=0 ;
end
答:( l )用信号量实现消息传递;
1 )把消息队列组织成一个共享队列,用一个互斥信号量管理对该队列的入队操作和出队操作.
2 )发送消息是一个入队操作,当队列存储区满时,设计一个同步信号量阻塞send 操作。
3 )接收消息是一个出队操作,当队列存储区空时,设计另一个同步信号量阻塞receive 操作。
( 2 )用消息传递实现信号量。
l )为每一个信号量建立一个同步管理进程,它包含了一个计数器,记录信号量值;还为此信号量设立一个等待进程队列
2 )应用进程执行P 或V操作时,将会调用相应P 、V库过程。库过程的功能是:把应用进程封锁起来,所执行的P 、V 操作的信息组织成消息,执行send 发送给与信号量对应的同步管理进程,之后,再执行receive 操作以接收同步管理进程的应答。
3 )当消息到达后,同步管理进程计数并查看信号量状态。如果信号量的值为负的话,执行P 操作的应用进程被阻塞,挂到等待进程队列,所以,不再要送回答消息。此后,当V 操作执行完后,同步管理进程将从信号量相应队列中选取一个进程唤醒,并回送一个应答消息。正常情况下,同步管理进程回送一个空应答消息,然后,解锁执行P 、V 操作的应用程序。
semaphore fork[5];
for (int i=0;i<5;i++)
fork[i]=1;
semaphore mutex = 1 ;
Cobegin
process philosopher(i) { //i= 0,1,2,3,4
while(true) {
think( );
P(metex);
P(fork[i]);
P(fork[(i+1)%5]);
V(metex);
eat( );
V(fork[i]);
V(fork[(i+1)%5]);
}
}
coend
之后的信号量和P、V操作都差不多,略过啦...
答:
(1)各个进程还需要的资源数 Need(Cki - Aki)分别为p1 = (2,2,2),p2 = (1,0,2),p3 = (1,0,3),p4 = (4,2,0)
(2) 如表格所示,系统处于安全状态,存在安全序列(p2,p1,p3,p4)
进程 |
Work |
Allocation |
Need |
Work+Allocation |
Finish |
p2 |
(1,1,2) |
(5,1,1) |
(1,0,2) |
(6,2,3) |
true |
p1 |
(6,2,3) |
(1,0,0) |
(2,2,2) |
(7,2,3) |
true |
p3 |
(7,2,3) |
(2,1,1) |
(1,0,3) |
(8,2,6) |
true |
p4 |
(8,2,6) |
(0,0,2) |
(4,2,0) |
(12,4,6) |
true |
(3) Request2(1,0,1) <= Need2(1,0,2) 且 Request2(1,0,1) <= Available(1,1,2),尝试进行资源分配,Need2(0,0,1),Acolation2(6,1,2),Available(0,1,1),如下表,存在安全序列(p2,p1,p3,p4),系统可以把资源分给它
进程 |
Work |
Allocation |
Need |
Work+Allocation |
Finish |
p2 |
(0,1,1) |
(6,1,2) |
(0,0,1) |
(6,2,3) |
true |
p1 |
(6,2,3) |
(1,0,0) |
(2,2,2) |
(7,2,3) |
true |
p3 |
(7,2,3) |
(2,1,1) |
(1,0,3) |
(8,2,6) |
true |
p4 |
(8,2,6) |
(0,0,2) |
(4,2,0) |
(12,4,6) |
true |
(4)request1( 1 ,0, 1 ) <= Need1(2,2,2)但是 request1( 1 ,0, 1 ) > Available(0,1,1),所以资源不足,无法分配
(5) 虽然request3 ( 0 ,0, 1 ) <= Need3(1,0,3) 且 request3 ( 0 ,0, 1 ) <= Available(0,1,1) 但是下表中分配资源的时候无法分配
答:
(1)如下表:系统此时处于安全状态,存在安全序列(P0,P3,P1,P2,P4)
process |
Need |
|||
A |
B |
C |
D |
|
P0 |
0 |
0 |
1 |
2 |
P1 |
1 |
7 |
5 |
0 |
P2 |
2 |
3 |
5 |
6 |
P3 |
0 |
6 |
5 |
2 |
P4 |
0 |
6 |
5 |
6 |
process |
Work |
Allocation |
Need |
Work+Allocation |
Finish |
P0 |
(1,6,2,2) |
(0,0,3,2) |
(0,0,1,2) |
(1,6,5,4) |
True |
P3 |
(1,6,5,4) |
(0,3,3,2) |
(0,6,5,2) |
(1,9,8,6) |
True |
P1 |
(1,9,8,6) |
(1,0,0,0) |
(1,7,5,0) |
(2,9,8,6) |
True |
P2 |
(2,9,8,6) |
(1,3,5,4) |
(2,3,5,6) |
(3,12,13,10) |
True |
P4 |
(3,12,13,10) |
(0,0,1,4) |
(0,6,5,6) |
(3,12,14,14) |
True |
(2) request2 ( 1 、2 、2 、2 ) <= Need2(2,3,5,6) 并且 request2 ( 1 、2 、2 、2 ) <= Available(1,6,2,2) 如下表进行资源分配: Available(0,4,0,0)、Need2(1,1,3,4)、Allocation(2,5,7,6),无法分配,不安全
process |
Work |
Allocation |
Need |
Work+Allocation |
Finish |
(0,0,3,2) |
False |
ps:不画图了,和前面的图差不多
答:( l )此时可以找出进程安全序列:P4 , P1 , P5 , P2 , P3 。故系统处于安全状态。
( 2 )可以分配,存在安全序列:P4 , P1 , P5, P2 , P3 。
( 3 )不可分配,系统进入不安全状态。
答:(l)由于系统目前还有150-25-40-45=40 个单元,P4 进程到达,把25 个单元分给它。这时系统还余15 个单元,可把15 个单元分给P3 ,它执行完后会释放60 个单元。于是可供P1 (还要45 个单元), P2 (还要20 个单元), P4(还要35 个单元)任何一个执行。
存在安全序列为: p1,p2,p3,p4
(2)P4进程到达,P4最大需求60,最初请求35 。如果把35 个单元分给P4 ,系统还余5个单元,不再能满足任何一个进程的需求,系统进入不安全状态。
答:本题给出的表达式可分解为制约条件:
-N < X 产品数量-Y 产品数量
X 产品数量-Y 产品数量<M
也就是说,X 产品的数量不能比Y 产品的数量少N 个以上,X 产品的数量不能比Y 产品的数量多M 个以上。可以设置两个信号量来控制X 、Y 产品的存放数量:
SX 表示当前允许X 产品比Y 产品多入库的数量,即在当前库存量和Y 产品不入库的情况下,还可以允许SX个X产品入库;初始时,若不放Y而仅放X产品,则SX最多为M-1个。
sy 表示当前允许Y 产品比x 产品多入库的数量,即在当前库存量和x 产品不入库的情况下,还可以允许sy 个Y 产品入库.初始时,若不放X 而仅放Y 产品,则sy 最多为N -1 个。当往库中存放入一个X 产品时,则允许存入Y 产品的数量也增加1 ,故信号量sy 应加1 :当往库中存放入一个Y 产品时,则允许存入X 产品的数量也增加1 ,故信号量sx 应加1 .
var mutex : semaphore = 1 /*互斥信号量*/
sx , sy : semaphore;
sx = M-1 ; sy = = N - l ;
cobegin
{
process X
{repeat
P(sx ) ;
P (mutex ) ;
将X 产品入库;
V(mutex ) ;
V ( sy ) ;
until false
}
process Y
{ repeat
P ( sy ) ;
P (mutex ) ;
将Y 产品入库;
V (mutex ) ;
V ( px ) ;
until false
}
}
coend .
答:( l )系统四个进程需要使用的资源数为Rl 各2 台,R2 各1 台。可见资源数不足,同时各进程申请资源在先,有可能产生死锁发生的四个条件,故系统可能产生死锁。( 2 )当三个进程执行完申请资源Rl ,开始执行申请资源R2 时,第四个进程会因没有资源Rl 而被阻塞。当三个进程执行完申请资源R2 后,系统还剩1 个R2 资源。而这三个进程因执行申请第二个资源Rl 而全部被阻塞,系统进入死锁。
答:( l )用信号量和P 、v 操作.
类似于课文中的答案,扩充如下:1 )同步信号量初值为2 ; 2 )要引进一个互斥信号量mutex , 用于对盘子进行互斥:3 )盘子中每一项用橘子、苹果2 个枚举值。
Var
plate ARRAY [ 0 , 1] of ( apple , orange ) ;
flag0 , fiag1:=boolean ;
mutex : semaphore ;
sp : semaphore; / *盘子里可以放几个水果*/
sg1 , sg2 : semaphore ; / *盘子里有桔子,有苹果* /
sp : = 2 ; / *盘子里允许放入二个水果*/
sg1 :=sg2 :=0 ; / *盘子里没有桔子,没有苹果*/
flag0:=flag1:=false ; mutex :=1 :
cobegin process son
process father begin
begin L3 : P (sg1 ) ;
L1 :削一个苹果; P( mutex ) ;
P ( sp ) ; if(flag0&flte[0]==桔子) then
If(flag0==false) then else{x:=plate[1];flag1:=false;}
{ plate[0]:=苹果;flag1:=true;} v(mutex);
else {plate[1]:=苹果;flag1:=true;} V(sp) ;
v (mutex ); 吃桔子;
v(sg2) goto L3;
goto Ll ; end;
end ;
process mother process daughter
begin begin
L2 :剥一个桔子; L4 : P ( 592 ) :
P ( sp ) ; P ( mutex )
P ( mutex ) ; if ( flag0 & plate [0]==苹果)then
if ( flag0==false )then {x:=plate [01]; flag0:=false ; }
{plate[0]:=桔子;flag0:=true;) else { x:==plate[1] ; flag1:=false ; }
else {plate[1]:==桔子;flag1:=true ; } V ( mutex ) ;
V (mutex) ; V ( sp ) ;
V (sg1) ; 吃苹果;
goto L2 ; goto L4;
end ; end ;
coend .
( 2 )用管程.
TYPE FMSD = MONITOR
VAR plate ARRAY [ 0 , 1 ] of ( apple , orange ) ;
Count:integer ; flag0,flag1:boolean ;
SP ,SS , SD : codition ;
DEFFINE put,get ;
USE wait,signal , check , release ;
procedure put(var fruit:( apple ,orange ) ) ;
begin
check(IM ) ;
if ( count==2 ) then wait(SP , IM ) ;
else{if(flag0==false) then
{plate[0]:=fruit; flag0:=true;}
Else{plate[1]:=fruit;flag1:=true;}
Count:=count+1;
If(fruit==orange) then signal(ss,IM);
Else signal(SD,IM);
}
Release(IM);
End;
Procedure get(varfruit:(apple,orange),x:plate);
Begin
Check(IM);
If (count==0) or plate <>fruit
Then begin
If(fruit==orange) then wait(SS,IM);
Else wait(SD,IM);
End;
Count:=count-1;
If(flag0&plate[0]==fruit) then
{x:=plate[0];flag0:=false;}
Else{x:=plate[1];flag1:=false;}
Signal(SP,IM);
Release(IM);
End;
Begin
Count:=0;flag0:=false;flag1:=false; SP:=0;ss:=0;sd:=0;
Plate[0]:plate[1]:=null;
End;
Main()
{cobegin
Process father
Begin
While(1)
{准备好苹果;
Call FMSD.put(apple);
……
}
End;
Process mother
Begin
While(1)
{
准备好桔子;
Call FMSD.put(orange);
……
}
End;
Process son
Begin
While(1)
{call FMSD.get(orange,x);
吃取到的桔子;
……
}
End;
Process daughter
Begin
While(1)
{
Call FMSD.get(apple,x);
吃取到的苹果;
……
}
End;
}
Coend
答:互斥资源有水井和水缸,分别用mutex1和mutex2来互斥。水桶总数仅3 只,由信号量count 控制,信号量empty 和full 控制入水和出水量。
var mutex1 , mutex2 : semaphore ;
empty ,full : semaphore ;
count : integer ;
mutex1 : mutex2 : = 1 ; count : = 3 ; empty : = 10 ;full :=0 ;
cobegin
{
process 小和尚(打水)i ( i = 1 , 2 ,… )
begin
repeat
P ( e mpty ) ; / *水缸满否?
P ( count ) ; / *取得水桶
P ( mutexl ) ; / *互斥从井中取水
从井中取水;
V ( mutex1) ;
P ( mutex2) ; / *互斥使用水缸
倒水入缸;
V ( mutex2 ) ;
V ( count ) ; / *归还水桶
v ( full ) ; / *多了一桶水
untile false ;
end
process 老和尚(取水)j(j=1 , 2 ,… )
begin
repeat
P ( full ) ; / *有水吗?
P ( count ) ; / *申请水桶
P ( inutex2 ) ; / *互斥取水
从缸中取水;
V ( mutex2 ) ;
V ( count ) ; / *归还水桶
V ( empty ) ; / *水缸中少了一桶水
untile false ;
end
}
coend .
页框数 |
FIFO |
LRU |
OPT |
3 4 5 6 |
16 80% 14 70% 12 60% 9 45% |
15 75% 10 50% 8 40% 7 35% |
11 55% 8 40% 7 35% 7 35% |
答:
( 1 )采用FIFO 为9 次,9 / 12 = 75 %。采用LRU 为8 次,8 / 12 = 67 %。
( 2 )采用FIFO 和LRU 均为9 次,9 / 13 = 69 %。
答:( l )作业的物理块数为3 块,使用FIFO 为9 次,9 / 12 = 75 %。使用LRU 为7 次,7 / 12 = 58 %。使用OPT 为6 次,6 / 12 = = 50 %。
作业的物理块数为4 块,使用FIFO 为6 次,6 / 12 = 50 %。使用LRU 为6 次,6 / 12 = 50 %。使用OPT 为5 次,5 /12 = 42 %。
( 2 )作业的物理块数为3 块,使用FIFO 为9 次,9 / 12 = 75 %。使用LRU 为10 次,10 / 12 = 83 %。使用OPT 为7 次,7/12 = 58 %。
作业的物理块数为4 块,使用FIFO 为10 次,10 / 12 = 83 %。 使用LRU 为8 次,8/12=66%。使用OPT为6次,6/12=50%.
其中,出现了Belady 现象,增加分给作业的内存块数,反使缺页中断率上升。
答:( 1 )空闲分区如图所示。
分区号 |
分区长 |
1 2 3 4 5 6 7 8 |
10K 4K 20K 18K 7K 9K 12K 15K |
1. 首次适应算法
12KB 选中分区3 ,这时分区3 还剩8KB 。10KB 选中分区1 ,恰好分配故应删去分区1 。9KB 选中分区4 ,这时分区4 还剩9KB 。
2 )最佳适应算法
12KB 选中分区7 ,恰好分配故应删去分区7 。1OKB 选中分区1 ,恰好分配故应删去分区1 。9KB 选中分区6 ,恰好分配故应删去分区6 。
3 )最差适应算法
12KB 选中分区3 ,这时分区3 还剩8KB 。1OKB 选中分区4 ,这时分区4 还剩8KB 。9KB 选中分区8 ,这时分区8 还剩6KB 。
4 )下次适应算法
12KB 选中分区3 ,这时分区3 还剩8KB 。10KB 选中分区4 ,这时分区4 还剩8KB 。9KB 选中分区6 ,恰好分配故应删去分区6 。
( 2 )原始分区情况同上图。
1 )首次适应算法
12KB 选中分区3 ,这时分区3 还剩8KB 。10KB 选中分区1 ,恰好分配故应删去分区1 。15KB 选中分区4 ,这时分区4 还剩3KB 。最后无法满足18KB 的申请,应该等待。
2 )最佳适应算法
12KB 选中分区7 ,恰好分配故应删去分区7 。1OKB 选中分区1 ,恰好分配故应删去分区1 。15KB 选中分区8 ,恰好分配故应删去分区8 。18KB 选中分区4 ,恰好分配故应删去分区4 。
3 )最差适应算法
12KB 选中分区3 ,这时分区3 还剩8KB 。10KB 选中分区4 ,这时分区4 还剩8KB 。15KB 选中分区8 ,恰好分配故应删去分区8 。最后无法满足18KB 的申请,应该等待。
4 )下次适应算法
12KB 选中分区3 ,这时分区3 还剩8KB 。1OKB 选中分区4 ,这时分区4 还剩8KB 。15KB 选中分区8 ,恰好分配故应删去分区8 。最后无法满足15KB 的申请,应该等待。
分区号 |
分区长 |
1 2 3 4 5 |
100KB 500KB 200KB 300KB 600KB |
答:按题意地址从小到大进行分区如图所示。
( 1 ) 1)first-fit 212KB 选中分区2 ,这时分区2 还剩288KB 。417KB 选中分区5 ,这时分区5 还剩183KB 。112KB 选中分区2 ,这时分区2 还剩176KB 。426KB 无分区能满足,应该等待。
2 ) best-fit 212KB 选中分区4 ,这时分区4 还剩88KB 。417KB 选中分区2 ,这时分区2 还剩83KB 。112KB 选中分区3 ,这时分区3 还剩88KB 。426KB 选中分区5 ,这时分区5 还剩174KB 。
3 ) worst-fit 212KB 选中分区5 ,这时分区5 还剩388KB 。417KB 选中分区2 , 这时分区2 还剩83KB 。112KB 选中分区5 ,这时分区5 还剩176KB 。426KB 无分区能满足,应该等待。
( 2 )对于该作业序列,best-fit 算法能最有效利用内存
答:32-9-11= 12 ,所以,页面大小为2的12次方B = 4KB ,页面的个数为2的20次方个。
答:如下图进行分析,内存有3 个和4 个空闲页框的情况下,页面替换次数为9 次和10 次。出现了Belady 即现象,增加分给作业的内存块数,反使缺页中断率上升。
答:
数据在缓存中的比率为:( n - 1 ) / n
数据在内存中的比率为:( 1 -(n - 1 ) / n )×( m - 1 ) / m = ( m - 1 )/nm
数据在辅存中的比率为:( 1 -(n -1 ) / n )×( 1-(m -1 ) / m )1/nm
故数据平均访问时间是=( ( n- 1 ) / n ) × A + ( ( 1 -(n - 1 ) / n ) × ( m-1 ) / m ) × ( A + B ) + ( ( 1-(n -1 ) / n ) ×( 1-(m-1)/ m ) ) × ( A + B + C ) = A + B / n + C / nm
20*0.9+0.1*0.6*(60+20)+0.1*0.4*(12000+60+20) = 506 ns
答:(1) 2.4 微秒 (2 )0.8 × 1.2 + 0.2 × 2.4 = 0.76 + 0.45 = 1.24 微秒
段号 |
段首址 |
段长 |
0 |
219 |
600 |
1 |
2300 |
14 |
2 |
90 |
100 |
3 |
1327 |
580 |
4 |
1952 |
96 |
答:(1) 649 (2) 1727 (3) 2301 (4)越界 (5) 1994
答:虚拟地址11123456 (八进制)转化为二进制为:
001 001 001 010 011 100 101 110
其中前面为页号,而后10 位为位移:001 001 001 010 01-------1 100 101 110 。由于主存大小为218 B,页面尺寸为1KB ,所以,主存共有256 块。所以,块号为100 (八进制)是合法地址,于是,物理地址为100 (八进制)与位移1 100 101 110 并接,得到:八进制物理地址001000000 1 100 101 110 = 201456 (八进制)。
0KB |
|
15KB |
100KN |
..... |
|
125KB |
50KB |
...... |
答:首次适应、最坏适应算法处理这个作业序列可以满足分配,最佳适应算法不行。因为后者会分割出无法使用的碎片,浪费内存,从而,不能满足所有作业的内存需求。
答:
逻辑地址211×24 ,故为15 位。内存大小为23×211 = 214B = 16KB
答:因为逻辑地址长度为16 位,而页面大小为4096字节,所以,前面的4 位表示页号。把ZF6AH 转换成二进制为:00 10 1 1 11 0110 1010 ,可知页号为2 。故放在14 号物理块中,写成十六进制为:EF6AH
答:100 * 100 = 10000 个数据,每页可以存放200 个整数,故一共存放在50 个第99 行、第100 行缺页中断为5000 次。由于元素按行存储,第1 行、第2 行放在第1 页,… 第99行、第100行放在第50 页。故对于程序A ,缺页中断为50 次。对于程序B,缺页中断为5000次。
答:因为页长8KB = 2的13次方 占用13 位,所以,页表项有2的35次方个。反置页表项有2的19次方个。
答:t1 时刻的工作集为:{ l , 2 , 3 , 6 , 7 , 8 , 9 }。t 时刻的工作集为:{ 3 , 4 }。
答:( 1 )系统可能出现抖动,可把暂停部分进程运行。( 2 )系统运行正常,可增加运行进程数以进一步提高资源利用率。( 3 )处理器和设备和利用率均很低,可增加并发运行的进程数。
答:虚地址OACSH 对应的物理地址为:12CSH 。而执行虚地址IACSH 会发现页表中尚未有分配的页框而发生缺页中断,由系统另行分配页框。
答:( 1 ) FIFO 淘汰page2 。
( 2 ) LRU 淘汰page1 。
( 3 )二次机会淘汰page1
答:当数组元素a [0] , a[1] ,… ,a [ 19 ] 存放在一个页面中时,其空间局部性和时间局部性较好,也就是说,在很短时间内执行都挂行循环乘法程序,而且数组元素分布在紧邻连续的存储单元中。当数组元素存放在不同页面中时,其时间局部性虽相同,但空间局部性较差,因为处理的数组元素分布在不连续的存储单元中。
答:快表命中率为75 % ,缺页中断率为10 % ,所以,内存命中率为15%。故内存的有效存取时间=1×75 % + 2*15%+( 5000+2) *10%=501.25 微秒。
答:虚地址0BEBC ( 16 进制)的二进制形式为:0000 1 011 1110 10111100 。由于页面大小为4KB ,故其中后12 位是位移,所以,虚地址的页号为:11 。查页表分得内存对应页框号为:78 。己知内存空间为512KB ,故内存共有128 个页框,78 是合法物理块。把78 化为16 进制是4E ,虚地址OBEBC ( 16 进制)的实地址(16 进制)是:4EEBC 。
答:
( 1 ) 120ns*2 = 240ns
( 2 ) ( 120 + 20 ) *80 % +(120+120+20)*20%=174ns
答:( 1 )主存已分配表共有三项,由作业j1 、j2 、j3 占用,长度依次为:10k 、30k 和54k 未分配表共有三项:空闲区1 、空闲区2 和空闲区3 ,长度依次为18k 、40k 和70k 。( 2 )作业J4 装入时,采用直接分配,搜索未分配表,空闲区1 不能满足。所以,要继续搜索未分配表,空闲区2 可以满足J4 的装入要求。
答:( l ) 680 ( 2 ) 915 ( 3 ) 904 ( 4 )越界 ( 5 ) 1750 ( 6 )越界。
答:( l )页面访问序列为l , l , 2 , 2 , 1 , 4, 2 , 3 , 3 , 5 , 5 , 4 。
2 ) FIFO 为5 次,缺页中断率为5 / 12 科41.6 %。LRU 为6 次,缺页中断率为6 / 12 = 50 %。LRU 反比FIFO 缺页中断率高。
答:由题意可知,内存中可以存放3 个用户进程,而CPU 的利用率为:1-(70 % )3 , = 1 一(0 . 7 )3 = 65 . 7 %。再增加1M 内存,可增加2 个用户进程,这时CPU 的利用率为:1 -(70 % )5 , = 1 一(0 .7)5=83 . 2 %。故再增加1M 内存,吞吐率增加了:83 . 2 %/65 . 7 %-100 % =27 %。
答:( 500 % )=( l / 2 ) = 1 / 16 。
答:( 1 +n/k)微秒。
答:设快表命中率是x ,则内存命中率为1-x。于是:500 ( 1-x)+ 100x = = 2 00 ,解方程得x=75 %。
答:一个程序运行期间发生了15000 次缺页中断,由于缺页中断处理花2000 微秒(1 微秒是指令执行时间,于是这个程序缺页中断处理花了:2000 微秒米1 5000 = 30 秒。占了运行时间60 秒的一半。当可用内存是原来的两倍时,缺页中断次数减为一半,故有巧秒就能处理完。所以,这个程序运行需要时间为:45 秒。
答:见本章应用题7 。
答:段数2 2 = 4 ,每段有23 = 8 页,页大小为211= ZKB 。(a )故每段最大为214B = 16KB 。伪)逻辑她曳匕勿风爆七尺4 又、曰KB = 64KB 。
( c )若该任务访问到逻辑地址空间SABCH ,其二进制表示为:
0 101 1010 1011 1100
所以,逻辑地址表示为:01 011 010 1011 1100
SABCH 的逻辑地址为:第1 段第3 页,位移由后11 位给出。
答:由于页面长4KB ,页表项4B ,故每页可· 包含IKB 个页表项。由于限定最高层页表占1 页,即它的页表项为210个;而每个页表项指向一页,每页又存放页表项个数为210 个,依此类推,最多可以采用砚巧取整为6 级页表。
答:对于FIFO 、LRU 两种页面替换算法,缺页中断的上限和下限:为p 和n 。因为有n 个不同页面,无论怎样安排,不同页面进入内存至少要产生一次缺页中断,故下限为n 次。由于m
答:设最大缺页中断率为x ,则有:
( l - x ) *1 微秒+( 1 -70 % ) *X*8 毫秒+70 % *X *( 8 + 12 ) = 2 微秒
即得到-x +2400x + 14000x =1 ,解得:x 约为0 .00006 。
答:
( 1 )采用最佳适应算法效果好,120 , 50 。
( 2 )采用最环适应算法效果好,80 , 50 , 25 。
但采用首次适应与最坏适应算法效果不好。作业序列:25
但采用首次适应与最佳适应算法效果不好。作业序列:40
答:( 1 )当p=0 . 7 时,
Pl 平均存取时间为:60 + ( 1 -0 . 7 ) * 1 us = 360ns
PZ 平均存取时间为:80 + ( 1 -0 . 7 ) *0.9 us= 350ns
故计算机P2比P1 处理速度快。
( 2 )当p = 0 . 9 时,
P1 平均存取时间为:60 + ( 1 -0.9 ) * 1 us = 160ns
PZ 平均存取时l ' ed 为:80 + ( l -0 .9 ) *0 .9 us = 170ns
故计算机P1 比P2处理速度快。
答:定位第1个记录需10m s 。读出第1 个记录,处理花2ms ,这时已到了第4个记录,再转过18 个记录(花18ms )才能找到记录2 ,所以,读出并处理20 个记录的总时间:10 + 3 + ( l + 2 + 18 ) * 19 = 13 + 2 1 * 19 =412ms
如果给出优先分布20 个记录的方案为:1 , 8 , 15 ,2 , 9 , 16 , 3 , 10 , 17 , 4 , 11 , 18 , 5 , 12 , 19 , 6 , 13 , 20 , 7 , 14 。当读出第1 个记录,花2ms 处理后,恰好就可以处理记录2 ,省去了寻找下一个记录的时间,读出并处理20 个记录的总时间:
10+3+3*19=13+247=260ms
答:处理次序为:100 -110 -129 -147 -186 -78 -64 -41 -27 -18 -12-10 -8 。移动的总柱面数:264。
答:升序移动次序为:100 -110 -129 -147 -186 -78 -64 -41 -27 -18-12 -10 -8 。移动的总柱面数:264 。
降序移动次序为:100 -78 -64 -4l -27 -18 -12 -10 -8 -110 -129 -147 -186 。移动的总柱面数:268
答:80 号磁盘块
请求序列 |
柱面号 |
磁头号 |
扇区号 |
1 |
7 |
2 |
8 |
2 |
7 |
2 |
5 |
3 |
7 |
1 |
2 |
4 |
30 |
5 |
3 |
5 |
3 |
6 |
6 |
答:最少调度次序 :5.3.2.1.和4
答:(1 ) FCFs 为111 (2 ) SSTF 为61 (3 ) SCAN 为60 (先扫地址大的请求),为45 (先扫地址小的请求)。
答:( l )先来先服务算法FCFS 为565 ,依次为143 -86 -147 -91 -177 -94 -150 -102-175 -130 。( 2 )最短查找时间优先算法SSTF 为162 ,依次为143 -147 -150 -130 -102 -94 -91 -86-175 -177 。
( 3 )扫描算法SCAN 为169 ,依次为143 -147 -150 -175 -177 -199 -130 -102 -94 -91 -86 。( 4 )电梯调度为125,依次为143-147 -150 -175 -177 -130-102 -94 -91 -86 。
答:( l )对位于当前柱面的新请求,只要一到达就可得到服务,但对其他柱面的服务则不然。如SST 下算法,一个离当前柱面远的请求,可能其后不断有离当前柱面近的请求到达而得不到服务(饥饿)。
( 2 )可划定一个时间界限,把这段时间内尚未得到服务的请求强制移到队列首部,并标记任何新请求不能插到这些请求前。对于SSTF 算法来说,可以重新排列这些老请求,以优先处理。
( 3 )可避免分时进程等待时间过长而拉长响应时间。
答:采用SSTF 处理次序为:100 - 90 一80 一125 一140 一160 一190 一30 一29 一5 一20 一10 ,总柱面数为:3 10 。采用电梯调度处理次序为:100 - 90 一80 一30 一29 一25 一20 。10 一125 一140 一160 一190 ,总柱面数为:270 。
答:采用先来先服务处理次序为:100 一3 一376 一05 一132 一19 一61 一190 一398 - 29 -4-18 -40 ,总柱面数为:15960
采用SSTF 处理次序为:100 一132 一190 一05 一61 -40 一9 一3 一19 一18 -4 一376 一398 ,总柱面数
处理次序为:100 -132 一190 一205 一376 一398 一140 一29 一23 一19 一18 -4,总柱面数
( l )求IJB ,如整除则需”商”个块数,否则为”商+l ”个块数.
( 2 )把上述结果再除以K ,可求出存取这个文件需执行的拍操作次数。
答:( l )每个柱面的物理块数为20 XS = 160 块。
( 2 ) 606 / 160。得到商为3 ,余数为126 。故可知访求的物理位置在:第3 个柱面(0 柱面开始编号)的126 物理块中。
( 1 )间隙可以存放的字符数是:800 x 0 . 6 = 480 个字符。这时磁带的利用率为:160 / ( 48 +160 ) = 25 %
( 2 ) 1500* ( 480+160 ) / 800 = 1200 英寸。
( 3 )设成组块因子为x ,则有:
( 160x ) / ( 480 + 160x ) >=50 %
x >3 ,因而,记录成组的块因子至少为3 。
间隙可以存放的字符数是:800 *0.6=480 个字符。
( l )记录不成组时,一个逻辑记录占用一个物理块存储,这时磁带的利用率为:
200 / ( 480+200 )=29 % 占用磁带空间为:3200* ( 4 800 + 200 )/800 = 2720 英寸.( 2 )记录成组的块因子为8 时,这时磁带的利用率为:200 *8 / ( 4 800 + 200 *8 ) =?76 . 9 % 占用磁带空间为:3200 /8*( 480+200*8)/800 = l 040 英寸。
答:非优化存放,读一块数据需要时间为:13 *6 十100 十25 = = 203ms 因而,传输100 块文件需:2O300ms 。优化存放,读一块数据需要时间为:2*6 十100 + 25 = = 137ms 因而,传输100 块文件需:13700ms 。
答:
(1)FCFS 查找时间次序为:20 、10 、22 、2 、40、6、38、、查找时间为867ms
(2)最短查找优先查找次序为:20 、20 、22 ??10 、6 、2 、38 、40、查找时间为360ms
(3)电梯调度查找次序为:20 、20 、22 、38 、40 、10 、6 、2 ,查找时间为:348ms .
请求次序 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
欲访问的柱面号 |
160 |
40 |
190 |
188 |
90 |
58 |
32 |
102 |
答:( l )电梯调度算法查找次序为:80 、90 、102 、160 、188 、190 、58 、40 、32 ,总柱面数为:268 .
( 2 )最短查找优先查找次序为:80 、90 、102 、58 、40 、32 、160 、188 、190总柱面数为:250 。
答:屏幕信息显示以象素为单位,分辨率为640x 480 时,屏幕象素有640X480 = = 300 x 210 个。当用256 彩色显示时,每个象素用8 位二进数表示(2 、256 ) .因而,存储一屏
彩色的图像需要:8*300*210 位=300*210 字节== 300K 字节。
答:( 1 )由上述公式可知,逻辑磁盘块号x 为:
x = k*m*a+k*b+c =10*20*185+120+5= 37125
所以,柱面号为185 ,磁头号为12 ,道内块号为5 的磁盘块的逻辑磁盘块号为:37125 。( 2 )由上述公式可知,
a=(X-1 ) DIV ( k *m )=(1200-l )DIV ( 10*20=1199 DIV 200 = 5
b = ( ( x 一1 ) MOD ( k * m) ) DIV K=(( 1200 -1 ) MOD ( 10*20 ) ) DIV 10
= = ( 1199 MOD 200 ) DIV 10 = =199 DIV 10 = 10
c = ( ( x-l ) MOD ( k *m ) ) MOD k + l = ( ( 1200 一1 )MOD ( 10X20 ) ) MOD 10 + 1 = = ( 1 199 MOD 200 ) MOD 10 + 1 = 199 MOD 10 + l =9 + l = = 10
所以,逻辑磁盘块号为1200 ,它所对应的柱面号是5 、磁头号是19 及磁道内块号为
( 3 )转换公式为:
x = k*m*a 十k*b + c + 1
A=(x-1)DIV(k*m)
b = ( ( x 一1 ) MOD (k*m ) ) DIV K?
c = ( ( x 一1 ) MOD ( k*m )MOD k
答:由于磁带卷上的文件用“带标”隔开,每个文件的文件头标前后都使用了三个带标。
正常情况磁头应停在文件头标的前面,所以,只要计算带标的个数,就可找到所要文件。
1 )当i>=j 时,要正走磁带,
步1 组织通道程序正走磁带,走过“带标”个数为3* ( i –j)个
步2 组织通道程序读文件i 的文件头标。
步3 根据文件i 的文件头标信息,组织读文件信息。
2 )当i < j 时,要反走磁带,
步1 组织通道程序反走磁带,走过“带标”个数为3 *(j-i)个,同时还要后退一块,到达文件i 头标前。
步2 组织通道程序读文件i 的文件头标。
步3 根据文件i 的文件头标信息,组织读文件信息。
答:F = [B/R]
答:(1 )位示图占用字数为500 / 32 = 16 (向上取整)个字。
( 2 )第i 字第j 位对应的块号卜32*i + j 。
( 3 )申请时自上至下、自左至有扫描位示图跳过为1 的位,找到第一个迁到的0 位,根据它是第i 字第j 位算出对应块号,并分配出去。归还时已知块号,块号/32 算出第i 字第j 位并把位示图相应位清O 。
4.若两个用户共享一个文件系统,用户甲使用文件A 、B 、C 、D 、E ;用户乙要用到文件A 、D 、E 、F 。己知用户甲的文件A 与用户乙的文件A 实际上不是同一文件;甲、乙两用户的文件D 和E 正是同一文件。试设计一可以采用二级目录或树形目录结构来解决难题。
答:步1 将逻辑文件的字节偏移量转换为文件的逻辑块号和块内偏移。方法是:将逻辑文件的字节偏移量/盘块大小,商为文件的逻辑块号,余数是块内偏移。二步2 将文件的逻辑块号转换为物理块号。使用多重索引结构,在索引节点中根据氰逻辑块号通过直接索引或间接索引找到对应物理块号。
(1 、9000 LI =INT(9999 , 1024 ) = 9 Bl= MOD(9999 , 1024 )783
履其逻辑块号为9 ,故直接索引addrr81 中可找到物理块号。
(2 、15000 L2 = INT ( 15000, 1024 )17 BI = = MOD(15000 , 1024 ) = = 592 会其逻辑块号为17 ,通过一次间接索引addr [10]中可找到物理块号。
嚓(3 、420000 LI = =INT(420000 , 1024 )=4 10 Bl MOD(9000 , 1024 )=160 露其逻辑块号为410 ,通过二次间接索引addr [ ll ]中可找到物理块号.
答:在U NIX/Linux 系统中," / ' ’表示根目录," . ”是指当前目录,“..”是指父目录。在本题中当前目录是lusr / wang,故相对路径为../ast /xxx 文件实际上是usr 目录下的文件,故绝对路径名是呀厄叫沁以。
答:F 的存取权限为:rwxr-x...,表示文件主可对F 进行读、写及执行操作,同组用户可
对F 进行读及执行操作,但其他用户不能对F 操作。因为另一用户的组标识符gid 相同所以,允许访问。
1569 / 512 得到商为:3 ,余数为:33 。所以,访问的是互磁盘块的第33 个字节。
答:UNIX 口Linux 文件系统中,直接寻址为10 块,一次间接寻址为256 块,二次间接寻址为2562三次间接寻址为2563 块。 偏移为263 168 字节的逻辑块号是:263168 / 1024 = = 257.块内偏移量=263168 -257*l024 = 0 。由于10 < 257 < 256+ 10 ,故263168 字节在一次间接寻址内.
答:索引表长度为13 ,其中O 到9 项为直接寻址方式,后3 项为一次、二次和三次间接寻址。
步1 将逻辑文件的字节偏移量转换为文件的逻辑块号和块内偏移。方法是:将逻辑文件的字节偏移量可盘块大小(5 12 ) ,商为文件的逻辑块号,余数是块内偏移.步2 将文件的逻辑块号转换为物理块号。使用多重索引结构,在索引节点中根据逻辑块号通过直接索引或间接索引找到对应物理块号。再判别逻辑块号在10 块以内或以上,分别采用可直接寻址,一次、二次和三次间接寻址。
答:采用成组方式存放,块因子为2 。由于共有18 个逻辑记录,故占用了9 个物理块,而巧号逻辑记录占用的是第1512 = 8 (向上取整)物理块。因为,是连续文件物理块也是连续,所以,该逻辑记录占用的是12 + 8 -1 = 19 块.所以,第15 号逻辑记录读入内存缓冲区的过程如下:根据块因子,计算占用的相对物理块号8 :根据起始块号为12 ,计算出绝对物理块号19 ;把物理块号19 读入内存缓冲区;把所要的逻辑记录分解出来。
答:可以,文件名中可以用插入多个“/ ”来模拟文件分层。例如/usul /datafile/ data1和/user/datafil/data2但在此操作系统中,这些仅仅是包含“/ ' ’的单个文件名。
答:读取数据所需平均时间T=h*l + 4* ( 1 - h )= h + 40* ( 1 -h )。
( 1 )磁盘扇区总数为:10* 16* 100 = 16000 个,故位示图占用16000 / 8 = 2000 字节。( 2 )己知空白文件目录的每个目录项占5 个字节,而位示图占用2000 字节,也就是说2000 字节可容纳400 个文件目录项。当空白文件目录>400 时,空白文件目录大于位示图。
( 1 )位示图第15 个字的第7 位对应的块号=15 * 16 (字长)+ 7 = 247 ,而块号247 对应的:柱面号== 247 / ( 8 *4 )7 (从。编号,向下取整)
磁头号=( 247 MOD 32 ) / 4 == 5
扇区号== 2 47 MOD 32 MOD =3
( 2 )块号=柱面号x 柱面扇区数+磁道号x 盘扇区+盘扇区=5 6* ( 8 *4+6 *4 + 3= 1819
字号= 1819 /16=113
位号== 1819 MOD 16 = = 11
所以,回收第56 柱面第6 磁道第3 扇区时,位示图的第113 字的第n 位应清0
答:由于索引节点为128B ,而状态信息占用68B ,故索引节点中用于磁盘指针的空间大小为:128-68 = 60 字节。
一次间接、二次间接和三次间接指针占用三个指针项,因而直接指针项数为:60 / 4 -3 = 12 个。每块大小为8KB .所以,直接指针时:12 *8192 = 98304B 。
一次间接指针时:8192 / 4 = 2 048 ,即一个磁盘块可装2048 个盘块指针,2048*8192 = 16MB 。二次间接指针时:2048 * 2048 = 4M ,即二次间接可装4M 个盘块指针,4M* 8192 = 32GB 。三次间接指针时:2048 x 2048 *2048 = 8G ,即三次间接可装8G 个盘块指针,8G* 8 192 = 16TB 。
答:
操作名称 连续文件 链接文件 索引文件
加一块到文件开头 201 1 1
加一块到文件中间 101 51 1
加一块到文件末尾 1 2 1
从文件头删去一块 0 1 1
删去文件中间块 98 52 1
从文件尾删去一块 0 100 1
答:( 1 )可采用存取控制表ACL (2)可采用存取控制表ACL或权能表(3 )可采用存取控制表ACL或rwx 形式。
答:这种保护机制的特点是:进程没有权力使用内层的对象,而只能使用外层的对象,对不同进程可赋予不同权力,起到保护系统资源,限制进程的权限的作用。
答:n ! / ( n –K)!= 26 ! / ( 26 -4)! = 26 *25 *24 * 23 = = 5980秒。
答:( l )建立一个包含4990 个用户名的存取控制表,或者把这4990 个用户合为一组,再对该组设相应存取权限。
( 2 )可把余下10 个用户名放入该存取控制表但不给任何存取权。
答:11 17
答:新消息f,它不发生在A 之前,也不发生在A 之后.
答:PZ 接收来自同一进程的消息,而发生乱序。在P1 发出的消息中除了给出逻辑时钟外,还给出所发消息序号.当接收方收到一个乱序消息时,它将一直等待直到该消息前的所有消息到达为止。例如,若P2收到了Pl 发给它的2 号消息,那么,它会等待1 号消息到达.
答:当来自不同进程的因果关联的消息到达接收方乱序时,情况变得更为复杂。图中,对于P3 来说,来自Pl 的消息1 比来自P2 的消息2 先发出,但晚到达。设计一种逻辑时钟算法需要有全局性的进展知识,用LC2[1] 〕 代表P2 对于P1 的进展知识。由于LC2 [ l ]在消息2 中捎带给进程P3 ,所以当P3 收到来自进程P2 的消息2 时,它知道P1 的情况。P3 在接受P2 的消息2 之前将将会等待来自P1 的消息1 ,如果发生乱序,P3 先收到P2的消息2 后会等待直到Pl 的消息1 到达。