CN113535150A - 一种针对dram/nvm混合内存的无内存泄漏编程方法 - Google Patents

一种针对dram/nvm混合内存的无内存泄漏编程方法 Download PDF

Info

Publication number
CN113535150A
CN113535150A CN202110862720.9A CN202110862720A CN113535150A CN 113535150 A CN113535150 A CN 113535150A CN 202110862720 A CN202110862720 A CN 202110862720A CN 113535150 A CN113535150 A CN 113535150A
Authority
CN
China
Prior art keywords
memory
nvm
dram
region
area
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.)
Granted
Application number
CN202110862720.9A
Other languages
English (en)
Other versions
CN113535150B (zh
Inventor
孙广宇
李星辰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Peking University
Original Assignee
Peking University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Peking University filed Critical Peking University
Priority to CN202110862720.9A priority Critical patent/CN113535150B/zh
Publication of CN113535150A publication Critical patent/CN113535150A/zh
Application granted granted Critical
Publication of CN113535150B publication Critical patent/CN113535150B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3628Software debugging of optimised code
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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)/非易失内存(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演算的语法设计,其中“::=”前的符号是非终结符,后续以“|”符号分隔的是该终结符对应的各种分解方法。
Figure BDA0003186314190000041
Figure BDA0003186314190000051
基于上述的语法结构,给出lambda演算的类型规约方法规则,用于确定每一个数据结构的类型。横线上方为执行类型规约前的情况,下方为规约结果。以第一个式子
Figure BDA0003186314190000061
为例,横线上方表示上下文Γ已包含x:T,即“x类型为T”的这个事实,横线下方表示,在这种上下文Γ的前提下(以竖线|分隔,前面是前提后面是结论),根据地址集合Σ也应能明确推导(以符号
Figure BDA0003186314190000062
表示推导)出“x类型为T”。
每种方法规则的具体的说明如右列文字所示:
Figure BDA0003186314190000063
Figure BDA0003186314190000071
相应的子类型关系如下,符号<:代表前者是后者的一个子类型:
Figure BDA0003186314190000072
求值方法表示在计算过程中,地址绑定集合μ的动态变化。以
Figure BDA0003186314190000073
为例,横线上方表示对t1求值结果为t′1,前后对应的地址绑定集合由μ变化为μ′;横线下方表示,假设对t1t2这个表达式的函数项t1求值,结果为t′1,在横线上方描述的约束情况下,地址绑定集合也是由μ变化为μ′。具体的求值方法如下:
Figure BDA0003186314190000074
Figure BDA0003186314190000081
基于该语言编写的程序,很多内存泄漏的风险会被自动消除;而如果检测到程序还有内存泄漏的风险,则会直接抛出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区域;
如果DRAM区域的内容指向NVM区域,则当DRAM区域的内容断电消失后,NVM区域的内容就可能泄漏;
C2.禁止NVM区域的内容指向DRAM区域;
如果NVM区域的内容指向DRAM区域,则当DRAM区域的内容断电消失后,NVM区域的内容可能就没有意义。
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的求值,表示为:
Figure FDA0003186314180000021
其中,横线上方表示对t1求值结果为t′1,前后对应的地址绑定集合由μ变化为μ′;横线下方表示,假设对t1t2这个表达式的函数项t1求值,结果为t′1,在横线上方的约束情况下,地址绑定集合也由μ变化为μ′。
7.如权利要求6所述针对DRAM/NVM混合内存的无内存泄漏编程方法,其特征是,求值方法还包括:
将v2代入函数λx:T11.t12的表达式t12,用v2替换所有占位符x,该过程前后μ不变;表示为:
Figure FDA0003186314180000023
8.如权利要求6所述针对DRAM/NVM混合内存的无内存泄漏编程方法,其特征是,求值方法还包括:
引用操作ref t1内对t1的求值,表示为:
Figure FDA0003186314180000022
9.如权利要求6所述针对DRAM/NVM混合内存的无内存泄漏编程方法,其特征是,求值方法还包括,将μ中所有l占位符替换为v2的赋值操作表示为:
Figure FDA0003186314180000024
CN202110862720.9A 2021-07-29 2021-07-29 一种针对dram/nvm混合内存的无内存泄漏编程方法 Active CN113535150B (zh)

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 true CN113535150A (zh) 2021-10-22
CN113535150B 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 (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050268286A1 (en) * 2004-04-12 2005-12-01 Motoki Obata Method of detecting memory leak causing portion and execution program thereof
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语言程序设计中基于对象编程的方法及系统
US20140298302A1 (en) * 2011-03-23 2014-10-02 Radhika Santhanakrishnan Method and system for detecting memory leaks in a program
CN106130719A (zh) * 2016-07-21 2016-11-16 中国科学院信息工程研究所 一种抵抗内存泄漏攻击的密码算法多核实现方法及装置
US20180025016A1 (en) * 2016-07-19 2018-01-25 Sap Se Full system simulator and memory-aware splay tree for in-memory databases in hybrid memory systems
CN111858290A (zh) * 2019-04-30 2020-10-30 深圳市前海源伞科技有限公司 用于检测目标代码的内存泄漏路径的方法和设备

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050268286A1 (en) * 2004-04-12 2005-12-01 Motoki Obata Method of detecting memory leak causing portion and execution program thereof
CN1979428A (zh) * 2005-12-08 2007-06-13 中兴通讯股份有限公司 自动释放嵌入式系统中应用程序模块泄漏内存的系统
CN1979427A (zh) * 2005-12-08 2007-06-13 中兴通讯股份有限公司 嵌入式系统中自动监测内存泄漏与内存越界的方法
US20140298302A1 (en) * 2011-03-23 2014-10-02 Radhika Santhanakrishnan Method and system for detecting memory leaks in a program
CN102981885A (zh) * 2012-12-11 2013-03-20 中国工程物理研究院流体物理研究所 C语言程序设计中基于对象编程的方法及系统
US20180025016A1 (en) * 2016-07-19 2018-01-25 Sap Se Full system simulator and memory-aware splay tree for in-memory databases in hybrid memory systems
CN106130719A (zh) * 2016-07-21 2016-11-16 中国科学院信息工程研究所 一种抵抗内存泄漏攻击的密码算法多核实现方法及装置
CN111858290A (zh) * 2019-04-30 2020-10-30 深圳市前海源伞科技有限公司 用于检测目标代码的内存泄漏路径的方法和设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
孙广宇等: "面向非易失内存的结构和系统级设计与优化综述", 华东师范大学"数据科学与工程"论坛内存计算数据管理主题报告会, pages 72 - 81 *

Also Published As

Publication number Publication date
CN113535150B (zh) 2023-09-22

Similar Documents

Publication Publication Date Title
CN102169459B (zh) 一种访问数据的方法、装置和智能卡
CN108376085B (zh) 半导体系统及操作半导体装置的方法
US20030028708A1 (en) Novel flash memory arrangement
CN103955389B (zh) 一种基于pcm的系统启动方法
CN104424030A (zh) 多进程操作共享内存的方法和装置
CN106445398A (zh) 一种基于新型存储器的嵌入式文件系统及其实现方法
EP3252595A1 (en) Method and device for running process
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
JP2010500682A (ja) フラッシュメモリアクセス回路
CN108897576B (zh) 一种基于arm芯片的快速启动boot的方法
CN111124921A (zh) 内存越界的检测方法、装置、设备和存储介质
CN111581010B (zh) 一种读操作处理方法、装置、设备及可读存储介质
CN114296951A (zh) 一种进程间数据共享的方法、系统、终端以及存储介质
CN113535150A (zh) 一种针对dram/nvm混合内存的无内存泄漏编程方法
US9223697B2 (en) Computer reprogramming method, data storage medium and motor vehicle computer
CN110196819A (zh) 内存访问方法与硬件
US6883078B2 (en) Microcomputer with reduced memory usage and associated method
US6314024B1 (en) Data processing apparatus
CN109729730B (zh) 写入信息的方法和装置
CN108038016B (zh) 固态硬盘错误数据处理方法及装置
CN114281632A (zh) 用于在SoC验证中初始化Romcode的方法及装置
US20100146332A1 (en) Data correction circuit and semiconductor integrated circuit
CN102216912B (zh) 内存容量的配置方法和装置
CN101751270A (zh) 处理器架构平台系统及其启动方法
CN107291423B (zh) 构建运行环境的方法和装置

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