程序共享内存的地址转换方法和装置.pdf

上传人:小** 文档编号:1556597 上传时间:2018-06-24 格式:PDF 页数:12 大小:5.90MB
返回 下载 相关 举报
摘要
申请专利号:

CN201210590326.5

申请日:

2012.12.31

公开号:

CN103077120A

公开日:

2013.05.01

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 12/02申请日:20121231|||公开

IPC分类号:

G06F12/02

主分类号:

G06F12/02

申请人:

东软集团股份有限公司

发明人:

万青

地址:

110179 辽宁省沈阳市浑南新区新秀街2号

优先权:

专利代理机构:

北京鸿元知识产权代理有限公司 11327

代理人:

陈英俊

PDF下载: PDF下载
内容摘要

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

权利要求书

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

说明书

说明书程序共享内存的地址转换方法和装置
技术领域
本发明涉及计算机系统中的地址转换方法,更为具体地,涉及一种程序共享内存的地址转换方法和装置。
背景技术
当应用程序与内核程序共享内存时,应用程序与内核程序通过不同的地址空间访问同一块物理内存。
图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中对应的线性地址,反之同样成立。这样应用程序和内核程序就可以实现共享内存。
程序运行离不开频繁的内存访问,因此地址空间转换的效率就显得尤为重要。对于共享一块物理内存这种情况,由于只存在一个空间差,所以空间转换时间复杂度为O(1)。但实际上,共享多块不连续物理内存才是普遍情况,这时空间转换的时间复杂度会变大。当共享n块不连续物理内存时,就会存在n个地址空间差,那么空间转换的时间复杂度就为O(logn)。
要使空间转换的时间复杂度始终为O(1),最直接的方法就是确保申请一块连续物理内存。但问题是申请一块足够大的连续物理内存常常无法成功,尤其系统运行时间越长,内存碎片越多,成功的可能就越小。为了能申请到一块足够大的连续物理内存,通常要对内核内存管理系统进行深度修改。对于闭源系统,这样的修改不可能。即便是开源系统,因为几乎所有其它子系统都要使用内存管理系统,修改起来也会很复杂,并且还要考虑系统版本更新带来的维护开销,对内核内存管理系统进行深度修改这个方法虽然直接但不理想。
发明内容
鉴于上述问题,本发明的目的是提供一种程序共享内存的地址转换方法和装置,用以在共享非连续物理内存的情况下保证地址空间转换的时间复杂度为O(1),提高地址空间转换效率。
本发明的程序共享内存的地址转换方法,
用于将为程序分配的物理内存空间映射到虚拟地址空间,所述为程序分配的物理内存空间包括所述程序在所述物理内存空间中所占用的物理内存块和所述物理内存块之间的间隔块,所述方法包括:
1)根据所述物理内存空间确定所述物理内存空间的起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小;
2)根据所述物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,所述虚拟地址空间具有不小于所述物理内存空间的连续空间;
3)将所述物理内存空间从所述虚拟地址空间的起始地址起按序映射到所述虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小;
4)根据所述不同的虚拟地址空间对应所述物理内存空间的差进行地址转换,其中,所述物理内存空间映射到不同的虚拟地址空间的起始地址的差即为所述不同的虚拟地址空间对应所述物理内存空间的差。
另一方面,本发明还提供一种程序共享内存的地址转换装置,用于将为程序分配的物理内存空间映射到虚拟地址空间,所述为程序分配的物理内存空间包括所述程序在所述物理内存空间中所占用的物理内存块和所述物理内存块之间的间隔块,所述装置包括:
物理内存空间分析单元,用于根据所述物理内存空间确定所述物理内存空间的起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小;
虚拟地址空间确定单元,用于根据所述物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,所述虚拟地址空间具有不小于所述物理内存空间的连续空间;
映射单元,用于将所述物理内存空间从所述虚拟地址空间的起始地址起按序映射到所述虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小;
地址转换单元,用于根据不同的虚拟地址空间对应物理内存空间的差进行地址转换,其中,物理内存空间映射到不同的虚拟地址空间的起始地址的差即为该不同的虚拟地址空间对应物理内存空间的差。
利用上述根据本发明的程序共享内存的地址转换方法和装置,可以保证不论申请到的物理内存是否连续,都能在共享内存时保持地址空间转换的时间复杂度为O(1);本发明的程序共享内存的地址转换方法还能应用于ASLR技术的操作系统中,当应用程序共享内存,其地址空间(布局)不同的情况下,也能保持地址空间转换的时间复杂度为O(1),从而确保转换的效率。
为了实现上述以及相关目的,本发明的一个或多个方面包括后面将详细说明并在权利要求中特别指出的特征。下面的说明以及附图详细说明了本发明的某些示例性方面。然而,这些方面指示的仅仅是可使用本发明的原理的各种方式中的一些方式。此外,本发明旨在包括所有这些方面以及它们的等同物。
附图说明
通过参考以下结合附图的说明及权利要求书的内容,并且随着对本发明的更全面理解,本发明的其它目的及结果将更加明白及易于理解。在附图中:
图1为连续物理内存空间的映射示意图;
图2为根据本发明的程序共享内存的地址转换方法的流程图;
图3为根据本发明实施例的程序共享内存的地址转换流程;
图4为根据本发明实施例的程序在N块不连续的物理内存空间的存储结构示意图;
图5为根据本发明实施例的非连续物理内存空间映射流程示意图;
图6为根据本发明实施例的非连续物理内存空间映射关系示意图;
图7为根据本发明实施例的程序共享内存的地址转换装置的结构框图。
在所有附图中相同的标号指示相似或相应的特征或功能。
具体实施方式
以下将结合附图对本发明的具体实施例进行详细描述。
要使空间转换的时间复杂度始终为O(1),最直接的方法就是确保申请一块连续物理内存,连续物理内存意味着物理地址连续,其实只有在涉及DMA(Direct Memory Access存储器直接访问)时才必须要求物理地址连续,在大多数时候,只要虚拟地址连续即可。那么,程序共享内存只需要将进程的虚拟地址连续,对于连续的地址空间,因为只存在一个空间差,即可使空间转换的时间复杂度始终为O(1)。
本发明提供的程序共享内存的地址转换方法用于将为程序分配的物理内存空间映射到虚拟地址空间,其中,为程序分配的物理内存空间包括该程序在该物理内存空间中所占用的物理内存块和物理内存块之间的间隔块。由于为程序分配的物理内存空间一般是不连续的空间,在程序所占用的若干物理内存块之间存在有被其他程序占用的或者不可用的物理间隔,在本发明中,将这些物理间隔称为间隔块。
图2示出了根据本发明的程序共享内存的地址转换方法的流程图。
如图2所示,不同的虚拟地址空间共享上述物理内存空间的地址转换方法包括如下步骤:
S210:根据程序所占用的物理内存空间确定该物理内存空间的起始地址和其中所占用的物理内存块以及间隔块的顺序和大小;
S220:根据物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,虚拟地址空间具有不小于该物理内存空间的连续空间;
S230:将物理内存空间从对应虚拟地址空间的起始地址起按序映射到该虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小
S240:在上述映射的基础上,根据不同的虚拟地址空间对应所述物理内存空间的差进行地址转换,其中,该程序所占用的物理内存空间映射到不同的虚拟地址空间的起始地址的差即为该不同的虚拟地址空间对应物理内存空间的差。
通常应用中,应用程序和内核程序会共享同一块物理内存,对应的虚拟内存空间就包括进程地址空间和内核地址空间。
具体地,在上述步骤S230中,假设Start为所述步骤S220中所确定的相应虚拟地址空间的起始地址,则将物理内存空间从相应虚拟地址空间的起始地址起按序映射到所述虚拟地址空间的连续空间中的过程,就是从将物理内存空间中的第一个物理内存块A映射到虚拟地址空间中以Start起始的连续空间中开始的;将A映射完毕以后,继续根据该Start、第一个物理内存块A的大小和与第一个物理内存块相邻的间隔块的大小确定第二个物理内存块B的起始地址;然后继续将第二个物理内存块B映射到所确定的第二个物理内存块B的起始地址开始的虚拟地址空间中。如果还有第三块、第四块物理内存块,同样按照上述方法顺序映射即可。
具体地,作为示例,图3示出了根据本发明实施例的程序共享内存的地址转换流程。如图3所示,要将一个存储在物理内存空间的程序在不同的虚拟地址空间(进程地址空间1和内核程序空间2)之间进行共享内存的转换,首先需要计算为该程序分配的物理内存空间(步骤S310);然后确定分配的物理内存空间在进程地址空间1的起始地址Start(步骤S320);进而通过mmap函数将分配的物理内存空间映射到进程地址空间1中(步骤S330)。
将分配的物理内存空间映射到内核地址空间2的过程同映射到进程地址空间1的过程一样,需要先确定分配的物理内存空间在内核地址空间2的起始地址Start’(步骤S320’);进而通过mmap函数将分配的物理内存空间映射到内核地址空间2中(步骤S330’)。
最后,在步骤S340中,将进程地址空间1的起始地址Start与内核地址空间2的起始地址Start’作差,从而得到空间转换的空间差。
图4示出了根据本发明实施例的程序在N块不连续的物理内存空间的存储结构示意图。
更为具体地,作为示例,当为程序分配的物理内存空间是如图4所示的N块不连续的物理内存空间时,即从物理内存块A、物理内存块B一直到物理内存块N,则执行如下步骤确定映射及地址转换所需要参数:
①计算分配的物理内存块A、物理内存块B一直到物理内存块N的大小(其中,物理内存空间A到物理内存空间N的地址从低地址到高地址)。
②计算分配的物理内存块A和物理内存块N之间所有未分配到的间隔块的大小;
③计算分配的物理内存块A、物理内存块B一直到物理内存块N和所有间隔块的大小之和Len。
然后按照图5所示的步骤实现非连续物理内存空间到虚拟地址空间的映射:
S510:通过mmap函数确定进程地址空间1有连续的空间能满足分配的物理内存空间的大小之和Len;
S520:记录连续进程地址空间1的起始地址Start;
S530:将物理内存块A映射到进程地址空间1的A’中,物理内存块A在进程地址空间1的A’中的起始地址为Start;
S540:根据物理内存块A、物理内存块B以及A和B之间间隔块的大小,计算物理内存块B在进程地址空间1的起始地址;
S550:通过mmap函数将物理内存块B映射到进程地址空间1的B’中,物理内存块B在进程地址空间1的B’中的起始地址为步骤S540中计算出的起始地址;
然后循环执行S540~S550,一直到将分配的所有物理内存空间全部映射到进程地址空间1完为止。
按照同样的方法,即可将分配的物理内存块A、物理内存块B一直到物理内存块N映射到内核地址空间2中,起始地址为Start’。
为了能更清楚地表示映射关系,图6示出了根据本发明实施例的非连续物理内存空间映射关系示意图。
如图6所示,分配的物理内存块A、物理内存块B一直到物理块N,从低地址到高地址依次向进程地址空间1中的A’、B’一直到N’(也是从低地址到高地址)映射;然后分配的物理内存块A、物理内存块B一直到物理块N,从低地址到高地址依次向内核地址空间2中的A”、B”一直到N”(也是从低地址到高地址)映射。此时将Start和Start’作差,就得到了进程地址空间1和内核地址空间2这两个地址空间转换的空间差,这样因为只存在一个空间差,因此空间转换的时间复杂度为O(1)。
与上述程序共享内存的地址转换方法相对应,本发明还提供一种程序共享内存的地址转换装置。
图7示出了根据本发明实施例的程序共享内存的地址转换装置700的逻辑结构框图。
如图7所示,本发明提供的程序共享内存的地址转换装置700用于将为程序分配的物理内存空间映射到虚拟地址空间,包括物理内存空间分析单元710、虚拟地址空间确定单元720、映射单元730和地址转换单元740,其中,映射单元730进一步包括第一物理内存块映射单元731、相邻物理内存块确定单元732和相邻物理内存块映射单元733。
其中,物理内存空间分析单元710用于根据物理内存空间确定该物理内存空间的起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小;虚拟地址空间确定单元720用于根据上述物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,所述虚拟地址空间具有不小于该物理内存空间的连续空间;映射单元730用于将该物理内存空间从相应虚拟地址空间的起始地址起按序映射到该虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小。
在上述映射关系的基础上,地址转换单元740根据不同的虚拟地址空间对应物理内存空间的差进行地址转换,其中,物理内存空间映射到不同的虚拟地址空间的起始地址的差即为该不同的虚拟地址空间对应物理内存空间的差。
对于映射单元730而言,进一步包括:
第一物理内存块映射单元731,用于将物理内存空间中的第一个物理内存块A映射到Start起始的连续空间中,其中,Start为虚拟地址空间确定单元720中所确定的相应虚拟地址空间的起始地址;
相邻物理内存块确定单元732,用于根据前述Start、第一个物理内存块A的大小和与第一个物理内存块相邻的间隔块的大小确定物理内存空间中的第二个物理内存块B的起始地址;
相邻物理内存块映射单元733,用于将第二个物理内存块B映射到所确定的第二个物理内存块B的起始地址开始的虚拟地址空间中。
如上参照附图以示例的方式描述根据本发明的程序共享内存的地址转换方法和装置。但是,本领域技术人员应当理解,对于上述本发明所提出的程序共享内存的地址转换方法和装置,还可以在不脱离本发明内容的基础上做出各种改进。因此,本发明的保护范围应当由所附的权利要求书的内容确定。

