第二章 分布式通信机制_第1页
第二章 分布式通信机制_第2页
第二章 分布式通信机制_第3页
第二章 分布式通信机制_第4页
第二章 分布式通信机制_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高高 级级 操操 作作 系系 统统1第二章第二章 分布式通信机制分布式通信机制高高 级级 操操 作作 系系 统统2 本章讨论分布式系统中的通信问题。在考虑这一本章讨论分布式系统中的通信问题。在考虑这一问题时,应注意以下几个方面:问题时,应注意以下几个方面: 发送策略发送策略:如何通过通信网发送消息?:如何通过通信网发送消息? 连接策略连接策略:如何去连接彼此希望通信的进程?:如何去连接彼此希望通信的进程? 争夺处理争夺处理:由于通信网是共享资源,应注意解决:由于通信网是共享资源,应注意解决在利用它的过程中那些有冲突的要求和冲突现象。在利用它的过程中那些有冲突的要求和冲突现象。 保密保密:如何保

2、住消息内容的秘密?:如何保住消息内容的秘密? 通信机制通信机制:研究分布式操作系统中的基本通信机:研究分布式操作系统中的基本通信机制。制。高高 级级 操操 作作 系系 统统32.1.1 发送策略发送策略 当场点当场点A上的一个进程希望同场点上的一个进程希望同场点B上的另一个进程进上的另一个进程进行通信时,如何发送消息?行通信时,如何发送消息? 常用的几种发送策略是:常用的几种发送策略是: 固定发送固定发送:从从A到到B的信道事先已规定好并且不得更改,的信道事先已规定好并且不得更改,除非硬件的故障影响到它的通信能力。通常选择物理上长除非硬件的故障影响到它的通信能力。通常选择物理上长度最短的信道,

3、以减少通信开销度最短的信道,以减少通信开销。 虚拟线路虚拟线路:从从A到到B的信道在一段时期内是固定的,在的信道在一段时期内是固定的,在不同时期,从不同时期,从A向向B发送的消息可能经由不同的信道发送。发送的消息可能经由不同的信道发送。 动态发送动态发送:用于从用于从A到到B发送消息的信道仅当该消息发发送消息的信道仅当该消息发送时才确定。由于这种选择是自动进行的,单一的消息可送时才确定。由于这种选择是自动进行的,单一的消息可能分给不同的信道。能分给不同的信道。高高 级级 操操 作作 系系 统统4上述几种方案各有利弊。固定发送不适用于通信负载的上述几种方案各有利弊。固定发送不适用于通信负载的改变

4、。即如果已在场点改变。即如果已在场点A和和B之间确立了一条信道,那之间确立了一条信道,那么消息只能经由这条信道传送,即使这条信道已经超载,么消息只能经由这条信道传送,即使这条信道已经超载,而其它信道还处于尚未满载的状态。可以利用虚拟线路而其它信道还处于尚未满载的状态。可以利用虚拟线路策略进行改善或通过动态发送策略来加以完全地解决。策略进行改善或通过动态发送策略来加以完全地解决。固定发送和虚拟线路策略可以确保按消息的发送次序从固定发送和虚拟线路策略可以确保按消息的发送次序从A向向B发送消息。采用动态发送策略,消息的到达次序发送消息。采用动态发送策略,消息的到达次序不一定和消息的发送次序相一致。这

5、可以通过给每条消不一定和消息的发送次序相一致。这可以通过给每条消息赋以一个顺序号来解决。息赋以一个顺序号来解决。 高高 级级 操操 作作 系系 统统52.1.2 连接策略连接策略 有许多不同的方法来连接一对彼此希望通信的场点(或有许多不同的方法来连接一对彼此希望通信的场点(或进程)。最常用的方法有线路转换、消息转换和消息包转进程)。最常用的方法有线路转换、消息转换和消息包转换。换。 线路转换线路转换(circulate switch):如果两个进程希望通):如果两个进程希望通信,那么就在它们之间设立一条永久性的物理通信链路。信,那么就在它们之间设立一条永久性的物理通信链路。这条通信链路供其消息

6、转移期间使用,在这段期间其它进这条通信链路供其消息转移期间使用,在这段期间其它进程不能使用这条链路。这种方案与电话系统类似,一旦一程不能使用这条链路。这种方案与电话系统类似,一旦一条通话线路已对通话双方开通(例如甲方给乙方打电话),条通话线路已对通话双方开通(例如甲方给乙方打电话),其它人就不能使用这条信道,除非甲乙两方已明显地结束其它人就不能使用这条信道,除非甲乙两方已明显地结束其通话(例如一方已挂起话筒)。其通话(例如一方已挂起话筒)。 高高 级级 操操 作作 系系 统统6n 消息转换消息转换(message switch):如果两个进程希):如果两个进程希望通信,那么就确定一个临时的通信

