首页 > 试题广场 >

从读卡机上读进 N 张卡片,复制并打印。要求复制的信息、打印

[问答题]

从读卡机上读进 N 张卡片,复制并打印。要求复制的信息、打印的卡片与原卡片的信息完全一致。假设这一工作由 3 个进程 get copy put 来完成,它们用了两个缓冲区 buffer1 buffer2 ,缓冲区只能容纳一张卡片的信息。其中,进程 get 的功能是依次将每张卡片上的信息从读卡机上读进 buffer1 ;进程 copy 的功能是把 buffer1 中的信息复制到 buffer2 ;进程 put 的功能是取出 buffer2 中的信息并从打印机上输出。

试用 P V 操作描述 3 个进程间可并发运行的关系图(或程序),要求说明信号量的作用及信号量的初值,尽可能提高并发性。


: 设互斥信号量 S1,S2 初值为 1 ,分别用于对 buffer1 buffer2 的互斥访问;同步信号量 Sn1,Sn2 初值为 1 ,分别表示 buffer1 buffer2 初始状态为空闲,可以放一张卡片信息;同步信号量 Sm1,Sm2 初值为 0 ,分别表示 buffer1 buffer2 中的信息还没有(或已被取用了)。用 P V 操作完成这 3 个并发进程间能正确运行的程序如下:

BEGIN

S1,S2,Sn1,Sn2,Sm1,Sm2:semaphore;

S1=S2=1;

Sn1=Sn2=1;

Sm1=Sm2=0;

Cobegin

Process  produce  get

Begin

L1: 从读卡机读进一张卡片信息;

P(Sn1);

P(S1);

将信息放入 buffer1;

V(Sm1);

V(S1);

Goto  L1

End

Process  produce   copy

Begin

L2:  P(Sm1);

P S1 );

buffer1 复制信息;

V Sn1 ;

V(S1);

P(Sn2);

P(S2);

将复制的信息放入 buffer2;

V(Sm2);

V(S2);

Goto  L2

End

Process  produce  put

Begin

L3:  P(Sm2);

P(S2);

buffer2 取信息;

V(Sn2);

V(S2);

把信息从打印机输出;

Goto  L3

End

Coend;

END

发表于 2017-05-17 01:31:57 回复(1)