问题 多项选择题

消息缓冲通信技术是一种高级通信机制,由Hansen首先提出。
(1)试述高级通信机制与低级通信机制P、V原语操作的主要区别。
(2)请给出消息缓冲机制(有界缓冲)的基本原理。
(3)消息缓冲通信机制(有界缓冲)中提供发送原语send(receiver,a),调用参数a表示发送消息的内存区首地址,试设计相应的数据结构,并用P、V原语操作实现Send和Receive原语。

答案

参考答案:(A)高级通信机制与低级通信机制P、V原语操作的主要区别是:
交换信息量方面:利用P、V原语操作作为进程间的同步互斥工具是理想的,但进程问只能交换一些信息,基本上只能是控制信息,缺乏传输消息的能力。而高级通信不仅能较好地解决进程间的同步互斥问题,且能很好地交换大量消息,是理想的进程通信工具。
通信对用户透明方面:用户要用P、V原语进行进程间的通信必须在程序中增加P、V编程,这样做不但增加了编程的复杂性,不便于直观地理解程序,同时由于编程不当,有可能出现死锁,难以查找其原因。而高级通信机制不但能高效传输大量信息,且操作系统隐藏了进程通信的实现细节,即通信过程对用户是透明的。这样就大大地简化了通信程序编制上的复杂性。
(B)所谓消息(Message),是指一组信息,消息缓冲区是含有如下信息的缓冲区:
·指向发送进程的指针:Sptr
·指向下一信息缓冲区的指针:Nptr
·消息长度:Size
·消息正文:Text
消息缓冲通信机制的基本工作原理是:把消息缓冲区作为进程通信的一个基本单位,为了实现进程之间的通信,系统提供了发送原语send(A)和接收原语Receive(B)。每当发送进程欲发送消息时,发送进程用Send(A)原语把欲发送的消息从发送区复制到消息缓冲区,并将它挂在接收进程的消息队列末尾。如果该接收进程因等待消息而处于阻塞状态,则将其唤醒。而每当接收进程欲读取消息时,就用接收原语Receive(B)从消息队列头取走一个消息放到自己的接收区。
(C)消息缓冲通信机制中,消息队列属于临界资源,故在PCB中设置了一个用于互斥的信号量mutex,而每当有进程要进入消息队列时,应对信号量mutex施行P操作,退出消息队列后,应对信号量mutex施行V操作。由于接收进程可能会收到几个进程发来的消息,故应将所有的消息缓冲区链成一个队列,其队头由接收进程PcB中的队列头指针Hptr指出。
为了表示队列中的消息的数目,在PCB中设置了信号量Sn,每当发送进程发来一个消息,并将它挂在接收进程的消息队列上时,便在Sn上执行V操作;而每当接收进程从消息队列上读取一个消息时,先对Sn执行P操作,再从队列上移出要读取的消息。
用P、V原语操作实现Send原语和ReceiVe原语的处理流程如下:
Procedure Send(receiver,Ma) {发送原语}
begin
getbuf(Ma,size,i); {申请消息缓冲区}
i.sender:=Ma.Sender; {将发送区的信息发送到消息缓冲区}
i.size:=Ma.Size;
i.text:=Ms.text;
i.next:=0;
getid (PCB set,receive,j); {获得接收进程的内部标识符}
P(j.mutex);
insert(j.Hptr,i); {消息缓冲区插入到消息队列首}
V(j.Sn);
V(j.mutex);
end
Procedure Receive(Mb) {接收原语}
begin
j:internal name; {接收进程内部标识符}
P(j.Sn);
P(j.mutex);
remove(j.Hptr,i); {从消息队列中移出第一个消息}
V(j.mutex);
Mb.Sender:=i.Sender; {将消息缓冲区中的信息复制到接收区

选择题
单项选择题