CN113535150B - 一种针对dram/nvm混合内存的无内存泄漏编程方法 - Google Patents
一种针对dram/nvm混合内存的无内存泄漏编程方法 Download PDFInfo
- Publication number
- CN113535150B CN113535150B CN202110862720.9A CN202110862720A CN113535150B CN 113535150 B CN113535150 B CN 113535150B CN 202110862720 A CN202110862720 A CN 202110862720A CN 113535150 B CN113535150 B CN 113535150B
- Authority
- CN
- China
- Prior art keywords
- memory
- nvm
- dram
- region
- variable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Storage Device Security (AREA)
Abstract
本发明公布了一种针对DRAM/NVM混合内存的无内存泄漏编程方法,对现有编程语言进行扩展,设计新的原语、句法、类型以及求值方法等,本发明的编程方法使用该扩展后的编程语言设计来编写程序,只要不抛出错误,即能够避免DRAM和NVM中的内存泄漏。
Description
技术领域
本发明涉及无内存泄漏语言设计,具体涉及一种针对易失内存(DRAM)/非易失内存(NVM)混合内存架构的函数式语言,它可以保证在这种复杂情况下不发生内存泄漏。
背景技术
在DRAM内存架构下,所谓内存泄漏,是指和某个内存区域绑定的所有变量都离开作用域时,该内存区域没有被释放掉的情况。此外,如果一个和内存绑定的变量被赋予了一个新值,若该内存区域没有同时和其他变量绑定,则无法再定位到该内存区域,即这块区域发生了泄漏。
近年来,诸如RUST(rust-lang.org)之类的编程语言希望从语言层面来保证没有内存泄漏,并且取得了相当不错的效果。然而,随着NVM(非易失内存)的出现,内存泄漏问题变得更加复杂。RUST等编程语言用于NVM时会出现内存泄漏问题,也无法用于DRAM/NVM混合的内存系统下。
在NVM的语境下,内存区域是不能被随意释放的。大多数情况下,只允许用户通过指令来显式地释放它。但是,和NVM区域绑定的唯一变量如果被赋予了新值,则可以确认发生了内存泄漏。此时,用来编程的编程语言应当支持释放这块区域。
在DRAM/NVM混合内存架构下,除了需要保证上述内存泄漏的情况不会发生之外,还有两个新的问题。第一个问题是,DRAM区域的内容若是指向NVM区域,则当DRAM区域的内容断电消失后,NVM区域的内容就可能泄漏了。第二个问题是,NVM区域的内容若是指向DRAM区域,则当DRAM区域的内容断电消失后,NVM区域的内容可能就没有意义了。
发明内容
本发明的目的是提供一种新的编程语言设计和编程方法,使得用这种语言编写程序,只要不抛出错误,即使是在DRAM/NVM混合内存架构下,也不可能发生内存泄漏。
本发明提供的编程方法的原理是:基于一种现有的编程语言进行扩展,设计新的编程方法(包括设计原语、句法、类型以及求值方法等),使用该扩展后的语言编写程序,只要不抛出错误,即能够避免DRAM和NVM中的内存泄漏,并能克服DRAM/NVM混合架构带来的新问题。
本发明提供的技术方案如下:
一种针对DRAM/NVM混合内存的无内存泄漏编程方法,对现有编程语言进行扩展,设计新的原语、句法、类型以及求值方法等,本发明的编程方法使用该扩展后的编程语言设计来编写程序,只要不抛出错误,即能够避免DRAM和NVM中的内存泄漏。本发明方法包括:
A.针对DRAM中的内存泄漏:
A1.每个被分配的内存区域只与一个变量绑定;即每个被分配的内存区域有且只有一个变量作为该内存区域的持有者(owner);
A2.为函数传递参数时,如果实参是某块内存区域的owner,传递参数的时候会暂时把这块内存区域的owner改成形参,等函数执行完毕后再把这块内存区域的owner改成实参;
A3.当一个变量离开作用域时,如果该变量不是在函数传递参数时暂时作为某块内存区域的owner的形参,,就将该内存区域释放掉;
A4.如果和一个内存区域绑定的唯一变量被赋予了新值,则将相关的内存区域释放掉。
B.针对NVM中的内存泄漏,采用方法如下:
B1.在程序访问存储空间时,将DRAM和NVM的地址空间加以区分;
具体实施时,假设系统挂载的DRAM存储大小是x,NVM存储大小是y,可通过用地址段0~x来访问DRAM区域,地址段x~x+y来访问NVM区域,从而将DRAM和NVM的地址空间区分开。
B2.增加一条分配NVM区域的指令和一条释放NVM区域的指令;
B3.保证只有全局变量可以被持久化;
B4.如果和一个NVM内存区域绑定的唯一变量(即内存区域的owner)被赋予了新值,则将绑定的内存区域释放掉。
C.在DRAM/NVM混合内存架构下,产生的新的问题包括:其一,DRAM区域的内容若是指向NVM区域,则当DRAM区域的内容断电消失后,NVM区域的内容就可能泄漏了。其二,NVM区域的内容若是指向DRAM区域,则当DRAM区域的内容断电消失后,NVM区域的内容可能就没有意义了。
针对上述DRAM/NVM混合架构的新问题,采用方法如下:
C1.禁止DRAM区域的内容指向NVM区域;
C2.禁止NVM区域的内容指向DRAM区域。
本发明的有益效果:
本发明提供一种针对DRAM/NVM混合内存的无内存泄漏编程方法,对现有编程语言进行扩展,设计新的原语、句法、类型以及求值方法等,利用本发明提供的新的语言编写的程序,只要不抛出错误,即使是在DRAM/NVM混合内存架构下,也不可能发生内存泄漏。
附图说明
图1是现有内存泄漏情况的一个例子。
图2是本发明实施例针对图1的内存泄漏情况提供的解决内存泄漏的例子。
图3是本发明现有的内存泄漏情况的第二个例子。
图4是本发明实施例针对图3的内存泄漏情况提供的解决内存泄漏的例子。
具体实施方式
下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
本发明提供一种针对DRAM/NVM混合内存的无内存泄漏编程方法,对现有编程语言进行扩展,设计新的原语、句法、类型以及求值方法等,使用该扩展后的编程语言设计来编写程序,只要不抛出错误,即能够避免DRAM和NVM中的内存泄漏。
本发明的具体实施方式如下:
A.针对DRAM中的内存泄漏,引入新的规则如下:
A1.每个被分配的内存区域有且只有一个变量作为它的owner。如果声明一个新的变量指向某内存区域,则之前指向该区域的变量被移除,以后只能使用这个新的变量对该内存区域进行访问。
A2.为函数传递参数时,形参可以暂借owner,函数执行完毕后再还给实参。实现方式是引入一种新的引用操作,这种新的引用操作并不会将形参加入处理程序的context(上下文),也不会将实参移出context。
A3.当一个变量离开作用域时,如果它不是暂借的owner,就将相关的内存区域释放掉;
A4.如果和一个内存区域绑定的唯一变量被赋予了新值,则将相关的内存区域释放掉。
B.针对NVM中的内存泄漏,引入新的规则如下:
B1.将DRAM和NVM的地址空间加以区分;
B2.增加一条分配NVM区域的指令和一条释放NVM区域的指令;
B3.保证只有全局变量可以被持久化。这可以通过维护当前作用域的深度来实现。当归约一条分配NVM区域的指令时,如果不是最外层作用域,则抛出错误;
B4.如果和一个NVM区域绑定的唯一变量被赋予了新值,则将相关的内存区域释放掉。
C.针对DRAM/NVM混合架构的新问题,采用方法如下:
C1.禁止DRAM区域的内容指向NVM区域。这可以通过将相关指令都归约成错误来实现;
C2.禁止NVM区域的内容指向DRAM区域。这也可以通过将相关指令都归约成错误来实现。
下面通过实例对本发明做进一步说明。
实施例1:
以基于lambda演算扩展成为针对DRAM/NVM混合内存的无内存泄漏语言为例。下表为基于lambda演算的语法设计,其中“::=”前的符号是非终结符,后续以“|”符号分隔的是该终结符对应的各种分解方法。
基于上述的语法结构,给出lambda演算的类型规约方法规则,用于确定每一个数据结构的类型。横线上方为执行类型规约前的情况,下方为规约结果。以第一个式子为例,横线上方表示上下文Γ已包含x:T,即“x类型为T”的这个事实,横线下方表示,在这种上下文Γ的前提下(以竖线|分隔,前面是前提后面是结论),根据地址集合Σ也应能明确推导(以符号/>表示推导)出“x类型为T”。
每种方法规则的具体的说明如右列文字所示:
相应的子类型关系如下,符号<:代表前者是后者的一个子类型:
求值方法表示在计算过程中,地址绑定集合μ的动态变化。以为例,横线上方表示对t1求值结果为t′1,前后对应的地址绑定集合由μ变化为μ′;横线下方表示,假设对t1t2这个表达式的函数项t1求值,结果为t′1,在横线上方描述的约束情况下,地址绑定集合也是由μ变化为μ′。具体的求值方法如下:
基于该语言编写的程序,很多内存泄漏的风险会被自动消除;而如果检测到程序还有内存泄漏的风险,则会直接抛出error。
例如,对于程序x=ref 1;x=y;先为变量x分配了一块内存空间,然后让x指向了其他地方。在一般的程序中,这块内存空间就没有变量指向它了,即发生了内存泄漏,如图1所示;但采用我们设计的语言编写程序,在执行x=y时,可以自动判断这块空间已经没有“owner”了,就会自动释放掉它,如图2所示。
而对于程序x=pref 1;如果地址1位于DRAM地址空间中,则说明发生了NVM和DRAM之间的交叉引用,如图3所示,这也是一种内存泄漏的场景。基于上述求值规则,它会被归约成error,提示用户这种写法是不安全的,可能造成内存泄漏,如图4所示。
具体实施也验证了,这种基于本方案扩展的lambda演算所定义的语言,是一定不会发生内存泄漏的。而对于其他语言,也可以做出满足技术方案中规则的扩展,来保证该语言编写的程序即使在DRAM/NVM混合内存的情况下也不会发生内存泄漏。
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
Claims (9)
1.一种针对DRAM/NVM混合内存的无内存泄漏编程方法,对现有编程语言进行扩展,包括设计新的原语、句法、类型以及求值方法,使用该扩展设计后的编程语言来编写程序,只要不抛出错误,即能够避免DRAM和NVM中的内存泄漏;所述无内存泄漏编程方法包括:
A.针对DRAM中的内存泄漏,处理方法如下:
A1.每个被分配的内存区域有且只有一个变量作为该内存区域的owner;
A2.为函数传递参数时,如果函数实参是某块内存区域的owner,传参的时候暂时将该内存区域的owner改成形参,等函数执行完毕后再把该内存区域的owner改成实参;
A3.当一个变量离开作用域时,如果该变量不是在函数传递参数时暂时作为某块内存区域的owner的形参,就将该内存区域释放掉;
A4.如果和一个内存区域绑定的唯一变量被赋予了新值,则将该内存区域释放掉;
B.针对NVM中的内存泄漏,采用方法如下:
B1.在程序访问存储空间时,将DRAM和NVM的地址空间加以区分;
B2.增加一条分配NVM区域的指令和一条释放NVM区域的指令;
B3.保证只有全局变量可以被持久化;
B4.如果和一个NVM内存区域绑定的唯一变量被赋予了新值,则将该内存区域释放掉;
C.针对DRAM/NVM混合架构采用的方法,包括:
C1.禁止DRAM区域的内容指向NVM区域;
C2.禁止NVM区域的内容指向DRAM区域。
2.如权利要求1所述针对DRAM/NVM混合内存的无内存泄漏编程方法,其特征是,A1中,如果声明一个新的变量指向某内存区域,则之前指向该内存区域的变量被移除,以后只能使用新的变量对该内存区域进行访问。
3.如权利要求1所述针对DRAM/NVM混合内存的无内存泄漏编程方法,其特征是,A2中,具体实现方式采用一种新的引用操作,所述新的引用操作并不将形参加入context,也不会将实参移出context。
4.如权利要求1所述针对DRAM/NVM混合内存的无内存泄漏编程方法,其特征是,所述现有编程语言具体采用lambda。
5.如权利要求1所述针对DRAM/NVM混合内存的无内存泄漏编程方法,其特征是,绑定语句采用如下形式:B::=x=t|x=x;其中,“::=”前的符号是非终结符,后续以“|”符号分隔的是该终结符对应的各种分解方法;x为变量,t为项。
6.如权利要求1所述针对DRAM/NVM混合内存的无内存泄漏编程方法,其特征是,求值方法是在计算过程中,地址绑定集合μ的动态变化;包括:
将函数应用操作t1t2内对函数t1的求值,表示为:
其中,横线上方表示对t1求值结果为t′1,前后对应的地址绑定集合由μ变化为μ′;横线下方表示,假设对t1t2这个表达式的函数项t1求值,结果为t′1,在横线上方的约束情况下,地址绑定集合也由μ变化为μ′。
7.如权利要求6所述针对DRAM/NVM混合内存的无内存泄漏编程方法,其特征是,求值方法还包括:
将v2代入函数λx:T11.t12的表达式t12,用v2替换所有占位符x,该过程前后μ不变;表示为:
8.如权利要求6所述针对DRAM/NVM混合内存的无内存泄漏编程方法,其特征是,求值方法还包括:
引用操作ref t1内对t1的求值,表示为:
9.如权利要求6所述针对DRAM/NVM混合内存的无内存泄漏编程方法,其特征是,求值方法还包括,将μ中所有l占位符替换为v2的赋值操作表示为:
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110862720.9A CN113535150B (zh) | 2021-07-29 | 2021-07-29 | 一种针对dram/nvm混合内存的无内存泄漏编程方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110862720.9A CN113535150B (zh) | 2021-07-29 | 2021-07-29 | 一种针对dram/nvm混合内存的无内存泄漏编程方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113535150A CN113535150A (zh) | 2021-10-22 |
CN113535150B true CN113535150B (zh) | 2023-09-22 |
Family
ID=78121360
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110862720.9A Active CN113535150B (zh) | 2021-07-29 | 2021-07-29 | 一种针对dram/nvm混合内存的无内存泄漏编程方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113535150B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1979428A (zh) * | 2005-12-08 | 2007-06-13 | 中兴通讯股份有限公司 | 自动释放嵌入式系统中应用程序模块泄漏内存的系统 |
CN1979427A (zh) * | 2005-12-08 | 2007-06-13 | 中兴通讯股份有限公司 | 嵌入式系统中自动监测内存泄漏与内存越界的方法 |
CN102981885A (zh) * | 2012-12-11 | 2013-03-20 | 中国工程物理研究院流体物理研究所 | C语言程序设计中基于对象编程的方法及系统 |
CN106130719A (zh) * | 2016-07-21 | 2016-11-16 | 中国科学院信息工程研究所 | 一种抵抗内存泄漏攻击的密码算法多核实现方法及装置 |
CN111858290A (zh) * | 2019-04-30 | 2020-10-30 | 深圳市前海源伞科技有限公司 | 用于检测目标代码的内存泄漏路径的方法和设备 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4512402B2 (ja) * | 2004-04-12 | 2010-07-28 | 株式会社日立製作所 | メモリリークの原因箇所検出方法、及びその実行プログラム |
WO2012127482A1 (en) * | 2011-03-23 | 2012-09-27 | Infosys Technologies Limited | Method and system for detecting memory leaks in a program |
US10083183B2 (en) * | 2016-07-19 | 2018-09-25 | Sap Se | Full system simulator and memory-aware splay tree for in-memory databases in hybrid memory systems |
-
2021
- 2021-07-29 CN CN202110862720.9A patent/CN113535150B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1979428A (zh) * | 2005-12-08 | 2007-06-13 | 中兴通讯股份有限公司 | 自动释放嵌入式系统中应用程序模块泄漏内存的系统 |
CN1979427A (zh) * | 2005-12-08 | 2007-06-13 | 中兴通讯股份有限公司 | 嵌入式系统中自动监测内存泄漏与内存越界的方法 |
CN102981885A (zh) * | 2012-12-11 | 2013-03-20 | 中国工程物理研究院流体物理研究所 | C语言程序设计中基于对象编程的方法及系统 |
CN106130719A (zh) * | 2016-07-21 | 2016-11-16 | 中国科学院信息工程研究所 | 一种抵抗内存泄漏攻击的密码算法多核实现方法及装置 |
CN111858290A (zh) * | 2019-04-30 | 2020-10-30 | 深圳市前海源伞科技有限公司 | 用于检测目标代码的内存泄漏路径的方法和设备 |
Non-Patent Citations (1)
Title |
---|
面向非易失内存的结构和系统级设计与优化综述;孙广宇等;华东师范大学"数据科学与工程"论坛内存计算数据管理主题报告会;72-81 * |
Also Published As
Publication number | Publication date |
---|---|
CN113535150A (zh) | 2021-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110059020B (zh) | 扩展内存的访问方法、设备以及系统 | |
CN104424030A (zh) | 多进程操作共享内存的方法和装置 | |
CN103853665A (zh) | 存储空间分配方法及设备 | |
CN111124921B (zh) | 内存越界的检测方法、装置、设备和存储介质 | |
CN104820586A (zh) | 一种航天器嵌入式软件在轨维护方法 | |
CN103955389B (zh) | 一种基于pcm的系统启动方法 | |
KR20180089631A (ko) | 반도체 시스템 및 반도체 장치의 동작 방법 | |
US7984432B2 (en) | Method for patching a read-only memory and a data processing system comprising a means of patching the read-only memory based on patch contexts | |
CN113535150B (zh) | 一种针对dram/nvm混合内存的无内存泄漏编程方法 | |
CN114296951A (zh) | 一种进程间数据共享的方法、系统、终端以及存储介质 | |
CN103560934A (zh) | 一种电力猫生产测试方法及装置 | |
CN109947407B (zh) | 一种数据获取方法及装置 | |
CN117234953A (zh) | 一种基于影子代码缓存的内核调试方法 | |
CN109933345B (zh) | 一种控制器的无扰下装方法及相关装置 | |
US6883078B2 (en) | Microcomputer with reduced memory usage and associated method | |
CN108038016B (zh) | 固态硬盘错误数据处理方法及装置 | |
US6314024B1 (en) | Data processing apparatus | |
CN109240702A (zh) | 一种多线程模式下的快速段式编址配置和访问方法 | |
US20100146332A1 (en) | Data correction circuit and semiconductor integrated circuit | |
CN114281632A (zh) | 用于在SoC验证中初始化Romcode的方法及装置 | |
CN109800086B (zh) | 一种优化编译器ram空间的方法 | |
CN110720081B (zh) | 编译器及编程辅助装置 | |
CN111221535B (zh) | 线程分配方法、服务器及计算机可读存储介质 | |
KR102233476B1 (ko) | 메모리 관리 방법 및 그 장치 | |
CN114242125B (zh) | Nand flash数据的掉电保护方法、装置及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |