程序共享内存的地址转换方法和装置制造方法及图纸

技术编号:8655894 阅读:121 留言:0更新日期:2013-05-01 23:33
本发明专利技术提供了一种程序共享内存的地址转换方法和系统,用于将为程序分配的物理内存空间映射到虚拟地址空间,为程序分配的物理内存空间包括所述程序在物理内存空间中所占用的物理内存块和物理内存块之间的间隔块,该方法包括:根据物理内存空间确定其起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小;根据物理内存空间的起始地址确定虚拟地址空间的起始地址;将物理内存空间按序映射到虚拟地址空间的连续空间中;根据所述不同的虚拟地址空间对应所述物理内存空间的差进行地址转换。通过本发明专利技术,不论申请到的物理内存是否连续,都能在共享内存时保持地址空间转换时间复杂度为O(1),从而保证转换效率。

【技术实现步骤摘要】

本专利技术涉及计算机系统中的地址转换方法,更为具体地,涉及一种程序共享内存的地址转换方法和装置
技术介绍
当应用程序与内核程序共享内存时,应用程序与内核程序通过不同的地址空间访问同一块物理内存。图1示出了连续物理内存空间的映射示意图。如图1所示,假设应用程序与内核程序共享一块连续的物理内存,其中C为物理地址空间;c为物理地址;A为线性地址空间;a为线性地址;B为线性地址空间;b为线性地址;线性地址a属于A,b属于B,c属于C,应用程序通过线性地址空间A访问物理地址空间C,内核程序通过线性地址空间B访问物理地址空间C。线性地址a和线性地址b通过地址转换对应同一物理地址C,那么a和b之间则存在一个地址差,同时这个地址差也是线性地址空间A和线性地址空间B的空间差。应用程序将线性地址空间A中的线性地址a传给内核程序后,内核程序可以根据空间差计算出线性地址空间B中对应的线性地址,反之同样成立。这样应用程序和内核程序就可以实现共享内存。程序运行离不开频繁的内存访问,因此地址空间转换的效率就显得尤为重要。对于共享一块物理内存这种情况,由于只存在一个空间差,所以空间转换时间复杂度为0(1)。但实际上,共享多块不连续物理内存才是普遍情况,这时空间转换的时间复杂度会变大。当共享n块不连续物理内存时,就会存在n个地址空间差,那么空间转换的时间复杂度就为0(Iogn)。要使空间转换的时间复杂度始终为0(1),最直接的方法就是确保申请一块连续物理内存。但问题是申请一块足够大的连续物理内存常常无法成功,尤其系统运行时间越长,内存碎片越多,成功的可能就越小。为了能申请到一块足够大的连续物理内存,通常要对内核内存管理系统进行深度修改。对于闭源系统,这样的修改不可能。即便是开源系统,因为几乎所有其它子系统都要使用内存管理系统,修改起来也会很复杂,并且还要考虑系统版本更新带来的维护开销,对内核内存管理系统进行深度修改这个方法虽然直接但不理想。
技术实现思路
鉴于上述问题,本专利技术的目的是提供一种程序共享内存的地址转换方法和装置,用以在共享非连续物理内存的情况下保证地址空间转换的时间复杂度为0( I ),提高地址空间转换效率。 本专利技术的程序共享内存的地址转换方法,用于将为程序分配的物理内存空间映射到虚拟地址空间,所述为程序分配的物理内存空间包括所述程序在所述物理内存空间中所占用的物理内存块和所述物理内存块之间的间隔块,所述方法包括I)根据所述物理内存空间确定所述物理内存空间的起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小;2)根据所述物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,所述虚拟地址空间具有不小于所述物理内存空间的连续空间;3)将所述物理内存空间从所述虚拟地址空间的起始地址起按序映射到所述虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小;4)根据所述不同的虚拟地址空间对应所述物理内存空间的差进行地址转换,其中,所述物理内存空间映射到不同的虚拟地址空间的起始地址的差即为所述不同的虚拟地址空间对应所述物理内存空间的差。另一方面,本专利技术还提供一种程序共享内存的地址转换装置,用于将为程序分配的物理内存空间映射到虚拟地址空间,所述为程序分配的物理内存空间包括所述程序在所述物理内存空间中所占用的物理内存块和所述物理内存块之间的间隔块,所述装置包括物理内存空间分析单元,用于根据所述物理内存空间确定所述物理内存空间的起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小;虚拟地址空间确定单元,用于根据所述物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,所述虚拟地址空间具有不小于所述物理内存空间的连续空间;映射单元,用于将所述物理内存空间从所述虚拟地址空间的起始地址起按序映射到所述虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小;地址转换单元,用于根据不同的虚拟地址空间对应物理内存空间的差进行地址转换,其中,物理内存空间映射到不同的虚拟地址空间的起始地址的差即为该不同的虚拟地址空间对应物理内存空间的差。利用上述根据本专利技术的程序共享内存的地址转换方法和装置,可以保证不论申请到的物理内存是否连续,都能在共享内存时保持地址空间转换的时间复杂度为0(1);本专利技术的程序共享内存的地址转换方法还能应用于ASLR技术的操作系统中,当应用程序共享内存,其地址空间(布局)不同的情况下,也能保持地址空间转换的时间复杂度为0(1),从而确保转换的效率。为了实现上述以及相关目的,本专利技术的一个或多个方面包括后面将详细说明并在权利要求中特别指出的特征。下面的说明以及附图详细说明了本专利技术的某些示例性方面。然而,这些方面指示的仅仅是可使用本专利技术的原理的各种方式中的一些方式。此外,本专利技术旨在包括所有这些方面以及它们的等同物。附图说明通过参考以下结合附图的说明及权利要求书的内容,并且随着对本专利技术的更全面理解,本专利技术的其它目的及结果将更加明白及易于理解。在附图中图1为连续物理内存空间的映射示意图2为根据本专利技术的程序共享内存的地址转换方法的流程图;图3为根据本专利技术实施例的程序共享内存的地址转换流程;图4为根据本专利技术实施例的程序在N块不连续的物理内存空间的存储结构示意图;图5为根据本专利技术实施例的非连续物理内存空间映射流程示意图;图6为根据本专利技术实施例的非连续物理内存空间映射关系示意图;图7为根据本专利技术实施例的程序共享内存的地址转换装置的结构框图。在所有附图中相同的标号指示相似或相应的特征或功能。具体实施例方式以下将结合附图对本专利技术的具体实施例进行详细描述。要使空间转换的时间复杂度始终为0(1),最直接的方法就是确保申请一块连续物理内存,连续物理内存意味着物理地址连续,其实只有在涉及DMA (Direct Memory Access存储器直接访问)时才必须要求物理地址连续,在大多数时候,只要虚拟地址连续即可。那么,程序共享内存只需要将进程的虚拟地址连续,对于连续的地址空间,因为只存在一个空间差,即可使空间转换的时间复杂度始终为0(1)。本专利技术提供的程序共享内存的地址转换方法用于将为程序分配的物理内存空间映射到虚拟地址空间,其中,为程序分配的物理内存空间包括该程序在该物理内存空间中所占用的物理内存块和物理内存块之间的间隔块。由于为程序分配的物理内存空间一般是不连续的空间,在程序所占用的若干物理内存块之间存在有被其他程序占用的或者不可用的物理间隔,在本专利技术中,将这些物理间隔称为间隔块。图2示出了根据本专利技术的程序共享内存的地址转换方法的流程图。如图2所示,不同的虚拟地址空间共享上述物理内存空间的地址转换方法包括如下步骤S210 :根据程序所占用的物理内存空间确定该物理内存空间的起始地址和其中所占用的物理内存块以及间隔块的顺序和大小;S220 :根据物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,虚拟地址空间具有不小于该物理内存空间的连续空间;S230 :将物理内存空间从对应虚拟地址空间的起始地址起按序映射到该虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小S240 :在上述映射的基础上,根本文档来自技高网
...

