分布式操作系统2(2)_第1页
分布式操作系统2(2)_第2页
分布式操作系统2(2)_第3页
分布式操作系统2(2)_第4页
分布式操作系统2(2)_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

1、2.4远程过程调用远程过程调用 客户-服务器模式为构造分布式操作系统提供了一种便利的方法,但它也存在着无法克服的缺陷:即所有通信建立的基础都是输入/输出。用1/0为基础实现它并不是一个好的办法。新方法就是允许程序去调用位于其他机器上的过程。 当位于机器1的一进程调用机器2上的某过程时,机器1上的该进程被挂起,被调用的过程在机器2上执行。调用者将消息放在参数表中传送给被调用者,结果作为过程的返回值返回给调用者。消息的传送与I/0操作对于编程人员是不可见的。这种方法称为远程过程调用(remote procedure call),或简称为RPC。 1、由于调用的进程与被调用的过程运行在不同的机器上,

2、因而在不同的地址空间执行,这就导致了问题的复杂化。 2、调用者和被调用者都有可能会崩溃,任何一种可能的失败都会引起不同的问题。 RPC是广泛应用于分布式操作系统的一种技术。但有几个问题: 2.4.1 基本基本RPC操作操作 传统的(单机上)过程调用:read(文件句柄,缓冲区地址,输入最大字节数)。例如:count=read(fd,buf,nbytes).这里fd是一个整数,buf是一个字符型数组,nbytes是另一个整数。 功能是:从fd所指定的文件中输入 nbytes个字节到起始地址为buf的缓冲区中。函数返回实际读入到缓冲区中的数据的字节数,如果出错,返回-1,并设置错误号码errno.

3、在c语言中参数的调用分为值参调用与变参调用。 1、对被调用方,值参仅仅是一个初始化了的局部变量,其改变不影响调用方的初始值 。2、变参是一个指向变量的指针(即变量的地址),而不是变量的值。它的修改影响了调用方过程中的值。值参调用和变参调用的这种区别对RPC来说是很重要的。 此外有C语言中不使用的参数传递机制,它叫做复制/恢复调用(call-by-copy/restore)。在调用者将变量拷入堆栈,这一点是与值参调用一样。调用完成后,将栈中变量的值拷回并覆盖原有的变量值,此方法与变参调用用效果一样。 使用哪一种参数传递机制通常是由语言开发者决定的,它是语言的固有特性。它有时也与传递的数据类型相关

4、。例如在C语占中,整型与其他数值类型常作为值参传递,而数组总是以变参的形式传递。 RPC的内在思想是使远程的过程调用看上去就像在本地响过程调用一样。 RPC使用与本地调用相似的方法获得透明性 。主要步骤是: (1)客户过程以普通方式调用相应的客户存根: (2)客户存根建立消息并激活内核陷阱: (3)内核将消息发送到远程内核; (4)远程内核将消息送到服务器存根: (5)服务器存根取出消息中的参数后调用服务器的过程: (6)服务器完成工作后将结果返回至服务器存根; (7)服务器存根将它打包并激活内核陷阱; (8)远程内核将消息发送至客户内核; (9)客户内核将消息交给客户存根: 1O)客户存根从

5、消息中取出结果返回给客户。 最主要是将客户过程的本地调用转化为客户存根再转化为服务器过程的本地调用,对客户与服务器来说是透明的。242 参数传递参数传递客户存根的功能是获取调用的参数并将参数打包放入消息中送往服务器存根。将参数打包形成消息的过程称为参数组装(Paralncter Marshaling)。 例如:远程调用函数sum(i,j),该函数有两个整型参数并返回其代数和。 客户存根获取这两个参数并将它们打包入消息中。因为一个服务器可能支持多个调用,所以它也将被调用过程的名字或过程号放入消息中,以确定是哪一个调用。当消息到达服务器后,由存根检查消息以确定需要哪个过程,然后调用相应的进程。 服

6、务器进程一结束,服务器存根再次取得控制权,它获取服务器提供的运行结果并将其打包形成消息。这条消息被发送回客户存根,客户存根从消息中取出结果,最终将结果返回给客户进程。 只要客户机与服务器机是同样的机器,并且参数与结果都是像整型、字符型、布尔型这样的标量类型,那么上述模型将工作良好。例如lBM主机中使用的是EBCDlC码,而IBMPC使用的是ASCII码,服务器将会错误地解释所传送的字符。 如在lntel486中字节是从右向左编号,而在SPARC中正相反。Lntel的格式为最低有效位优先,而SPARC的格式为最高有效字节优先。例如,如果一个服务器有二个参数,一个整数和一个四个字符的字符串。每个参

7、数占一个32位长的字。 (a)说明了intel486机上,整型参数 5,字符串JILL。(b)说明了消息被SPARC机接收后。 5*2 的整数,“JILL”的字符串。(c)将每个字倒置后,整数虽然是5,字符串却成LLIJ。 24 对应于有n个参数的远程过程调用的消息将会有n+l个字段,一个字段标识过程,n个字段存放n个参数。客户和服务器共问建立一个表示基本数据类型的标准,给定一个参数列表和消息后,它们就可以推断出哪些字节属于哪个参数。 信息在消息中是如何表示的?一种方法是针对整数、字符、布尔数以及浮点数等设计一个网络标准或规范化形式,并且要求所有的发送者在参数编组时将其所有的数据的内部表示转换

8、为符合该标准的表示。 第二种方法,客户使用自己本来的格式,并在消息的第一个字节中说明它所使用的格式。这方法已经知道消息中的参数是怎样布局的以及客户是采用什么格式,剩下的工作就容易了(只要一方转换为另一方的格式)。 243 动态捆绑动态捆绑 客户如何定位服务器呢?一种方法是将服务器的网络地址固化到客户机中。但是当服务器移动、复制或者在改变其接口后,需要重新编译。为避免这些麻烦,一些分布式系统采用了动态捆绑的技术,以使客户能够定位服务器。 1、服务器 的形式说明书 首先应该提到的是服务器的形式说明书 ,说明书指出了服务器名字叫file_server,版本号为31,提供的服务器过程有(read,wr

9、ite,create,delete)。 每一过程都给出了参数类型。每个参数都被指明为输入参数、输出参数、或者输入/输出参数。 主要用途是作为存根生成器的输入,以此来产生客户和服务器的存根,然后将这两个存根存放到相应的存根库阵中。 当服务器程序开始执行时,main主循环外的初始化调用(initialize)输出服务器的接口。这意味着服务器进程向一个称为binder的程序发送消息,通过binder使其他机器知道该服务器的存在。 2、 binder 进程该进程用于服务器的注册。在注册时要登记服务器的名字、版本号、通常有32位长的唯一标识符号以及用于定位的句柄,以便客户进程能寻服务器进程。服务器进程也

10、可通过调用binder来注销登记以停止服务。 P58 表2-3 绑定接口客户进程第一次调用某个远程过程时,客户存根发现其未与服务器捆绑,则向binder发送消息要求检查,如果当前运行的服务器不支持这样的接口,则调用失败。另一方面,如果存在合适的服务器进程,binder将它的句柄和唯一标识符交给客户存根。客户存根把句柄作为地址,向它发送请求消息。消息包含送往服务器进程的参数和唯一标识符。当一台机器上运行多个服务进程时,服务器内核利用唯一标识符把到来的消息发送到正确的服务进程上。 动态捆绑: binder可以根据需要随机地将客户进程分配给多个服务器进程,以使服务器负载均衡。它还可以通过周期性测试,

