一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种针对DRAM/NVM混合内存的无内存泄漏编程方法与流程

2021-10-24 11:44:00 来源:中国专利 TAG:内存 泄漏 混合 语言 在这种

一种针对dram/nvm混合内存的无内存泄漏编程方法
技术领域
1.本发明涉及无内存泄漏语言设计,具体涉及一种针对易失内存(dram)/非易失内存(nvm)混合内存架构的函数式语言,它可以保证在这种复杂情况下不发生内存泄漏。


背景技术:

2.在dram内存架构下,所谓内存泄漏,是指和某个内存区域绑定的所有变量都离开作用域时,该内存区域没有被释放掉的情况。此外,如果一个和内存绑定的变量被赋予了一个新值,若该内存区域没有同时和其他变量绑定,则无法再定位到该内存区域,即这块区域发生了泄漏。
3.近年来,诸如rust(rust

lang.org)之类的编程语言希望从语言层面来保证没有内存泄漏,并且取得了相当不错的效果。然而,随着nvm(非易失内存)的出现,内存泄漏问题变得更加复杂。rust等编程语言用于nvm时会出现内存泄漏问题,也无法用于dram/nvm混合的内存系统下。
4.在nvm的语境下,内存区域是不能被随意释放的。大多数情况下,只允许用户通过指令来显式地释放它。但是,和nvm区域绑定的唯一变量如果被赋予了新值,则可以确认发生了内存泄漏。此时,用来编程的编程语言应当支持释放这块区域。
5.在dram/nvm混合内存架构下,除了需要保证上述内存泄漏的情况不会发生之外,还有两个新的问题。第一个问题是,dram区域的内容若是指向nvm区域,则当dram区域的内容断电消失后,nvm区域的内容就可能泄漏了。第二个问题是,nvm区域的内容若是指向dram区域,则当dram区域的内容断电消失后,nvm区域的内容可能就没有意义了。


技术实现要素:

