习题二
2.答:前趋图如下:
8.答:进程执行时的间断性决定了进程可能具有多种状态。
事实上,运行中的进程可能具有就绪状态、执行状态和阻塞状态。
三个基本状态之间转换
的原因如下:
就绪状态—>执行状态:进程获得CPU资源;
执行状态—>就绪状态:分配给进程的时间片已完;
执行状态—>阻塞状态:发生某事件而使进程的执行受阻,如I/O请求;
阻塞状态—>就续状态:I/O完成。
22.答:(a)此前趋图用程序描述如下:
V ar a,b,c,d,e,f,g,h: semaphore:=0,0,0,0,0,0,0,0;
begin
parbegin
begin S1; signal(a); signal(b); end;
begin wait(a); S2; signal(c); signal(d); end;
begin wait(b); S3; signal(e); end;
begin wait(c); S4; signal(f); end;
begin wait(d); S5; signal(g); end;
begin wait(e); S6; signal(h); end;
begin wait(f); wait(g);wait(h); S7; end;
parend
end
(b)此前趋图用程序描述如下:
V ar a,b,c,d,e,f,g,h,i,j: semaphore:=0,0,0,0,0,0,0,0,0,0;
begin
parbegin
begin S1; signal(a); signal(b); end;
begin wait(a); S2; signal(c); signal(d); end;
begin wait(b); S3; signal(e); signal(f); end;
begin wait(c); S4; signal(g); end;
begin wait(d); S5; signal(h); end;
begin wait(e); S6; signal(i); end;
begin wait(f); S7; signal(j); end;
begin wait(g); wait(h); wait(i); wait(j); S8; end;
parend
end
26.答:蓝色字体为修改部分。
producer:
begin
repeat
.
.
.
produce an item in nextp;
wait(mutex);
wait(full); /*wait(full)应为wait(empty),且应与前一句
wait(mutex)置换顺序。
*/
buffer(in):=nextp;
/*缓冲池数组游标应前移,应增加in:=(in+1)mod n;
*/
signal(mutex);
/*增加signal(full); */
until false;
end
consumer:
begin
repeat
wait(mutex);
wait(empty); /*应为wait(full);且应在wait(mutex);前面*/
nextc:=buffer(out);
out:=out+1; /*缓冲池为循环缓冲池,应为
out:=(out+1)mod n; */
signal(mutex);
/*增加signal(empty); */
consume item in nextc;
until false;
end
28.答:算法如下:
V ar mutex, empty, full: semaphore:=1,1,0;
begin
parbegin
gather: begin
repeat
…
gather data in nextp;
…
wait(empty);
wait(mutex);
buffer:=nextp;
signal(mutex);
signal(full);
until false;
end
compute: begin
repeat
wait(full);
wait(mutex);
nextc:=buffer;
signal(mutex);
signal(empty);
compute the data in nextc;
until false;
end
parend
end
34.答:高级通信机制可归结为三大类:共享存储器系统,消息传递系统和管道通信体统。