itgle.com

进程P通过缓冲区K不断向n个进程Qi(1≤i≤n)发送消息,消息大小与缓冲区K一样。为了使每个接收进程都应该接收到与发送次序一样的消息序列,需要配置(23)。A.2个信号量,初值分别为1,0B.2个信号量,初值分别为1,n,C.3个信号量,初值分别为1,0,0D.3个信号量,初值分别为1,1,0

题目

进程P通过缓冲区K不断向n个进程Qi(1≤i≤n)发送消息,消息大小与缓冲区K一样。为了使每个接收进程都应该接收到与发送次序一样的消息序列,需要配置(23)。

A.2个信号量,初值分别为1,0

B.2个信号量,初值分别为1,n,

C.3个信号量,初值分别为1,0,0

D.3个信号量,初值分别为1,1,0


相似考题
参考答案和解析
正确答案:C
解析:本题考查的是信号量与P、V操作在复杂条件下的运用。每个信号量原则上只能用来保证一个同步关系。这里,一个同步关系是发送进程必须遵循“取后再送”。也就是说,缓冲区被送入消息后,只有n个接收进程都取到了该消息,发送进程才能再次送入消息。而不能让发送进程不顾接收情况连续地往缓冲区内送消息,导致有的消息尚未取走就被新消息覆盖。因此应该设一个信号量S1,由于刚开始时,缓冲区内没有消息,所以S1的初值应该为1。再次发送消息前执行P(S1)。另一个同步关系是接收进程必须遵循“送后再取”。也就是说,接收进程在接收到消息后,必须等到新消息送入后才能再去取,而不能连续地取,导致接收到的消息出现重复。因此,应该设一个信号量S2,由于刚开始时,缓冲区内没有消息,所以的初值应该为0。接收消息之前接收进程应该执行P(S2)。所有进程都接收了一条消息后执行V(S1)。发送进程发送一条消息后应该执行V(S2)。这看来是简单的生产者与消费者关系,其实不然。本题的问题出在接收进程有n个,而且每个接收进程接收消息的次序必须与发送次序相同。因此,应该设一个共享变量T,记录有多少个接收进程已经接收了同一条消息,T得初值为n。如果已经全部接收了消息,就可以允许发送进程发送下一条消息了,否则还不能发送。那么。既然T为所有接收进程所共享,是否也应该设一个信号量,以保证互斥呢?其实这是不必要的,因为接收进程在接收消息前必须执行P(S2),而S2的初值为0,只有在发送进程执行了V(S2)以后才只允许一个接收进程通过P(S2),如果将对T的操作放在接受进程执行P(S2)以后,互斥不会成为问题。其次,并不是所有接收进程接收了消息后都去执行V(S1),只是(对同一条消息而言)最后一个接收进程接收了消息后才去执行V(S1)。否则,随便一个接收进程接收消息后就去执行V(S1),使发送进程可以发送新消息,就会导致消息被覆盖,有的接收进程就再也不能接收到这条消息了。因此,接收进程接收了消息后,需将T减1,然后判断自己是否是(对同一条消息而言)最后一个接收到这条消息的进程,如果是(T=0),就先将T改为n,再执行V(S1),让发送进程再次发送消息;否则执行V(S2),唤醒下一个等待接收该消息的接收进程。但是,这样仅仅能够保证每一条消息只能被接收n次,并不能防止某个动作极快地接收进程连续多次接收同一条消息,而动作较慢的进程的接收机会却被抢夺。因此,必须控制不是(对同一条消息而言)最后一个接收到消息的接收进程的运行速度,避免造成接收不同消息的进程排在同一个队列(信号量S2所对应)中,让信号量S2所对应的队列中的排队元素永远是等待接收最新消息的进程。显然,这样又出现了一个新的同步条件,一个调节接收进程运行速度的同步条件。为此,应该再设置一个信号量S3,初值为0。不是(对同一条消息而言)最后一个接收到消息的接收进程在接收消息后执行V(S3),先在这个队列上等待。(对同一条消息而言)最后一个接收到该消息的进程在接收消息以后,将它们(共有n-1个进程)全部释放,共同进入对下一条消息的角逐。下图表示发送、接收进程的流程。
更多“进程P通过缓冲区K不断向n个进程Qi(1≤i≤n)发送消息,消息大小与缓冲区K一样。为了使每个接收进程都 ”相关问题
  • 第1题:

    有四个进程S1、R1、R2和R3,其中S1向缓冲区BUFF发送消息,R1、R2和R3从缓冲区中接收消息。发送和接收的规则如下: (1) 缓冲区BUFF任何时候只能存放1个消息; (2) R1、R2和R3每次可取S1存放在缓冲区中的消息; (3) 每个存放在缓冲区中的消息必须被R1、R2和R3均接收后才能清除。 请用信号量机制来实现这4个进程间的同步。


    B

  • 第2题:

    2、关于消息通信,以下说法错误的是()

    A.当发送消息时,发送原语就陷入到内核态,然后申请消息缓冲区,消息被从用户态缓冲区拷贝到这个消息缓冲区中,接着要找到接收者进程的pcb,并将消息挂到该PCB消息队列队列的末尾。#B.因为消息队列是临界资源,因此插入操作要用wait-signal的操作,确保它们互斥的访问。#C.消息队列是临界资源,应该对其进行互斥的访问,不存在同步问题。#D.当发送者进程把消息放到消息队列离开的时,要进行一个signal操作,就是要唤醒接收者进程,告诉接收者进程,队列中有消息了。
    C

  • 第3题:

    3、有四个进程S1、R1、R2和R3,其中S1向缓冲区BUFF发送消息,R1、R2和R3从缓冲区中接收消息。发送和接收的规则如下: (1) 缓冲区BUFF任何时候只能存放1个消息; (2) R1、R2和R3每次可取S1存放在缓冲区中的消息; (3) 每个存放在缓冲区中的消息必须被R1、R2和R3均接收后才能清除。 请用信号量机制来实现这4个进程间的同步。


    AB

  • 第4题:

    1、关于消息通信,以下说法错误的是()

    A.当发送消息时,发送原语就陷入到内核态,然后申请消息缓冲区,消息被从用户态缓冲区拷贝到这个消息缓冲区中,接着要找到接收者进程的pcb,并将消息挂到该PCB消息队列队列的末尾。###SXB###B.消息队列是临界资源,应该对其进行互斥的访问,不存在同步问题。###SXB###C.因为消息队列是临界资源,因此插入操作要用wait-signal的操作,确保它们互斥的访问。###SXB###D.当发送者进程把消息放到消息队列离开的时,要进行一个signal操作,就是要唤醒接收者进程,告诉接收者进程,队列中有消息了。
    A A项错误:通信,指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递。它不单指电信,还包括邮政通信,传递消息等概念。 B项正确:电信是指以任何电磁方式传递或接收信号,非电的物理量可以通过各种传感器转换成电信号进行信息的传递。 C项正确:通信是人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递,从广义上说,无论采用何种方法,使用何种媒质,只要将信息从一地传送到另一地,均可称为通信。击鼓鸣金即为以鼓和金为媒介传递作战信息的通信手段。 D项正确:电磁波首先由詹姆斯·麦克斯韦于1865年预测出来,而后由德国物理学家海因里希·赫兹于1887年至1888年间在实验中证实存在。电磁波被发现后,广泛应用于无线电广播及手机通讯、卫星信号、导航、遥控、定位等领域。 本题为选非题,故正确答案为A。

  • 第5题:

    8、消息缓冲队列通信机制中,通信过程中,属于接收进程的工作范畴的是()

    A.申请缓冲区

    B.构成消息

    C.发送消息

    D.释放缓冲区

    E.接收消息


    在消息缓冲队列通信机制中应具有如下几个方面的功能: (1)构成消息。发送进程在自己的工作区设置发送区a将消息正文和有关控制信息填入其中。 (2)发送消息。将消息从发送区a复制到消息缓冲区并把它插入到目标进程的消息队列中。 (3)接收消息。由目标进程从自己的消息队列中找到第一个消息缓冲区并将其中的消息内容拷贝到本进程的接收区b中。 (4)互斥与同步。互斥是指保证在一段时间内只有一个进程对消息队列进行操作;同步是指在接收进程和发送进程之间进行协调。为此应在接收进程的PCB中设置用于实现互斥和同步的信号量。 在消息缓冲队列通信机制中,应具有如下几个方面的功能:(1)构成消息。发送进程在自己的工作区设置发送区a,将消息正文和有关控制信息填入其中。(2)发送消息。将消息从发送区a复制到消息缓冲区,并把它插入到目标进程的消息队列中。(3)接收消息。由目标进程从自己的消息队列中找到第一个消息缓冲区,并将其中的消息内容拷贝到本进程的接收区b中。(4)互斥与同步。互斥是指保证在一段时间内只有一个进程对消息队列进行操作;同步是指在接收进程和发送进程之间进行协调。为此,应在接收进程的PCB中,设置用于实现互斥和同步的信号量。