6.本发明的目的是提供一种新的编程语言设计和编程方法,使得用这种语言编写程序,只要不抛出错误,即使是在dram/nvm混合内存架构下,也不可能发生内存泄漏。
7.本发明提供的编程方法的原理是:基于一种现有的编程语言进行扩展,设计新的编程方法(包括设计原语、句法、类型以及求值方法等),使用该扩展后的语言编写程序,只要不抛出错误,即能够避免dram和nvm中的内存泄漏,并能克服dram/nvm混合架构带来的新问题。
8.本发明提供的技术方案如下:
9.一种针对dram/nvm混合内存的无内存泄漏编程方法,对现有编程语言进行扩展,设计新的原语、句法、类型以及求值方法等,本发明的编程方法使用该扩展后的编程语言设计来编写程序,只要不抛出错误,即能够避免dram和nvm中的内存泄漏。本发明方法包括:
10.a.针对dram中的内存泄漏:
11.a1.每个被分配的内存区域只与一个变量绑定;即每个被分配的内存区域有且只有一个变量作为该内存区域的持有者(owner);
12.a2.为函数传递参数时,如果实参是某块内存区域的owner,传递参数的时候会暂
时把这块内存区域的owner改成形参,等函数执行完毕后再把这块内存区域的owner改成实参;
13.a3.当一个变量离开作用域时,如果该变量不是在函数传递参数时暂时作为某块内存区域的owner的形参,,就将该内存区域释放掉;
14.a4.如果和一个内存区域绑定的唯一变量被赋予了新值,则将相关的内存区域释放掉。
15.b.针对nvm中的内存泄漏,采用方法如下:
16.b1.在程序访问存储空间时,将dram和nvm的地址空间加以区分;
17.具体实施时,假设系统挂载的dram存储大小是x,nvm存储大小是y,可通过用地址段0~x来访问dram区域,地址段x~x y来访问nvm区域,从而将dram和nvm的地址空间区分开。
18.b2.增加一条分配nvm区域的指令和一条释放nvm区域的指令;
19.b3.保证只有全局变量可以被持久化;
20.b4.如果和一个nvm内存区域绑定的唯一变量(即内存区域的owner)被赋予了新值,则将绑定的内存区域释放掉。
21.c.在dram/nvm混合内存架构下,产生的新的问题包括:其一,dram区域的内容若是指向nvm区域,则当dram区域的内容断电消失后,nvm区域的内容就可能泄漏了。其二,nvm区域的内容若是指向dram区域,则当dram区域的内容断电消失后,nvm区域的内容可能就没有意义了。
22.针对上述dram/nvm混合架构的新问题,采用方法如下:
23.c1.禁止dram区域的内容指向nvm区域;
24.c2.禁止nvm区域的内容指向dram区域。
25.本发明的有益效果:
26.本发明提供一种针对dram/nvm混合内存的无内存泄漏编程方法,对现有编程语言进行扩展,设计新的原语、句法、类型以及求值方法等,利用本发明提供的新的语言编写的程序,只要不抛出错误,即使是在dram/nvm混合内存架构下,也不可能发生内存泄漏。
附图说明
27.图1是现有内存泄漏情况的一个例子。
28.图2是本发明实施例针对图1的内存泄漏情况提供的解决内存泄漏的例子。
29.图3是本发明现有的内存泄漏情况的第二个例子。
30.图4是本发明实施例针对图3的内存泄漏情况提供的解决内存泄漏的例子。
具体实施方式
31.下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
32.本发明提供一种针对dram/nvm混合内存的无内存泄漏编程方法,对现有编程语言进行扩展,设计新的原语、句法、类型以及求值方法等,使用该扩展后的编程语言设计来编写程序,只要不抛出错误,即能够避免dram和nvm中的内存泄漏。
33.本发明的具体实施方式如下:
34.a.针对dram中的内存泄漏,引入新的规则如下:
35.a1.每个被分配的内存区域有且只有一个变量作为它的owner。如果声明一个新的变量指向某内存区域,则之前指向该区域的变量被移除,以后只能使用这个新的变量对该内存区域进行访问。
36.a2.为函数传递参数时,形参可以暂借owner,函数执行完毕后再还给实参。实现方式是引入一种新的引用操作,这种新的引用操作并不会将形参加入处理程序的context(上下文),也不会将实参移出context。
37.a3.当一个变量离开作用域时,如果它不是暂借的owner,就将相关的内存区域释放掉;
38.a4.如果和一个内存区域绑定的唯一变量被赋予了新值,则将相关的内存区域释放掉。
39.b.针对nvm中的内存泄漏,引入新的规则如下:
40.b1.将dram和nvm的地址空间加以区分;
41.b2.增加一条分配nvm区域的指令和一条释放nvm区域的指令;
42.b3.保证只有全局变量可以被持久化。这可以通过维护当前作用域的深度来实现。当归约一条分配nvm区域的指令时,如果不是最外层作用域,则抛出错误;
43.b4.如果和一个nvm区域绑定的唯一变量被赋予了新值,则将相关的内存区域释放掉。
44.c.针对dram/nvm混合架构的新问题,采用方法如下:
45.c1.禁止dram区域的内容指向nvm区域。这可以通过将相关指令都归约成错误来实现;
46.c2.禁止nvm区域的内容指向dram区域。这也可以通过将相关指令都归约成错误来实现。
47.下面通过实例对本发明做进一步说明。
48.实施例1:
49.以基于lambda演算扩展成为针对dram/nvm混合内存的无内存泄漏语言为例。下表为基于lambda演算的语法设计,其中“::=”前的符号是非终结符,后续以“|”符号分隔的是该终结符对应的各种分解方法。
50.[0051][0052]
基于上述的语法结构,给出lambda演算的类型规约方法规则,用于确定每一个数据结构的类型。横线上方为执行类型规约前的情况,下方为规约结果。以第一个式子
为例,横线上方表示上下文γ已包含x:t,即“x类型为t”的这个事实,横线下方表示,在这种上下文γ的前提下(以竖线|分隔,前面是前提后面是结论),根据地址集合σ也应能明确推导(以符号表示推导)出“x类型为t”。
[0053]
每种方法规则的具体的说明如右列文字所示:
[0054][0055][0056]
相应的子类型关系如下,符号<:代表前者是后者的一个子类型:
[0057][0058]
求值方法表示在计算过程中,地址绑定集合μ的动态变化。以为例,横线上方表示对t1求值结果为t
′1,前后对应的地址绑定集合由μ变化为μ

;横线下方表示,假设对t1t2这个表达式的函数项t1求值,结果为t
′1,在横线上方描述的约束情况下,地址绑定集合也是由μ变化为μ

。具体的求值方法如下:
[0059]
[0060][0061]
基于该语言编写的程序,很多内存泄漏的风险会被自动消除;而如果检测到程序还有内存泄漏的风险,则会直接抛出error。
[0062]
例如,对于程序x=ref 1;x=y;先为变量x分配了一块内存空间,然后让x指向了其他地方。在一般的程序中,这块内存空间就没有变量指向它了,即发生了内存泄漏,如图1所示;但采用我们设计的语言编写程序,在执行x=y时,可以自动判断这块空间已经没有“owner”了,就会自动释放掉它,如图2所示。
[0063]
而对于程序x=pref 1;如果地址1位于dram地址空间中,则说明发生了nvm和dram
之间的交叉引用,如图3所示,这也是一种内存泄漏的场景。基于上述求值规则,它会被归约成error,提示用户这种写法是不安全的,可能造成内存泄漏,如图4所示。
[0064]
具体实施也验证了,这种基于本方案扩展的lambda演算所定义的语言,是一定不会发生内存泄漏的。而对于其他语言,也可以做出满足技术方案中规则的扩展,来保证该语言编写的程序即使在dram/nvm混合内存的情况下也不会发生内存泄漏。
[0065]
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