您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页其在大数据量文件快速存取中的应用

其在大数据量文件快速存取中的应用

来源:意榕旅游网
第8期 杨宁学等:内存映射文件及其在大数据量文件快速存取中的应用 ・187・

内存映射文件及其在

大数据量文件快速存取中的应用

杨宁学,诸昌钤,聂爱丽

1

1

2

(1.西南交通大学计算机与通信工程学院,四川成都610031;2.安阳大学电气工程系,河南安阳455000)摘 要:分析了Win32系统下的虚拟内存系统模式及内存映射文件的工作机理,介绍了如何用WindowsAPI将文件映射至内存,并通过实验数据得出,采用内存映射文件在对大数据量文件进行存取,其效率远远高于传统的基于I/O方式的数据存取。

关键词:内存映射文件;虚拟内存;快速存取;传统I/O中图法分类号:TP311

文献标识码:A

文章编号:1001-3695(2004)08-0187-02

Memory-mappedFilesandIt’sApplicationonFastRead/Write

fromMassDataFiles

YANGNing-xue,ZHUChang-qian,NIEAi-li

AnyangUniversity,AnyangHenan455000,China)

1

1

2

(1.SchoolofComputer&Communication,SouthwestJiaotongUniversity,ChengduSichuan610031,China;2.Dept.ofElectricalEngineering,

Abstract:AnalyzesVirtualMemorymodeandhowthememory-mappedfilesworksinwin32andintroduceshowtousethewindowsAPItomapfilestomemory.Resultscanbegottenfromexperimentsthattheeffectiveismuchhigherinreadingmassdatausingmemory-mappedfilesthanusingthetraditionalI/Omanner.

Keywords:Memory-MappedFiles;VirtualMemory;FastRead/Write;TraditionalI/O

随着计算机技术的飞速发展,计算机要处理的数据越来

(PageDirectory),页表(PageTable)和页(Page)共同组成。页由页表(PageTable)进行管理,而页表又由页目录(PageDirec-tory)进行管理,每个页目录最多可以有1024个页表,每个页表最多可以拥有1024个页,它们之间的关系如图1所示。系统以页的方式管理所有的内存,每页为4096字节,即4KB。在Win32操作系统中,每个进程拥有属于自己的4GB的逻辑地址空间(页表数×每个页表中的页数×页大小,即1024×1024×4096=4GB),其中高2GB地址空间用于系统使用,低2GB地址空间用于进程使用。每个进程独立的访问自己的地址空间,不受其他进程的影响,从而增强了进程的健壮性。

越多,数据文件也越来越大,要想对大数据量文件进行快速存取,用传统的通过I/O文件读取技术将很难满足要求。文件输入和输出(I/O)是计算机编程中的一个巨大瓶颈。在简单的情况下,这是一个耗时较多的阻塞式调用,而在复杂情况下,就必须产生独立的线程来操作I/O。有时,一个独立的线程会引入许多问题,如同步、等待等。文件I/O也经常用于进程间通信(IPC)。除了性能考虑之外,IPC有时需要双向的I/O通道,但使用简单的文件I/O,这是很难建立和维持的。同时,如果通信不是面向数据流的或有超过两个以上的用户共享时,IPC会变得异常复杂。大多数文件I/O的缓冲特性意味着发送进程需要不断的强制系统保存缓冲。解决上述问题较好的方法是使用内存映射文件(Memory-MappedFiles,MMFs),让Win32来管理文件I/O、缓冲器和高速缓冲器。

本文通过实验,对比分析了用传统I/O方式读取数据和采用内存映射文件方式对一个机器人数据库进行读取,通过实验数据可知,采用内存映射文件方式读取数据的效率要明显高与传统I/O方式读取数据。

图1 虚拟内存中的页管理树

虽然每个进程都可以拥有4GB的地址空间,但大部分并未使用。根据应用程序的需要,Win32把需要使用的逻辑空间映射到物理存储地址中。使用交换文件来存储机器中其他超过RAM的虚拟内存。当前不用的内存块写入磁盘,需要时从磁盘读出至内存块。

1 Win32的虚拟内存模式

Win32系统采用一种基于页(Page-based)的虚拟内存系统模式,采用32位线性地址,该32位线性地址分别由页目录

2 内存映射文件

内存映射文件提供了一种独特的内存管理特征,它允许应

收稿日期:2003-08-09;修返日期:2003-11-03用程序与通过指针访问动态内存相同的方式访问磁盘上的文

・188・计算机应用研究2004年

件。因此,可以在进程地址空间中将磁盘上的文件部分或者全部映射到特定地址范围,然后通过指针就可以访问内存映射文件中的内容。一旦该文件被映射,就可以访问它,就像整个文件已经加载内存一样,从而可以不必对文件执行I/O操作,这对大数据量文件来说存取效率较高。内存映射文件的高效数据存取主要源于如下一些优点:

(1)系统采用“页”方式进行数据传输。Win32系统的虚拟内存管理采用“页”的方式进行数据管理,每页为4KB大小,由虚拟内存管理器进行统一管理,虚拟内存管理器统一以相同的方式执行存盘读写操作,因此在每次存盘读写时都以4KB页大小的次序进行读写,这样可以减少读写次数,极大地提高读写能力。

(2)所有的I/O交互都在内存中以标准内存寻址方式进行,其文件读写在后台进行,对应用程序透明,因而在将数据从磁盘读到内存的过程中不会出现性能上的瓶颈。

(3)内存映射文件提供了一种在需要时才将部分文件数据映射到内存中的机制。该机制的好处在于应用程序只需要从大量数据中获取一小部分数据而不必将所有的数据文件读到内存中,因此可以节约大量的内存。

内存映射文件分三种情况:①可执行文件的内存映射,主要由操作系统自身使用;②数据文件的内存映射;③借助于系统页面交换文件的共享内存映射。它们之间的相互关系如图2所示。系统在进行工作时,首先把数据文件的一部分映射到虚拟地址空间内,但不提交RAM,存取这段内存指令时会产生一个页面异常,系统捕获到这个异常后,分配一页RAM,并把它映射到当前进程发生异常的地址处,然后系统把文件中相应的数据读到这个页面中,继续执行刚才产生异常的指令。这就是应用程序自己不需要调用文件I/O函数的原因,也是内存映射文件技术的工作机理。

图2 可执行文件、数据文件和共享内存

映射之间的关系

3 用内存映射文件实现大数据量文件的快速存取

Windows中提供了内存映射文件的实现函数,使用内存映射文件,一般要执行以下操作步骤:

(1)用CreateFileMapping()函数创建或打开一个文件内核对象,该对象用于标志用作内存映射文件的磁盘文件,该函数返回一个文件映射句柄供后面的操作用;

(2)用OpenFileMapping()打开一个内存映射文件对象;(3)用MapViewOfFile()或者MapViewOfFileEx()将文件映射对象的全部或一部分映射到进程地址空间中。

当把文件映射到进程地址空间后,就可以通过指针来访问

内存映射文件中的数据。当完成对内存映射文件的使用后,必须执行下面步骤将它清除:

(1)用UnmapViewOfFile()在进程的地址空间中撤消文件映射内核对象的映射;

(2)FlushViewOfFile(),关闭文件映射内核对象;(3)CloseHandle(),关闭文件内核对象。

本文通过实验,将以OpenFlight文件格式存放的机器人数据读入内存,然后用OpenGL将其在屏幕上显示出来,分别采用了传统的I/O文件读取和内存映射文件读取数据的办法,并将两种方法进行对比,下表是实验数据,由表1可知,内存映射文件在存取数据方面效率是较高的。

表1 实验数据

实验一

实验二实验三传统I/O读取(s)55.14.8内存映射文件(s)

1

1.2

1.1

(注:表中数据的获取是在PⅢ500,128MBRAM,Windows2000Professional环境下取得。传统I/O文件读取从打开文件开始计时,内存映射文件以执行CreateFileMapping()语句时开始计时,两者均以成功的将三维机器人绘制在屏幕上停止计时。机器人数据:6000个面,31000个点)。

4 总结

本文分析了虚拟内存及内存映射文件的工作原理,并与传统I/O文件读取进行对比,得出内存映射文件在存取效率上有明显的改善。参考文献:

[1]美]DavidJKruglinski.VisualC++6.0技术内幕(第四版)[M].北京:清华大学出版社,1999.

[2]MicrosoftCorp.MicrosoftMSDN[DB/OL].http://www.Microsoft.com/msdn,2000.

[3]

徐光伟,顾景文,阎福礼,等.基于内存映像文件的网络信息安全性存取的探讨[J].计算机应用研究,2002,19(7):48-49.

作者简介:

杨宁学(1975-),男,博士生,主要研究方向为虚拟现实技术、图形图像处理;诸昌钤(1938-),男,教授,博士生导师,主要研究方向为图形图像处理、智能交通;聂爱丽(1967-),女,实验师,工学硕士,主要研究方向为现代教育技术研究与应用。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务