7、链路供其消息转移期望通信,那么就确定一个临时的通信链路供其消息转移期间使用。物理通信链路则根据需要在用户间动态进行分配,间使用。物理通信链路则根据需要在用户间动态进行分配,而且只允许使用较短的一段时间。每条消息由一个数据再而且只允许使用较短的一段时间。每条消息由一个数据再加上某些系统信息(如发送处,接收处和错误校正码等)加上某些系统信息(如发送处,接收处和错误校正码等)组成,这些系统信息将辅助通信网络正确地将消息转移到组成,这些系统信息将辅助通信网络正确地将消息转移到目的地。这种方案与邮局系统类似,每封信可看作是包含目的地。这种方案与邮局系统类似,每封信可看作是包含发送处和接收处的一条消息,而

8、且来自不同用户的信件发送处和接收处的一条消息,而且来自不同用户的信件(消息)可在相同通信线路上转移。(消息)可在相同通信线路上转移。高高 级级 操操 作作 系系 统统7 消息包转换消息包转换(packet switch):消息一般是可变长度的。):消息一般是可变长度的。为了简化系统的设计。常常把消息设计成定长的形式,并把这为了简化系统的设计。常常把消息设计成定长的形式,并把这种定长的形式称为消息包(种定长的形式称为消息包(packet)。一条逻辑消息可能不得)。一条逻辑消息可能不得不划分成若干消息包,每个消息包都可以经由网络中不同的路不划分成若干消息包,每个消息包都可以经由网络中不同的路径单独

9、地发送到其目的地,当这些消息包都到达其目的地后,径单独地发送到其目的地,当这些消息包都到达其目的地后,还得拼装起来组成一条完整的消息。还得拼装起来组成一条完整的消息。 线路转换需要安装时间但传送每条消息的开销较少;消息线路转换需要安装时间但传送每条消息的开销较少;消息转换和消息包转换需要较少的安装时间,但转移每条消息的开转换和消息包转换需要较少的安装时间,但转移每条消息的开销较大。此外,在采用消息包转换方法时,每条消息可能得先销较大。此外,在采用消息包转换方法时,每条消息可能得先“化整为零化整为零”,然后再,然后再“集零为整集零为整”。高高 级级 操操 作作 系系 统统82.1.3 争夺处理争

10、夺处理 由于一条通信链路往往连结多个场点,而这由于一条通信链路往往连结多个场点,而这些场点有可能希望同时在这条通信链路上转移信些场点有可能希望同时在这条通信链路上转移信息,从而发生争夺现象。这种情况在环结构或多息,从而发生争夺现象。这种情况在环结构或多存取总线结构中表现得尤为突出。解决争夺现象存取总线结构中表现得尤为突出。解决争夺现象的技术,常用的有的技术,常用的有冲突检测冲突检测,令牌转移令牌转移和和消息槽消息槽。 高高 级级 操操 作作 系系 统统9 冲突检测冲突检测:一个场点要在某条通信线路上转移消:一个场点要在某条通信线路上转移消息之前,它必须进行监测以确定当前在该通信线路上是息之前,

11、它必须进行监测以确定当前在该通信线路上是否正在转移另外的消息。若该通信线路空闲,则这个场否正在转移另外的消息。若该通信线路空闲,则这个场点可以开始发送,否则它必须等待(同时继续监测),点可以开始发送,否则它必须等待(同时继续监测),直到这条线路空闲。直到这条线路空闲。 采用这种途径的主要问题是,当系统非常忙时,可采用这种途径的主要问题是,当系统非常忙时,可能发生许多冲突现象,因此整个系统的性能由于冲突检能发生许多冲突现象,因此整个系统的性能由于冲突检测方面的工作而受到衰减。这种方法已成功地用在以太测方面的工作而受到衰减。这种方法已成功地用在以太网系统。网系统。高高 级级 操操 作作 系系 统统