11、自动注销任何不能响应调用的服务器进程,以提高容错性,还可以用来确认合法的使用者。 动态捆绑的不足: 由于客户进程的生存期短,而每个进程运行时都要从头开始,极大地影响了系统的性能。另外,billder会成为瓶颈,因此需要多个binder程序。无论注册还是注销接口,都需要有大量的消息传递来保持多个binder的同步与更新,这就需要更多的开销。 我们将讨论RPC可能发生的一些错误及其解决方法。RPC系统可能能出现的五类问题: (1) 客户无法证位服务器;(2)客户发给服务器的请求消息丢失;(3)服务器发给客户的应答消息丢失;(4)服务器在收到请求后崩溃;(5)客户机在发送请求后崩溃。客户无法定位服务

12、器客户无法定位服务器服务器可能已关闭。服务器产生一个新版本的接口,当客户进程运行时,binder就无法将客户进程与服务器进程相匹配,只能报出错。处理错误方法: 1、每个过程都有一个返回值,不同的返回值说明各种错误类型。加入一条新的错误类型无法定位服务器。 2、一种可能的解决办法是在出错时产生一个异常。定义新的信号类型SIGNOSERVER,让它像其他信号一样处理错误。 客户内核在发送请求时启动计时器。如果在计时器时满之前无应答或无确认消息返回,内核重发消息。如果请求消息确实丢失了,服务器是无法区分收到的请求是原来的还是重发的,而一切运行良好。当然,如果消息被多次重发而得不到应答,客户会放弃请求

13、并认为服务器已经关闭。 客户请求消息丢失客户请求消息丢失服务器应答消息丢失服务器应答消息丢失 根据计时器重传即如果在合理的时间内未收到应答,就重发请求。是请求丢失还是应答丢失,或是服务器速度太慢? 不同原因,有不问处理方法。 要解决这个问题,一种方法是将每个请求(操作能多次安全地重复执行而不产生危害)构造成幂等的。然而,有些请求事实上是非幂等的。 另一种方法是给要发送的请求消息分配一个序号。服务器内核保留那些最近来自每个客户的请求序号。这样服务器内核可以区别第一次发送的请求和重发的请求,排除了两次执行某个请求的可能性。 另一个附加的保护是在消息头上增加一位以区分是原来的还是重发的消息。服务器崩

14、溃服务器崩溃 在(b)中,系统不得不向客户报告失败(如:引起一个异常中断),而在(c)中只需重发请求。但客户的内核不能区分这两种情况。它只知道计时器到时。有三种方法可以解决这个问题。1、等待服务器重新启动,然后重发请求。这种方法要求不断重试直至应答消息到来并传给客户。这是至少一次语义,RPC至少要执行一次,但也有可能执行多次。2、立即放弃并报告失败。这是最多一次语义, RPC最多执行一次,但可能没有执行。3、不作任何保证。当服务器崩溃时,客户得不到任何帮助和保证。RPC可以不被执行或执行相当多次。这种方法最大的优点就是易实现。 这三种方法都不是成熟的方法。人们需要的是精确的执行一次的语义,但通

15、常它是不容易实现的。简而言之,服务器崩溃在很大程度上改变了RPC的性质。在单处理机系统中,服务器的崩溃往往意味着客户的崩溃。所以恢复既不可能也没必要。而分布式系统中则可以采取一些措施来处理这种情况。客户机崩溃客户机崩溃 如果客户巳发出请求但在应答到来之前崩溃了,这时会发生什么?此时已经激活了服务器中的相应汁算,但没有客户在等待结果。这样的计算称为孤儿(orphan)。 孤儿会导致一系列的问题。起码它浪费了CPU周期,同时又锁住了文件或其他宝贵的资源。此外,如果客户重新启动并再次调用了这个RPC,客户会很快得到那个孤儿的返回值,这将引起调用结果的混淆。孤儿问题的四种解决方法。 方法一,在客户存根

