内存映射文件在进程中的应用与研究
摘 要
随着计算机操作系统的发展,多任务多进程已经被广泛应用。为了加速应用程序的运行,往往会在系统中建立多个进程,由这些进程相互合作去完成一个共同的任务,经常需要在进程之间交换信息、传递数据。
Windows提供了多种机制,使应用程序能够迅速而方便地共享数据和信息,这些机制包括RPC、COM、OLE、DDE、窗口消息(尤其是WM_COPYDATA)、剪贴板、邮箱、管道和套接字等;而这些机制均使用内存映射文件,在Windows系统中,单个计算机上共享数据的最低层机制是内存映射文件。如果互相进行通信的所有进程都在同一台计算机上的话,使用内存映射文件进行共享,系统的性能较高和开销较小。
本文主要阐述了内存映射文件基本原理和实现方法,探讨和研究了如何在Visual C++环境下利用MFC类库编写使用内存映射文件来完成进程间数据共享,并给出了应用实例。
关键词:内存映射文件;进程通信;MFC目 录
1 引 言 1
1.1 课题背景 1
1.2 本课题研究的意义 1
1.3 课题研究方法 1
2 开发平台简介 1
3 主要技术 2
3.1 内存映射文件的基本原理和操作 2
3.1.1 内存映射文件的基本原理 2
3.1.2 创建内存映射文件 3
3.1.3 映射文件的视图到进程的地址空间 5
3.1.4 FlushViewOfFile函数 6
3.1.5 取消文件视图的映射 6
3.1.6 关闭文件映射对象 6
3.2 内存映射文件在进程数据共享中的应用 6
3.2.1 进程的相关概念 6
3.2.2 共享内存的原理 7
3.2.3 使用事件对象来同步进程 8
4 应用实例 10
4.1 相关技术 10
4.1.1 消息映射机制 10
4.1.2 BMP(位图)文件 11
4.2 本实例实现流程 14
4.3 功能实现 15
4.3.1 MemonyShare工程说明 15
4.3.2 MemonyShareRev工程说明 20
结束语 26
参考文献 26
致 谢 27
声 明 28
1.1 课题背景
随着计算机操作系统的发展,多任务多进程已经被广泛应用。同时也就涉及到进程之间的通信和数据共享等问题。
在Windows中,在单个计算机上共享数据的最低层机制是内存映射文件。如果互相进行通信的所有进程都在同一台计算机上的话,如RPC、COM、OLE、DDE、窗口消息(尤其是WM_COPYDATA)、剪贴板、邮箱、管道和套接字等所有机制均使用内存映射文件从事它们的烦琐工作。
所以研究内存映射文件的原理,在实际编程中实现进程的共享成了本课题的主要研究对象。
1.2 本课题研究的意义
内存映射文件是实现进程共享通讯的基础,它也是Windows的一种内存管理方法,提供了一个统一的内存管理特征,使应用程序可以通过内存指针对磁盘上的文件进行访问,其过程就如同对加载了文件的内存的访问,非常方便和高效。
内存映射文件是多个进程间共享数据最有效的方法,通过研究内存映射原理,熟悉方法并将其应用到实际的工程中,加以实践,掌握进程间通讯的方法。
本文主要阐述如何在Visual C++环境下,运用MFC实现使用内存映射文件进行进程间数据共享的方法。
1.3 课题研究方法
进程间的通讯类型有多种,本课题主要是研究利用内存映射文件来实现基于共享存储区的通信方式,这样的通信方式一般适合于传输大量数据。
Visual C++是一个很好的可视化编程工具。作为Windows环境下最主要的应用开发系统之一,Visual C++不仅是C++语言的集成开发环境,而且与Win32紧密相连,所以利用Visual C++开发系统可以完成各种各样的应用程序的开发,从底层软件直到上层直接面向用户的软件。使用Visual C++环境来开发基于Windows的应用程序大大缩短了开发时间。
使用Visual C++2005,运用MFC设计一个使用内存映射文件来传递BMP文件到另一进程显示的实例,并分析相关代码。