12、10 令牌转移令牌转移(Token Passing):令牌是一个特殊的):令牌是一个特殊的消息类型,它不断地在系统(通常在一个环结构)中循消息类型,它不断地在系统(通常在一个环结构)中循环。希望转移消息的场点必须等待直至令牌到达。当令环。希望转移消息的场点必须等待直至令牌到达。当令牌到达后,该场点就从环中取走令牌并开始转移它的消牌到达后,该场点就从环中取走令牌并开始转移它的消息,当它完成了相应的消息转移后再重新发送令牌,这息,当它完成了相应的消息转移后再重新发送令牌,这就给另一个场点提供了占有令牌的机会,一旦占有,就就给另一个场点提供了占有令牌的机会,一旦占有,就可开始它的消息转移。如果令牌丢

13、失。那么系统应能发可开始它的消息转移。如果令牌丢失。那么系统应能发现这种情况并产生一个新令牌。该方法已由现这种情况并产生一个新令牌。该方法已由Primenet系系统所采用。统所采用。高高 级级 操操 作作 系系 统统11 消息槽消息槽(slot):若干定长的消息槽连续不断地:若干定长的消息槽连续不断地在系统(通常是一个环结构)中循环。每个消息槽在系统(通常是一个环结构)中循环。每个消息槽可以容纳一定长的消息和有关的控制信息(如像发可以容纳一定长的消息和有关的控制信息(如像发送处,接收处,消息槽满送处,接收处,消息槽满 / 空等)。希望转移消息空等)。希望转移消息的场点必须等待直到一个空消息槽到

14、达,然后,该的场点必须等待直到一个空消息槽到达,然后,该场点将它的消息插入这个空消息槽并附上适当的控场点将它的消息插入这个空消息槽并附上适当的控制信息,此消息在网络中继续流动,当它到达某个制信息,此消息在网络中继续流动,当它到达某个特定的场点时,该场点就查看此消息槽的控制信息,特定的场点时,该场点就查看此消息槽的控制信息,以确认此消息槽是否包含了发送给它的消息;若没以确认此消息槽是否包含了发送给它的消息;若没有,它就放过此消息槽,否则,它取走消息糟中的有,它就放过此消息槽,否则,它取走消息糟中的消息,重新设置控制信息以指明该消息槽为空。消息,重新设置控制信息以指明该消息槽为空。高高 级级 操操

15、 作作 系系 统统122.1.4 保密问题保密问题 编码编码是保护信息的常用方法之一。信息在发送之前先予是保护信息的常用方法之一。信息在发送之前先予以编码,当信息到达其目的地后就进行译码。以编码,当信息到达其目的地后就进行译码。 编码技术,最常用的一种就是提供一个通用的编码算法编码技术,最常用的一种就是提供一个通用的编码算法E,一个通用的译码算法一个通用的译码算法D,并对每次应用提供一个保密键,并对每次应用提供一个保密键(key),令),令Ek和和Dk分别表示具有保密键分别表示具有保密键k的那个特定应用的的那个特定应用的编码和译码算法,那么,对于任何消息编码和译码算法,那么,对于任何消息m,该

16、编码系统必须满,该编码系统必须满足下面的特性:足下面的特性: Dk(Ek(m) = m; Ek和和Dk都能有效地计算;都能有效地计算; 该系统的保密性只依赖于键该系统的保密性只依赖于键k的保密性而不依赖于算法的保密性而不依赖于算法E和和D的保密性。的保密性。高高 级级 操操 作作 系系 统统13 一个称之为一个称之为“数据编码标准数据编码标准”(Data Encryption Standard)的编码系统已由美国国家标准局所采用。不过,该的编码系统已由美国国家标准局所采用。不过,该方案还存在方案还存在“键分布键分布”问题,即,开始通信之前,保密键必问题,即,开始通信之前,保密键必须秘密地转移给

17、发送者和接收者,但在一个通信网络环境中须秘密地转移给发送者和接收者,但在一个通信网络环境中很难有效地完成这一点。解决此问题的办法之一是利用一个很难有效地完成这一点。解决此问题的办法之一是利用一个“公共键公共键”(public key)编码方案。每个用户有一个公共键)编码方案。每个用户有一个公共键和一个私有键,两个彼此知道他们的公共键的用户才可以相和一个私有键,两个彼此知道他们的公共键的用户才可以相互通信。互通信。 基于上述思想的编码方案已设计出来了。这个方案曾被基于上述思想的编码方案已设计出来了。这个方案曾被认为是差不多不可破译的。其中的公共编码键是一对偶认为是差不多不可破译的。其中的公共编码

