分布式导论2.pptVIP

  1. 1、本文档共89页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分布式导论2.ppt

第二章 通信 通信基础知识 远程过程调用Remote Procedure Call 远程方法调用Remote Method Invocation(调用) 面向消息的通信Message-Oriented Communication 面向流的通信Stream-Oriented Communication DSM 开发分布式系统的难点 困难 进程间通信是分布式系统的核心 通信是基于底层网络的消息传递的 网络是不可靠的 与共享内存系统的原语相比,消息传递更难 一个通信的例子 进程A到进程B的通信 A在自己的空间中创建消息 A执行一个系统调用将消息传递给B A和B必须对传递的各个位(bit)达成一致意见(agreement) 多少伏特的电压表示0,多少伏特的电压表示1 B如何知道某一位是消息的结束 如何获知消息被破坏或者丢失 数据项的长度 一个整数有多长 层次协议 OSI模型 TCP/IP协议 开放式系统互联OSI参考模型 Open Systems Interconnection (OSI) Reference Model 由ISO开发,允许开放系统通信 开放式系统(open system) 与其它的开放式系统通信时使用协议来管理格式、内容、发送和接收消息的含义 面向连接的协议connection-oriented protocol 在交换信息之前,sender和receiver必须建立一个明确的连接,甚至确定要使用的协议 无连接的协议connectionless protocol 不需要事先创建连接 Layers, Interfaces, Protocols of OSI Model OSI Model的工作原理 Send 每一层向消息加一个消息头(head) receive 每层取一个消息头并检测是否属于自己 协议栈Protocol Suite / Stack 在一个特定系统中使用的协议的集合 例子: TCP/IP for Internet TCP/IP 分层协议的好处 每层都可以有自己的协议 灵活性 通信模式 远程过程调用,Remote Procedure Call, RPC 远程方法调用,RMI 消息传递 Message Passing, MP 面向流的通信Stream Oriented Communication 分布式共享内存 Distributed Shared Memory, DSM 远程过程访问 基本的RPC操作 参数传递 扩展RPC模型 什么是 RPC 为什么出现RPC RPC描述 机器A上的进程X调用机器B上的过程Y X被挂起,Y的执行发生的机器B上 通过参数将信息从X传送给Y,并将过程执行结果返回 程序员不知道消息传递的存在 复杂性问题 调用过程和被调用过程在不同的机器、不同的地址空间运行 参数传递问题 两台机器都有可能失败 传统的过程调用 例子: count=read(fd, buf, nbytes); 工作原理——客户存根和服务器存根 Client Stub Server Stub RPC希望能实现透明性 RPC和本地过程调用采用同样的格式 例子: read() 客户存根CS 一个放在客户端库中的read的不同版本 服务器存根SS 服务器端与CS对应的版本 工作原理——调用发生时 如果是一个本地调用 用堆栈实现参数传递 如果是RPC 将一个 read() 的client stub 放在库中 参数编组Parameter marshaling 将参数放到一个消息中 执行 send() 执行 receive(), 挂起,等待回复 工作原理——实例 Example: add(i,j) 问题1——传值 在分布式系统中,机器是不同的 example1: IBM mainframe使用EBCDIC,IBM PC 使用 ASCII 字符编码 example2:Intel的little endian 和SPARC的 big endian (from Gulliver’s Travels by Jonathan Swift) 字符串和整型需要不同的标记才能得到正确的结果 问题2——传引用 把一个指针发送给服务器是无用的 对于数组: copy/restore机制 optimization: 如果存根知道数组对于服务器来说是使输入参数还是输出参数,可以省略掉一个复制过程 对于普通的指针 一些系统将指针发送给服务器 在Server的过程中产生特定的代码 产生一个请求发送回客户端以提供引用的数据 问题3——参数说明 参数格式 C/S 对于简单的数据结构有共识 整数、字符等等 调用过程和被调用过程对实际的消息传递有共识 问题4——Stub的产生 在同样的协议环境下,不同的过程所产生的存根只在应用程序

文档评论(0)

cai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档