首页 > 专利 > 上海斐讯数据通信技术有限公司 > 提高系统内存利用率的方法专利详情

提高系统内存利用率的方法   0    0

有效专利 查看PDF
专利申请流程有哪些步骤?
专利申请流程图
申请
申请号:指国家知识产权局受理一件专利申请时给予该专利申请的一个标示号码。唯一性原则。
申请日:提出专利申请之日。
2015-09-29
申请公布
申请公布指发明专利申请经初步审查合格后,自申请日(或优先权日)起18个月期满时的公布或根据申请人的请求提前进行的公布。
申请公布号:专利申请过程中,在尚未取得专利授权之前,国家专利局《专利公报》公开专利时的编号。
申请公布日:申请公开的日期,即在专利公报上予以公开的日期。
2016-03-23
授权
授权指对发明专利申请经实质审查没有发现驳回理由,授予发明专利权;或对实用新型或外观设计专利申请经初步审查没有发现驳回理由,授予实用新型专利权或外观设计专利权。
2019-06-07
预估到期
发明专利权的期限为二十年,实用新型专利权期限为十年,外观设计专利权期限为十五年,均自申请日起计算。专利届满后法律终止保护。
2035-09-29
基本信息
有效性 有效专利 专利类型 发明专利
申请号 CN201510638512.5 申请日 2015-09-29
公开/公告号 CN105354079B 公开/公告日 2019-06-07
授权日 2019-06-07 预估到期日 2035-09-29
申请年 2015年 公开/公告年 2019年
缴费截止日
分类号 G06F9/46 主分类号 G06F9/46
是否联合申请 独立申请 文献类型号 B
独权数量 1 从权数量 7
权利要求数量 8 非专利引证数量 0
引用专利数量 5 被引证专利数量 0
非专利引证
引用专利 CN103150259A、CN102141937A、CN104007993A、CN101286143A、US2008222401A1 被引证专利
专利权维持 5 专利申请国编码 CN
专利事件 转让 事务标签 公开、实质审查、授权、权利转移
申请人信息
申请人 第一申请人
专利权人 上海斐讯数据通信技术有限公司 当前专利权人 湖州帷幄知识产权运营有限公司
发明人 李小庆 第一发明人 李小庆
地址 上海市松江区思贤路3666号 邮编 201616
申请人数量 1 发明人数量 1
申请人所在省 上海市 申请人所在市 上海市松江区
代理人信息
代理机构
专利代理机构是经省专利管理局审核,国家知识产权局批准设立,可以接受委托人的委托,在委托权限范围内以委托人的名义办理专利申请或其他专利事务的服务机构。
杭州千克知识产权代理有限公司 代理人
专利代理师是代理他人进行专利申请和办理其他专利事务,取得一定资格的人。
周希良
摘要
本发明涉及系统内存领域,尤其涉及一种提高系统内存利用率的方法。一种提高系统内存利用率的方法,应用于Linux系统中,方法包括:步骤S1,缓存释放线程调用堆栈收缩函数;步骤S2,创建新进程后,在新进程的数据结构中添加一定时器,并将定时器的到期函数设置为堆栈收缩函数;步骤S3,当Linux系统的内存不足时,定时器开始计时;步骤S4,在定时器计时期间,Linux系统中的所有用户进程调用堆栈收缩函数,以释放所有用户进程堆栈中的内存;步骤S5,在定时器到期时,Linux系统的CPU执行堆栈收缩函数,以释放新进程堆栈中的内存;其中,步骤S4中的所有用户进程不包括新进程。
  • 摘要附图
    提高系统内存利用率的方法
  • 说明书附图:图1
    提高系统内存利用率的方法
  • 说明书附图:图2
    提高系统内存利用率的方法