18、键是一对偶(e, n),私有键是对偶私有键是对偶(d, n),这里这里e, d, n都是正整数。每条消息用都是正整数。每条消息用0n-1之间的一个整数表示(较长的消息可分成若干较短的消息,之间的一个整数表示(较长的消息可分成若干较短的消息,它们每一个都可用这样的一个整数表示),函数它们每一个都可用这样的一个整数表示),函数E和和D定义为:定义为:高高 级级 操操 作作 系系 统统14E(m) = me mod n = C D(C) = Cd mod n 这里的主要问题是选择编码和译码键。整数这里的主要问题是选择编码和译码键。整数n可用下式计可用下式计算算n = p q 其中其中p和和q是随机选

19、取的两个较大的素数(例如,它们是是随机选取的两个较大的素数(例如,它们是由由100位或更多位数字组成),位或更多位数字组成),d是随机选取的一个与是随机选取的一个与(p - 1) (q - 1)互质的较大整数,即互质的较大整数,即d满足满足GCD(d, (p - 1) (q - 1) = 1 而而e则应满足则应满足e d mod (p - 1) (q - 1) = 1 应指出的是,虽然应指出的是,虽然n可能是大家知道的,但可能是大家知道的,但p和和q却很难为却很难为他人所知。因为,对这里的他人所知。因为,对这里的n进行因式分解是比铰困难的。因进行因式分解是比铰困难的。因此,此,d和和e也是不易

20、试探出来的。也是不易试探出来的。 高高 级级 操操 作作 系系 统统15例如,令例如,令p = 5和和q = 7,那么,那么n = 35,(p - 1) (q - 1) 24。由于由于11与与24互质,所以可选取互质,所以可选取d = 11。因为。因为11 11 mod 2412l mod 24 = 1,因此,因此,e = 11。假定,给定。假定,给定m3,那么,那么C = me mod n = 311 mod 35 = 12而而Cd mod n = 1211 mod 35 = 3 =m因此,如果我们利用因此,如果我们利用e对进行编码,那么,我们就能用对对进行编码,那么,我们就能用对它进行译码

21、。它进行译码。高高 级级 操操 作作 系系 统统162.2 消息传递消息传递2.2.1 消息传递原语消息传递原语 在分布式系统中,进程相互通信是通过彼此交换消在分布式系统中,进程相互通信是通过彼此交换消息进行的。一个消息是从一进程发往另一些进程的信息息进行的。一个消息是从一进程发往另一些进程的信息单位。源进程通过执行单位。源进程通过执行send操作发送消息,宿进程则通操作发送消息,宿进程则通过执行过执行receive操作来获取消息;如果必要,在其获取消操作来获取消息;如果必要,在其获取消息后再通过执行息后再通过执行reply操作给发送者一个回复。因此,分操作给发送者一个回复。因此,分布式操作系

22、统通常提供布式操作系统通常提供send、receive和和reply等基本通信等基本通信原语来实现进程间的通信和同步。原语来实现进程间的通信和同步。高高 级级 操操 作作 系系 统统17 消息转移原语分为两类:同步型和异步型。消息转移原语分为两类:同步型和异步型。 1.异步型异步型:在这类通信机制中,转移消息的进程不等待:在这类通信机制中,转移消息的进程不等待接收者的回复,又称接收者的回复,又称“不等不等”转移(转移(send no Wait),即允许,即允许发送方可任意超前于接收方,因而具有下面的特征:发送方可任意超前于接收方,因而具有下面的特征: 接收方收到的消息与发送方目前的状态是无关的

23、;接收方收到的消息与发送方目前的状态是无关的; 由于通信机制与同步机制几乎被截然分开,因此,系由于通信机制与同步机制几乎被截然分开,因此,系统应具有统应具有“无限无限”的缓冲空间来容纳任意超前发出而尚未处的缓冲空间来容纳任意超前发出而尚未处理的消息,以此来解决消息发送速度和消息处理速度之间的理的消息,以此来解决消息发送速度和消息处理速度之间的差异;差异; 能比较充分地利用系统的潜在能力,但实现时须解决能比较充分地利用系统的潜在能力,但实现时须解决许多实际的控制问题。许多实际的控制问题。高高 级级 操操 作作 系系 统统18图图2.2 同步消息传递和异步消息传递同步消息传递和异步消息传递高高 级

24、级 操操 作作 系系 统统19 2.同步型同步型:它与异步型消息转移正好相反,总是要求发:它与异步型消息转移正好相反,总是要求发送方等待接收方的回复,然后,发送方与接入方同步继送方等待接收方的回复,然后,发送方与接入方同步继续向下执行,其主要特征是:续向下执行,其主要特征是: 消息的发送方和接收方在完成信息交换后彼此知道消息的发送方和接收方在完成信息交换后彼此知道对方的状态;对方的状态; 同步机制和通信机制合二为一,一般无需大的缓冲同步机制和通信机制合二为一,一般无需大的缓冲区;区; 实现容易,但效率较低。实现容易,但效率较低。同步型消息转移和异步型消息转移示意图,见图同步型消息转移和异步型消

25、息转移示意图,见图2.2。高高 级级 操操 作作 系系 统统20 消息本身要占用存贮空间,并常常存放在系统的消息本身要占用存贮空间,并常常存放在系统的缓冲区中。当使们异步消息转移机制时,系统中的每缓冲区中。当使们异步消息转移机制时,系统中的每个进程在某一时刻可能有多个尚未处理的消息。由于个进程在某一时刻可能有多个尚未处理的消息。由于消息缓冲区是一个有穷的资源,因此,当使用异步消消息缓冲区是一个有穷的资源,因此,当使用异步消息传递方式传递消息时,可能会发生消息缓冲区溢出息传递方式传递消息时,可能会发生消息缓冲区溢出的情况。因此,异步消息传递需要特定的消息缓冲区的情况。因此,异步消息传递需要特定的

26、消息缓冲区管理算法来处理这方面的问题。但在采用同步消息传管理算法来处理这方面的问题。但在采用同步消息传递方式时,系统中的每个进程决不可能存在一个以上递方式时,系统中的每个进程决不可能存在一个以上尚未处理的消息,因此,其消息缓冲区的管理算法比尚未处理的消息,因此,其消息缓冲区的管理算法比较简单。较简单。高高 级级 操操 作作 系系 统统212.2.2 同步消息传递方式的应用同步消息传递方式的应用 同步消息转移方式特别适合于同步消息转移方式特别适合于client / server模型。一个模型。一个client通过向一个通过向一个server发送一个消息来请求该发送一个消息来请求该server为它

27、服务,为它服务,然后这个然后这个client就挂起,直至对应的就挂起,直至对应的server发来回复消息(即告发来回复消息(即告之所请求的服务已经完成)。之所请求的服务已经完成)。server可以写成一个无穷循环程可以写成一个无穷循环程序,它等待接收请求,然后处理相应的请求,最后发回复消息。序,它等待接收请求,然后处理相应的请求,最后发回复消息。client们在等待所请求的服跟务完成时就阻塞自己。仅当没有消们在等待所请求的服跟务完成时就阻塞自己。仅当没有消息给息给server,即没有供它做的事情时,该,即没有供它做的事情时,该server就阻塞,见图就阻塞,见图2.3,其中,其中c1ient们

28、向们向time-server发送一请求给出时间的消息:发送一请求给出时间的消息:send(time-server,gettime.time)。time-server循环等待请求读循环等待请求读时钟的消息,然后执行时钟的消息,然后执行“读时钟读时钟”工作,并在处理下一请求消工作,并在处理下一请求消息之前发出回复,即息之前发出回复,即time-server和和client可分别编写成如下的程可分别编写成如下的程序段:序段:高高 级级 操操 作作 系系 统统22timeserver:while true doreceive(request);readclock(time);reply(time);e

29、nd;client:send(timeserver, gettime, time);图图2.3 使用消息转移方式的使用消息转移方式的client / server模型模型高高 级级 操操 作作 系系 统统23 一般,一般,server可以设计成依次重复执行下述步骤的程序段:可以设计成依次重复执行下述步骤的程序段: 等待接收来自等待接收来自clients发送的发送的“请求服务请求服务”的消息;的消息; 接收接收clients发来的发来的“请求服务请求服务”的消息;的消息; 处理处理clients发来的发来的“请求服务请求服务”的消息;的消息; 向向clients发送发送“服务已完成服务已完成”的

30、回复消息。的回复消息。 仅当没有仅当没有“请求服务请求服务”的消息到达时,的消息到达时,server就阻塞自己。就阻塞自己。clients在等待在等待server的回复消息时就阻塞它们自己,从而实现了的回复消息时就阻塞它们自己,从而实现了clients与与server的同步。的同步。 在设计在设计server进程时,通常要求:进程时,通常要求: server必须能调度和回复多个并发的请求消息;必须能调度和回复多个并发的请求消息; server处理请求消息和发送回复消息的次序与接收该请处理请求消息和发送回复消息的次序与接收该请求消息的次序无关;求消息的次序无关; 在在server给给client

31、发送回复消息时,决不应阻塞;发送回复消息时,决不应阻塞; 某个相关的某个相关的client故障,不应影响故障,不应影响server的操作。的操作。高高 级级 操操 作作 系系 统统24 同步原语有一种与信息交换不同的特性。当一个进程同步原语有一种与信息交换不同的特性。当一个进程引用了一个挂起的原语时,它就阻塞自己直至此原语执行引用了一个挂起的原语时,它就阻塞自己直至此原语执行完毕。同步原语的这种完毕。同步原语的这种”阻塞阻塞”特性,类似于单处理机中特性,类似于单处理机中所使用的信号量,可用于同步目的。图所使用的信号量,可用于同步目的。图2.4(a)展示了两个进展示了两个进程使用信号量进行同步例

32、子,其中,当程使用信号量进行同步例子,其中,当P1在信号量在信号量sem上上等待时,它就彼阻塞直至等待时,它就彼阻塞直至P2唤醒它。一个进程等待另一进唤醒它。一个进程等待另一进程的类似效果也可利用同步程的类似效果也可利用同步send / receive原语实现,见图原语实现,见图2.4(b)。高高 级级 操操 作作 系系 统统25图图2.4 同步同步高高 级级 操操 作作 系系 统统26 还有不少其它形式的还有不少其它形式的send / receive原语。例如,原语。例如,“选择选择性接收性接收”(selective receive)和)和”条件发送条件发送”(conditional sen

33、d)。一个)。一个selective receive操作允许其用户选择一个进程操作允许其用户选择一个进程或一组进程去接收发送来的消息。当执行或一组进程去接收发送来的消息。当执行conditional send操操作时,如果相关的接收者不是处于阻塞状态正等待接收消息,作时,如果相关的接收者不是处于阻塞状态正等待接收消息,那么它将立即完成而不发送消息。实际上,大多数异步那么它将立即完成而不发送消息。实际上,大多数异步send操作后紧随着一个操作后紧随着一个receive操作。基于这个原因,许多分布式操作。基于这个原因,许多分布式操作系统只提供同步消息传递原语。操作系统只提供同步消息传递原语。 高高