16、发送一个RPC前,日志文件中记下要执行操作的信息。该文件保存在不受崩溃影响的磁盘和其他媒介上。当客户重新旧动后,系统检查日志文件,并准确地清除孤儿。这种方法称为根绝。缺点是对每个RPC都进行磁盘记录,极大增加了系统开销。此外,孤儿还可以执行RPC,这样又生成了子RPC,很难找到和清除。总之,这种方法不好。 方法二,称为再生。这种方法不必做磁盘记录。该方法将时间划分成序编号叫纪元。当一客户重新启动时,它向所有机器广播一个新纪元的开始,此后,所有远程计算被终止。当然,如果网络是分段的,有些孤儿还会遗留下来。但当这些孤儿的应答返回时,消息上带有它们过时的纪元号。这些应答还是容易识别和清除的。方法三,

17、是对第二种方法的改进,称作温和再生。当接到某客户开始新纪元的广播后,每台机器检查自己是否有远程计算,若有则试图去找到该远程计算的调用者。若没有找到该计算的调用者,则终止该计算。 方法四,称为过期。每一个RPC执行时事先分给一个标准时间段T,当T到期而调用未完成时就必需申请一个T。另一方面,如果客户崩溃,服务器在客户重新启动前等候了一个T后,所有孤儿都被清除。由于RPC有各种不同的请求,如何选择T的合适值呢?终止一个孤儿可能会造成不可预见的后果。例如,假设一个孤儿正锁住一个或多个文件或数拥记录等,如果突然清除该孤儿,那么这些资源可能会一直处于被占用的状态。另外,一个孤儿可能已在某些远程的进程调用

18、队列中等待,期望将来能调用其他进程。这样,即使去除了这个孤儿也不能去除孤儿遗留下的痕迹。2.4.52.4.5实现的问题实现的问题 分布式系统的成败往往取决于它的性能。系统的性能在很大程度上取决于通信的速度。而通信的速度主要取决于对它的实现方法。讨论RPC系统的实现问题,重点在于系统性能和耗时情况。 RPC协议族协议族 1、如何选择RPC的协议。采用面向连接还是面向非连接的协议。面向连接的协议是任何时候客户进程都与服务器进程捆绑,它们之间建立一个连接。该协议的优点是通信简单,可靠性高。不用担心消息丢失,也不用处理确认消息。其缺点是性能下降,尤其表现在LAN。额外的软件开销是性能下降的原因。尽管面

19、向连接不会丢失信包,由于LAN的可靠性高,所以没有必要。大多数校园网或在同一建筑物内的分布式系统均采用面向非连接的协议。2、选择一个标准的通用协议还是专门为RPC设计的协议。 一些分布式系统使用lP(或UDP)作为基本协议:(1)协议已存在,省去了大量的工作;(2)协议有许多个现成的工具,这也省去了许多工作:(3)绝大部分UNlX系统中都可发送和接收该信包:(4)大多数现有网络支持IP与UDP信包。 总之,IP与UDP适用于大多数现有的UNIX系统和网络系统(lntemet)。这样,编写在UNlX系统上运行的客户或服务器程序较容易,这样加快了代码运行和测试的速度。 IP与UDP在性能上也有缺陷

20、。 IP不是为最终使用者设计的协议。它被设计为一个基础,其上可以建立在不同内部网络的可靠的TCP连接。 另一种方法是使用一个专门适用于RPC的协议,它不像 lP协议那样去处理信包,这些信包在网络中传送几分钟后,会突然在某个时候到达。当然这样的协议需要设计、实现、测试并嵌入到现有系统中,从长远的观点看开发和广泛地接受一个高性能的RPC协议是可取的。3、信包和报文的长度。RPC有一个大而固定的独立于发送数据的头信息。所以,发送一个64k的文件,一次发送64K明显要比发送64次lK要高效得多。因此,协议和网络能否允许较大长度的信包传送是很重要的。有的RPC系统只能传送小尺寸的信息(例如:Sun 是8

21、K),许多网络也不能处理很大的信包(如:以太网的最大限制为1536bytes),所以一个RPC不得不拆分成多个信包,从而增加了开销。一个大的RPC需要被拆分成多个信息包,是否每个信包都要确认。例如一个客户要向文件服务器写入一个4K的数据块。但是系统能处理的信包最大为lK。一种策略称为停等协议,客户进程先发送lK长的信包0后,等侍服务器的确认,然后,客户再发送下一个lK长的信包,等待下一个确认。 另一种策略叫爆发协议。是客户进程尽快将所有的信包发送完,当所有信包到达服务器后,服务器发回确认消息。确认确认这两种协议的性质有很大的不同。在停等协议中,如一个信包被破坏或丢失,客户不可能收到确认,于是重