【技术保护点】
一种程序共享内存的地址转换方法,用于将为程序分配的物理内存空间映射到虚拟地址空间,所述为程序分配的物理内存空间包括所述程序在所述物理内存空间中所占用的物理内存块和所述物理内存块之间的间隔块,所述方法包括:1)根据所述物理内存空间确定所述物理内存空间的起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小;2)根据所述物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,所述虚拟地址空间具有不小于所述物理内存空间的连续空间;3)将所述物理内存空间从所述虚拟地址空间的起始地址起按序映射到所述虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小;其中,4)根据所述不同的虚拟地址空间对应所述物理内存空间的差进行地址转换,其中,所述物理内存空间映射到不同的虚拟地址空间的起始地址的差即为所述不同的虚拟地址空间对应所述物理内存空间的差。

【技术特征摘要】
1.一种程序共享内存的地址转换方法,用于将为程序分配的物理内存空间映射到虚拟地址空间,所述为程序分配的物理内存空间包括所述程序在所述物理内存空间中所占用的物理内存块和所述物理内存块之间的间隔块,所述方法包括: 1)根据所述物理内存空间确定所述物理内存空间的起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小; 2)根据所述物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,所述虚拟地址空间具有不小于所述物理内存空间的连续空间; 3)将所述物理内存空间从所述虚拟地址空间的起始地址起按序映射到所述虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小;其中, 4)根据所述不同的虚拟地址空间对应所述物理内存空间的差进行地址转换,其中,所述物理内存空间映射到不同的虚拟地址空间的起始地址的差即为所述不同的虚拟地址空间对应所述物理内存空间的差。2.如权利要求1所述的共享内存的地址转换方法,其中, 所述虚拟地址空间包括进程地址空间和内核地址空间。3.如权利要求1所述的共享内存的地址转换方法,其中,所述步骤3)具体包括: 将所述物理内存空间中的第一个物理内存块A映射到Start起始的连续空间中,其中,所述Start为所述步骤2)中所确定的相应虚拟地址空间的起始地址; 根据所述Start、所述第一个物理内存块A的大小和与所述第一个物理内存块相邻的间隔块的大小确定所述物理内存空间中的第二个物理内存块B的起始地址; 将所述第二个物理内存块B映射到所确定的第二个物理内存块B的起始地址开始的虚拟地址空间中。4.一种程序共享内存的地址转换装置,用于将为程序分配的物理内存空间映射到虚拟地址空...

【专利技术属性】
技术研发人员:万青
申请(专利权)人:东软集团股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1