34、 级级 操操 作作 系系 统统272.3 远程过程调用远程过程调用 远程过程调用远程过程调用(Remote Procedure Call)就是把)就是把过程调用的概念加以扩允后引入分布式环境中的一种过程调用的概念加以扩允后引入分布式环境中的一种形式。远程过程调用的形式和行为与传统的过程调用形式。远程过程调用的形式和行为与传统的过程调用的形式和行为类似,主要差别在于被调用的过程实际的形式和行为类似,主要差别在于被调用的过程实际运行在一个与调用者所在场点不同的场点上,见图运行在一个与调用者所在场点不同的场点上,见图2.6。因此,需要设计相应的软件来实现两者之间的连接和因此,需要设计相应的软件来实现

35、两者之间的连接和信息沟通。信息沟通。高高 级级 操操 作作 系系 统统28图图2.5 消息转移与过程调用的类似性消息转移与过程调用的类似性图图2.6 远程过程调用示意图远程过程调用示意图高高 级级 操操 作作 系系 统统292.3.1 RPC机制的结构及实现机制的结构及实现1.RPC机制的结构机制的结构由下列成份组成:由下列成份组成:stub:client和和server 各一个;各一个;控制部分:为追踪控制部分:为追踪RPC的调用状态所设;的调用状态所设;传送部分:确定如何将信息从一个场点传送到另一个传送部分:确定如何将信息从一个场点传送到另一个场点。场点。实现实现RPC的一般过程可概括如图

