基于数据源的虚拟内存处理方法

文档序号:6555700阅读:120来源:国知局

专利名称::基于数据源的虚拟内存处理方法
技术领域
:本发明涉及一种基于数据源的虚拟内存处理方法,尤其是一种将来自各方的数据源进行接口封装从而形成数据源对象并依此对数据进行灵活、清晰的虚拟内存处理的方法。
背景技术
:虚存处理即虚拟内存的处置管理过程,它是计算机操作系统中重要的组成部分,通常是由操作系统提供的管理虚拟内存到物理内存的映射等操作,其担负着对来自各种输入/输出设备的程序、文件等(通称为数据)的存储、调用管理工作,以便使CPU能够高效处理运行。传统的虚存处理方法主要是先分配虚拟地址空间,通过专门的系统调用从磁盘文件里读取内容到物理内存中,建立虚拟地址到物理内存的映射,或者说把物理内存附接到所分配的虚地址上。由上述可知,传统的虚存管理没有考虑到数据与存贮器的关系。由于数据可能来自不同的地方,如内存、磁盘、网络等等,因此,传统虚存管理必须依据每种数据的来源,对其添加相应的读写等操作数据的代码,而且,传统的虚存管理只能从磁盘文件中读写数据,从而导致了虚存管理非常不灵活,并且不便于扩充,缺乏通用性。
发明内容本发明的目的在于针对上述传统的虚存管理所存在的管理不灵活、不便于扩充、缺乏通用性的缺陷,而提供一种基于数据源的虚存处理方法,通过对数据源进行接口封装形成数据源对象,可以通过数据源对象自身完成数据的加载和物理内存到虚拟内存的映射,克服了传统的虚存管理所存在的管理不灵活、不便于扩充、缺乏通用性的缺陷。为实现上述发明目的,本发明提供了一种基于数据源的虚存处理方法,包括如下步骤步骤1、对数据源进行接口封装,生成具有统一接口方法的数据源对象,该数据源对象对应一页面缓存,所述页面缓存为一组物理内存页面,用于缓存所述数据源的数据;所述接口方法用于获取物理内存页面和将数据源中的数据读取到指定的物理内存页面中;步骤2、为所述数据源对象对应的数据源在虚拟内存中分配虚拟内存空间,并把所述虚拟内存空间与所述数据源对象进行对应;步骤3、在进程读取所述虚拟内存空间的虚拟内存页面时发生缺页时,调用所述数据源对象的接口方法,读取所述数据源与该虚拟内存页面相对应的部分到页面缓存的物理内存页面中,并返回所述物理内存页面;步骤4、将所述物理内存页面映射到所述虚拟内存页面;步骤5、结束。在所述步骤3与步骤4之间还可以设有判断所述数据源对应的映射方式是否为共享映射,如果是,则执行步骤4,如果不是,则复制一份所述物理内存页面的副本,将该副本映射到所述虚拟内存的页面,然后执行步骤5。由上述技术方案可知,本发明通过对数据源进行接口封装形成数据源对象,通过数据源对象自身完成数据的加载和物理内存到虚拟内存的映射,而且由于数据源对象所封装的数据源没有特定的要求,可以实现从磁盘以外的地方向内存中加载数据,从而克服了传统的虚存管理所存在的管理不灵活、不便于扩充、缺乏通用性的缺陷。下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。图1为本发明的共享映射的虚存管理结构示意图;图2为本发明的私有映射的虚存管理结构示意图。具体实施例方式本发明的基本原理是对于来自任何地方的数据首先进行接口封装,从而形成数据源对象,当任何进程在加载或调用数据源对象的数据时,虚存管理程序可以不用关心如何操作数据的读写等问题,而通过数据源对象提供的接口方法将数据装载到页面缓存中,该页面缓存实际上是一组物理内存页面,然后将页面缓存中的物理内存页面与虚拟内存页面进行映射。本发明中将来自任何地方的数据统称为数据源,数据源可以是来自磁盘和/或网络或外部输入设备的文件或程序或数据流或一段共享内存中的数据。参见图1,其为本发明的共享映射情况下的虚存管理结构示意图,虚存管理的过程如下首先,读取数据源1中的报头信息,得知数据源1所具有的段的数量;然后,为每个段(Section)创建一个Section对象,该Section对象是对每个段中的数据进行接口封装后产生的,而Section对象即为数据源对象2。数据源1可以是来自磁盘或网络或其他外部输入设备的文件或程序或数码流或任意数据来源。数据源1中的段包括了代码段或数据段等,由此而形成的数据源2就代表了代码段或数据段。数据源对象2对应页面缓存3(PageContainer),对数据源对象2中封装的数据源1起到缓存的作用。页面缓存3其实为一组物理页面,最终由AS(AddressSpace地址空间)把页面缓存3与进程的虚拟地址建立映射关系。当被映射到多个进程的地址空间中时,就实现了数据源1的共享。每个数据源对象2可实现两个接口封装。一个用于获取指定偏移的物理页,另一个用于更新数据源。第一个接口方法为GetPage是通过给定的偏移获取物理页。如果还没缓存该页,则从数据源中读取并缓存到物理内存4中。第二个接口方法为Flush用于更新数据源。由于用物理内存4缓存数据源对象封装的数据源1,因此,当用户对缓存进行修改后,需要将数据源1的内容也做同样的修改时,可以调用该接口方法。对于某些数据,如进程需要读写的数据,这些数据对于进程来说应该是私有的,所以对于此类数据采取私有映射的方式,参见图2,其为本发明的私有映射情况下的虚存管理结构示意图,与上述共享映射不同之处在于,将数据加载到页面缓存后,将该页面缓存进行复制,生成该页面缓存的副本,将该副本与进程的虚拟地址建立映射关系,当有多个进程需要读写同一数据时,内存中便存在多个页面缓存的副本,每个副本对应一个进程。以下,通过一个模块装载器(Loader)装载动态链接库(DLL)文件到内存中的具体实施例描述基于数据源的虚存管理的操作步骤。首先通过读取DLL文件中的PE(PortableExecutable,即可移植的可执行体,它是Win32环境自身所带的执行体文件格式。)头信息,得知该DLL文件有多少个段(如代码段、数据段等),然后为每个段创建一个Section对象,Section对象实现了数据源对象的接口。也就是说,Section对象就是数据源对象,分别代表了代码段、数据段等。当数据源对象创建好后,由虚存管理程序为该DLL文件分配一段虚存空间,并把相应的虚拟内存段与所述数据源对象对应。当程序跳到DLL的入口函数准备执行时,访问虚拟内存页面,尝试读取代码段的代码,由于未把文件装载到内存而导致缺页,缺页是指要访问的虚存页面没有对应物理内存页面。虚存管理程序调用缺页内存段对应的数据源对象的接口GetPage,GetPage根据传入的偏移参数从磁盘读取DLL文件的相应部分到页面缓存(实际上是物理内存页面)中,虚存管理程序把发生缺页的虚拟内存页面映射到GetPage返回的页面缓存上,这样程序就可以读取所需的代码段,从而使程序正常执行下去了。当程序下次要读取同样的页面时,通过GetPage就可以直接返回页面缓存的页面,而不需要从磁盘中读取了。对于代码段来说一般采用共享映射的方式,即调入内存中的代码不需要被程序更改,所以在内存中包含同样的代码的页面缓存,只需要存在一个就可以,其他进程可以共享给页面缓存,共享的方式为将页面缓存与程序的虚拟内存页面映射到页面缓存。如果程序需要读写数据段时,发生缺页,同样通过调用数据段Section对象的接口GetPage将数据段的数据读取到页面缓存中,但由于数据段采用的私有映射的方式,即每个进程都要有自己的数据段副本,所以虚存管理程序会在GetPage方法得到页面缓存后,复制一个页面缓存的副本,将这个副本映射到发生缺页的虚拟内存页面上。基于数据源的虚存管理通过把数据源封装成统一接口的数据源对象,虚存管理可以不用关心如何操作数据的读写等,又可以把各种数据通过接口装载到虚存并映射到物理内存中。对于任意数据源,虚存管理都可通过数据源对象接口访问,而无须修改任何关于虚存管理的代码。最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。权利要求1.一种基于数据源的虚拟内存处理方法,其中,执行以下步骤步骤1、对数据源进行接口封装,生成具有统一接口方法的数据源对象,该数据源对象对应一页面缓存,所述页面缓存为一组物理内存页面,用于缓存所述数据源的数据;所述接口方法用于获取物理内存页面和将数据源中的数据读取到指定的物理内存页面中;步骤2、为所述数据源对象中封装的数据源在虚拟内存中分配虚拟内存空间,并把所述虚拟内存空间与所述数据源对象进行对应;步骤3、在进程读取所述虚拟内存空间的虚拟内存页面时发生缺页时,调用所述数据源对象的接口方法,读取所述数据源与该虚拟内存页面相对应的部分到页面缓存的物理内存页面中,并返回所述物理内存页面;步骤4、将所述物理内存页面映射到所述虚拟内存页面;步骤5、结束。2.根据权利要求1所述的基于数据源的虚拟内存处理方法,其特征在于在所述步骤3与步骤4之间还设有判断所述数据源对应的映射方式是否为共享映射,如果是,则执行步骤4,如果不是,则复制一份所述物理内存页面的副本,将该副本映射到所述虚拟内存的页面,然后执行步骤5。3.根据权利要求1或2所述的基于数据源的虚拟内存处理方法,其特征在于所述数据源为来自磁盘和/或网络或外部输入设备的文件或程序或数据流或一段共享内存中的数据。4.根据权利要求1所述的基于数据源的虚拟内存处理方法,其特征在于对数据源进行接口封装的具体操作为读取数据源的报头信息,获取数据源所包含的段的数量;为每个段创建一个数据源对象,该数据源对象是对每个段中的数据进行接口封装后产生的。全文摘要一种基于数据源的虚拟内存处理方法,包括如下步骤1.对数据源进行接口封装,生成具有统一接口方法的数据源对象;2.为数据源对象封装的数据源在虚拟内存中分配虚拟内存空间,并把虚拟内存空间与数据源对象进行对应;3.在进程读取所述虚拟内存空间的虚拟内存页面时发生缺页时,调用数据源的接口方法,读取数据源与该虚拟内存页面相对应的部分到页面缓存的物理内存页面中,并返回物理内存页面;4.将物理内存页面映射到所述虚拟内存页面。本发明通过数据源对象自身完成数据的加载和物理内存到虚拟内存的映射,可以实现从磁盘以外的地方向内存中加载数据,克服了传统的虚存管理所存在的管理不灵活、不便于扩充、缺乏通用性的缺陷。文档编号G06F12/08GK1908917SQ20061003037公开日2007年2月7日申请日期2006年8月24日优先权日2006年8月24日发明者苏翼鹏,梁宇洲,王晨辉,陈榕申请人:上海科泰世纪科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1