程序共享内存的地址转换方法和装置.pdf_第1页
第1页 / 共12页
程序共享内存的地址转换方法和装置.pdf_第2页
第2页 / 共12页
程序共享内存的地址转换方法和装置.pdf_第3页
第3页 / 共12页
点击查看更多>>
资源描述

《程序共享内存的地址转换方法和装置.pdf》由会员分享,可在线阅读,更多相关《程序共享内存的地址转换方法和装置.pdf(12页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 103077120 A(43)申请公布日 2013.05.01CN103077120A*CN103077120A*(21)申请号 201210590326.5(22)申请日 2012.12.31G06F 12/02(2006.01)(71)申请人东软集团股份有限公司地址 110179 辽宁省沈阳市浑南新区新秀街2号(72)发明人万青(74)专利代理机构北京鸿元知识产权代理有限公司 11327代理人陈英俊(54) 发明名称程序共享内存的地址转换方法和装置(57) 摘要本发明提供了一种程序共享内存的地址转换方法和系统,用于将为程序分配的物理内存空间映射到虚拟地址空间,为程。

2、序分配的物理内存空间包括所述程序在物理内存空间中所占用的物理内存块和物理内存块之间的间隔块,该方法包括:根据物理内存空间确定其起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小;根据物理内存空间的起始地址确定虚拟地址空间的起始地址;将物理内存空间按序映射到虚拟地址空间的连续空间中;根据所述不同的虚拟地址空间对应所述物理内存空间的差进行地址转换。通过本发明,不论申请到的物理内存是否连续,都能在共享内存时保持地址空间转换时间复杂度为O(1),从而保证转换效率。(51)Int.Cl.权利要求书2页 说明书5页 附图4页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书2页 说。

3、明书5页 附图4页(10)申请公布号 CN 103077120 ACN 103077120 A1/2页21.一种程序共享内存的地址转换方法,用于将为程序分配的物理内存空间映射到虚拟地址空间,所述为程序分配的物理内存空间包括所述程序在所述物理内存空间中所占用的物理内存块和所述物理内存块之间的间隔块,所述方法包括:1)根据所述物理内存空间确定所述物理内存空间的起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小;2)根据所述物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,所述虚拟地址空间具有不小于所述物理内存空间的连续空间;3)将所述物理内存空间从所述虚拟地址空间的起始地址起按序。

