一种动态内存控制方法及系统的制作方法

文档序号:8942775阅读:154来源:国知局
一种动态内存控制方法及系统的制作方法
【技术领域】
[0001]本发明涉及操作系统技术领域,特别是涉及操作系统进程的内存管理技术领域,具体为一种动态内存控制方法及系统。
【背景技术】
[0002]Linux操作系统用户进程的内存管理默认使用的是ptmalloc机制。Linux操作系统的ptmalloc内存管理机制有以下特点=Linux系统的用户进程从进程空间的两个区域申请动态内存:brk区域和_ap区域,如图1所示。当用户申请的内存块大小小于_ap分配阀值(默认值为128K)时,操作系统从brk区域给进程分配内存。从brk分配的内存在释放时不会立刻归还操作系统。当用户申请的内存块大小大于或者等于_ap分配阀值(默认值为128K)时,操作系统从_ap区域给进程分配内存。从—ap区域分配的内存效率比较低,因此适合在申请大块内存时使用。从-ap区域分配的内存在释放时立刻归还给操作系统。
[0003]ptmalloc内存管理机制存在以下问题:假设用户按顺序(内存块A_>内存块B_>内存块C)申请三块内存块,内存块大小都小于mmap分配阀值(默认值为128K)。进程在释放内存时如果只释放了内存块A和内存块B,内存块C没有释放。则存在这么一个问题:所释放的内存块A和内存块B只是把内存块A和内存块B放到了进程的可用内存当中,并不会归还给操作系统,这就导致了其他的进程无法使用这两块内存。出现应用进程堆内存释放时无法归还给操作系统的原因主要是频繁申请和释放大小小于_ap分配阀值的内存块,也就是操作系统从brk区域分配了内存块。在一些需要反复申请、释放大量的内存块的业务经常会导致操作系统因为内存耗尽而杀死某些进程,造成业务中断。

【发明内容】