36、的一般过程可概括如图2.7所示:所示:图图2.7 实现实现RPC的一般过程的一般过程高高 级级 操操 作作 系系 统统30nclients stub与一个与一个client连接,它对于该连接,它对于该client就像一个就像一个“server”。在调用时,它截取。在调用时,它截取client的远程过程调用命令后,利用通信网络向的远程过程调用命令后,利用通信网络向server发送发送“请求服务请求服务”的信息。在返回时,的信息。在返回时,它获取返回消息,并带返回结果返回到它获取返回消息,并带返回结果返回到client,然后然后client继续执行。继续执行。 高高 级级 操操 作作 系系 统统3

37、1nServers stub与一个与一个server连接,它对于该连接,它对于该server就像一个就像一个“client”。在调用时,它收到远程调用请。在调用时,它收到远程调用请求后,产生一个本地调用,去执行被请求的远程过求后,产生一个本地调用,去执行被请求的远程过程。在返回时,它截取远程过程的返回结果,并形程。在返回时,它截取远程过程的返回结果,并形成返回消息发送出去。成返回消息发送出去。nstub包含了一组包含了一组RPC机制的操作原话,这些原语构机制的操作原话,这些原语构成了成了RPC调用的实现细节,它可独立于调用的实现细节,它可独立于client和和server编程,在编译时再连接起