法律状态
序号 法律状态公告日 法律状态 法律状态信息
1 2021-02-12 专利权的转移 登记生效日: 2021.02.02 专利权人由蚌埠叁零玖科技咨询有限公司变更为湖州帷幄知识产权运营有限公司 地址由233000 安徽省蚌埠市龙子湖区凤阳西路东安市场3楼变更为313001 浙江省湖州市吴兴区爱山街道新天地写字楼1019室
2 2019-06-07 授权
3 2016-03-23 实质审查的生效 IPC(主分类): G06F 9/46 专利申请号: 201510638512.5 申请日: 2015.09.29
4 2016-02-24 公开
权利要求
权利要求书是申请文件最核心的部分,是申请人向国家申请保护他的发明创造及划定保护范围的文件。
1.一种提高系统内存利用率的方法,其特征在于,应用于Linux系统中,所述方法包括:
步骤S1,缓存释放线程中增加堆栈收缩函数的调用;
步骤S2,创建新进程后,在所述新进程的数据结构中添加一定时器,并将所述定时器的到期函数设置为堆栈收缩函数;
步骤S3,当所述Linux系统的内存不足时,所述定时器开始计时;
步骤S4,在所述定时器计时期间,所述Linux系统中的所有用户进程调用所述堆栈收缩函数,以释放所有所述用户进程堆栈中的内存;
步骤S5,在所述定时器到期时,所述Linux系统的CPU执行所述堆栈收缩函数,以释放所述新进程堆栈中的内存;
其中,所述步骤S4中的所述所有用户进程不包括所述新进程。

2.根据权利要求1所述的提高系统内存利用率的方法,其特征在于,所述方法中:
所述定时器的定时时间为1-10秒。

3.根据权利要求1所述的提高系统内存利用率的方法,其特征在于,所述步骤S1具体包括:
步骤S11,在所述堆栈收缩函数中,增加对所述所有用户线程调用所述堆栈收缩函数的代码。

4.根据权利要求1所述的提高系统内存利用率的方法,其特征在于,所述步骤S2具体包括:
步骤S21,在Linux进程数据结构中增加堆栈时间域,Linux内核创建所述新进程时,在所述堆栈时间域上添加所述定时器。

5.根据权利要求1所述的提高系统内存利用率的方法,其特征在于,所述步骤S2具体包括:
步骤S22:通过addtimer函数添加所述定时器。

6.根据权利要求1所述的提高系统内存利用率的方法,其特征在于,所述提高系统内存利用率的方法还包括:
步骤S6:于所述步骤S5之后,所述缓存释放线程运行后,对所述所有用户进程的用户态堆栈内存情况进行检查并调用所述堆栈收缩函数,以释放所述用户态堆栈内存。

7.根据权利要求6所述的提高系统内存利用率的方法,其特征在于,所述提高系统内存利用率的方法还包括:
步骤S7:于所述步骤S6之后,当堆栈指针连续N次向上穿过页边界地址时,所述CPU中断并执行所述堆栈收缩函数,以释放当前运行进程堆栈的内存;
其中,所述N为预设值,同时所述N为正整数并且大于1。

8.根据权利要求7所述的提高系统内存利用率的方法,其特征在于,所述步骤S7还包括:
在系统初始化函数trapinit中,通过settrapgate函数设置所述堆栈收缩函数的封装函数为中断处理函数。
说明书

技术领域

[0001] 本发明涉及系统内存领域,尤其涉及一种提高系统内存利用率的方法。

背景技术

[0002] 堆栈是内存的一个工作区,会随着程序运行的需要而增长或缩小,随着计算机水平的不断提高,软件规模越来越庞大,函数嵌套调用的层次越来越深,导致堆栈空间的波动幅度增大。如果没有启用Linux交换技术,堆栈空间中没有使用的内存就被浪费了。很多嵌入式设备使用Linux系统,而且没有启用Linux交换技术,堆栈空间中没有使用的内存就被浪费了,系统中的进程数量较多的时候,浪费的内存就更多了。

发明内容