4、映射到所述虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小;其中,4)根据所述不同的虚拟地址空间对应所述物理内存空间的差进行地址转换,其中,所述物理内存空间映射到不同的虚拟地址空间的起始地址的差即为所述不同的虚拟地址空间对应所述物理内存空间的差。2.如权利要求1所述的共享内存的地址转换方法,其中,所述虚拟地址空间包括进程地址空间和内核地址空间。3.如权利要求1所述的共享内存的地址转换方法,其中,所述步骤3)具体包括:将所述物理内存空间中的第一个物理内存块A映射到Start起始的连续空间中,其中,所述Start为所述步骤2)中所确定的相应虚拟地址。

5、空间的起始地址;根据所述Start、所述第一个物理内存块A的大小和与所述第一个物理内存块相邻的间隔块的大小确定所述物理内存空间中的第二个物理内存块B的起始地址;将所述第二个物理内存块B映射到所确定的第二个物理内存块B的起始地址开始的虚拟地址空间中。4.一种程序共享内存的地址转换装置,用于将为程序分配的物理内存空间映射到虚拟地址空间,所述为程序分配的物理内存空间包括所述程序在所述物理内存空间中所占用的物理内存块和所述物理内存块之间的间隔块,所述装置包括:物理内存空间分析单元,用于根据所述物理内存空间确定所述物理内存空间的起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小;虚拟地址空间确定。

