- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用内存映射文件技术实现进程间通信-Read.doc
利用内存映射文件技术实现进程间通信
王润高 郭燚 李鹏
分布式系统中RPC概述
在传统的编程概念中,过程是由程序员在本地编译完成,并只能局限在本地运行的一段代码,也即其主程序和过程之间的运行关系是本地调用关系。因此这种结构在网络日益发展的今天已无法适应实际需求。总而言之,传统过程调用模式无法充分利用网络上其他主机的资源(如CPU、Memory等),也无法提高代码在实体间的共享程度,使得主机资源大量浪费。
通过RPC机制,很好地解决了传统过程所存在的一系列弊端。通过RPC我们可以充分利用非共享内存的多处理器环境(例如通过局域网连接的多台工作站),这样可以简便地将你的应用分布在多台工作站上,应用程序就像运行在一个多处理器的计算机上一样。你可以方便的实现过程代码共享,提高系统资源的利用率,也可以将以大量数值处理的操作放在处理能力较强的系统上运行,从而减轻前端机的负担。
在建立RPC服务以后,客户端的调用参数通过底层的RPC传输通道,可以是UDP,也可以是TCP,并根据传输前所提供的目的地址及RPC上层应用程序号转至相应的RPC 应用程序服务器,且此时的客户端处于等待状态,直至收到应答或超时信号。当服务器端获得了请求消息,则会根据注册RPC时告诉RPC系统的进程入口地址,执行相应的操作,并将结果返回至客户端。
当一次RPC调用结束后,相应线程发送信号,客户端程序才会继续运行。当然,一台服务主机上可以有多个远程过程提供服务,那么如何来表示一个唯一存在的远程过程呢?一个远程过程是有三个要素来唯一确定的:程序号、版本号和过程号。程序号是用来区别一组相关的并且具有唯一过程号的远程过程。一个程序可以有一个或几个不同的版本,而每个版本的程序都包含一系列能被远程调用的过程,通过版本的引入,使得不同版本下的RPC能同时提供服务。每个版本都包含有许多可供远程调用的过程,每个过程则有其唯一标示的过程号。
内存映射文件技术概述
在本例中,只在同一台主机上实现不同进程间的通信,所以采用内存映射文件技术来实现不同进程间的参数传递。
1. 用途和基本操作
???用于不同进程之间的内存共享操作, 可以将一个物理文件映射到内存当中然后直接利用分配到的或者打开的命名共享内存的地址空间实现资源共享访问。
2. 相关流程
1) 新建命名共享内存
???首先利用CreateFile或者CreateFileForMapping获得一个用于映射的物理文件句柄, 然后利用该文件句柄结合CreateFileMapping得到一个命名的共享内存映射文件句柄。
2) 打开命名共享内存
???如果需要共享已经存在的命名共享内存映射文件, 使用OpenFileMapping函数。
3) 获得地址空间指针
???进行内存映射文件的读写和一般的文件读写不同, 是直接面对你申请的地址空间, 为此需要使用MapViewOfFile得到相关的地址LPVOID类型的指针。
???如果需要进行文件写入, 可以通过类型转换直接对于内存地址进行赋值, 比如
???memcpy( lpAddress, lpBuf, ....)。
???如果是读取操作,将参数顺序调整一下就可以了。
4) 将内存复制到所映射的物理文件上面
???FlushMapViewOfFile函数可以将内存里面的内容DUMP到物理磁盘上面。
5) 卸载内存映射文件地址指针
???UnmapViewOffFile函数来卸内存映射文件。
6) 关闭内存映射文件
???最后,调用CloseHandle来关闭内存映射文件。
源码及Demo功能
一、源码介绍
在本例中,在同一个wordSapce(clientProcess.dsw)中加入两个工程,分别为cilentProcess和serverProcess,一个为客户端进程,另一个为服务端进程。
在服务端工作流程:
调用CreatFile函数来创建文件内核对像,并将句柄保存在hFile中;
调用CreateFileMapping函数来创建文件映射内核对像,并将句柄保存在hFileMapping中;
设定内存映射文件的大小及偏移量;
MapViewOfFile将文件数据映射到进程的地址空间;
循环等待客户端进程发送过来的消息,一旦不消息过来,接收这个消息并对它进行处理,处理完毕后给客户端发送消息;
服务端进程退出前要经过以下三个过程:调用UnmapViewOfFile函数将文件数据从进程的地址空间中释放;调用CloseHandle释放文件映射内核对像和文件映射对像。
客户端工作流程:
调用OpenFileMapping打开文件映射内核对像;
输入将要在服务端进行处理的数据,并等待服务端的处理结果;
二、Demo功能
在客户端输入一个整数,在服务端计算这个数的平方,并将结果返回给客户端,
您可能关注的文档
最近下载
- 2025重庆长江师范学院科研助理招聘13人笔试参考题库附答案解析.docx VIP
- 国际医学研究报告清单及规范:5-CARE Checklist 案例报告.docx
- 软件概要设计说明书.doc VIP
- 武汉理工大学855信号与系统2022考研真题试卷.pdf VIP
- 爆破行业风险评价方法、爆破作业风险分级管控指南、风险分级管控清单、隐患排查清单、台账.pdf VIP
- 2025年财政部高层次财会人才选拔考试综合试题及答案.docx VIP
- 国际贸易学_金泽虎主编_电子教案.ppt
- 2025年财政部高层次财会人才选拔考试测试题及答案.docx VIP
- 医学三基考试试题及答案.doc VIP
- 2025年职场 性格25PF测试题 .pdf VIP
文档评论(0)