38、来编程,在编译时再连接起来 高高 级级 操操 作作 系系 统统32nRPC的实现要考虑两个方面的问题。第一,当进行远程过的实现要考虑两个方面的问题。第一,当进行远程过程调用时,调用场点必须能定位出被调用的过程实际上运程调用时,调用场点必须能定位出被调用的过程实际上运行在哪个场点上;第二,相关的两个场点必须能协同合作行在哪个场点上;第二,相关的两个场点必须能协同合作交换信息。所有这些对用户都是透明的,这些的工作是依交换信息。所有这些对用户都是透明的,这些的工作是依次进行的。下面介绍一种实现次进行的。下面介绍一种实现RPC的方法其实现思想已的方法其实现思想已概括在图概括在图2.8中。中。高高 级级

39、 操操 作作 系系 统统33图图2.8 RPC的实现概况的实现概况高高 级级 操操 作作 系系 统统34 每个远程过程由若干成分组成:每个远程过程由若干成分组成:l调用者(调用者(caller)或用户()或用户(user)l调用代码段调用代码段l以及被调用者(以及被调用者(callee)或)或serverl被调用代码段。这些都可用常规的程序设计语言编写,被调用代码段。这些都可用常规的程序设计语言编写, 不需要利用特别的设施,就象它们在同一场点上执行不需要利用特别的设施,就象它们在同一场点上执行一一 样。样。l与调用者相关的与调用者相关的stubl与被调用者相关的与被调用者相关的stublRPC

40、 runtime子程序,可在系统中所有场点上运行。子程序,可在系统中所有场点上运行。2. RPC的实现的实现高高 级级 操操 作作 系系 统统35nstub程序的功能是把这种过程调用中所带的参数组程序的功能是把这种过程调用中所带的参数组装和拆卸成消息形式,并进行相应的类型检查,然装和拆卸成消息形式,并进行相应的类型检查,然后把这些消息转移给后把这些消息转移给RPC runtime子程序,后者再子程序,后者再把它们发送到系统中的其它场点。把它们发送到系统中的其它场点。n程序设计者定义了过程并写好了过程体,而系统生程序设计者定义了过程并写好了过程体,而系统生成了对应的成了对应的stub。实现一个远

41、程过程调用的主要工。实现一个远程过程调用的主要工作环节如下。作环节如下。高高 级级 操操 作作 系系 统统36n调用者用通常方式调用对应调用者用通常方式调用对应stub中的一个过程;中的一个过程;n这个这个stub过程把有关的参数组装成一个消息包过程把有关的参数组装成一个消息包或一组消息包,以形成一条消息。运行此过程的或一组消息包,以形成一条消息。运行此过程的那个场点的那个场点的“地址地址”和那个场点上指称此过程的和那个场点上指称此过程的“标识符标识符”都应包含在这条消息中;都应包含在这条消息中;n将这条消息发送给对应的将这条消息发送给对应的RPC runtme子程序,子程序,该子程序再把它发

42、送给指定的场点。该子程序再把它发送给指定的场点。高高 级级 操操 作作 系系 统统37n在接收此消息时,远程在接收此消息时,远程runtime子程序引用与被子程序引用与被调用者对应的调用者对应的stub中的一个子程序,并让它来处中的一个子程序,并让它来处理这条消息;理这条消息;n被调用者对应的被调用者对应的stub中的这个子程序拆卸有关中的这个子程序拆卸有关的参数并用通常的过程调用方式调用所需的过程。的参数并用通常的过程调用方式调用所需的过程。n返回调用结果,整个远程过程调用以与调用者对返回调用结果,整个远程过程调用以与调用者对应的应的stub程序执行程序执行“return”语句返回到用户而终

43、语句返回到用户而终止。止。高高 级级 操操 作作 系系 统统38 在上面的述中,我们回避了一个重要的问题,即与在上面的述中,我们回避了一个重要的问题,即与用户对应的用户对应的stub如何知道实际运行远程过程的场点之地如何知道实际运行远程过程的场点之地址呢?址呢?一些解决这一向题的方法:一些解决这一向题的方法:n 当系统生成与调用者对应的当系统生成与调用者对应的stub时,可把该远程时,可把该远程场地的地址也一同并入其中,不过这种做法不太灵活。场地的地址也一同并入其中,不过这种做法不太灵活。n 在进行调用之前,与调用者对应的在进行调用之前,与调用者对应的stub向系统中向系统中的其它场点进行广播

44、,请求有关的场点通报其地址,这的其它场点进行广播,请求有关的场点通报其地址,这必然引起一系列的消息转移。特别,当这种广播是在若必然引起一系列的消息转移。特别,当这种广播是在若干网络之间进行时,其转移速度是很慢的。干网络之间进行时,其转移速度是很慢的。n 由系统管理一个表,其表项的内容为由系统管理一个表,其表项的内容为n 场点地址;场点地址;n 该场点上将运行的远程过程的名字。该场点上将运行的远程过程的名字。n 高高 级级 操操 作作 系系 统统392.3.2 RPC执行时各部分之间的关系执行时各部分之间的关系 RPC执行时,各部分的关系如图执行时,各部分的关系如图2.9所示。其中,所示。其中,

45、传输部分是传输部分是RPC的最低层,其主要功能为:的最低层,其主要功能为:n 提供对网络传输层协议的选择;提供对网络传输层协议的选择;n 建立建立 / 释放逻辑信道,发送释放逻辑信道,发送 / 接收消息等;接收消息等;n 管理管理RPC中的消息缓冲区。中的消息缓冲区。高高 级级 操操 作作 系系 统统40图2.9 RPC执行时各部分的关系图高高 级级 操操 作作 系系 统统41 控制部分的主要功能是:控制部分的主要功能是: 确定确定RPC中消息的方向(发送或接收);中消息的方向(发送或接收); 当当client的的stub开始一次开始一次RPC调用或者调用或者server向向server的的s

46、tub返回调用结果时,该部分负责控制传输部分进行发返回调用结果时,该部分负责控制传输部分进行发送。送。 场点间会合与进程同步;场点间会合与进程同步;场点间会合是指为使两个场点间进程同步,它们必须同场点间会合是指为使两个场点间进程同步,它们必须同意意“会合(会合(rendezvous)”,即早到达的进程要等待晚到,即早到达的进程要等待晚到达的进程。会话进程通过场点间会合建立一致的起点,达的进程。会话进程通过场点间会合建立一致的起点,并以该起点作为进程同步点进行对话。并以该起点作为进程同步点进行对话。 若干状态信息的处理。若干状态信息的处理。由上可知,由于由上可知,由于client的的stub的作

47、用,使得的作用,使得client可用常规可用常规过程调用方式去调用远程过程;由于过程调用方式去调用远程过程;由于server的的stub的作用,的作用,使得使得server程序可以独立于调用者来编程,因而比较灵活。程序可以独立于调用者来编程,因而比较灵活。高高 级级 操操 作作 系系 统统42n 本地调用和远程过程调用之间存在许多不同之处。如本地调用和远程过程调用之间存在许多不同之处。如果远程调用是在两种异型机器间进行,这就存在数据表示果远程调用是在两种异型机器间进行,这就存在数据表示问题,例如,这两类机器的字长可能不同。解决这一向题问题,例如,这两类机器的字长可能不同。解决这一向题的方法之一

48、是它在转移数据之前,让的方法之一是它在转移数据之前,让RPC机制将有关的数机制将有关的数据转换成一种统一的格式,接收场点在接收数据时,再把据转换成一种统一的格式,接收场点在接收数据时,再把它们转换成本地所允许的数据格式。第二个问题是如何解它们转换成本地所允许的数据格式。第二个问题是如何解释指针,更确切他说,一个指针到底访问的是什么,在不释指针,更确切他说,一个指针到底访问的是什么,在不具有共享地址空间的情况下,具有共享地址空间的情况下,RPC不可能允许在网络范围不可能允许在网络范围内转移指针。因此,在内转移指针。因此,在RPC中是不可能用中是不可能用“reference方式方式”传递参数的。传递参数的。n 2.3.3 RPC的语义的语义高高 级级 操操 作作 系系 统统43n 更严重的问题是调用者和被调用者都可能在调更严重的问题是调用者和被调用者都可能在调用期间发生故障,而且经常是被调用者故障,留下用期间发生故障,而

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论