6、单元,用于根据所述物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,所述虚拟地址空间具有不小于所述物理内存空间的连续空间;映射单元,用于将所述物理内存空间从所述虚拟地址空间的起始地址起按序映射到所述虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小;地址转换单元,用于根据所述不同的虚拟地址空间对应所述物理内存空间的差进行地址转换,其中,所述物理内存空间映射到不同的虚拟地址空间的起始地址的差即为所述不同的虚拟地址空间对应所述物理内存空间的差。5.如权利要求1所述的共享内存的地址转换装置,其中,所述虚拟地址空间包括进程地址空间和内核地址空间。

7、。6.如权利要求1所述的共享内存的地址转换装置,其中,所述映射单元进一步包括:第一物理内存块映射单元,用于将所述物理内存空间中的第一个物理内存块A映射到权 利 要 求 书CN 103077120 A2/2页3Start起始的连续空间中,其中,所述Start为所述虚拟地址空间确定单元中所确定的相应虚拟地址空间的起始地址;相邻物理内存块确定单元,用于根据所述Start、所述第一个物理内存块A的大小和与所述第一个物理内存块相邻的间隔块的大小确定所述物理内存空间中的第二个物理内存块B的起始地址;相邻物理内存块映射单元,用于将所述第二个物理内存块B映射到所确定的第二个物理内存块B的起始地址开始的虚拟地址。

8、空间中。权 利 要 求 书CN 103077120 A1/5页4程序共享内存的地址转换方法和装置技术领域0001 本发明涉及计算机系统中的地址转换方法,更为具体地,涉及一种程序共享内存的地址转换方法和装置。背景技术0002 当应用程序与内核程序共享内存时,应用程序与内核程序通过不同的地址空间访问同一块物理内存。0003 图1示出了连续物理内存空间的映射示意图。如图1所示,假设应用程序与内核程序共享一块连续的物理内存,其中:0004 C为物理地址空间;c为物理地址;0005 A为线性地址空间;a为线性地址;0006 B为线性地址空间;b为线性地址;0007 线性地址a属于A,b属于B,c属于C,。

9、应用程序通过线性地址空间A访问物理地址空间C,内核程序通过线性地址空间B访问物理地址空间C。线性地址a和线性地址b通过地址转换对应同一物理地址c,那么a和b之间则存在一个地址差,同时这个地址差也是线性地址空间A和线性地址空间B的空间差。应用程序将线性地址空间A中的线性地址a传给内核程序后,内核程序可以根据空间差计算出线性地址空间B中对应的线性地址,反之同样成立。这样应用程序和内核程序就可以实现共享内存。0008 程序运行离不开频繁的内存访问,因此地址空间转换的效率就显得尤为重要。对于共享一块物理内存这种情况,由于只存在一个空间差,所以空间转换时间复杂度为O(1)。但实际上,共享多块不连续物理内。

10、存才是普遍情况,这时空间转换的时间复杂度会变大。当共享n块不连续物理内存时,就会存在n个地址空间差,那么空间转换的时间复杂度就为O(logn)。0009 要使空间转换的时间复杂度始终为O(1),最直接的方法就是确保申请一块连续物理内存。但问题是申请一块足够大的连续物理内存常常无法成功,尤其系统运行时间越长,内存碎片越多,成功的可能就越小。为了能申请到一块足够大的连续物理内存,通常要对内核内存管理系统进行深度修改。对于闭源系统,这样的修改不可能。即便是开源系统,因为几乎所有其它子系统都要使用内存管理系统,修改起来也会很复杂,并且还要考虑系统版本更新带来的维护开销,对内核内存管理系统进行深度修改这。

