地址分配方法及装置的制造方法

文档序号:9708245阅读:166来源:国知局
地址分配方法及装置的制造方法
【技术领域】
[0001]本发明涉及数据存储领域,特别涉及一种地址分配方法及装置。
【背景技术】
[0002]MMU (Memory Management Unit,内存管理单兀)是一种负责处理 CPU (CentralProcessing Unit,中央处理器)的内存访问请求的计算机硬件,它可以控制CPU内存访问请求数据从虚拟地址到物理地址的转换。MMU以页的方式对虚拟内存进行管理,页表是物理地址的目录文件,MMU通过查找页表,进行虚拟地址和物理地址间的转换。粒度是指物理内存中保存数据的细化程度或综合程度的级别。
[0003]Intel (英特尔)的CPU中,i386架构可以支持4K和4M的粒度页面,ia64架构可以支持4K,8K,64K,256K,1Μ,4Μ,16Μ,256Μ的粒度页面。由于在MMU进行配置时,只能选择可以支持的粒度页面中的一种或者两种粒度页面进行配置,所以默认的i386处理器中的MMU同时只能支持4K和4M的粒度页面中的一种或者两种粒度页面;默认的ia64处理器中的MMU同时只能支持41(,81(,641(,2561(,1M,4M,16M和256M的粒度页面中的一种或两种粒度页面。
[0004]现有技术中,MMU只能同时支持一种或者两种粒度页面,当不同的应用程序需要选择不同的粒度页面时,由于MMU能够支持的页面粒度种类较少,MMU无法为不同的应用程序选择合适的粒度页面,因此,MMU的页面粒度种类单一,扩展灵活性较低。

【发明内容】

[0005]为了解决MMU的页面粒度种类单一,扩展灵活性较低的问题,本发明提供了一种地址分配的方法及装置。所述技术方案如下:
[0006]第一方面,提供一种地址分配方法,所述方法包括:
[0007]将物理内存划分为η个容量相等的物理区间,所述η个容量相等的物理区间中的不同区间对应的页面粒度不同,所述η为大于或等于2的整数;
[0008]将虚拟地址空间划分为η个容量相等的虚拟区间,η个所述虚拟区域与η个所述物理区间--对应;
[0009]在所述虚拟地址空间为应用程序分配虚拟地址;
[0010]在所述物理内存分配与所述虚拟地址对应的物理地址;
[0011 ] 根据分配的所述虚拟地址和物理地址,建立虚拟地址与物理地址映射关系页表。
[0012]结合第一方面,在第一种可实现方式之中,所述虚拟地址与物理地址映射关系页表包括η组页表,每个所述虚拟区间与对应粒度的物理区间的映射关系由一组页表指示。
[0013]结合第一种可实现方式,在第二种可实现方式中,所述虚拟地址共64位,所述虚拟地址的高X位用于标识不同的物理区间,所述X大于或等于2,所述虚拟地址的低48位划分为1段地址,所述1段地址中最后一段指示页内偏移量,所述1段地址中的前y_l段地址作为多级页表的索引,所述y为4或5。
[0014]结合第一方面,在第三种可实现方式中,所述虚拟地址与物理地址映射关系页表包括一组页表,所述一组页表包括多级子页表;
[0015]每级所述子页表中的页表项共64位,所述页表项的低48位中前36位设置有下级页表地址索引,所述页表项的后12位设置有标志位,所述标志位用于指示不同的下级页表。
[0016]结合第一方面,第一种可实现方式,第二种可实现方式或第三种可实现方式,在第四种可实现方式中,所述在所述虚拟地址空间为应用程序分配虚拟地址,包括:
[0017]根据应用程序需求的页面粒度在所述虚拟地址空间中选择所述页面粒度对应的虚拟区间;
[0018]根据选择的所述虚拟区间为所述应用程序分配虚拟地址。
[0019]结合第一方面,第一种可实现方式,第二种可实现方式或第三种可实现方式,在第五种可实现方式中,
[0020]所述将物理内存划分为η个容量相等的物理区间,包括:
[0021]将所述物理内存按照物理地址由高到低划分为η个容量相等的物理区间,每个所述物理区间设置有链表,所述链表从链表头至链表尾按照物理地址由高到低链接,所述链表用于管理所述物理区间对应的页面;
[0022]所述为应用程序分配虚拟地址和物理地址之后,所述方法还包括:
[0023]在满足页面释放条件时,进行页面释放,使得每个所述物理区间中不连续的页面放置在链表尾。
[0024]结合第五种可实现方式,在第六种可实现方式中,
[0025]所述在所述物理内存分配与所述虚拟地址对应的物理地址,包括:
[0026]根据所述虚拟地址,从与所述页面粒度对应的第一物理区间的链表尾对所述应用程序进行页面分配;
[0027]当所述第一物理区间的页面不足时,将与所述第一物理区间相邻且物理地址低于所述第一物理区间的第二物理区间的连续的页面从所述第二物理区间的链表头合并至所述第一物理区间的链表尾进行页面分配;
[0028]在页面分配完成后,获取相应的物理地址。
[0029]结合第六种可实现方式,在第七种可实现方式中,所述将与所述第一物理区间相邻且物理地址低于所述第一物理区间的第二物理区间的连续的页面从所述第二物理区间的链表头合并至所述第一物理区间的链表尾进行页面分配包括:
[0030]检测所述第二物理区间的链表头中连续的页面的大小小于所述第一物理区间的页面粒度,如果所述第二物理区间的链表头中连续的页面的大小小于所述第一物理区间的页面粒度,执行空闲页面获取过程:
[0031]在所述第二物理区间中已分配的页面中获取有效数据的数据量小于预设阈值的第一页面,
[0032]将所述第一页面的数据复制到第二页面上,所述第二页面为所述物理内存中未分配的页面,且所述第二页面的页面粒度小于所述第一页面的页面粒度,
[0033]删除所述第一页面的数据得到空闲页面;
[0034]检测所述第二物理区间的链表头中连续的页面与所述空闲页面合并形成的新的连续的页面的大小小于所述第一物理区间的页面粒度,如果所述第二物理区间的链表头中连续的页面与所述空闲页面合并形成的新的连续的页面的大小小于所述第一物理区间的页面粒度,重复执行所述空闲页面获取过程直至所述第二物理区间的链表头中连续的页面与所述空闲页面合并形成的页面的大小不小于所述第一物理区间的页面粒度;
[0035]将所述第二物理区间的链表头中连续的页面与所述空闲页面合并后的页面合并至所述第一物理区间的链表尾以进行页面分配。
[0036]第二方面,提供一种地址分配装置,所述装置包括:
[0037]第一划分单元,用于将物理内存划分为η个容量相等的物理区间,所述η个容量相等的物理区间中的不同区间对应的页面粒度不同,所述η为大于或等于2的整数;
[0038]第二划分单元,用于将虚拟地址空间划分为η个容量相等的虚拟区间,η个所述虚拟区域与η个所述物理区间一一对应;
[0039]第一分配单元,用于在所述虚拟地址空间为应用程序分配虚拟地址;
[0040]第二分配单元,用于在所述物理内存分配与所述虚拟地址对应的物理地址;
[0041]建立单元,用于根据分配的所述虚拟地址和物理地址,建立虚拟地址与物理地址映射关系页表。
[0042]结合第二方面,在第一种可实现方式中,
[0043]所述虚拟地址与物理地址映射关系页表包括η组页表,每个所述虚拟区间与对应粒度的物理区间的映射关系由一组页表指示。
[0044]结合第一种可实现方式,在第二种可实现方式中,
[0045]所述虚拟地址共64位,所述虚拟地址的高X位用于标识不同的物理区间,所述X大于或等于2,所述虚拟地址的低48位划分为y段地址,所述y段地址中最后一段指示页内偏移量,所述1段地址中的前y_l段地址作为多级页表的索引,所述y为4或5。
[0046]结合第二方面,在第三种可实现方式中,所述虚拟地址与物理地址映射关系页表包括一组页表,所述一组页表包括多级子页表;
[0047]每级所述子页表中的页表项共64位,所述页表项的低48位中前36位设置有下级页表地址索引,所述页表项的后12位设置有标志位,所述标志位用于指示不同的下级页表。
[0048]结合第二方面,第一种可实现方式,第二种可实现方式或第三种可实现方式,在第四种可实现方式中,
[0049]所述第一分配单元,包括:
[0050]选择模块,用于根据应用程序需求的页面粒度在所述虚拟地址空间中选择所述页面粒度对应的虚拟区间;
[0051]第一分配模块,用于根据选择的所述虚拟区间为所述应用程序分配虚拟地址。
[0052]结合第二方面,第一种可实现方式,第二种可实现方式或第三种可实现方式,在第五种可实现方式中,
[0053]所述第一划分单元,包括:
[0054]划分模块,用于将所述物理内存按照物理地址由高到低划分为η个容量相等的物理区间,每个所述物理区间设置有链表,所述链表从链表头至链表尾按照物理地址由高到低链接,所述链表用于管理所述物理区间对应的页面;
[0055]所述地址分配装置还包括:
[0056]释放单元,用于在满足页面释放条件时,进行页面释放,使得每个所述物理区间中不连续的页面放置在链表尾。
[0057]结合第五种可实现方式,在第六种可实现方式中,
[0058]所述第二分配单元,包括:
[0059]第二分配模块,用于根据所述虚拟地址,从与所述页面粒度对应的第一物理区间的链表尾对所述应用程序进行页面分配;
[0060]合并模块,用于当所述第一物理区间的页面不足时,将与所述第一物理区间相邻且物理地址低于所述第一物理区间的第二物理区间的连续的页面从所述第二物理区间的链表头合并至所述第一物理区间的链表尾进行页面分配;
[0061]获取模块,用于在页面分配完成后,获取相应的物理地址。
[0062]结合第六种可实现方式,在第七种可实现方式中,所述合并模块包括:
[0063]检测子模块,用于:检测所述第二物理区间的链表头中连续的页面的大小小于所述第一物理区间的页面粒度,如果所述第二物理区间的链表头中连续的页面的大小小于所述第一物理区间的页面粒度,执行空闲页面获取过程:
[0064]在所述第二物理区间的链表头中已分配的页面中获取有效数据的数据量小于预设阈值的第一页面,
[0065]将所述第一页面的数据复制到第二页面上,所述第二页面为所述物理内存中未分配的页面,且所述第二页面的页面粒度小于所述第一页面的页面粒度,
[0066]删除所述第一页面的数据得到空闲页面;
[0067]检测所述第二物理区间的链表头中连续的页面与所述空闲页面合并形成的新的连续的页面的大小小于所述第一物理区间的页面粒度,如果所述第二物理区间的链表头中连续的页面与所述空闲页面合并形成的新的连续的页面的大小小于所述第一物理区间的页面粒度,重复执行所述空闲页面获取过程直至所述第二物理区间的链表头中连续的页面与所述空闲页面合并形成的页面的大小不小于所述第一物理区间的页面粒度;
[0068]分配子模块,用于将所述第二物理区间的链表头中连续的页面与所述空闲页面合并后的页面合并至所述第一物理区间的链表尾以进行页面
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1