CN116541132A - 一种间接访问变量栈的管理方法和装置 - Google Patents
一种间接访问变量栈的管理方法和装置 Download PDFInfo
- Publication number
- CN116541132A CN116541132A CN202310791313.2A CN202310791313A CN116541132A CN 116541132 A CN116541132 A CN 116541132A CN 202310791313 A CN202310791313 A CN 202310791313A CN 116541132 A CN116541132 A CN 116541132A
- Authority
- CN
- China
- Prior art keywords
- stack
- indirect access
- virtual machine
- variable stack
- access 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.)
- Granted
Links
- 238000007726 management method Methods 0.000 title abstract description 54
- 230000006870 function Effects 0.000 claims abstract description 151
- 230000015654 memory Effects 0.000 claims abstract description 66
- 238000000034 method Methods 0.000 claims abstract description 59
- 230000004044 response Effects 0.000 claims abstract description 7
- 238000004064 recycling Methods 0.000 claims description 16
- 238000011084 recovery Methods 0.000 claims description 7
- 238000006243 chemical reaction Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 230000005856 abnormality Effects 0.000 description 6
- 230000002159 abnormal effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- 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)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本申请公开了一种间接访问变量栈的管理方法和装置,该方法包括:函数调用时,根据函数头信息中记录间接访问变量栈空间需求信息在虚拟机栈上为包含间接访问变量栈管理虚拟机指令的函数分配间接访问变量栈,虚拟机指令用于间接访问变量栈管理;通过虚拟机指令,为函数分配的间接访问变量栈的地址增加模块信息和内存类型,并将增加了模块信息以及内存类型的间接访问变量栈的地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈;响应于退出函数调用,将包含间接访问变量栈的虚拟机栈的空间进行回收。通过虚拟机指令,将间接访问变量栈分配在虚拟机栈上进行管理,可提高***的兼容性及运行效率。
Description
技术领域
本申请涉及内存管理技术领域,特别是涉及一种间接访问变量栈的管理方法和装置。
背景技术
WebAssembly(简称wasm)技术是一个虚拟机指令集体系架构,一般情况下如函数内有使用局部数组或结构体或指针类型变量,函数需要通过一系列虚拟机指令为此类变量统一申请一块内存存放变量内容,而将此块内存指针地址保存在局部变量中并采用局部变量中的指针地址加偏移位置的方式来读写此类变量内容。
相关技术中,如图1所示,虚拟机栈和间接访问变量栈分别在内存中申请一块空间,虚拟机运行至函数调用指令时在虚拟机栈顶生成一个新的方法栈帧,包括局部变量栈、方法返回地址等栈帧信息和操作数栈。虚拟机运行进入方法后,如存在间接访问变量栈申请及将申请的间接访问变量栈指针地址设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈相关字节码,虚拟机执行相关申请间接访问变量栈字节码即可完成在间接访问变量栈中为此方法生成一个新的间接访问变量栈帧,包括间接访问变量栈和空间、所属模块等栈帧信息;虚拟机退出方法前执行相关回收间接访问变量栈字节码即可完成间接访问变量栈出栈操作。
然而,间接访问变量栈和虚拟机栈内存是分开管理,需要划分两块内存空间,运行中两块内存中的一块空间不足且不能使用另一块内存而产生异常的时机点肯定早于内存统一使用整体空间不足而产生异常的时机点,进而导致***的兼容性以及健壮性降低。
发明内容
基于上述问题,本申请提供了一种间接访问变量栈的管理方法和装置,提高***的兼容性以及健壮性。
为了解决上述技术问题,本申请实施例提供一种间接访问变量栈管理方法,通过将间接访问变量栈的内存空间分配到虚拟机栈上,即间接访问变量栈与虚拟机栈共用一块内存空间(内存统一使用整体空间不足而产生异常的时机点晚于两块内存中的一块空间不足且不能使用另一块内存而产生异常的时机点),可以使得***的兼容性以及健壮性得到提升;单独管理的间接访问变量栈需要有模块信息属性,虚拟机栈中管理的间接访问变量栈可以使用原虚拟机栈中的模块信息,从而减小间接访问变量栈管理内存开销;同时,使用单一虚拟机指令替换原有间接访问变量栈分配管理虚拟机指令组合,虚拟机栈中管理的间接访问变量栈随函数调用返回虚拟机退栈操作而回收,无需原有间接访问变量栈回收管理虚拟机指令组合,可以减小程序代码占用资源,提高程序运行速度。
本申请实施例公开了如下技术方案:
第一方面,本申请实施例提供一种间接访问变量栈的管理方法,该方法包括:
函数调用时,根据函数头信息中记录的空间需求信息在虚拟机栈上为调用包含所述间接访问变量栈管理虚拟机指令的函数分配间接访问变量栈,所述虚拟机指令用于间接访问变量栈管理;
通过所述虚拟机指令,为所述函数分配的所述间接访问变量栈的地址增加模块信息和内存类型,并将增加了所述模块信息以及所述内存类型的所述间接访问变量栈的地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈;
退出函数调用时,将包含所述间接访问变量栈的所述虚拟机栈的空间进行回收。
可选地,所述方法还包括:
响应于指针地址为所述间接访问变量栈的访问,对所述间接访问变量栈中所存储的数据执行读写操作。
可选地,访问指针地址为当前函数间接访问变量栈,所述响应于指针地址为所述间接访问变量栈的访问,对所述间接访问变量栈中所存储的数据执行读写操作,包括:
响应于指针地址为所述间接访问变量栈的访问,基于所述指针地址处读写数据的空间范围与所述间接访问变量栈的空间范围,判断所述访问是否合法;
若所述访问合法,对所述间接访问变量栈中所存储的数据执行读写操作。
可选地,访问指针地址为历史调用函数间接访问变量栈,所述响应于指针地址为所述间接访问变量栈的访问,对所述间接访问变量栈中所存储的数据执行读写操作,包括:
响应于指针地址为所述间接访问变量栈的访问,基于所述虚拟机栈的栈帧信息查找所述历史调用函数间接访问变量栈的位置及其模块信息,判断模块信息匹配,且基于所述指针地址处读写数据的空间范围与所述间接访问变量栈的空间范围,判断所述访问是否合法;
若所述访问合法,对所述间接访问变量栈中所存储的数据执行读写操作。
可选地,所述根据函数头信息中记录的空间需求信息在虚拟机栈上为包含间接访问变量栈管理虚拟机指令的函数分配间接访问变量栈,包括:
判断所述函数是否需要使用间接访问变量栈,得到判断结果;
若所述判断结果指示所述函数需要使用所述间接访问变量栈,在虚拟机栈的栈顶生成一个方法栈帧;
在所述方法栈帧的局部变量栈之后,操作数栈之前为包含间接访问变量栈管理虚拟机指令的函数分配间接访问变量栈。
可选地,所述判断所述函数是否需要使用间接访问变量栈,得到判断结果,包括:
根据所述函数的函数头信息中所记录的间接访问变量栈空间需求信息,判断所述函数是否需要使用间接访问变量栈,得到判断结果。
可选地,所述方法还包括:
将WebAssembly原始间接访问变量栈分配管理虚拟机指令组合更换为所述虚拟机指令并将函数间接访问变量栈空间需求信息转换到函数头信息中;所述原始间接访问变量栈分配管理虚拟机指令组合用于为间接访问变量栈分配内存空间,以及将间接访问变量栈地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈。
可选地,所述方法还包括:
将WebAssembly原始间接访问变量栈回收管理虚拟机指令组合进行删除,得到目标字节码。
第二方面,本申请实施例提供一种间接访问变量栈的管理装置,该装置包括:分配模块、设置模块以及回收模块;
所述分配模块,用于函数调用时,根据函数头信息中记录的间接访问变量栈空间需求信息在虚拟机栈上为包含间接访问变量栈管理虚拟机指令的函数分配间接访问变量栈,所述虚拟机指令用于间接访问变量栈管理;
所述设置模块,用于通过所述虚拟机指令,为所述函数分配的所述间接访问变量栈的地址增加模块信息和内存类型,并将增加了所述模块信息以及所述内存类型的所述间接访问变量栈的地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈;
所述回收模块,用于退出函数调用时,将包含所述间接访问变量栈的所述虚拟机栈的空间进行回收。
可选地,所述装置还包括:读写操作模块;
所述读写操作模块,用于响应于指针地址为所述间接访问变量栈的访问,对所述间接访问变量栈中所存储的数据执行读写操作。
可选地,访问指针地址为当前函数间接访问变量栈,所述读写操作模块包括第一判断单元以及读写操作单元:
所述第一判断单元,具体用于响应于指针地址为所述间接访问变量栈的访问,基于所述指针地址处读写数据的空间范围与所述间接访问变量栈的空间范围,判断所述访问是否合法;
所述读写操作单元,具体用于若所述访问合法,对所述间接访问变量栈中所存储的数据执行读写操作。
可选地,访问指针地址为历史调用函数间接访问变量栈,所述读写操作模块包括第一判断单元以及读写操作单元:
所述第一判断单元,具体用于响应于指针地址为所述间接访问变量栈的访问,基于所述虚拟机栈的栈帧信息查找所述历史调用函数间接访问变量栈的位置及其模块信息,判断模块信息匹配,且基于所述指针地址处读写数据的空间范围与所述间接访问变量栈的空间范围,判断所述访问是否合法;
所述读写操作单元,具体用于若所述访问合法,对所述间接访问变量栈中所存储的数据执行读写操作。
可选地,分配模块包括第二判断单元和分配单元:
所述第二判断单元,具体用于判断被调用函数是否需要使用间接访问变量栈,得到判断结果;
所述分配单元,具体用于若所述判断结果指示所述函数需要使用所述间接访问变量栈,在虚拟机栈的栈顶生成一个方法栈帧;在所述方法栈帧的局部变量栈之后,操作数栈之前为包含间接访问变量栈管理虚拟机指令的函数分配间接访问变量栈。
可选地,所述第二判断单元,具体用于:
根据所述函数的函数头信息中所记录的间接访问变量栈空间需求信息,判断所述函数是否需要使用间接访问变量栈,得到判断结果。
可选地,该装置还包括:更换模块;
所述更换模块,具体用于将WebAssembly原始间接访问变量栈分配管理虚拟机指令组合更换为所述虚拟机指令并将函数间接访问变量栈空间需求信息转换到函数头信息中;所述原始间接访问变量栈分配管理虚拟机指令组合用于为间接访问变量栈分配内存空间,以及将间接访问变量栈地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈。
可选地,该装置还包括:删除单元;
所述删除单元,具体用于将WebAssembly原始间接访问变量栈回收管理虚拟机指令组合进行删除,得到目标字节码。
第三方面,本申请实施例提供一种虚拟机指令,所述虚拟机指令用于间接访问变量栈的管理;
调用包含所述虚拟机指令的函数时,根据函数头信息中记录间接访问变量栈空间需求信息在虚拟机栈上为函数分配间接访问变量栈;以及,
通过所述虚拟机指令,为所述函数分配的所述间接访问变量栈的地址增加模块信息和内存类型,并将增加了所述模块信息以及所述内存类型的所述间接访问变量栈的地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈。
函数调用时,在虚拟机栈上为包含所述虚拟机指令的函数分配间接访问变量栈,所述虚拟机指令用于间接访问变量栈管理;通过所述虚拟机指令,为所述函数分配的所述间接访问变量栈的地址增加模块信息和内存类型,并将增加了所述模块信息以及所述内存类型的所述间接访问变量栈的地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈;响应于退出函数调用,将包含所述间接访问变量栈的所述虚拟机栈的空间进行回收。
相较于现有技术,本申请具有以下有益效果:
第一、通过将间接访问变量栈的内存空间分配到虚拟机栈上,即间接访问变量栈与虚拟机栈共用一块内存空间,内存统一使用整体空间不足而产生异常的时机点晚于两块内存中的一块空间不足且不能使用另一块内存而产生异常的时机点,可以使得***的兼容性以及健壮性得到提升;
第二、单独管理的间接访问变量栈需要有模块信息属性,虚拟机栈中管理的间接访问变量栈可以使用原虚拟机栈中的模块信息,从而减小间接访问变量栈管理内存开销;
第三,使用单一虚拟机指令替换原有间接访问变量栈分配管理虚拟机指令组合,虚拟机栈中管理的间接访问变量栈随函数调用返回虚拟机退栈操作而回收,无需原有间接访问变量栈回收管理虚拟机指令组合,可以减小程序代码占用资源,提高程序运行速度。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请相关技术提供的一种间接访问变量栈管理的示意图;
图2为本申请实施例提供的一种间接访问变量栈的管理方法的流程图;
图3为本申请实施例提供的一种间接访问变量栈管理的示意图;
图4为本申请实施例提供的另一种间接访问变量栈的管理方法的流程图;
图5为本申请实施例提供的一种访问间接访问变量栈的示意图;
图6为本申请实施例提供的另一种访问间接访问变量栈的示意图;
图7为本申请实施例提供的又一种间接访问变量栈的管理方法的流程图;
图8为本申请实施例提供的再一种间接访问变量栈的管理方法的流程图;
图9为本申请实施例提供的一种间接访问变量栈的管理装置的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
间接访问,指的是通过指针访问局部数组或结构体或指针类型变量内容的访问方式。
间接访问变量栈,指的是为函数局部数组或结构体或指针类型变量内容分配的存储内存。
参见图2,图2本申请实施例提供的第一种间接访问变量栈的管理方法的流程图。
如图2所示,该方法包括:
S201:函数调用时,根据函数头信息中记录间接访问变量栈空间需求信息在虚拟机栈上为包含虚拟机指令的函数分配间接访问变量栈,虚拟机指令用于间接访问变量栈管理。
根据函数的函数头中所记录的间接访问变量栈空间需求信息,判断函数是否需要使用间接访问变量栈。具体地,若函数头中所记录的间接访问变量栈空间需求信息不为零,则函数需要使用间接访问变量栈,反之则说明该函数不需要使用间接访问变量栈。若函数需要使用间接访问变量栈,在虚拟机栈的栈顶生成一个方法栈帧,方法栈帧至少包括局部变量栈、栈帧信息和操作数栈; 在虚拟机栈的局部变量栈之后,操作数栈之前为函数分配间接访问变量栈。
S202:通过虚拟机指令,为函数分配的间接访问变量栈的地址增加模块信息和内存类型,并将增加了模块信息以及内存类型的间接访问变量栈的地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈。
作为示例,虚拟机指令可以是global.set_local,指令包含一字节无符号操作数localidx为局部变量索引,此虚拟机指令用于将函数调用指令中分配的间接访问变量栈地址增加模块信息和内存类型并将增加了模块信息和内存类型的间接访问变量栈指针地址保存到localidx指示局部变量中。
作为示例,虚拟机指令可以是global.tee_local,指令包含一字节无符号操作数localidx为局部变量索引,此虚拟机指令用于将函数调用指令中分配的间接访问变量栈地址增加模块信息和内存类型并将增加了模块信息和内存类型的间接访问变量栈指针地址保存到localidx指示局部变量中并将其压入操作数栈。
具体地,虚拟机运行至global.tee_local localidx或global.set_locallocalidx指令时,为调用函数时分配的间接访问变量栈地址增加模块信息和内存类型得到一个32位指针地址,示例性地内存类型可以使用一个bit位bit23为1表示,模块信息可以使用6个bit位bit22-bit17表示,bit16-bit1表示内存地址,bit32-bit24保留,将增加了模块信息和内存类型的间接访问变量栈指针地址设置到localidx指示的虚拟机局部变量栈,或,设置到localidx指示的虚拟机局部变量栈与虚拟机操作数栈。
S203:退出函数调用时,将包含间接访问变量栈的虚拟机栈的空间进行回收。
具体地,函数调用返回时,间接访问变量栈随虚拟机栈退栈操作而回收,无需通过执行间接访问变量栈回收管理虚拟机指令组进行回收。通过将间接访问变量栈的内存空间分配到虚拟机栈上,即间接访问变量栈与虚拟机栈共用一块内存空间(内存统一使用整体空间不足而产生异常的时机点晚于两块内存中的一块空间不足且不能使用另一块内存而产生异常的时机点),可以使得***的兼容性以及健壮性得到提升;单独管理的间接访问变量栈需要有模块信息属性,虚拟机栈中管理的间接访问变量栈可以使用原虚拟机栈中的模块信息,从而减小间接访问变量栈管理内存开销;同时,使用单一虚拟机指令替换原有间接访问变量栈分配管理虚拟机指令组合,虚拟机栈中管理的间接访问变量栈随函数调用返回虚拟机退栈操作而回收,无需原有间接访问变量栈回收管理虚拟机指令组合,可以减小程序代码占用资源,提高程序运行速度。
为便于理解,本申请实施例将结合说明书附图对上述实施例进行描述图3为本申请实施例提供的一种间接访问变量栈管理的示意图。
如图3所示,将间接访问变量栈放入虚拟机栈的方法栈帧中,在虚拟机栈的局部变量栈之后,操作数栈之前为函数分配间接访问变量栈。每一个方法对应一次间接访问变量栈的分配,并且虚拟机栈的生长方向是由栈底指向栈顶的。其中,每个方法栈帧包括操作数栈、间接访问变量栈、方法返回地址与模块等栈帧信息、以及局部变量栈。需要注意的是,图3中的方法栈帧中的间接访问变量栈的空间还未被进行回收。
参见图4,图4为本申请实施例提供的另一种间接访问变量栈管理方法的流程图。
该方法包括:
S401:函数调用时,根据函数头信息中记录间接访问变量栈空间需求信息在虚拟机栈上为包含虚拟机指令的函数分配间接访问变量栈,虚拟机指令用于间接访问变量栈管理。
S402:通过虚拟机指令,为函数分配的间接访问变量栈的地址增加模块信息和内存类型,并将增加了模块信息以及内存类型的间接访问变量栈的地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈。
S403:响应于指针地址为间接访问变量栈的访问,对间接访问变量栈中所存储的数据执行读写操作。
在本实施例中,除了对间接访问变量栈的管理进行描述之外,还可以对间接访问变量栈中的数据进行读写操作。仅通过指针地址即可对间接访问变量栈中所存储的是数据进行读写操作。
S404:退出函数调用时,将包含间接访问变量栈的虚拟机栈的空间进行回收。
作为示例,当指针地址为当前间接访问变量栈的地址时,如图5所示,响应于指针地址为间接访问变量栈的访问,基于指针地址处读写数据的空间范围与间接访问变量栈的空间范围,判断访问是否合法;若访问合法,对间接访问变量栈中所存储的数据执行读写操作。
具体地,若指针地址处读写数据的数据长度小于间接访问变量栈的空间范围,则表示访问合法可以执行数据的读写操作;反之则访问不合法。
作为示例,当指针地址为历史间接访问变量栈的地址时,如图6所示(该图中以访问历史间接访问变量栈2为例),响应于指针地址为间接访问变量栈的访问,基于虚拟机栈的栈帧信息查找历史调用函数间接访问变量栈的位置及其模块信息,判断模块信息匹配,且基于指针地址处读写数据的空间范围与间接访问变量栈的空间范围,判断访问是否合法;若访问合法,对间接访问变量栈中所存储的数据执行读写操作。
具体地,通过历史间接访问变量栈的地址对间接访问变量栈进行定位,获得该方法栈帧的模块信息,若获得的模块信息匹配并且指针地址处读写数据的数据长度小于间接访问变量栈的空间范围,则说明该访问合法可以对间接访问变量栈中的数据进行读写操作;反之则访问不合法。
然而,并非所有的函数调用都需要使用到间接访问变量栈,所以为了提升间接访问变量栈的管理效率,本申请实施例提供又一种间接访问变量栈管理方法的流程图,如图7所示。
该方法包括:
S701:函数调用时,判断函数是否需要使用间接访问变量栈,得到判断结果。
作为示例,根据函数的函数头信息中所记录的间接访问变量栈空间需求信息,判断函数是否需要使用间接访问变量栈,得到判断结果。
S702:若结果指示为函数需要使用间接访问变量栈,根据函数头信息中记录间接访问变量栈空间需求信息在虚拟机栈上为包含虚拟机指令的函数分配间接访问变量栈,虚拟机指令用于间接访问变量栈管理。
S703:通过虚拟机指令,为函数分配的间接访问变量栈的地址增加模块信息和内存类型,并将增加了模块信息以及内存类型的间接访问变量栈的地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈。
S704:响应于指针地址为间接访问变量栈的访问,对间接访问变量栈中所存储的数据执行读写操作。
本实施例中,由于有的函数并不需要使用间接访问变量栈,所以在为函数分配间接访问变量栈之前,对该函数是否需要使用间接访问变量栈进行相应的判断只对需要使用间接访问变量栈的函数进行操作,可以有效提升对间接访问变量栈的管理效率。
WebAssembly技术是一个虚拟机指令集体系架构,一般情况下如函数内有使用局部数组或结构体或指针类型变量,函数需要通过一系列虚拟机指令为此类变量统一申请一块内存存放变量内容,而将此块内存指针地址保存在局部变量中并采用局部变量中的指针地址加偏移位置的方式来读写此类变量内容。由于间接访问变量栈与虚拟机栈分别管理,导致***的兼容性以及健壮性受到影响;并且需要使用一系列的虚拟机指令来进行间接访问变量栈的管理。为此,本申请实施例提供再一种间接访问变量栈管理方法的流程图。
如图8所示,该方法包括:
S801:使用字节码转换工具将WebAssembly原始编译程序字节码中间接访问变量栈分配和回收管理虚拟机指令组合进行改进。通过字节码转换工具在WebAssembly原始间接访问变量栈空间申请及指针地址设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈操作的多个虚拟机指令组合中提取函数所需间接访问变量栈空间信息和设置间接访问变量栈指针地址到虚拟机局部变量栈,或,到虚拟机局部变量栈与虚拟机操作数栈虚拟机指令类型和局部变量索引操作数;通过字节码转换工具将函数所需间接访问变量栈空间信息转换到函数头中,将多个虚拟机指令组合完成的间接访问变量栈空间申请及指针地址设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈操作的虚拟机指令组合改为:将函数调用时在虚拟机栈中分配的间接访问变量栈地址增加模块信息和内存类型后的指针地址(即,指针地址是添加了模块信息以及内存类型之后的间接访问变量栈的地址,通过该地址可以实现对间接访问变量栈中的数据进行读写操作。其中,模块信息可用于判断对间接访问变量栈的访问是否合法。),并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈的单个虚拟机指令,将多个虚拟机指令组合完成的间接访问变量栈空间回收过程字节码进行删除。
使用字节码转换工具将函数所需间接访问变量栈空间转换到函数头信息中,在间接访问变量栈空间申请及指针地址设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈操作的多个虚拟机指令组合中查找i32.const指令,此指令操作数即为间接访问变量栈空间需求信息,考虑间接访问变量栈空间均为16的倍数,将其经除以16转换后保存在函数头信息中。函数头信息可以包含参数个数、临时变量个数、间接访问变量栈空间信息,将参数个数、临时变量个数和间接访问变量栈空间信息整合为1至3字节信息形成函数头信息,其中使用2个bit位表示函数字节码头信息长度。当函数字节码头信息长度为1字节时,表示不存在间接访问变量栈空间信息,分别使用3个bit位表示函数参数和临时变量个数;当函数字节码头信息长度为2字节时,分别使用5个bit位表示函数参数和临时变量个数,使用4个bit位最大可表示240字节间接访问变量栈空间信息;当函数字节码头信息长度为3字节时,分别使用7个bit位表示函数参数个数、临时变量个数和间接访问变量栈空间信息,最大可表示2032字节间接访问变量栈空间信息,此情况下暂时保留一个bit位待用。
在一可选的实施例中,使用字节码转换工具将WebAssembly原始编译程序字节码中间接访问变量栈空间申请及指针地址设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈操作的多个虚拟机指令组合更换为global.tee_local localidx或global.set_local localidx指令。在WebAssembly原始间接访问变量栈空间申请及指针地址设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈操作的多个虚拟机指令组合中查找local.tee localidx或local.set localidx指令,保持local.tee localidx或local.set localidx指令操作数localidx不变的条件下将虚拟机指令对应替换为global.tee_local localidx或global.set_local localidx指令。
作为示例,多条虚拟机指令组合可以如下:
global.get 0 // global0变量中的间接访问变量栈栈顶地址压入操作数栈;
i32.const 64 //申请空间为64字节,将64压入操作数栈;
i32.sub//间接访问变量栈栈顶地址减64后压入操作数栈;
local.tee localidx //操作数栈顶数据存入局部变量栈,操作数栈不变,此指令还可能是local.set;
global.set 0//操作数栈顶新的间接访问变量栈栈顶地址数据存入global0变量。
S802:使用字节码转换工具将WebAssembly原始编译程序字节码中间接访问变量栈回收管理虚拟机指令组合相关字节码进行删除。
S803:函数调用时,根据函数头信息中记录间接访问变量栈空间需求信息在虚拟机栈上为包含虚拟机指令的函数分配间接访问变量栈,虚拟机指令用于间接访问变量栈管理。
S804:通过虚拟机指令,为函数分配的间接访问变量栈的地址增加模块信息和内存类型,并将增加了模块信息以及内存类型的间接访问变量栈的地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈。
S805:退出函数调用时,将包含间接访问变量栈的虚拟机栈的空间进行回收。
通过使用字节码转换工具将WebAssembly原始编译程序字节码中间接访问变量栈空间申请及指针地址设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈和间接访问变量栈空间回收进行改进,原需要多个虚拟机指令组合完成的间接访问变量栈申请及将指针地址设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈操作优化为单一虚拟机指令即可完成,原需要多个虚拟机指令组合完成的间接访问变量栈空间回收管理虚拟机指令组合进行删除, 减少了字节码空间,从而减少程序代码占用资源,并提高程序运行速度。
指针地址参见图9,图9为本申请实施例提供的一种间接访问变量栈的管理装置的结构示意图。
如图9所示,该间接访问变量栈的管理装置包括:分配模块901、设置模块902以及回收模块903;
分配模块901,用于函数调用时,根据函数头信息中记录间接访问变量栈空间需求信息在虚拟机栈上为包含虚拟机指令的函数分配间接访问变量栈,虚拟机指令用于间接访问变量栈管理;
设置模块902,用于通过虚拟机指令,为函数分配的间接访问变量栈的地址增加模块信息和内存类型,并将增加了模块信息以及内存类型的间接访问变量栈的地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈;
回收模块903,用于响应于退出函数调用,将包含间接访问变量栈的虚拟机栈的空间进行回收。
可选地,装置还包括:读写操作模块;
读写操作模块,用于响应于指针地址为间接访问变量栈的访问,对间接访问变量栈中所存储的数据执行读写操作。
可选地,访问指针地址为当前函数间接访问变量栈,读写操作模块包括第一判断单元以及读写操作单元:
第一判断单元,具体用于响应于指针地址为间接访问变量栈的访问,基于指针地址处读写数据的空间范围与间接访问变量栈的空间范围,判断访问是否合法;
读写操作单元,具体用于若访问合法,对间接访问变量栈中所存储的数据执行读写操作。
可选地,访问指针地址为历史调用函数间接访问变量栈,读写操作模块包括第一判断单元以及读写操作单元:
第一判断单元,具体用于响应于指针地址为间接访问变量栈的访问,基于虚拟机栈的栈帧信息查找历史调用函数间接访问变量栈的位置及其模块信息,判断模块信息匹配,且基于指针地址处读写数据的空间范围与间接访问变量栈的空间范围,判断访问是否合法;
读写操作单元,具体用于若访问合法,对间接访问变量栈中所存储的数据执行读写操作。
可选地,分配模块901包括第二判断单元和分配单元:
第二判断单元,具体用于判断被调用函数是否需要使用间接访问变量栈,得到判断结果;
分配单元,具体用于若判断结果指示函数需要使用间接访问变量栈,在虚拟机栈的栈顶生成一个方法栈帧,并且在方法栈帧的局部变量栈之后,操作数栈之前为函数分配间接访问变量栈。
可选地,第二判断单元,具体用于:
根据函数的函数头信息中所记录的间接访问变量栈空间需求信息,判断函数是否需要使用间接访问变量栈,得到判断结果。
可选地,该装置还包括:更换模块;
更换模块,具体用于将WebAssembly原始间接访问变量栈分配管理虚拟机指令组合更换为虚拟机指令并将函数间接访问变量栈空间需求信息转换到函数头信息中;原始间接访问变量栈分配管理虚拟机指令组合用于为间接访问变量栈分配内存空间,以及将间接访问变量栈地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈。
可选地,该装置还包括:删除单元;
删除单元,具体用于将WebAssembly原始间接访问变量栈回收管理虚拟机指令组合进行删除,得到目标字节码。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元提示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述,仅为本申请的一种具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。
Claims (9)
1.一种间接访问变量栈的管理方法,其特征在于,所述方法包括:
函数调用时,根据函数头信息中记录的空间需求信息在虚拟机栈上为包含间接访问变量栈管理虚拟机指令的函数分配间接访问变量栈,所述虚拟机指令用于间接访问变量栈管理;
通过所述虚拟机指令,为所述函数分配的所述间接访问变量栈的地址增加模块信息和内存类型,并将增加了所述模块信息以及所述内存类型的所述间接访问变量栈的地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈;
退出函数调用时,将包含所述间接访问变量栈的所述虚拟机栈的空间进行回收。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于指针地址为所述间接访问变量栈的访问,对所述间接访问变量栈中所存储的数据执行读写操作。
3.根据权利要求2所述的方法,其特征在于,访问指针地址为当前函数间接访问变量栈,所述响应于指针地址为所述间接访问变量栈的访问,对所述间接访问变量栈中所存储的数据执行读写操作,包括:
响应于指针地址为所述间接访问变量栈的访问,基于所述指针地址处读写数据的空间范围与所述间接访问变量栈的空间范围,判断所述访问是否合法;
若所述访问合法,对所述间接访问变量栈中所存储的数据执行读写操作。
4.根据权利要求2所述的方法,其特征在于,访问指针地址为历史调用函数间接访问变量栈,所述响应于指针地址为所述间接访问变量栈的访问,对所述间接访问变量栈中所存储的数据执行读写操作,包括:
响应于指针地址为所述间接访问变量栈的访问,基于所述虚拟机栈的栈帧信息查找所述历史调用函数间接访问变量栈的位置及其模块信息,判断模块信息匹配,且基于所述指针地址处读写数据的空间范围与所述间接访问变量栈的空间范围,判断所述访问是否合法;
若所述访问合法,对所述间接访问变量栈中所存储的数据执行读写操作。
5.根据权利要求1所述的方法,其特征在于,所述根据函数头信息中记录的空间需求信息在虚拟机栈上为包含间接访问变量栈管理虚拟机指令的函数分配间接访问变量栈,包括:
判断所述函数是否需要使用间接访问变量栈,得到判断结果;
若所述判断结果指示所述函数需要使用所述间接访问变量栈,在虚拟机栈的栈顶生成一个方法栈帧;
在所述方法栈帧的局部变量栈之后,操作数栈之前为包含间接访问变量栈管理虚拟机指令的函数分配间接访问变量栈。
6.根据权利要求5所述的方法,其特征在于,所述判断所述函数是否需要使用间接访问变量栈,得到判断结果,包括:
根据所述函数的函数头信息中所记录的间接访问变量栈空间需求信息,判断所述函数是否需要使用间接访问变量栈,得到判断结果。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将WebAssembly原始间接访问变量栈分配管理虚拟机指令组合更换为所述虚拟机指令并将函数间接访问变量栈空间需求信息转换到函数头信息中;所述原始间接访问变量栈分配管理虚拟机指令组合用于为函数分配间接访问变量栈内存空间,以及将所分配间接访问变量栈地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
将WebAssembly原始间接访问变量栈回收管理虚拟机指令组合进行删除。
9.一种间接访问变量栈的管理装置,其特征在于,所述装置包括:分配模块、设置模块以及回收模块;
所述分配模块,用于函数调用时,根据函数头信息中记录的间接访问变量栈空间需求信息在虚拟机栈上为包含间接访问变量栈管理虚拟机指令的函数分配间接访问变量栈,所述虚拟机指令用于间接访问变量栈管理;
所述设置模块,用于通过所述虚拟机指令,为所述函数分配的所述间接访问变量栈的地址增加模块信息和内存类型,并将增加了所述模块信息以及所述内存类型的所述间接访问变量栈的地址定义为指针地址,并设置到虚拟机局部变量栈,或,设置到虚拟机局部变量栈与虚拟机操作数栈;
所述回收模块,用于退出函数调用时,将包含所述间接访问变量栈的所述虚拟机栈的空间进行回收。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310791313.2A CN116541132B (zh) | 2023-06-30 | 2023-06-30 | 一种间接访问变量栈的管理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310791313.2A CN116541132B (zh) | 2023-06-30 | 2023-06-30 | 一种间接访问变量栈的管理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116541132A true CN116541132A (zh) | 2023-08-04 |
CN116541132B CN116541132B (zh) | 2023-10-13 |
Family
ID=87449110
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310791313.2A Active CN116541132B (zh) | 2023-06-30 | 2023-06-30 | 一种间接访问变量栈的管理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116541132B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102020111051A1 (de) * | 2020-04-23 | 2021-10-28 | Bayerische Motoren Werke Aktiengesellschaft | Anordnung, softwareprogramm und computerimplementiertes verfahren zum ausführen eines nachladbaren programms auf einem eingebetteten system eines fahrzeugs |
CN113672515A (zh) * | 2021-08-26 | 2021-11-19 | 北京航空航天大学 | 一种基于符号执行的wasm智能合约漏洞检测方法 |
CN113946602A (zh) * | 2021-10-27 | 2022-01-18 | 中国建设银行股份有限公司 | 数据查找方法、装置、设备和介质 |
-
2023
- 2023-06-30 CN CN202310791313.2A patent/CN116541132B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102020111051A1 (de) * | 2020-04-23 | 2021-10-28 | Bayerische Motoren Werke Aktiengesellschaft | Anordnung, softwareprogramm und computerimplementiertes verfahren zum ausführen eines nachladbaren programms auf einem eingebetteten system eines fahrzeugs |
CN113672515A (zh) * | 2021-08-26 | 2021-11-19 | 北京航空航天大学 | 一种基于符号执行的wasm智能合约漏洞检测方法 |
CN113946602A (zh) * | 2021-10-27 | 2022-01-18 | 中国建设银行股份有限公司 | 数据查找方法、装置、设备和介质 |
Non-Patent Citations (1)
Title |
---|
王乙飞: "基于硬件的JVM程序动态剖析技术研究", 《CNKI中国知网》, no. 06, pages 1 - 87 * |
Also Published As
Publication number | Publication date |
---|---|
CN116541132B (zh) | 2023-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9355028B2 (en) | Data-storage device and flash memory control method | |
US5860082A (en) | Method and apparatus for allocating storage in a flash memory | |
US7480782B2 (en) | Reference-updating using per-chunk referenced-address ranges in a compacting garbage collector | |
US7533228B1 (en) | Two-pass sliding compaction | |
US6381176B1 (en) | Method of driving remapping in flash memory and flash memory architecture suitable therefor | |
US6175900B1 (en) | Hierarchical bitmap-based memory manager | |
US7412466B1 (en) | Offset-based forward address calculation in a sliding-compaction garbage collector | |
US7389395B1 (en) | Split-reference, two-pass mark-compaction | |
CN104008061A (zh) | 内存回收方法及装置 | |
US6742078B1 (en) | Management, data link structure and calculating method for flash memory | |
US5481688A (en) | Information processing system having an address translation table loaded with main/expanded memory presence bits | |
EP2880538B1 (en) | System and method for object deletion in persistent memory using bitmap windows | |
CN109471594B (zh) | 一种mlc闪存读写方法 | |
WO1999000733A1 (en) | Method and apparatus for managing hashed objects | |
CN105718319B (zh) | 一种内存池版图解析方法和内存池装置 | |
CN110347613B (zh) | 多租户固态盘中实现raid的方法、控制器及多租户固态盘 | |
US20130138703A1 (en) | Optimized memory management for class metadata | |
CN106445398A (zh) | 一种基于新型存储器的嵌入式文件***及其实现方法 | |
CN106445835A (zh) | 内存分配方法与装置 | |
CN112596668A (zh) | 一种存储器的坏块处理方法及*** | |
CN104850505A (zh) | 基于链式堆叠的内存管理方法与*** | |
CN115599544A (zh) | 内存管理方法、装置、计算机设备及存储介质 | |
CN115712500A (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN116541132B (zh) | 一种间接访问变量栈的管理方法和装置 | |
CN111143238B (zh) | 基于eFlash存储芯片的数据擦写方法及*** |
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 |