11、个方法虽然直接但不理想。发明内容0010 鉴于上述问题,本发明的目的是提供一种程序共享内存的地址转换方法和装置,用以在共享非连续物理内存的情况下保证地址空间转换的时间复杂度为O(1),提高地址空间转换效率。0011 本发明的程序共享内存的地址转换方法,0012 用于将为程序分配的物理内存空间映射到虚拟地址空间,所述为程序分配的物理说 明 书CN 103077120 A2/5页5内存空间包括所述程序在所述物理内存空间中所占用的物理内存块和所述物理内存块之间的间隔块,所述方法包括:0013 1)根据所述物理内存空间确定所述物理内存空间的起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小;0。

12、014 2)根据所述物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,所述虚拟地址空间具有不小于所述物理内存空间的连续空间;0015 3)将所述物理内存空间从所述虚拟地址空间的起始地址起按序映射到所述虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小;0016 4)根据所述不同的虚拟地址空间对应所述物理内存空间的差进行地址转换,其中,所述物理内存空间映射到不同的虚拟地址空间的起始地址的差即为所述不同的虚拟地址空间对应所述物理内存空间的差。0017 另一方面,本发明还提供一种程序共享内存的地址转换装置,用于将为程序分配的物理内存空间映射到。

13、虚拟地址空间,所述为程序分配的物理内存空间包括所述程序在所述物理内存空间中所占用的物理内存块和所述物理内存块之间的间隔块,所述装置包括:0018 物理内存空间分析单元,用于根据所述物理内存空间确定所述物理内存空间的起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小;0019 虚拟地址空间确定单元,用于根据所述物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,所述虚拟地址空间具有不小于所述物理内存空间的连续空间;0020 映射单元,用于将所述物理内存空间从所述虚拟地址空间的起始地址起按序映射到所述虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间。

14、隔块的顺序和大小;0021 地址转换单元,用于根据不同的虚拟地址空间对应物理内存空间的差进行地址转换,其中,物理内存空间映射到不同的虚拟地址空间的起始地址的差即为该不同的虚拟地址空间对应物理内存空间的差。0022 利用上述根据本发明的程序共享内存的地址转换方法和装置,可以保证不论申请到的物理内存是否连续,都能在共享内存时保持地址空间转换的时间复杂度为O(1);本发明的程序共享内存的地址转换方法还能应用于ASLR技术的操作系统中,当应用程序共享内存,其地址空间(布局)不同的情况下,也能保持地址空间转换的时间复杂度为O(1),从而确保转换的效率。0023 为了实现上述以及相关目的,本发明的一个或多。

15、个方面包括后面将详细说明并在权利要求中特别指出的特征。下面的说明以及附图详细说明了本发明的某些示例性方面。然而,这些方面指示的仅仅是可使用本发明的原理的各种方式中的一些方式。此外,本发明旨在包括所有这些方面以及它们的等同物。附图说明0024 通过参考以下结合附图的说明及权利要求书的内容,并且随着对本发明的更全面理解,本发明的其它目的及结果将更加明白及易于理解。在附图中:0025 图1为连续物理内存空间的映射示意图;说 明 书CN 103077120 A3/5页60026 图2为根据本发明的程序共享内存的地址转换方法的流程图;0027 图3为根据本发明实施例的程序共享内存的地址转换流程;0028。

16、 图4为根据本发明实施例的程序在N块不连续的物理内存空间的存储结构示意图;0029 图5为根据本发明实施例的非连续物理内存空间映射流程示意图;0030 图6为根据本发明实施例的非连续物理内存空间映射关系示意图;0031 图7为根据本发明实施例的程序共享内存的地址转换装置的结构框图。0032 在所有附图中相同的标号指示相似或相应的特征或功能。具体实施方式0033 以下将结合附图对本发明的具体实施例进行详细描述。0034 要使空间转换的时间复杂度始终为O(1),最直接的方法就是确保申请一块连续物理内存,连续物理内存意味着物理地址连续,其实只有在涉及DMA(Direct Memory Access存。

17、储器直接访问)时才必须要求物理地址连续,在大多数时候,只要虚拟地址连续即可。那么,程序共享内存只需要将进程的虚拟地址连续,对于连续的地址空间,因为只存在一个空间差,即可使空间转换的时间复杂度始终为O(1)。0035 本发明提供的程序共享内存的地址转换方法用于将为程序分配的物理内存空间映射到虚拟地址空间,其中,为程序分配的物理内存空间包括该程序在该物理内存空间中所占用的物理内存块和物理内存块之间的间隔块。由于为程序分配的物理内存空间一般是不连续的空间,在程序所占用的若干物理内存块之间存在有被其他程序占用的或者不可用的物理间隔,在本发明中,将这些物理间隔称为间隔块。0036 图2示出了根据本发明的。