22、新发送该信包。在爆发协议中,如果信包l丢失而信包2随后正确到达,服务器会面临选择。服务器可以丢弃收到的信包,等客户计时器超时后重发整条消息。或将0、2这两个正确到达的信包放入缓冲区,等待信包3正确到达后,客户指明重新发送信包1,这种技术叫做选择重发。停等协议和丢弃所有信包在发生错误时都易于实现。有选择重发策略需要大量的管理工作,但使用了较少网络带宽。一般可靠性高的局域网,几乎不会有信包丢失,因此使用有选择重发得不偿失。对于广域网而言,使用有选择重发更为合适。 当接收者不能接收到来的信包时就出现了一个称作超限的错误,该信包随之丢失。这种错误更为严重。以停等方式发送不会出现超限错误。在爆发协议中,

23、它明显比停等协议高效得多,但也可能会出现超限错误。 一方面,如果这个超限错误是由于芯片处理中断而暂时无法接收信包而引起的,那么,发送者可在发送两个信包之间加入一段延迟时间,使得芯片能在这个时间间隔内从中断返回到接收状态。另一方面,若超限错误是出于芯片的缓冲区不够而引起的,那么如果缓冲区容量为n个信包,则可在发送n个信包后留一个间隙,或是在发出n个信包后,得到一个确认后再发送后面的信包。 超限错误 协议包括请求、应答、确认。确认用来告诉服务器应答已经安全到达客户,可以将之丢弃了。现在假设确认在传送过程中丢失了,那么服务器会保留这个应答,但是对客户来说这个协议已经完成,不再计时和等待信包。 我们可

24、以修改协议,让确认消息再被确认一次,这种做法增加复杂性和额外开销,得不偿失。实际上,只需在服务器上设置一个计时器,在应答发送后计时,计时到后,不论客户是否收到应答,服务器都将应答丢弃,或者在收到一确认后将应答丢弃。当然,若收到客户的新的请求时,也可以认为应答是到达了,将应答丢弃。确认的确认关键路径关键路径 每个RPC执行的一系列指令顺序称为关键路径。客户首先调用客户存根,接着激活客户内核陷阱中断,发送消息到服务器的内核,同时引起服务器内核中断,最后消息经服务器存根送至服务器进程。它执行操作并返回结果。 在关键路径中的什么地方耗时最多?如果知道问题出在哪里,就可以想办法减少时耗。 (图2-24

25、固定的头信息 )在无数据RPC中,耗时主要在信包到来时服务器内核的现场转换、服务器的中断例程以及将信包传送到接口。在有数据 RPC中,数据在以太网上传送时耗时最多,其次是将信包送入和移出内部接口响耗时。忠告:建议避免使用离奇的硬件。其次,UDP协议有不足,UDP头字段中的校验和很耗时,有些得不偿失,一个简单的用户自定义的RPC协议将会工作得更好一些。最后,让服务器存根用忙等待而不是睡眠将大大减少2-24(a)中耗时最多的那一步(第 13步)的操作时间。在RPC中从客户到服务器的14步:(1)调用存根(2)获得消息缓冲区(3)组装参数(4)填入头信息(5)计算UDP校验和(6)陷阱内核(7)传送

26、请求包(8)通过QBus移动信包到控制者(9)以太网传输时间(10)从控制者获得信息(11)中断服务例程(12)计算UDP校验和(13)切换到用户空间(14)服务器存根代码图2-24 RPC关键路径(a)空的RPC(b)共有1440字节数组作为参数的RPC拷贝拷贝( (copying)copying) 一个与RPC执行时间密切相关的问题是拷贝。根据硬件、软件和调用类型的不同,消息可能需要拷贝一次到八次不等。 最好的情况:接口芯片支持DMA,它将消息直接从客户存根取到网上(拷贝1),并且实时地存放到服务器内核的存储区。内核检查该信包,并且包含它的页映射到服务器进程的地址空间。如果不允许做该映射,

27、那么内核将信包拷贝到服务器存根(拷贝2)。最坏的情况:内核将消息从客户存根拷贝到内核缓冲区(拷贝1)。内核拷贝消息到接口芯片的硬件缓冲区(拷贝2)。硬件启动,消息经网络传送到服务器接口芯片的缓冲区(拷贝3)。服务器内核将消息拷贝到内核缓冲区(拷贝4)。最后,消息从内核的缓冲区传送到服务器存根(拷贝5)。此外,如果此调用含有一个大的值参数组时,那么还需另外三步拷贝:将数组拷入客户进程的堆栈以调用客户存根;客户存根组装时,将数组从堆栈拷贝到消息缓冲区中;服务器存根将数组从消息中取出,放入服务器进程的堆栈中。总需要八次拷贝。(例题p68)1、分散-集中。具有分散-集中功能的网络接口芯片能够通过连结两

28、个或多个内存缓冲区装配一个信包。优点是可以在内核空间建立信包的头字段,用户数据仍放在客户存根中。要发送信包时,该部件将这两个部分连接起来形成信包。在发送方,从多个信包源集成一个信包避免了拷贝。同样,在接收方,可将消息头和消息体分别分散存放到不同的缓冲区中。2、内核可以改变内存映肘,将内核中放置信包的缓冲区映射到服务器进程的地址空间。同样,也可以将服务器存根的缓冲区映射到内核的缓冲区。当服务器存根开始运行时,信包就出现在它的缓冲区内,免去了从服务器内核到存根的拷贝。计时管理计时管理 在实际系统中,存在若消息由于线路中的杂音或是超限错误而偶然丢失的情况。在消息已发送而等候回答(应答或确认)时,设置

29、了计时器。若计时期满却没有应答,就需多次重发消息,或在多次重发后放弃发送。 管理计时所需要的时间是不可低估的。设置一个计时器需要建立一个数据结构,指出何时计时到期并且怎样处理。然后,将该数据结构插入到未到时的计时器的链表中。一般此链表是按时间顺序排序的,离到期时间最近的排在链表的首部,离到期时间最远的排在链表尾部。如图2-25所示。 当应答或确认消息到达时,必须找到计时链表并将该数据结构从链表中移走。实际上,许多应答并不超时,因此,查找链表并将该数据结构移走的大部分工作是浪费了。此外,计时也无须特别精确。 一个新的更有效的计时方法。许多系统都有一个进程表,该表中每一项都包括了系统中每个进程的所

30、有信息。当RPC开始执行时,内核中用一个局部指针指向当前进程的表项。将计时值放入该进程对应的表项的一个字段中,如图2-25(b)所示。这样设置的RPC计时器包括在当前时间上加上计时的长度,并且将该值写入进程表。如果要停止某个计时的话,则在计时字段中写入0。这样在清除计时时可减少许多操作。 欲使这个方法付诸实施,内核可以周期地检查整个进程表,如果发现一个非0的计时值小于或等于当前的时间,则说明超时了。在采取相应的操作后,重置该计时器。例如,有一个系统发送100个信包/秒,每秒扫描一次进程表的工作仅仅是查找和更新上述链表(每秒200次)的 1/200。这种周期按序遍历一个表的算法叫扫描算法。246

31、 问题领域基于客户-服务器模型的RPC广泛应用于分而式操作系统。理想的RPC是透明的,现行的分布式系统几乎没有一个称得上是透明的。透明性的研究仍需不断地进行下去。1、全局变量的问题。允许本地过程不受限制地访间远程的全局变量,是不能够实现的,应用中要求该变量对编程人员是可见的。这种对访问的禁止违反了透明性的原则。 2、有些语言结构不严谨,如C语言。编译器和存根对参数类型、大小等了解得不很清楚,存根并不总能推断出参数的类型,参数的组装工作不好完成。将指问复杂图形的指针作为参数也是一个难点,若要在RPC时传送此类指针,客户存根很难找到整个图形。UNIX命令的执行: softf1f2sort可以读标准

32、输入、写标准输出,它可以作为输入和输出的客户,执行从文件服务器读取f1,向文件服务器写入f2的RPC操作。Grep ratf3f4Grep 作为客户从文件f3读出含有rat内容的行,并写入到文件f4中。UNIX管道: grep ratf6grep和sort都可以作为标准输入和标准输出的客户。在这里grep与sort对其中一个必须作为服务器(被动的)。但是在前两条指令中,grep与sort均作为客户(主动的)使用,在这里客户/服务器模型显然是不合适的。 基于客户/服务器模型的Rpc并不适合这种通信模式。解决此问题的方法是将管道作为双向的服务器,既响应左边酌写请求,又响应右边的读请求。 2 .5

33、2 .5 组通信组通信 RPC的通信方式只包括两个成员,即客户与服务器。通信涉及到多个进程时,客户希望向所有服务器发送消息,以确保即使其中一个服务器崩溃仍能执行该请求。RPC不能处理一个发送者给多个接收者发送消息的通信方式。组通信:一次操作中将一条消息发送给多个接收者的通信机制。25.1 组通信的引入 组:在某系统或用户指定方式下协同工作的多个进程的集合。 主要的性质是:当一条消息发送到该组后,组内的所有成员都能收到该消息。 组是动态的,可创建,也可注销。进程可以同时成为多个组的成员。引入组的目的是将多个进程的集合当作一个独立的抽象物处理。本书里指的是进程组,但在计算机系统中有其他的组。组通信

34、的实现在很大程度上依赖于硬件。1、多点传送(multicasting):创建一个专门网络地址,多台机器可通过这个地址来监听。当包发送到该地址上时,该包就会自动地投递给所有在该地址上监听的机器。2、广播通信(broadcasting):包含某一特定地址的包可以发送给网上所有的机器。广播通信同样也用于实现组通信,但效率要低一些。 3、单点传送(unicasting):通过让发送者将包分别送往组的每个成员的方法来实现组通信。尽管效率较低,但是可行的,特别是在大多数组都比较小的情况下。 2 25 52 2 设计的问题设计的问题组通信和通常的消息传递机制在设计上有相似的地方,但发送消息给组与发送消息给进

35、程在本质上是不同的。 一、封闭组:只允许组内成员给该组发送消息。组外成员不能向作为一个整体的组发送消息。尽管它们可以给单个成员发送消息。开放组:系统内的任何进程可以给任何组发送消息。 二、对等二、对等(或同位或同位)组与分层组组与分层组 封闭组和开放组的区别在于谁能与该组通信。两者的另一个重要的区别在于它们的内部结构上。对等组:在一些组中,所有的进程的地位相同,没有哪个进程作为领导,决议是由进程集体作出的。分层组:在另一些组中,存在某种类型的分层组织。例如,一个进程作为“协调员”,其他所有的进程作为“工作人员。这两种组织方式各有其优缺点。 对等组是对称的而且没有单点故障。其中一个进程崩溃只会使组变小,而组中其他的进程仍能继续工作。缺点是组内每一个决定更为复杂,都需进行组内成员的表决,会有一定的时延和系统开销。 分层组却有着相反的性质。如果协调员一崩溃,则整个系统就会瘫痪。但只要协调员在运行,它无须打扰其他任何成员就可作出决定。当一个组内工作人员空闲时,便请求协调员分给其新的工作。在这种方式下,协调员控制搜索策略和修剪游戏树,实际的计算留给组内工作人员完成。 组的成员组的成员 使用组

温馨提示

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

最新文档

评论

0/150

提交评论