消息传递和屏蔽

消息传递

消息传递系统的设计要点

消息传递系统面临着许多信号量和管程所未涉及的问题和设计难点,特别是位于网络中不同机器上的通信进程的情况。例如,消息有可能被网络丢失。为了防止消息丢失,发送方和接收方可以达成如下一致:一旦接收到信息,接收方马上回送一条特殊的确认(acknowledgement)消息。如果发送方在一段时间间隔内未收到确认,则重发消息

现在考虑消息本身被正确接收,而返回给发送者的确认信息丢失的情况。发送者将重发信息,这样接收者将接收到两次相同的消息。对于接收者来说,如何区分新的消息和一条重发的老消息是非常重要的。通常采用在每条原始消息中嵌入一个连续的序号来解决此问题。如果接收者收到一条消息,它具有与前面某一条消息一样的序号,就知道这条消息是重复的,可以忽略。不可靠消息传递中的成功通信问题是计算机网络的主要研究内容

消息系统还需要解决进程命名的问题,在send和receive调用中所指定的进程必须是没有二义性的。身份认证(authentication)也是一个问题。比如,客户机怎么知道它是在与一个真正的文件服务器通信,而不是 与一个冒充者通信?

对于发送者和接收者在同一台机器上的情况,也存在若干设计问题。其中一个设计问题就是性能问题。 将消息从一个进程复制到另一个进程通常比信号量操作和进入管程要慢。为了使消息传递变得高效,人们已 经做了许多工作。例如,Cheriton(1984)建议限制信息的大小,使其能装入机器的寄存器中,然后便可以使用寄存器进行消息传递

用消息传递解决生产者-消费者问题

在这里插入图片描述
在图中,我们给出了 一种解法。假设所有的消息都有同样的大小,并且在尚未接收到发出的消息时,由操作系统自动进行缓冲。 在该解决方案中共使用N条消息,这就类似于一块共享内存缓冲区中的N个槽。消费者首先将N条空消息发送给生产者。当生产者向消费者传递一个数据项时,它取走一条空消息并送回一条填充了内容的消息。通过这种方式,系统中总的消息数保持不变,所以消息都可以存放在事先确定数量的内存中

如果生产者的速度比消费者快,则所有的消息最终都将被填满,等待消费者,生产者将被阻塞,等待返 回一条空消息。如果消费者速度快,则情况正好相反:所有的消息均为空,等待生产者来填充它们,消费者被阻塞,以等待一条填充过的消息

消息传递方式可以有许多变体。我们首先介绍如何对消息进行编址。一种方法是为每个进程分配一个惟 一的地址,让消息按进程的地址编址。另一种方法是引入一种新的数据结构,称作信箱(mailbox)。信箱是一个用来对一定数量的消息进行缓冲的地方,信箱中消息数量的设置方法也有多种,典型的方法是在信箱创建时确定消息的数量。当使用信箱时,在send和receive调用中的地址参数就是信箱的地址,而不是进程的地址。当一个进程试图向一个满的信箱发消息时,它将被挂起,直到信箱内有消息被取走,从而为新消息腾出空间

屏障

在有些应用中划分了若干阶段,并且规定,除非所有的进程都就绪准备着手下一个阶段,否则任何进程都不能进入下一个阶段。可以通过在每个阶段的结尾安置屏障(barrier)来实现这种行为。当一个进程到达屏障时,它就被屏障 阻拦,直到所有进程都到达该屏障为止。屏障的操作如图所示

在这里插入图片描述
在图a中可以看到有四个进程接近屏障,这意味着它们正在运算,但是还没有到达每个阶段的结 尾。过了一会儿,第一个进程完成了所有需要在第一阶段进行的计算。它接着执行barrier原语,这通常是调用一个库过程。于是该进程被挂起。一会儿,第二个和第三个进程也完成了第一阶段的计算,也接着执行barrier原语。这种情形如图b所示。结果,当最后一个进程C到达屏障时,所有的进程就一起被释放,如图c所示

作为一个需要屏障的例子,考虑在物理或工程中的一个典型弛豫问题。这是一个带有初值的矩阵。这些 值可能代表一块金属板上各个点的温度值。基本想法可以是准备计算如下的问题:要花费多长时间,在一个角上的火焰才能传播到整个板上。 计算从当前值开始,先对矩阵进行一个变换,从而得到第二个矩阵,例如,运用热力学定律考察在∆T 之后的整个温度分布。然后,进程不断重复,随着金属板的加热,给出样本点温度随时间变化的函数。该算 法从而随时间变化生成出一系列矩阵。 现在,我们设想这个矩阵非常之大(比如100万行乘以100万列),所以需要并行处理(可能在一台多处理器上)以便加速运算。各个进程工作在这个矩阵的不同部分,并且从老的矩阵按照物理定律计算新的矩阵 元素。但是,除非第n次迭代已经完成,也就是说,除非所有的进程都完成了当前的工作,否则没有进程可以开始第n+1次迭代。实现这一目标的方法是通过编程使每一个进程在完成当前迭代部分后执行一个barrier操作。只有当全部进程完成工作之后,新的矩阵(下一次迭代的输入)才会完成,此时所有的进程会被释放而开始新的迭代过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值