18、程序共享内存的地址转换方法的流程图。0037 如图2所示,不同的虚拟地址空间共享上述物理内存空间的地址转换方法包括如下步骤:0038 S210:根据程序所占用的物理内存空间确定该物理内存空间的起始地址和其中所占用的物理内存块以及间隔块的顺序和大小;0039 S220:根据物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,虚拟地址空间具有不小于该物理内存空间的连续空间;0040 S230:将物理内存空间从对应虚拟地址空间的起始地址起按序映射到该虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小0041 S240:在上述映射的基础上,根据不。

19、同的虚拟地址空间对应所述物理内存空间的差进行地址转换,其中,该程序所占用的物理内存空间映射到不同的虚拟地址空间的起始地址的差即为该不同的虚拟地址空间对应物理内存空间的差。0042 通常应用中,应用程序和内核程序会共享同一块物理内存,对应的虚拟内存空间就包括进程地址空间和内核地址空间。0043 具体地,在上述步骤S230中,假设Start为所述步骤S220中所确定的相应虚拟地址空间的起始地址,则将物理内存空间从相应虚拟地址空间的起始地址起按序映射到所述虚拟地址空间的连续空间中的过程,就是从将物理内存空间中的第一个物理内存块A映说 明 书CN 103077120 A4/5页7射到虚拟地址空间中以S。

20、tart起始的连续空间中开始的;将A映射完毕以后,继续根据该Start、第一个物理内存块A的大小和与第一个物理内存块相邻的间隔块的大小确定第二个物理内存块B的起始地址;然后继续将第二个物理内存块B映射到所确定的第二个物理内存块B的起始地址开始的虚拟地址空间中。如果还有第三块、第四块物理内存块,同样按照上述方法顺序映射即可。0044 具体地,作为示例,图3示出了根据本发明实施例的程序共享内存的地址转换流程。如图3所示,要将一个存储在物理内存空间的程序在不同的虚拟地址空间(进程地址空间1和内核程序空间2)之间进行共享内存的转换,首先需要计算为该程序分配的物理内存空间(步骤S310);然后确定分配的。

21、物理内存空间在进程地址空间1的起始地址Start(步骤S320);进而通过mmap函数将分配的物理内存空间映射到进程地址空间1中(步骤S330)。0045 将分配的物理内存空间映射到内核地址空间2的过程同映射到进程地址空间1的过程一样,需要先确定分配的物理内存空间在内核地址空间2的起始地址Start(步骤S320);进而通过mmap函数将分配的物理内存空间映射到内核地址空间2中(步骤S330)。0046 最后,在步骤S340中,将进程地址空间1的起始地址Start与内核地址空间2的起始地址Start作差,从而得到空间转换的空间差。0047 图4示出了根据本发明实施例的程序在N块不连续的物理内存。

22、空间的存储结构示意图。0048 更为具体地,作为示例,当为程序分配的物理内存空间是如图4所示的N块不连续的物理内存空间时,即从物理内存块A、物理内存块B一直到物理内存块N,则执行如下步骤确定映射及地址转换所需要参数:0049 计算分配的物理内存块A、物理内存块B一直到物理内存块N的大小(其中,物理内存空间A到物理内存空间N的地址从低地址到高地址)。0050 计算分配的物理内存块A和物理内存块N之间所有未分配到的间隔块的大小;0051 计算分配的物理内存块A、物理内存块B一直到物理内存块N和所有间隔块的大小之和Len。0052 然后按照图5所示的步骤实现非连续物理内存空间到虚拟地址空间的映射:0。