[0003] 针对现有技术中内存利用率较低等问题,本发明提供了一种提高系统内存利用率的方法,及时释放堆栈空间中没有使用的内存,提高Linux系统内存利用率。
[0004] 本发明采用如下技术方案:
[0005] 一种提高系统内存利用率的方法,应用于Linux系统中,所述方法包括:
[0006] 步骤S1,缓存释放线程调用堆栈收缩函数;
[0007] 步骤S2,创建新进程后,在所述新进程的数据结构中添加一定时器,并将所述定时器的到期函数设置为堆栈收缩函数;
[0008] 步骤S3,当所述Linux系统的内存不足时,所述定时器开始计时;
[0009] 步骤S4,在所述定时器计时期间,所述Linux系统中的所有用户进程调用所述堆栈收缩函数,以释放所有所述用户进程堆栈中的内存;
[0010] 步骤S5,在所述定时器到期时,所述Linux系统的CPU执行所述堆栈收缩函数,以释放所述新进程堆栈中的内存;其中,
[0011] 所述步骤S4中的所述所有用户进程不包括所述新进程。
[0012] 优选的,所述方法中:
[0013] 所述定时器的定时时间为1-10秒。
[0014] 优选的,所述步骤S1具体包括:
[0015] 步骤S11,在所述堆栈收缩函数中,增加对所述所有用户线程调用所述堆栈收缩函数的代码。
[0016] 优选的,所述步骤S2具体包括:
[0017] 步骤S21,在Linux进程数据结构中增加堆栈时间域,Linux内核创建所述新进程时,在所述堆栈时间域上添加所述定时器。
[0018] 优选的,所述步骤S2具体包括:
[0019] 步骤S22:通过add timer函数添加所述定时器。
[0020] 优选的,所述方法还包括:
[0021] 步骤S6:于所述步骤S5之后,所述缓存释放线程运行后,对所述所有用户进程的用户态堆栈内存情况进行检查并调用所述堆栈收缩函数,以释放所述用户态堆栈内存。
[0022] 优选的,所述方法还包括:
[0023] 步骤S7:于所述步骤S6之后,当堆栈指针连续N次向上穿过页边界地址时,所述CPU中断并执行所述堆栈收缩函数,以释放当前运行进程堆栈的内存;其中,[0024] 所述N为预设值,同时所述N为正整数并且大于1。
[0025] 优选的,所述步骤S7具体包括:
[0026] 步骤S71:在系统初始化函数trap init中,通过set trap gate函数设置所述堆栈收缩函数的封装函数为中断处理函数。
[0027] 本发明的有益效果是:
[0028] 本发明在进程数据结构中添加堆栈检查定时器,同时在释放堆栈中被浪费内存的堆栈收缩函数(stack shrink),即可以应对软件规模的增长、函数嵌套层次的加深而导致堆栈空间波动幅度增大,堆栈收缩技术也能及时释放堆栈中被浪费的内存,提高Linux系统内存利用率。

实施方案

