您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第二章分布式通信机制
高级操作系统12.1概述2.2消息传递2.3远程过程调用第二章分布式通信机制高级操作系统22.1概述本章讨论分布式系统中的通信问题。在考虑这一问题时,应注意以下几个方面:•发送策略:如何通过通信网发送消息?•连接策略:如何去连接彼此希望通信的进程?•争夺处理:由于通信网是共享资源,应注意解决在利用它的过程中那些有冲突的要求和冲突现象。•保密:如何保住消息内容的秘密?•通信机制:研究分布式操作系统中的基本通信机制。高级操作系统32.1.1发送策略当场点A上的一个进程希望同场点B上的另一个进程进行通信时,如何发送消息?常用的几种发送策略是:⑴固定发送:从A到B的信道事先已规定好并且不得更改,除非硬件的故障影响到它的通信能力。通常选择物理上长度最短的信道,以减少通信开销。⑵虚拟线路:从A到B的信道在一段时期内是固定的,在不同时期,从A向B发送的消息可能经由不同的信道发送。⑶动态发送:用于从A到B发送消息的信道仅当该消息发送时才确定。由于这种选择是自动进行的,单一的消息可能分给不同的信道。高级操作系统4上述几种方案各有利弊。固定发送不适用于通信负载的改变。即如果已在场点A和B之间确立了一条信道,那么消息只能经由这条信道传送,即使这条信道已经超载,而其它信道还处于尚未满载的状态。可以利用虚拟线路策略进行改善或通过动态发送策略来加以完全地解决。固定发送和虚拟线路策略可以确保按消息的发送次序从A向B发送消息。采用动态发送策略,消息的到达次序不一定和消息的发送次序相一致。这可以通过给每条消息赋以一个顺序号来解决。高级操作系统52.1.2连接策略有许多不同的方法来连接一对彼此希望通信的场点(或进程)。最常用的方法有线路转换、消息转换和消息包转换。⑴线路转换(circulateswitch):如果两个进程希望通信,那么就在它们之间设立一条永久性的物理通信链路。这条通信链路供其消息转移期间使用,在这段期间其它进程不能使用这条链路。这种方案与电话系统类似,一旦一条通话线路已对通话双方开通(例如甲方给乙方打电话),其它人就不能使用这条信道,除非甲乙两方已明显地结束其通话(例如一方已挂起话筒)。高级操作系统6⑵消息转换(messageswitch):如果两个进程希望通信,那么就确定一个临时的通信链路供其消息转移期间使用。物理通信链路则根据需要在用户间动态进行分配,而且只允许使用较短的一段时间。每条消息由一个数据再加上某些系统信息(如发送处,接收处和错误校正码等)组成,这些系统信息将辅助通信网络正确地将消息转移到目的地。这种方案与邮局系统类似,每封信可看作是包含发送处和接收处的一条消息,而且来自不同用户的信件(消息)可在相同通信线路上转移。高级操作系统7⑶消息包转换(packetswitch):消息一般是可变长度的。为了简化系统的设计。常常把消息设计成定长的形式,并把这种定长的形式称为消息包(packet)。一条逻辑消息可能不得不划分成若干消息包,每个消息包都可以经由网络中不同的路径单独地发送到其目的地,当这些消息包都到达其目的地后,还得拼装起来组成一条完整的消息。线路转换需要安装时间但传送每条消息的开销较少;消息转换和消息包转换需要较少的安装时间,但转移每条消息的开销较大。此外,在采用消息包转换方法时,每条消息可能得先“化整为零”,然后再“集零为整”。高级操作系统82.1.3争夺处理由于一条通信链路往往连结多个场点,而这些场点有可能希望同时在这条通信链路上转移信息,从而发生争夺现象。这种情况在环结构或多存取总线结构中表现得尤为突出。解决争夺现象的技术,常用的有冲突检测,令牌转移和消息槽。高级操作系统9⑴冲突检测:一个场点要在某条通信线路上转移消息之前,它必须进行监测以确定当前在该通信线路上是否正在转移另外的消息。若该通信线路空闲,则这个场点可以开始发送,否则它必须等待(同时继续监测),直到这条线路空闲。采用这种途径的主要问题是,当系统非常忙时,可能发生许多冲突现象,因此整个系统的性能由于冲突检测方面的工作而受到衰减。这种方法已成功地用在以太网系统。高级操作系统10⑵令牌转移(TokenPassing):令牌是一个特殊的消息类型,它不断地在系统(通常在一个环结构)中循环。希望转移消息的场点必须等待直至令牌到达。当令牌到达后,该场点就从环中取走令牌并开始转移它的消息,当它完成了相应的消息转移后再重新发送令牌,这就给另一个场点提供了占有令牌的机会,一旦占有,就可开始它的消息转移。如果令牌丢失。那么系统应能发现这种情况并产生一个新令牌。该方法已由Primenet系统所采用。高级操作系统11⑶消息槽(slot):若干定长的消息槽连续不断地在系统(通常是一个环结构)中循环。每个消息槽可以容纳一定长的消息和有关的控制信息(如像发送处,接收处,消息槽满/空等)。希望转移消息的场点必须等待直到一个空消息槽到达,然后,该场点将它的消息插入这个空消息槽并附上适当的控制信息,此消息在网络中继续流动,当它到达某个特定的场点时,该场点就查看此消息槽的控制信息,以确认此消息槽是否包含了发送给它的消息;若没有,它就放过此消息槽,否则,它取走消息糟中的消息,重新设置控制信息以指明该消息槽为空。高级操作系统122.1.4保密问题编码是保护信息的常用方法之一。信息在发送之前先予以编码,当信息到达其目的地后就进行译码。编码技术,最常用的一种就是提供一个通用的编码算法E,一个通用的译码算法D,并对每次应用提供一个保密键(key),令Ek和Dk分别表示具有保密键k的那个特定应用的编码和译码算法,那么,对于任何消息m,该编码系统必须满足下面的特性:•⑴Dk(Ek(m))=m;•⑵Ek和Dk都能有效地计算;•⑶该系统的保密性只依赖于键k的保密性而不依赖于算法E和D的保密性。高级操作系统162.2消息传递2.2.1消息传递原语在分布式系统中,进程相互通信是通过彼此交换消息进行的。一个消息是从一进程发往另一些进程的信息单位。源进程通过执行send操作发送消息,宿进程则通过执行receive操作来获取消息;如果必要,在其获取消息后再通过执行reply操作给发送者一个回复。因此,分布式操作系统通常提供send、receive和reply等基本通信原语来实现进程间的通信和同步。高级操作系统17消息转移原语分为两类:同步型和异步型。1.异步型:在这类通信机制中,转移消息的进程不等待接收者的回复,又称“不等”转移(sendnoWait),即允许发送方可任意超前于接收方,因而具有下面的特征:①接收方收到的消息与发送方目前的状态是无关的;②由于通信机制与同步机制几乎被截然分开,因此,系统应具有“无限”的缓冲空间来容纳任意超前发出而尚未处理的消息,以此来解决消息发送速度和消息处理速度之间的差异;③能比较充分地利用系统的潜在能力,但实现时须解决许多实际的控制问题。高级操作系统18图2.2同步消息传递和异步消息传递高级操作系统192.同步型:它与异步型消息转移正好相反,总是要求发送方等待接收方的回复,然后,发送方与接入方同步继续向下执行,其主要特征是:①消息的发送方和接收方在完成信息交换后彼此知道对方的状态;②同步机制和通信机制合二为一,一般无需大的缓冲区;③实现容易,但效率较低。同步型消息转移和异步型消息转移示意图,见图2.2。高级操作系统20消息本身要占用存贮空间,并常常存放在系统的缓冲区中。当使们异步消息转移机制时,系统中的每个进程在某一时刻可能有多个尚未处理的消息。由于消息缓冲区是一个有穷的资源,因此,当使用异步消息传递方式传递消息时,可能会发生消息缓冲区溢出的情况。因此,异步消息传递需要特定的消息缓冲区管理算法来处理这方面的问题。但在采用同步消息传递方式时,系统中的每个进程决不可能存在一个以上尚未处理的消息,因此,其消息缓冲区的管理算法比较简单。高级操作系统212.2.2同步消息传递方式的应用同步消息转移方式特别适合于client/server模型。一个client通过向一个server发送一个消息来请求该server为它服务,然后这个client就挂起,直至对应的server发来回复消息(即告之所请求的服务已经完成)。server可以写成一个无穷循环程序,它等待接收请求,然后处理相应的请求,最后发回复消息。client们在等待所请求的服跟务完成时就阻塞自己。仅当没有消息给server,即没有供它做的事情时,该server就阻塞,见图2.3,其中c1ient们向time-server发送一请求给出时间的消息:send(time-server,gettime.time)。time-server循环等待请求读时钟的消息,然后执行“读时钟”工作,并在处理下一请求消息之前发出回复,即time-server和client可分别编写成如下的程序段:高级操作系统22timeserver:whiletruedoreceive(request);readclock(time);reply(time);end;client:send(timeserver,gettime,time);图2.3使用消息转移方式的client/server模型高级操作系统23一般,server可以设计成依次重复执行下述步骤的程序段:⑴等待接收来自clients发送的“请求服务”的消息;⑵接收clients发来的“请求服务”的消息;⑶处理clients发来的“请求服务”的消息;⑷向clients发送“服务已完成”的回复消息。仅当没有“请求服务”的消息到达时,server就阻塞自己。clients在等待server的回复消息时就阻塞它们自己,从而实现了clients与server的同步。在设计server进程时,通常要求:⑴server必须能调度和回复多个并发的请求消息;⑵server处理请求消息和发送回复消息的次序与接收该请求消息的次序无关;⑶在server给client发送回复消息时,决不应阻塞;⑷某个相关的client故障,不应影响server的操作。高级操作系统24同步原语有一种与信息交换不同的特性。当一个进程引用了一个挂起的原语时,它就阻塞自己直至此原语执行完毕。同步原语的这种”阻塞”特性,类似于单处理机中所使用的信号量,可用于同步目的。图2.4(a)展示了两个进程使用信号量进行同步例子,其中,当P1在信号量sem上等待时,它就彼阻塞直至P2唤醒它。一个进程等待另一进程的类似效果也可利用同步send/receive原语实现,见图2.4(b)。高级操作系统25图2.4同步高级操作系统26还有不少其它形式的send/receive原语。例如,“选择性接收”(selectivereceive)和”条件发送”(conditionalsend)。一个selectivereceive操作允许其用户选择一个进程或一组进程去接收发送来的消息。当执行conditionalsend操作时,如果相关的接收者不是处于阻塞状态正等待接收消息,那么它将立即完成而不发送消息。实际上,大多数异步send操作后紧随着一个receive操作。基于这个原因,许多分布式操作系统只提供同步消息传递原语。高级操作系统272.3远程过程调用远程过程调用(RemoteProcedureCall)就是把过程调用的概念加以扩允后引入分布式环境中的一种形式。远程过程调用的形式和行为与传统的过程调用的形式和行为类似,主要差别在于被调用的过程实际运行在一个与调用者所在场点不同的场点上,见图2.6。因此,需要设计相应的软件来实现两者之间的连接和信息沟通。高级操作系统28图2.5消息转移与过程调用的类似性图2.6远程过程调用示意图高级操作系统292.3.1RPC机制的结构及实现1.RPC机制的结构由下列成份组成:⑴stub:client和server各一个;⑵控制部分:为追踪RPC的调用状态所设;⑶传送部分:确定如何将信息从一个场点传送到另一个场点。实现RPC的一般过程可概括如图2.7所示:图2.7实现RPC的一般过程高级操作系统30client’sstub与一个client连接,它
本文标题:第二章分布式通信机制
链接地址:https://www.777doc.com/doc-319700 .html