23、053 S510:通过mmap函数确定进程地址空间1有连续的空间能满足分配的物理内存空间的大小之和Len;0054 S520:记录连续进程地址空间1的起始地址Start;0055 S530:将物理内存块A映射到进程地址空间1的A中,物理内存块A在进程地址空间1的A中的起始地址为Start;0056 S540:根据物理内存块A、物理内存块B以及A和B之间间隔块的大小,计算物理内存块B在进程地址空间1的起始地址;0057 S550:通过mmap函数将物理内存块B映射到进程地址空间1的B中,物理内存块B在进程地址空间1的B中的起始地址为步骤S540中计算出的起始地址;0058 然后循环执行S540S。

24、550,一直到将分配的所有物理内存空间全部映射到进程地址空间1完为止。0059 按照同样的方法,即可将分配的物理内存块A、物理内存块B一直到物理内存块N映射到内核地址空间2中,起始地址为Start。说 明 书CN 103077120 A5/5页80060 为了能更清楚地表示映射关系,图6示出了根据本发明实施例的非连续物理内存空间映射关系示意图。0061 如图6所示,分配的物理内存块A、物理内存块B一直到物理块N,从低地址到高地址依次向进程地址空间1中的A、B一直到N(也是从低地址到高地址)映射;然后分配的物理内存块A、物理内存块B一直到物理块N,从低地址到高地址依次向内核地址空间2中的A”、B。

25、”一直到N”(也是从低地址到高地址)映射。此时将Start和Start作差,就得到了进程地址空间1和内核地址空间2这两个地址空间转换的空间差,这样因为只存在一个空间差,因此空间转换的时间复杂度为O(1)。0062 与上述程序共享内存的地址转换方法相对应,本发明还提供一种程序共享内存的地址转换装置。0063 图7示出了根据本发明实施例的程序共享内存的地址转换装置700的逻辑结构框图。0064 如图7所示,本发明提供的程序共享内存的地址转换装置700用于将为程序分配的物理内存空间映射到虚拟地址空间,包括物理内存空间分析单元710、虚拟地址空间确定单元720、映射单元730和地址转换单元740,其中。

26、,映射单元730进一步包括第一物理内存块映射单元731、相邻物理内存块确定单元732和相邻物理内存块映射单元733。0065 其中,物理内存空间分析单元710用于根据物理内存空间确定该物理内存空间的起始地址和其中所占用的物理内存块以及所述间隔块的顺序和大小;虚拟地址空间确定单元720用于根据上述物理内存空间的起始地址确定相应虚拟地址空间的起始地址,其中,所述虚拟地址空间具有不小于该物理内存空间的连续空间;映射单元730用于将该物理内存空间从相应虚拟地址空间的起始地址起按序映射到该虚拟地址空间的连续空间中,其中包括所占用的物理内存块以及所占用的物理内存块之间的间隔块的顺序和大小。0066 在上述。

27、映射关系的基础上,地址转换单元740根据不同的虚拟地址空间对应物理内存空间的差进行地址转换,其中,物理内存空间映射到不同的虚拟地址空间的起始地址的差即为该不同的虚拟地址空间对应物理内存空间的差。0067 对于映射单元730而言,进一步包括:0068 第一物理内存块映射单元731,用于将物理内存空间中的第一个物理内存块A映射到Start起始的连续空间中,其中,Start为虚拟地址空间确定单元720中所确定的相应虚拟地址空间的起始地址;0069 相邻物理内存块确定单元732,用于根据前述Start、第一个物理内存块A的大小和与第一个物理内存块相邻的间隔块的大小确定物理内存空间中的第二个物理内存块B的起始地址;0070 相邻物理内存块映射单元733,用于将第二个物理内存块B映射到所确定的第二个物理内存块B的起始地址开始的虚拟地址空间中。0071 如上参照附图以示例的方式描述根据本发明的程序共享内存的地址转换方法和装置。但是,本领域技术人员应当理解,对于上述本发明所提出的程序共享内存的地址转换方法和装置,还可以在不脱离本发明内容的基础上做出各种改进。因此,本发明的保护范围应当由所附的权利要求书的内容确定。说 明 书CN 103077120 A1/4页9图1图2说 明 书 附 图CN 103077120 A2/4页10图3图4说 明 书 附 图CN 103077120 A10。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1