[0031] 需要说明的是,在不冲突的情况下,下述技术方案,技术特征之间可以相互组合。
[0032] 下面结合附图对本发明的具体实施方式作进一步的说明:
[0033] 实施例一
[0034] 图1为本发明提高系统内存利用率实施例一的方法示意图,如图1所示,本实施例为一种提高系统内存利用率的方法,涉及Linux进程用户态堆栈收缩技术,应用于Linux系统中,方法包括:
[0035] 步骤S1:缓存释放线程调用堆栈收缩函数;
[0036] 步骤S2:创建新进程,在新进程的数据结构中添加一定时器,定时器的到期函数设置为堆栈收缩函数;
[0037] 步骤S3:当内存不足时,Linux系统中的所有用户进程调用收缩函数,以释放所有用户进程堆栈中的内存;
[0038] 步骤S4:定时器到期,CPU执行堆栈收缩函数,以释放新进程堆栈中的内存;其中,[0039] 步骤S3中的所有用户进程不包括新进程。
[0040] 本实施例中,在Linux系统的缓存释放线程中,增加对堆栈收缩函数的调用,在Linux创建进程时,在进程数据结构中添加一个定时器,定时1秒,也可以是2s,3s,……或者是10秒,此时的定时时间可以根据具体的情况进行设定,定时器到期函数设置为堆栈收缩函数,Linux内核分配内存,发现内存紧缺,对系统中所有用户进程调用堆栈收缩函数,释放所有进程堆栈中浪费的内存,这一步可以同步地释放被堆栈浪费的内存,进程定时器到期,CPU执行堆栈收缩函数,释放该进程堆栈中浪费的内存。
[0041] 本发明一个较佳的实施例中,缓存释放线程开始运行,对所有进程的用户态堆栈内存浪费情况作检查,调用堆栈收缩函数,释放浪费的内存。
[0042] 本发明一个较佳的实施例中,在硬件支持堆栈收缩检查的情况下,将堆栈收缩函数设置为中断处理函数,当堆栈指针连续数次向上穿过页边界地址时,中断CPU,通知CPU执行堆栈收缩函数,从而释放当前运行进程堆栈浪费的内存。
[0043] 循环释放进程堆栈中被浪费的内存,堆栈收缩函数的伪代码如下所示:
[0044] Void stack_shrink(struct vm_area_struct*vma_stack)
[0045] {
[0046] Void*esp;/*esp堆栈指针*/
[0047] Void*tmp;/*用于循环*/
[0048] /*vma_stack->vm_start是堆栈空间的结束位置,
[0049] Esp是堆栈实际使用的堆栈空间的位置,
[0050] 这两个位置之间的空隙就是被浪费的内存*/
[0051] For(tmp=esr;tmp>vma_stack->vm_start;tmp-=4KB){
[0052] Free(tmp);/*释放浪费的内存页*/
[0053] }
[0054] }
[0055] 在进程数据结构中添加一个定时器,定时时间一秒,到期函数为堆栈收缩函数(stack_shrink)的代码为:
[0056] Struct task_struct{
[0057] Struct timer_list stack_check;
[0058] };
[0059] shrink_cache函数是缓存释放线程要调用的函数,在该函数中对所有进程调用stack_shrink函数代码为:
[0060] static void shrink_cache()
[0061] {
[0062] /*对系统中的每个进程的堆栈运行stack_shrink函数*/
[0063] For(遍历系统中的每个进程){
[0064] Stack_shrink();
[0065] }
[0066] }
[0067] 实施例二
[0068] 图2为本发明提高系统内存利用率的线程收缩技术实施例二的原理图,如图2所示,首先,缓存释放线程会调用shrink_cache函数,在该函数中增加对所有进程调用堆栈收缩函数的代码;在Linux进程数据结构中增加struct timer_list stack_check域,Linux内核创建进程时,通过add_timer函数在该域上添加一个定时器,到期函数设置为堆栈收缩函数,定时时间为1秒;内核代码分配内存,发现内存不足时,调用堆栈收缩函数;struct timer_list stack_check定时器到期,CPU执行堆栈收缩函数;CPU调度缓存释放线程,执行到shrink_cache函数时,CPU可以对所有进程的堆栈执行内存浪费情况检查;如果CPU支持堆栈收缩检查,在系统初始化函数trap_init中通过set_trap_gate函数设置堆栈收缩函数的封装函数为中断处理函数,当堆栈指针连续数次向上穿过页边界地址时,中断CPU,通知CPU执行堆栈收缩函数,从而释放当前运行进程堆栈浪费的内存。
[0069] 综上所述,本发明在进程数据结构中添加堆栈检查定时器,同时在释放堆栈中被浪费内存的堆栈收缩函数(stack shrink),即可以应对软件规模的增长、函数嵌套层次的加深而导致堆栈空间波动幅度增大,堆栈收缩技术也能及时释放堆栈中被浪费的内存,提高Linux系统内存利用率。
[0070] 通过说明和附图,给出了具体实施方式的特定结构的典型实施例,基于本发明精神,还可作其他的转换。尽管上述发明提出了现有的较佳实施例,然而,这些内容并不作为局限。
[0071] 对于本领域的技术人员而言,阅读上述说明后,各种变化和修正无疑将显而易见。因此,所附的权利要求书应看作是涵盖本发明的真实意图和范围的全部变化和修正。在权利要求书范围内任何和所有等价的范围与内容,都应认为仍属本发明的意图和范围内。

附图说明

[0029] 图1为本发明提高系统内存利用率实施例一的方法示意图;
[0030] 图2为本发明提高系统内存利用率的线程收缩技术实施例二的原理图。
版权所有:盲专网 ©2023 zlpt.xyz  蜀ICP备2023003576号