[0004]鉴于以上所述现有技术的缺点,本发明的目的在于提供一种动态内存控制方法及系统,用于解决现有技术中在一些需要反复申请、释放大量的内存块的业务经常会导致操作系统因为内存耗尽而杀死某些进程,造成业务中断的问题。
[0005]为实现上述目的及其他相关目的,本发明提供一种动态内存控制方法,用于对Linux操作系统用户进程的内存管理控制过程中,所述动态内存控制方法包括:从进程空间的内存映射区域为用户进程预先分配至少一个不小于所述内存映射区域分配阈值的第一内存块;将所述第一内存块分割成大小相等的至少两个第二内存块;在接收到不大于所述第二内存块的内存的进程内存申请时,将所述第二内存块的内存分配至所述进程内存申请对应的进程;当所述进程释放内存时,将所述进程占用的所述第二内存块的内存归还至所述第二内存块原来所属的第一内存块中;在所述第一内存块中的所有第二内存块均被释放后,将所述第一内存块的内存归还至Linux操作系统。
[0006]优选地,若所述第一内存块的数量大于等于两个,各个所述第一内存块的大小不相等。
[0007]优选地,若所述第一内存块的数量大于等于两个,各个所述第一内存块的大小相等。
[0008]优选地,若所述第一内存块的数量大于等于两个,每一个所述第一内存块中的第二内存块的大小与其他所述第一内存块中的第二内存块的大小均不相等。
[0009]优选地,所述第二内存块的大小为4字节、8字节、16字节、32字节、64字节或128字Tl O
[0010]为实现上述目的,本发明还提供一种动态内存控制系统,用于对Linux操作系统用户进程的内存管理控制过程中,所述动态内存控制系统包括:第一内存块分配模块,用于从进程空间的内存映射区域为用户进程预先分配至少一个不小于所述内存映射区域分配阈值的第一内存块;第二内存块分配模块,与所述第一内存块分配模块相连,用于将所述第一内存块分割成大小相等的至少两个第二内存块;进程内存分配模块,与所述第二内存块分配模块相连,用于在接收到不大于所述第二内存块的内存的进程内存申请时,将所述第二内存块的内存分配至所述进程内存申请对应的进程;内存释放控制模块,与所述第二内存块分配模块和所述进程内存分配模块相连,用于当所述进程释放内存时,将所述进程占用的所述第二内存块的内存归还至所述第二内存块原来所属的第一内存块中;内存块归还模块,与所述内存释放控制模块相连,用于在所述第一内存块中的所有第二内存块均被释放后,将所述第一内存块的内存归还至Linux操作系统。
[0011]优选地,若所述第一内存块的数量大于等于两个,所述第一内存块分配模块还用于使得各个所述第一内存块的大小不相等。
[0012]优选地,若所述第一内存块的数量大于等于两个,所述第一内存块分配模块还用于使得各个所述第一内存块的大小相等。
[0013]优选地,若所述第一内存块的数量大于等于两个,所述第二内存块分配模块还用于控制每一个所述第一内存块中的第二内存块的大小与其他所述第一内存块中的第二内存块的大小均不相等。
[0014]优选地,所述第二内存块分配模块还用于控制所述第二内存块的大小为4字节、8字节、16字节、32字节、64字节或128字节。
[0015]如上所述,本发明的一种动态内存控制方法及系统,具有以下有益效果:
[0016]本发明从进程空间的内存映射区域为用户进程预先分配至少一个不小于所述内存映射区域分配阈值的第一内存块并将所述第一内存块分割成大小相等的至少两个第二内存块,在接收到不大于所述第二内存块的内存的进程内存申请时,将所述第二内存块的内存分配至所述进程内存申请对应的进程,当所述进程释放内存时,将所述进程占用的所述第二内存块的内存归还至所述第二内存块原来所属的第一内存块中,并在所述第一内存块中的所有第二内存块均被释放后,将所述第一内存块的内存归还至Linux操作系统,所以本发明可以有效解决现有技术中在一些需要反复申请、释放大量的内存块的业务经常会导致操作系统因为内存耗尽而杀死某些进程,造成业务中断的问题。本发明简单高效,具有较强的通用性和实用性。
【附图说明】
[0017]图1显示为现有技术中Linux系统的用户进程从进程空间的brk区域和mmap区域申请动态内存的示意图。
[0018]图2显示为本发明的动态内存控制方法的流程示意图。
[0019]图3显示为本发明的动态内存控制方法中分配内存的示意图。
[0020]图4显示为本发明的动态内存控制方法中释放内存的示意图。
[0021]图5显示为本发明的动态内存控制系统的结构示意图。
[0022]元件标号说明
[0023]I动态内存控制系统
[0024]11 第一内存块分配模块
[0025]12 第二内存块分配模块
[0026]13 进程内存分配模块
[0027]14内存释放控制模块
[0028]15 内存块归还模块
[0029]511?515步骤
【具体实施方式】
[0030]以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的【具体实施方式】加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
[0031]本实施例的目的在于提供一种动态内存控制方法及系统,用于解决现有技术中在一些需要反复申请、释放大量的内存块的业务经常会导致操作系统因为内存耗尽而杀死某些进程,造成业务中断的问题。以下将详细阐述本实施例的一种动态内存控制方法及系统的原理及实施方式,使本领域技术人员不需要创造性劳动即可理解本实施例的一种动态内存控制方法及系统。
[0032]如图2至图5所示,本实施例提供一种动态内存控制方法及系统,通过从进程空间的-ap区域(内存映射区域)分配大块内存,然后分割成各种不同大小的小块内存以供进程本身使用,释放时如果小块内存所在的大块内存上所有的小块内存都已经释放,则立即将整块大块内存归还给操作系统。
[0033]具体地,如图2所示,本实施例提供一种动态内存控制方法,用于对Linux操作系统用户进程的内存管理控制过程中,所述动态内存控制方法包括以下步骤。
[0034]步骤S11,如图3所示,从进程空间的内存映射区域为用户进程预先分配至少一个不小于所述内存映射区域分配阈值的第一内存
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1