CN104268023A - 一种msvl程序内存管理方法 - Google Patents
一种msvl程序内存管理方法 Download PDFInfo
- Publication number
- CN104268023A CN104268023A CN201410531221.1A CN201410531221A CN104268023A CN 104268023 A CN104268023 A CN 104268023A CN 201410531221 A CN201410531221 A CN 201410531221A CN 104268023 A CN104268023 A CN 104268023A
- Authority
- CN
- China
- Prior art keywords
- variable
- framework
- framework variable
- symbol table
- msvl
- 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
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种MSVL程序内存管理方法,包括框架变量存储区和非框架变量存储区;本发明基于MSVL语言中的框架技术,实现了一种MSVL语言的内存管理方法,使得在MSVL程序的执行过程中,能够动态地为变量分配和释放内存,节省了内存空间;针对MSVL程序中框架变量和非框架变量的特点,对两种变量的内存空间进行区分,使得程序从一个状态迁移到下一状态时,不需要在符号表中查找哪些变量是非框架变量,只需要直接删除非框架变量符号表中的符号,提高了程序的执行效率;针对框架变量的特点,用栈的方式对框架变量进行存储,当一个框架语句对应的区间结束时,该区间对应的框架变量将被删除,有效节省了内存空间。本发明可应用于MSV建模、仿真和验证工具中。
Description
技术领域
本发明属于可信计算技术领域,尤其涉及一种MSVL程序内存管理方法,该方法主要用于MSV建模、仿真和验证工具中。
背景技术
建模、仿真和验证语言(MSVL)是一种时序逻辑语言,可以用来对软件系统和硬件系统进行建模、仿真和验证;MSVL语言中实现了多种数据类型如整型、字符型、浮点型以及数组和指针等;现有的MSV工具可以对MSVL程序进行建模、仿真和验证。
和传统编程语言(如C语言)不同,在C语言中,当一个变量被声明时,系统会为该变量分配一个内存单元,系统会维持该内存单元直到该变量的作用域结束,如果变量没有被赋予新的值,内存单元中的值将保持不变。在MSVL程序中,变量被分为框架的(framed)和非框架的(unframed),只有框架变量的值会在下一状态被继承。在一个MSVL程序中,一个变量可以在一段区间上是框架的而在另一段区间上是非框架的。在MSVL程序中,一组变量的取值是一个状态,一个区间由一个状态或多个状态组成。
随着软件系统和硬件系统规模的日益增大,描述系统的MSVL程序也日益增大,如何提高MSV工具执行MSVL程序的效率以及使MSV工具有效地利用内存成为MSVL语言亟待解决的关键问题之一。
发明内容
本发明实施例的目的在于提供一种MSVL程序内存管理方法,旨在解决现有技术不能完成MSVL程序的内存动态申请和释放的问题,以进一步提高MSV工具的执行效率和内存使用效率,从而使得MSV工具可以用于执行更大更复杂的MSVL程序。
本发明实施例是这样实现的,一种MSVL程序内存管理方法,该MSVL程序内存管理方法包括框架变量存储区和非框架变量存储区,它能对不同生命周期的框架变量进行分开存储,在一个状态结束后删除该状态的非框架变量,并且删除时不用进行查找操作;在一个框架语句对应的区间结束时删除该区间对应的框架变量,并且删除时不用进行查找操作。
进一步,非框架变量存储区由一个符号表构成,符号表是一个map结构,map的key值是变量名,value值是变量的类型,值信息。
进一步,框架变量存储区由一个框架变量栈构成,栈中的每一个元素是一个符号表。
进一步,在MSVL程序执行的过程中遇到框架语句时,新建一个符号表,并将相应的框架变量存入符号表中,然后将符号表压入框架变量栈中。
进一步,在MSVL程序的执行过程中遇到非框架变量时,将非框架变量存入非框架变量符号表中。
进一步,在一个状态结束后,如果非框架变量符号表不为空,则删除非框架变量符号表中的符号。
进一步,在一个区间结束后,如果该区间有对应的框架变量,则将框架变量栈的栈顶符号表弹栈,并删除栈顶符号表中的符号。
进一步,该MSVL程序内存管理方法的实现方法是:
步骤一、将MSVL程序中的框架变量和非框架变量分开存储,所有非框架变量存储在非框架变量符号表中,相同生命周期的框架变量存储在同一个符号表中,并将所有框架变量符号表压入框架变量栈中;
步骤二,遇到框架语句时,新建一个符号表,将相应的框架变量存入该符号表中,并将新建的符号表压入框架变量栈中;
步骤三,每个状态结束时,删除非框架变量符号表中的所有变量;
步骤四,每个区间结束时释放该区间对应的框架变量。
本发明提供的MSVL程序内存管理方法,结合时序逻辑语言中的框架技术,将内存单元的动态分配和释放结合到MSVL程序的执行过程中;
本发明与现有技术相比具有以下优点:
1.本发明基于MSVL语言中的框架技术,实现了一种MSVL语言的内存管理方法,使得在程序的执行过程中,能够动态地分配和释放内存,节省了内存空间。
2.本发明中针对MSVL程序中框架变量和非框架变量的特点,对两种变量的内存空间进行区分,使得程序从一个状态迁移到下一状态时,不需要在符号表中查找哪些变量是非框架变量,只需要直接删除非框架变量符号表中的符号,提高了程序的执行效率。
3.本发明针对框架变量的特点,用栈的方式对框架变量进行存储,当一个框架语句对应的区间结束时,该区间对应的框架变量将被删除,有效节省了内存空间。
附图说明
图1是本发明实施例提供的MSVL程序内存示意图;
图中:(a)非框架变量符号表;(b)框架变量符号表栈;
图2是本发明实施例提供的一个包含框架变量和非框架变量的MSVL程序示意图;
图3是本发明实施例提供的图2中MSVL程序的计算图,给出了程序中每个变量在每个状态下的值;
图4是本发明实施例提供的图2中的MSVL程序在每个状态下的内存示意图;
图5是本发明实施例提供的用实现本发明后的MSV工具对图2中的MSVL程序的执行结果。
图6是本发明实施例提供的在MSV工具中实现本发明后能有效节省内存的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
下面结合附图及具体实施例对本发明的应用原理作进一步描述。
如图1所示,图1中a是一个非框架变量符号表,b是一个框架变量栈,栈中的每个元素是一个符号表;本发明的内存管理方法需要对MSVL程序中的框架变量和非框架变量分开存储:所有非框架变量存储在非框架变量符号表中;相同生命周期的框架变量存储在一个符号表中,所有框架变量符号表存储在一个框架变量栈中;
该MSVL程序内存管理方法包括框架变量存储区和非框架变量存储区,框架变量存储区用于存储框架变量,非框架变量存储区用于存储非框架变量;该MSVL程序内存管理方法能对不同生命周期的框架变量进行分开存储,在一个状态结束后删除该状态的非框架变量,并且删除时不用进行查找操作;在一个框架语句对应的区间结束时删除该区间对应的框架变量,并且删除时不用进行查找操作。
需要说明的是由于MSVL程序中的框架语句可以嵌套,并且不同框架语句中的框架变量的生命周期不同,且符合后进先出的原则,因此采用一个栈结构来存储框架变量,称作框架变量栈,栈中每个元素是一个符号表;
需要说明的是初始时非框架变量符号表为空,框架变量栈为空;
需要说明的是,在MSVL程序执行的过程中,会频繁对符号表进行插入和查找操作,因此符号表以map形式表示;map中每个元素的key值是变量名;value是一个符号类型的指针,该指针指向一个符号类型的对象;每个符号对象表示一个变量,包含变量名,变量类型,变量值,赋值标志等信息。
本发明可应用于MSV建模、仿真和验证工具中。MSV工具是一种建模,仿真和验证工具,该工具可以对MSVL程序进行建模、仿真和验证。在建模模式下,MSV工具会给出MSVL程序中所有可能的执行路径,并给出图形化表示;在仿真模式下,MSV工具会选择MSVL程序中一条可能得执行路径执行,并给出MSVL程序在每个状态下的变量信息;在验证模式下,MSV工具可以对MSVL程序的一些期望的性质进行验证,在程序不满足性质时,会给出程序违反性质的反例路径。在建模、仿真和验证三种模式下,都需要对MSVL程序进行执行。在执行MSVL程序的过程中,需要用符号表对变量信息进行存储。本发明主要应用于MSVL程序中的变量存储问题。
图2是用于说明本发明的一个MSVL程序的例子;该程序的功能是首先计算变量x和变量y的最大公约数,存储在变量g中;然后根据最大公约数g求得变量x和变量y的最小公倍数,存储在变量l中;该程序中包含框架变量和非框架变量,其中,变量x和变量y在整个区间上是框架的;变量x1,y1和变量g分别在不同的区间上是框架的;变量l是非框架的;变量x和变量y的生命周期相同,变量x1和变量y1的生命周期相同;
需要说明的是在MSVL程序中,在未声明变量类型的情况下,所有变量的类型默认为整形;
在图3中给出了图2中的MSVL程序在每个状态下的变量的值的信息,其中“?”表示相应变量在该状态下的值是未知的;如在状态0时,所有变量的值都是未知的;在状态1时变量x等于6,变量y等于4,其余变量的值是未知的;
需要说明的是在MSVL程序中,框架变量在其生命周期内的某个状态如果没有被赋值,则其会自动继承其上一个状态的值;非框架变量如果在某个状态没有赋值,则其值在该状态是未知的;
在图4中给出了图2中MSVL程序在每个状态下的内存分配情况:
图a是在状态0时的内存分布示意图;状态0没有非框架变量,因此非框架变量表为空;由于在状态0时遇到了frame(x,y)语句,因此需要为框架变量x和框架变量y分配内存;具体过程是:新建一个符号表,生成两个变量名分别为x和y的符号,并插入到框架变量符号表中,然后将新生成的符号表压栈;
需要说明的是在一个状态下遇到变量赋值语句时要先在所有框架变量符号表中查找被赋值的变量,如果没有找到,则被赋值的变量是一个非框架变量;
图b是在状态1时的内存分布示意图,状态1没有非框架变量,因此非框架变量表为空;由于在状态1时遇到了frame(x1,y1)语句,因此需要为框架变量x1和框架变量y1分配内存;具体过程是:新建一个符号表,生成两个变量名分别为x1和y1的符号,并插入到新建的框架变量符号表中,然后将新生成的符号表压栈;
图c是在状态2和状态3时的内存分布示意图,状态2和状态3没有遇到框架语句,也没有遇到非框架变量;因此状态2和状态3的内存分配示意图和状态1的内存分配示意图相同;
需要说明的是,本发明关心的重点是内存分配和释放。
需要说明的是由于非框架变量的值不会被下一状态继承,因此当程序从一个状态迁移到另一个状态时,需要删除当前状态下的非框架变量符号表中的符号;由于框架变量的值会被下一状态继承,因此当程序迁移到下一状态时,如果没有框架语句对应的区间结束,框架变量符号表中的变量应保持不变;
图d是状态4时的内存分布示意图,状态4没有非框架变量,因此非框架变量符号表为空;由于状态4时遇到了frame(g)语句,因此需要为框架变量g分配内存;具体过程是新建一个符号表生成变量名为g的符号,并插入到框架变量符号表中,然后将该符号表压栈;
图e是在状态5和状态6时的内存分布示意图,状态5和状态6没有遇到框架语句也没有遇到非框架变量,因此状态5和状态6的内存分配示意图和状态4的内存分配示意图相同;
图f是在状态6结束时释放框架变量g后的内存分布示意图;状态7时语句frame(g)对应的区间结束,因此需要释放框架变量g所对应的内存,具体过程是将栈顶符号表弹栈,并删除栈顶符号表中的符号;
图g是在状态6结束时释放框架变量x1和框架变量y1后的内存分布示意图;状态7时语句frame(x1,y1)对应的区间结束,因此需要释放框架变量x1和框架变量x2所对应的内存,具体过程是将栈顶符号表弹栈,并删除栈顶符号表中的符号;
图h是在状态7给非框架变量l分配内存后的内存分布示意图,在状态7时,遇到非框架变量l,因此需要对变量l分配内存,具体过程是生成一个符号名为l的符号,并插入到非框架变量符号表中;
图i是图2中的MSVL程序执行完之后的内存分配示意图;根据本发明的内存管理方法,在每个状态结束时会自动释放该状态对应的非框架变量,在整个程序结束时删除非框架变量符号表;因为此时图2中的MSVL程序已经执行结束,因此删除非框架变量符号表;又因为状态7结束时语句frame(x,y)对应的区间也结束,因此需要删除栈顶的符号表中的所有符号,并将栈顶符号表弹栈。
如图5所示,本发明实施例的MSVL程序内存管理方法的实现方法包括以下步骤:
S501:将MSVL程序中的框架变量和非框架变量分开存储,所有非框架变量存储在非框架变量符号表中,相同生命周期的框架变量存储在同一个符号表中,并将所有框架变量符号表压入框架变量栈中;
S502:遇到框架语句时,新建一个符号表,将相应的框架变量存入该符号表中,并将新建的符号表压入框架变量栈中;
S503:每个状态结束时,删除非框架变量符号表中的所有变量;
S504:每个区间结束时释放该区间对应的框架变量。
图6给出了在MSV工具中实现本发明之前和实现本发明之后内存使用情况比较的一个例子。
图a中是一个MSVL程序,该程序中变量i在整个区间上是框架的,变量a和变量b分别在两个子区间上是框架的。
图b是用未实现本发明的MSV工具对图a中的程序执行时所占用的最大内存,大约为90M。
图c是用实现本发明后的MSV工具对图a中的程序执行时所占用的最大内存,大约为50M.
图b和图c中的MSV工具执行时的软硬件环境相同。其中,软件环境:64位win7操作系统;硬件环境:HP台式机,Inteli7处理器,8G内存。从图b和图c可以看出,实现本发明后,节省了大约40M内存。通过对图a中的程序进行分析也可以得到该结果。对于图a中的程序,在实现本发明前,所占的最大内存空间为变量i,a,b所占的内存以及程序执行过程中其他信息所占内存;在实现本发明后,所占最大内存空间为变量i,b所占的内存以及程序执行过程中其他信息所占的内存。由于变量a所占内存空间为40M,因此节约了40M内存。
需要说明的是,在图a的程序中,变量a和变量b均为大小为10,000,000的整形数组,数组中每个元素占4个字节(byte),因此变量a和变量b所占空间为40Mb。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种MSVL程序内存管理方法,其特征在于,该MSVL程序内存管理方法包括框架变量存储区和非框架变量存储区,框架变量存储区用于存储框架变量,非框架变量存储区用于存储非框架变量;该MSVL程序内存管理方法能对不同生命周期的框架变量进行分开存储,在一个状态结束后删除该状态的非框架变量,并且删除时不用进行查找操作;在一个框架语句对应的区间结束时删除该区间对应的框架变量,并且删除时不用进行查找操作。
2.如权利要求1所述的MSVL程序内存管理方法,其特征在于,该MSVL程序内存管理方法的实现步骤为:
步骤一、将MSVL程序中的框架变量和非框架变量分开存储,所有非框架变量存储在非框架变量符号表中,相同生命周期的框架变量存储在同一个符号表中,并将所有框架变量符号表压入框架变量栈中;
步骤二,遇到框架语句时,新建一个符号表,将相应的框架变量存入该符号表中,并将新建的符号表压入框架变量栈中;
步骤三,每个状态结束时,删除非框架变量符号表中的所有变量;
步骤四,每个区间结束时释放该区间对应的框架变量。
3.如权利要求1所述的MSVL程序内存管理方法,其特征在于,非框架变量存储区由一个符号表构成,符号表是一个map结构,map的key值是变量名,value值是变量的类型,值信息;框架变量存储区由一个框架变量栈构成,栈中的每一个元素是一个符号表。
4.如权利要求2所述的MSVL程序内存管理方法,其特征在于,在MSVL程序执行的过程中遇到框架语句时,新建一个符号表,并将相应的框架变量存入符号表中,然后将符号表压入框架变量栈中;在MSVL程序的执行过程中遇到非框架变量时,将非框架变量存入非框架变量符号表中。
5.如权利要求2所述的MSVL程序内存管理方法,其特征在于,在一个状态结束后,如果非框架变量符号表不为空,则删除非框架变量符号表中的符号;在一个区间结束后,如果区间有对应的框架变量,则将框架变量栈的栈顶符号表弹栈,并删除栈顶符号表中的符号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410531221.1A CN104268023B (zh) | 2014-10-10 | 2014-10-10 | 一种msvl程序内存管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410531221.1A CN104268023B (zh) | 2014-10-10 | 2014-10-10 | 一种msvl程序内存管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104268023A true CN104268023A (zh) | 2015-01-07 |
CN104268023B CN104268023B (zh) | 2017-08-25 |
Family
ID=52159547
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410531221.1A Active CN104268023B (zh) | 2014-10-10 | 2014-10-10 | 一种msvl程序内存管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104268023B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115033391A (zh) * | 2022-08-10 | 2022-09-09 | 之江实验室 | 一种用于神经网络计算的数据流动方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070112994A1 (en) * | 2005-11-16 | 2007-05-17 | Sandven Magne V | Buffer for output and speed matching |
CN102663521A (zh) * | 2012-04-20 | 2012-09-12 | 西安电子科技大学 | Msvl线性约束系统及其执行方法 |
-
2014
- 2014-10-10 CN CN201410531221.1A patent/CN104268023B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070112994A1 (en) * | 2005-11-16 | 2007-05-17 | Sandven Magne V | Buffer for output and speed matching |
CN102663521A (zh) * | 2012-04-20 | 2012-09-12 | 西安电子科技大学 | Msvl线性约束系统及其执行方法 |
Non-Patent Citations (2)
Title |
---|
MADS TOFTE: ""Region-Based Memory Management", 《INFORMATION AND COMPUTATION》 * |
ZHENHUA DUAN, XIAOXIAO YANG, MACIEJ KOUTNY: "Framed temporal logic programming", 《SCIENCE OF COMPUTER PROGRAMMING》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115033391A (zh) * | 2022-08-10 | 2022-09-09 | 之江实验室 | 一种用于神经网络计算的数据流动方法和装置 |
CN115033391B (zh) * | 2022-08-10 | 2022-11-11 | 之江实验室 | 一种用于神经网络计算的数据流动方法和装置 |
US11941507B2 (en) | 2022-08-10 | 2024-03-26 | Zhejiang Lab | Data flow method and apparatus for neural network computation by determining input variables and output variables of nodes of a computational graph of a neural network |
Also Published As
Publication number | Publication date |
---|---|
CN104268023B (zh) | 2017-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9021440B1 (en) | System and method for automated test script generation | |
CN110209348B (zh) | 数据存储方法、装置、电子设备及存储介质 | |
CN109190326B (zh) | 生成工艺流程图的方法及装置 | |
US8898677B2 (en) | Data arrangement calculating system, data arrangement calculating method, master unit and data arranging method | |
CN110096263A (zh) | Web前端代码自动生成方法及装置 | |
JP4908073B2 (ja) | サービスベースソフトウェア設計支援方法及びそのための装置 | |
US20140340396A1 (en) | Method of representing environment object in cyber-physical system using environment data model structure and computer-readable storage medium storing program therefor | |
CN108536745A (zh) | 基于Shell的数据表提取方法、终端、设备及存储介质 | |
CN105573774B (zh) | 应用程序参数管理及配置方法 | |
CN109165175B (zh) | 设备标识生成方法和装置 | |
CN102611576A (zh) | 一种生成网管配置模型文件的方法及装置 | |
US9716625B2 (en) | Identifying compatible system configurations | |
CN111597548A (zh) | 实现隐私保护的数据处理方法及装置 | |
CN109446202A (zh) | 标识符分配方法、装置、服务器和存储介质 | |
CN113255263A (zh) | 颗粒带分割方法、装置、计算机设备和存储介质 | |
CN107766519B (zh) | 一种可视化配置数据结构的方法 | |
CN111163060B (zh) | 一种基于应用组的转发方法、设备以及系统 | |
CN104268023A (zh) | 一种msvl程序内存管理方法 | |
CN106484492A (zh) | 配置接口的方法和系统 | |
CN104932982B (zh) | 一种消息访存的编译方法及相关装置 | |
US20160110234A1 (en) | Apparatus and method for processing complex event based on high load path | |
CN109522915B (zh) | 病毒文件聚类方法、装置及可读介质 | |
CN105550111A (zh) | 虚拟环境下操作系统io性能基准的测试调优方法及系统 | |
US10620968B2 (en) | Parameter determination device, parameter determination method, and medium | |
CN111858590B (zh) | 一种存储系统元数据组织方法、系统、终端及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |