CN116661910A - 一种应用调用的方法及装置 - Google Patents

一种应用调用的方法及装置 Download PDF

Info

Publication number
CN116661910A
CN116661910A CN202310962898.XA CN202310962898A CN116661910A CN 116661910 A CN116661910 A CN 116661910A CN 202310962898 A CN202310962898 A CN 202310962898A CN 116661910 A CN116661910 A CN 116661910A
Authority
CN
China
Prior art keywords
application
subspace
linear memory
target
offset
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
CN202310962898.XA
Other languages
English (en)
Other versions
CN116661910B (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.)
Beijing CEC Huada Electronic Design Co Ltd
Original Assignee
Beijing CEC Huada Electronic Design Co Ltd
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 Beijing CEC Huada Electronic Design Co Ltd filed Critical Beijing CEC Huada Electronic Design Co Ltd
Priority to CN202310962898.XA priority Critical patent/CN116661910B/zh
Publication of CN116661910A publication Critical patent/CN116661910A/zh
Application granted granted Critical
Publication of CN116661910B publication Critical patent/CN116661910B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本说明书公开了一种应用调用的方法及装置。首先,获取目标应用模块的应用代码对应的WebAssembly字节码。其次,从全局线性内存空间中为目标应用模块分配线性内存子空间,将应用代码中的各变量存放到线性内存子空间。而后,在目标应用模块调用其他应用模块的目标函数的过程中,将目标应用模块的参数存放到虚拟机栈。读取虚拟机栈中的参数输入给目标函数,若确定参数为线性内存子空间的偏移量,则按照线性内存子空间的偏移量,从线性内存子空间中读取与参数对应的变量的取值。最后,根据与参数对应的变量的取值,执行针对目标函数的函数调用。本方法可以在各应用模块之间传递正确的参数,并降低内存资源的消耗。

Description

一种应用调用的方法及装置
技术领域
本说明书涉及计算机技术领域,尤其涉及一种应用调用的方法及装置。
背景技术
WebAssembly是一种能够将其他编程语言编译为浏览器可执行的二进制文件的技术。例如,为诸如C/C++等语言提供一个编译目标,以便它们可以在Web上运行。也就是说,WebAssembly并不是一门编程语言,而是一份字节码标准,需要用高级编程语言编译出字节码放到WebAssembly虚拟机中才能运行。
目前在资源受限的智能卡或SE设备上执行WebAssembly字节码时,会为每个模块分配独立的线性内存,以供全局变量、局部数组/结构体使用。但是,这会导致内存资源消耗较大,对资源较小的智能卡或SE设备来说,这种内存资源的消耗是不可接受的。
并且,在模块间进行函数调用的过程中,传递的参数为指针、数组、结构体等类型时,在虚拟机栈中传递的参数为线性内存的偏移量(offset)。由于,每个模块对应有独立的线性内存,模块在从虚拟机栈中读取线性内存的偏移量后,是基于自身的线性内存确定传递的参数,这会导致模块间无法正确的传递参数。
因此,如何在模块间传递正确的参数,并降低内存资源的消耗,则是一个亟待解决的问题。
发明内容
本说明书提供一种应用调用的方法、装置、电子设备及机器可读存储介质,以在模块间传递正确的参数,并降低内存资源的消耗。
本说明书采用下述技术方案:
本说明书提供了一种应用调用的方法,所述应用包含多个应用模块;所述方法应用于电子设备上搭载的用于运行所述应用的虚拟机,所述虚拟机的内存空间包括为所述应用包含的多个应用模块分配的全局线性内存空间,包括:
获取与所述多个应用模块中的目标应用模块的应用代码对应的WebAssembly字节码;
根据所述目标应用模块的应用代码中的各变量的大小,计算所述应用代码所需的线性内存空间的大小,并从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间,将所述目标应用模块的应用代码中的各变量存放到所述线性内存子空间;
执行所述目标应用模块的应用代码对应的WebAssembly字节码,在所述目标应用模块调用其他应用模块的目标函数的过程中,将所述目标函数所需的所述目标应用模块的参数存放到所述虚拟机栈;
读取所述虚拟机栈中的所述参数输入给所述目标函数,若确定所述参数为所述线性内存子空间的偏移量,则按照所述线性内存子空间的偏移量,从所述线性内存子空间中读取与所述参数对应的变量的取值;
根据与所述参数对应的变量的取值,执行针对所述目标函数的函数调用。
可选地,所述电子设备包括:资源受限设备。
可选地,所述内存空间还包括:辅助栈空间;
在根据与所述参数对应的变量的取值,执行针对所述目标函数的函数调用之前,所述方法还包括:
根据所述目标函数中的各变量的大小,计算所述目标函数所需的辅助栈空间的大小,并从所述辅助栈空间中为所述目标函数分配辅助栈子空间,将所述目标函数中的各变量存放到辅助栈子空间;
读取所述虚拟机栈中的所述参数输入给所述目标函数,若确定所述参数为所述辅助栈子空间的偏移量,则按照所述辅助栈子空间的偏移量,从所述辅助栈子空间中读取与所述参数对应的变量的取值。
可选地,在读取与所述参数对应的变量的取值之前,包括:
确定与所述线性内存子空间对应的结束偏移量,所述结束偏移量用于表示所述线性内存子空间中的偏移量最大的变量的偏移量与所述偏移量最大的变量所占用的线性内存空间的大小之和确定出的内存地址;
确定所述参数为所述线性内存子空间的偏移量,包括:
若与所述参数对应的偏移量不大于所述结束偏移量,则确定所述参数为所述线性内存子空间的偏移量;
确定所述参数为所述辅助栈子空间的偏移量,包括:
若与所述参数对应的偏移量大于所述结束偏移量,则确定所述参数为所述辅助栈子空间的偏移量。
可选地,在从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间之前,所述方法还包括:
按照预设的空间参数,对所述内存空间进行划分,得到全局线性内存空间以及辅助栈空间,所述空间参数包括:全局线性内存空间的起始内存地址、全局线性内存空间的大小、全局线性内存空间的结束内存地址,辅助栈空间的起始内存地址以及辅助栈空间的大小。
可选地,所述虚拟机包含有用于并行运行应用的若干逻辑通道;
根据所述目标应用模块的应用代码中的各变量的大小,计算所述应用代码所需的线性内存空间的大小,并从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间,将所述目标应用模块的应用代码中的各变量存放到所述线性内存子空间,包括:
针对各个逻辑通道运行的应用,获取多个应用模块中,该逻辑通道运行的的目标应用模块的应用代码对应的WebAssembly字节码;
根据该逻辑通道运行的目标应用模块的应用代码中的各变量的大小,计算该逻辑通道运行的目标应用模块的应用代码所需的线性内存空间的大小;
根据各逻辑通道的编号以及各逻辑通道运行的目标应用模块的应用代码所需的线性内存空间的大小,按照逻辑通道打开的顺序,从所述全局线性内存空间中为各逻辑通道运行的目标应用模块分配线性内存子空间,将各逻辑通道运行的目标应用模块的应用代码中的各变量存放到所述线性内存子空间。
可选地,所述虚拟机包含有用于并行运行应用的若干逻辑通道;
根据所述目标函数中的各变量的大小,计算所述目标函数所需的辅助栈空间的大小,并从所述辅助栈空间中为所述目标函数分配辅助栈子空间,将所述目标函数中的各变量存放到辅助栈子空间,包括:
根据各个逻辑通道运行的目标应用模块调用的其他应用模块的目标函数中的各变量的大小,计算各个逻辑通道调用的目标函数所需的辅助栈子空间的大小;
针对各个逻辑通道调用的目标函数,在该逻辑通道调用目标函数时,将生成的与该逻辑通道调用的目标函数对应的虚拟机栈帧压入帧栈,并根据该逻辑通道调用的目标函数所需的辅助栈子空间的大小,从所述辅助栈空间中为该逻辑通道调用的目标函数分配辅助栈子空间,将该逻辑通道调用的目标函数中的各变量存放到辅助栈子空间;
在该逻辑通道调用目标函数结束时,销毁所述帧栈中的与该逻辑通道调用的目标函数对应的虚拟机栈帧,并释放与该逻辑通道调用的目标函数对应的辅助栈子空间,将与该逻辑通道调用的目标函数对应的辅助栈子空间中的各变量进行清除。
可选地,所述其他应用模块的目标函数包括:库模块的接口函数以及其他应用模块的共享服务函数,所述库模块用于表示封装特定功能的模块,所述共享服务函数用于表示访问其他应用模块与所述目标应用模块共享的数据实例的函数。
本说明书提供了一种应用调用的装置,所述应用包含多个应用模块,所述装置应用于电子设备上搭载的用于运行所述应用的虚拟机,所述虚拟机的内存空间包括为所述应用包含的多个应用模块分配的全局线性内存空间,包括:
获取模块,用于获取与所述多个应用模块中的目标应用模块的应用代码对应的WebAssembly字节码;
计算模块,用于根据所述目标应用模块的应用代码中的各变量的大小,计算所述应用代码所需的线性内存空间的大小,并从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间,将所述目标应用模块的应用代码中的各变量存放到所述线性内存子空间;
存放模块,用于执行所述目标应用模块的应用代码对应的WebAssembly字节码,在所述目标应用模块调用其他应用模块的目标函数的过程中,将所述目标函数所需的所述目标应用模块的参数存放到所述虚拟机栈;
读取模块,用于读取所述虚拟机栈中的所述参数输入给所述目标函数,若确定所述参数为所述线性内存子空间的偏移量,则按照所述线性内存子空间的偏移量,从所述线性内存子空间中读取与所述参数对应的变量的取值;
执行模块,用于根据与所述参数对应的变量的取值,执行针对所述目标函数的函数调用。
本说明书提供了一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行上述应用调用的方法。
本说明书提供了一种机器可读存储介质,所述机器可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现上述应用调用的方法。
本说明书采用的上述至少一个技术方案能够达到以下有益效果:
在本说明书提供的应用调用的方法中,从全局线性内存空间中为目标应用模块分配线性内存子空间,在目标应用模块调用其他应用模块的目标函数的过程中,不再为其他应用模块分配线性内存子空间。而是,根据虚拟机栈中存放的线性内存子空间的偏移量,从线性内存子空间中读取与参数对应的变量的取值。然后,根据与参数对应的变量的取值,执行针对目标函数的函数调用。本方法可以在目标应用模块调用其他应用模块的目标函数的过程中,使得其他应用模块共享目标应用模块的线性内存子空间,从而,在各应用模块之间传递正确的参数,并降低内存资源的消耗。
附图说明
此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,本说明书的示意性实施例及其说明用于解释本说明书,并不构成对本说明书的不当限定。在附图中:
图1是一示例性的实施例示出的一种应用调用的方法的流程图;
图2是一示例性的实施例示出的虚拟机的存储空间的结构图;
图3是一示例性的实施例示出的一种内存空间的结构图;
图4是一示例性的实施例示出的一种多逻辑通道下的线性内存空间的示意图;
图5是一示例性的实施例示出的一种多逻辑通道下的辅助栈空间的示意图;
图6是一示例性的实施例示出的一种多逻辑通道下的线性内存空间以及辅助栈空间的示意图;
图7是一示例性的实施例示出的另一种多逻辑通道下的线性内存空间以及辅助栈空间的示意图;
图8是一示例性的实施例示出的一种应用调用的装置所在电子设备的结构图;
图9是一示例性的实施例示出的一种应用调用的装置的框图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
为了使本技术领域的人员更好地理解本说明书实施例中的技术方案,下面先对本说明书实施例涉及的相关技术,进行简要说明。
WebAssembly是一种能够将其他编程语言编译为浏览器可执行的二进制文件的技术。例如,为诸如C/C++等语言提供一个编译目标,以便它们可以在Web上运行。也就是说,WebAssembly并不是一门编程语言,而是一份字节码标准,需要用高级编程语言编译出字节码放到WebAssembly虚拟机中才能运行。
资源受限设备(Resource Constrained Device)通常是指电量供应有限,计算能力有限,以及存储容量有限的电子设备。例如,智能卡(Smart Card)和安全单元(SecureElement)等。
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
虚拟机栈(VirtualMachine Stack)可以用来储存栈帧(Stack Frame),栈帧是用于支持虚拟机用来支持函数调用和返回的一种数据结构。栈帧存储了参数、局部变量、中间运行结果以及返回值和调用方法等信息。
其中,每一个函数从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。例如,虚拟机在调用函数时,会创建一个栈帧并压入帧栈。在执行函数完成时,会销毁与该函数对应的栈帧。需要说明的是,只有位于虚拟机栈的栈顶的栈帧才是有效的,称为当前栈帧(CurrentStack Frame)。
在实际应用中,在资源受限的智能卡或SE设备上执行WebAssembly字节码时,会为每个模块分配独立的线性内存,以供全局变量、局部数组/结构体使用。但是,这会导致内存资源消耗较大,对资源较小的智能卡或SE设备来说,这种内存资源的消耗是不可接受的。
并且,在模块间进行函数调用的过程中,传递的参数为指针、数组、结构体等类型时,在虚拟机栈中传递的参数为线性内存的偏移量(offset)。由于,每个模块对应有独立的线性内存,模块在从虚拟机栈中读取线性内存的偏移量后,是基于自身的线性内存确定传递的参数,这会导致模块间无法正确的传递参数。
基于此,本说明书提出了一种在目标应用模块调用其他应用模块的目标函数的过程中,使得其他应用模块共享目标应用模块的线性内存子空间的技术方案,从而,在各应用模块之间传递正确的参数,并降低了内存资源的消耗。
以下结合附图,详细说明本说明书各实施例提供的技术方案。
图1是一示例性的实施例示出的一种应用调用的方法的流程图,具体包括以下步骤:
S100:获取与所述多个应用模块中的目标应用模块的应用代码对应的WebAssembly字节码。
在本说明书实施例中,应用调用的方法应用于电子设备上搭载的用于运行应用的虚拟机,执行主体可以是虚拟机。虚拟机的物理载体可以是电子设备,电子设备包括:服务器、服务器集群、资源受限设备等。为了便于描述,下面仅以虚拟机为执行主体,对本说明书提供的应用调用的方法进行说明。
在本说明书实施例中,应用包含多个应用模块。虚拟机可以获取与所述多个应用模块中的目标应用模块的应用代码对应的WebAssembly字节码。这里提到的目标应用模块可以是指具有入口函数的模块。入口函数可以是指在编程语言中开始执行程序的特殊函数。入口函数可以在应用被选择、安装、删除等操作执行时,被虚拟机自动调用。其他的应用模块可以是指不具有入口函数、只提供导出函数的模块,例如,库模块。
其中,虚拟机可以通过卡端下载工具,下载应用的应用代码,将应用的应用代码存储在堆空间。卡端下载工具是一种用于将编写好的代码下载到嵌入式设备或智能卡上的工具软件。这里提到的堆空间可以是指一种动态分配内存的管理方式,位于非易失性存储器(Non-Volatile Memory,NVM)。在虚拟机运行时可以从堆空间中读取应用的应用代码,而不用将应用的应用代码加载到随机存取存储器(Random Access Memory,RAM),这使得虚拟机在下次运行时可以重新加载之前保留的数据,从而避免了数据丢失的问题。也就是说,堆空间中的数据具有掉电保持的特性。
进一步的,电子设备分配给虚拟机的存储空间的结构具体如图2所示。
图2是一示例性的实施例示出的虚拟机的存储空间的结构图。
在图2中,电子设备分配给虚拟机的RAM中包括:内存空间、全局字段、安全瞬态数据空间以及虚拟机栈。电子设备分配给虚拟机的NVM中包括:堆空间。其中,内存空间包括为应用包含的多个应用模块分配的全局线性内存空间以及辅助栈空间。全局字段可以用于记录全局变量相关字段的位置,也可以记录存放辅助栈空间起始位置。安全瞬态数据空间可以用于存放安全性较高的应用临时数据。线性内存空间可以为当前运行的模块存放全局变量的取值以及静态局部变量的取值。全局变量可以包括:全局的基本类型变量、数组、指针、结构体变量。静态局部变量可以包括:静态局部的基本类型变量、数组、指针、结构体变量。辅助栈空间可以为当前运行的函数的临时数据区,用于存放当前运行的函数的局部数组元素的取值、结构体变量成员的取值。
需要说明的是,堆空间具有自动垃圾回收能力。
S102:根据所述目标应用模块的应用代码中的各变量的大小,计算所述应用代码所需的线性内存空间的大小,并从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间,将所述目标应用模块的应用代码中的各变量存放到所述线性内存子空间。
在本说明书实施例中,虚拟机可以按照预设的空间参数,对内存空间进行划分,得到全局线性内存空间以及辅助栈空间。这里提到的空间参数包括:全局线性内存空间的起始内存地址、全局线性内存空间的大小、全局线性内存空间的结束内存地址,辅助栈空间的起始内存地址以及辅助栈空间的大小。具体如图3所示。
图3是一示例性的实施例示出的一种内存空间的结构图。
在图3中,每个正方形用于表示变量。线性内存空间的起始内存地址可以位于RAM中的低地址。由于,线性内存空间是从低地址开始,朝向高地址,递增使用,因此,设置的线性内存空间的结束内存地址大于线性内存空间的起始内存地址。辅助栈空间的起始内存地址可以位于随机存取存储器的存储空间中的高地址。辅助栈空间从高地址开始,朝向低地址,递减使用。由于,在辅助栈空间中,虚拟机为函数分配的辅助栈子空间会随着函数执行完成被释放,因此,内存空间中线性内存空间的结束内存地址可以视为辅助栈空间的结束内存地址。
其中,虚拟机分配辅助栈空间的方法有多种。例如,辅助栈空间的起始内存地址还可以等于线性内存空间的结束内存地址。辅助栈空间从低地址开始,朝向高地址,递增使用。本说明书不对辅助栈空间的分配方法进行限定,技术人员可以根据业务需求分配辅助栈空间。
在本说明书实施例中,虚拟机可以根据目标应用模块的应用代码中的各变量的大小,计算应用代码所需的线性内存空间的大小,并从全局线性内存空间中为目标应用模块分配线性内存子空间,将目标应用模块的应用代码中的各变量存放到线性内存子空间。这里提到的各变量的大小是指各变量的取值实际所占用的线性内存子空间。
具体的,虚拟机可以确定目标应用模块的应用代码中的各变量在线性内存空间中的偏移量,并从各变量中确定偏移量最小的变量,作为目标应用模块的起始偏移量。
然后,从各变量中确定偏移量最大的变量,并根据偏移量最大的变量与偏移量最大的变量所需的线性内存空间的大小之和,计算目标应用模块的结束偏移量。
最后,根据目标应用模块的起始偏移量与目标应用模块的结束偏移量之间的差,计算应用代码所需的线性内存空间的大小。
在实际应用中,目标应用模块的应用代码中的部分变量会在编程时设定初值,而另一部分变量在编程时可能并未设置初值。在虚拟机启动时,可将部分变量的初值数据拷贝到线性内存空间中的具有初值的变量空间。未设置初值的这部分变量的线性内存空间可以设定为特定值,例如0值。
基于此,虚拟机可以根据每个变量在线性内存空间的排列顺序以及变量的取值,在线性内存空间中将各变量分为一个或多个初值数据子段。这里提到的初值数据子段可以是指在线性内存空间中连续排列的一个或者多个变量(数组元素、结构体变量成员、指针的值等)。例如,若目标函数中存在三个变量,分别为变量1、变量2、变量3,其中,变量2没有在编程时设定初值,则虚拟机可以在线性内存空间中将变量1分为一个初值数据子段,将变量3分为一个初值数据子段。然后,虚拟机可以根据各初值数据子段在线性内存空间的起始偏移量,将初值数据子段拷贝到线性内存空间。
在本说明书实施例中,虚拟机可以根据目标函数中的各变量的大小,计算目标函数所需的辅助栈空间的大小,并从辅助栈空间中为目标函数分配辅助栈子空间,将目标函数中的各变量存放到辅助栈子空间。这里提到的各变量的大小是指各变量的取值实际所占用的辅助栈空间。
具体的,在目标函数调用时,虚拟机可以将辅助栈空间中的栈顶对应的结束内存地址,递减各变量的取值实际所占用空间,以得到目标函数在辅助栈空间中的起始内存地址。
由于,目标函数中的部分变量会在编程时设定初值,而另一部分变量在编程时可能并未设置初值。当目标函数开始执行时,可将部分变量的初值数据拷贝到辅助栈空间中的具有初值的变量空间。
基于此,虚拟机可以使用预置值对在编程时未设置初始的部分变量进行初始化,这里提到的预置值可以为0,也可以是技术人员预先设定的值。
需要说明的是,目标应用模块定义的指针变量,只能指向与目标应用模块对应的线性内存空间中的内存地址,即与目标应用模块对应的指针只可访问与目标应用模块对应的线性内存空间。虚拟机可以在运行应用时检查指针变量,以防止越界非法访问。
S104:执行所述目标应用模块的应用代码对应的WebAssembly字节码,在所述目标应用模块调用其他应用模块的目标函数的过程中,将所述目标函数所需的所述目标应用模块的参数存放到所述虚拟机栈。
S106:读取所述虚拟机栈中的所述参数输入给所述目标函数,若确定所述参数为所述线性内存子空间的偏移量,则按照所述线性内存子空间的偏移量,从所述线性内存子空间中读取与所述参数对应的变量的取值。
在实际应用中,线性内存子空间是从低地址朝向高地址的方向使用内存空间,而辅助栈子空间是从高地址朝向低地址的方向使用内存空间。
因此,虚拟机在读取与参数对应的变量的取值之前,需要判断参数是属于线性内存子空间的参数,还是属于辅助栈子空间的参数。
在本说明书实施例中,虚拟机可以确定与线性内存子空间对应的结束偏移量,这里提到的结束偏移量用于表示线性内存子空间中的偏移量最大的变量的偏移量与偏移量最大的变量所占用的线性内存空间的大小之和确定出的内存地址。
若与参数对应的偏移量不大于结束偏移量,则确定参数为线性内存子空间的偏移量。
若与参数对应的偏移量大于结束偏移量,则确定参数为辅助栈子空间的偏移量。
需要说明的是,当应用模块间传递的参数为指针、数组、结构体等类型时,在虚拟机栈中传递的参数可以为偏移量。当应用模块间传递的参数为基本类型变量,在虚拟机栈中传递的参数为取值。
在实际应用中,在应用模块间进行函数调用的过程中,若在虚拟机栈中传递的参数为线性内存空间的偏移量。由于,每个应用模块对应有独立的线性内存空间,应用模块在从虚拟机栈中读取线性内存空间的偏移量后,是基于自身的线性内存空间确定与偏移量对应的变量的取值,这会导致应用模块间无法正确的传递线性内存子空间中的变量的取值。
基于此,虚拟机可以只为目标应用模块分配独立的线性内存空间,不再为其他应用模块分配独立的线性内存空间,而是使得目标应用模块与其他应用模块共享目标应用模块的线性内存空间。因此,虚拟机可以通过虚拟机栈传递正确的线性内存子空间中的变量的取值。
在本说明书实施例中,虚拟机可以执行目标应用模块的应用代码对应的WebAssembly字节码,在目标应用模块调用其他应用模块的目标函数的过程中,将目标函数所需的目标应用模块的参数存放到虚拟机栈。
然后,虚拟机可以读取虚拟机栈中的参数输入给目标函数,若确定参数为线性内存子空间的偏移量,则按照线性内存子空间的偏移量,从线性内存子空间中读取与参数对应的变量的取值。
进一步的,虚拟机包含有用于并行运行应用的若干逻辑通道。
针对各个逻辑通道运行的应用,获取多个应用模块中,该逻辑通道运行的目标应用模块的应用代码对应的WebAssembly字节码。
其次,虚拟机可以根据该逻辑通道运行的目标应用模块的应用代码中的各变量的大小,计算该逻辑通道运行的目标应用模块的应用代码所需的线性内存空间的大小。
而后,虚拟机可以根据各逻辑通道的编号以及各逻辑通道运行的目标应用模块的应用代码所需的线性内存空间的大小,按照逻辑通道打开的顺序,从全局线性内存空间中为各逻辑通道运行的目标应用模块分配线性内存子空间,将各逻辑通道运行的目标应用模块的应用代码中的各变量存放到线性内存子空间。具体如图4所示。
图4是一示例性的实施例示出的一种多逻辑通道下的线性内存空间的示意图。
在图4中,逻辑通道0运行应用A中的目标应用模块A,虚拟机可以从全局线性内存空间中为逻辑通道0运行的目标应用模块A分配线性内存子空间1。逻辑通道1运行应用B中的目标应用模块B,虚拟机可以从全局线性内存空间中为逻辑通道1运行的目标应用模块B分配线性内存子空间2。以此类推,虚拟机可以为其他逻辑通道运行的目标应用模块分配线性内存子空间。
在实际应用中,线性内存空间可以为当前运行的模块存放全局变量的取值以及静态局部变量的取值。辅助栈空间可以为当前运行的函数存放局部数组元素的取值、结构体变量成员的取值。线性内存空间与辅助栈空间用于存储不同类型的变量。因此,目标应用模块调用其他应用模块的目标函数的过程中,传递的参数还可以是辅助栈空间的偏移量。
若在虚拟机栈中传递的参数为辅助栈空间的偏移量。由于,每个应用模块对应有独立的辅助栈空间,应用模块在从虚拟机栈中读取辅助栈空间的偏移量后,是基于自身的辅助栈空间确定与偏移量对应的变量的取值,这会导致应用模块间无法正确的传递辅助栈空间中的变量的取值。
基于此,虚拟机不再为目标应用模块与其他应用模块分配辅助栈空间。而是,在虚拟机调用函数时,为该函数分配辅助栈子空间,在该函数执行完成时,释放与该函数对应的辅助栈子空间。因此,虚拟机可以通过虚拟机栈传递正确的辅助栈空间中的变量的取值。
在本说明书实施例中,虚拟机可以执行目标应用模块的应用代码对应的WebAssembly字节码,在目标应用模块调用其他应用模块的目标函数的过程中,将目标函数所需的目标应用模块的参数存放到虚拟机栈。
然后,虚拟机可以读取虚拟机栈中的参数输入给目标函数,若确定参数为辅助栈子空间的偏移量,则按照辅助栈子空间的偏移量,从辅助栈子空间中读取与参数对应的变量的取值。
进一步的,虚拟机可以根据各个逻辑通道运行的目标应用模块调用的其他应用模块的目标函数中的各变量的大小,计算各个逻辑通道调用的目标函数所需的辅助栈子空间的大小。这里提到的变量可以包括:局部数组元素以及结构体成员。
然后,针对各个逻辑通道调用的目标函数,在该逻辑通道调用目标函数时,将生成的与该逻辑通道调用的目标函数对应的虚拟机栈帧压入帧栈,并根据该逻辑通道调用的目标函数所需的辅助栈子空间的大小,从辅助栈空间中为该逻辑通道调用的目标函数分配辅助栈子空间,将该逻辑通道调用的目标函数中的各变量存放到辅助栈子空间。
最后,在该逻辑通道调用目标函数结束时,销毁帧栈中的与该逻辑通道调用的目标函数对应的虚拟机栈帧,并释放与该逻辑通道调用的目标函数对应的辅助栈子空间,将与该逻辑通道调用的目标函数对应的辅助栈子空间中的各变量进行清除。具体如图5所示。
图5是一示例性的实施例示出的一种多逻辑通道下的辅助栈空间的示意图。
在图5中,逻辑通道0运行应用A中的目标应用模块A的函数,虚拟机可以从辅助栈空间中为逻辑通道0运行的目标应用模块A的函数分配辅助栈子空间1。当调用其他模块的函数或目标应用模块A的其他函数时,从辅助栈空间中为逻辑通道0的被调用的函数分配辅助栈子空间2。
当逻辑通道0上运行的应用A的目标应用模块进行任务处理时,根据任务处理期间,调用函数的顺序,辅助栈子空间被顺序使用。当函数处理结束,辅助栈子空间被释放。当整个任务处理结束,虚拟机退出,整个辅助栈空间都被释放。
一次任务处理是指,资源受限设备之外的终端设备会向资源受限设备发送任务请求,任务请求中包含有逻辑通道的编号。资源受限设备收到任务请求后,按照终端设备发送的任务请求中的逻辑通道的编号,启动该逻辑通道上的虚拟机。当虚拟机完成任务处理后,虚拟机退出,资源受限设备中的操作系统将处理结果返回给终端设备。
由于任何时刻,操作系统中只有一个虚拟机在运行。所有的逻辑通道上的任务处理可以分时段进行完成。例如,在逻辑通道0运行应用A中的目标应用模块A结束后,虚拟机退出,整个辅助栈空间都被释放。逻辑通道1运行应用B中的目标应用模块B的函数,虚拟机可以从辅助栈空间中为逻辑通道1运行的目标应用模块B的函数分配辅助栈子空间1。当调用其他模块的函数或目标应用模块B的其他函数时,从辅助栈空间中为逻辑通道1的被调用的函数分配辅助栈子空间2。
其中,虚拟机可以应用全局字段记录辅助栈空间的起始内存地址。每个逻辑通道在分配辅助栈子空间或释放辅助栈子空间后,重新确定出的辅助栈子空间的起始内存地址会被更新到全局字段。
在本说明书实施例中,虚拟机在多逻辑通道下使用线性内存空间以及辅助栈空间的过程,具体如图6所示。
图6是一示例性的实施例示出的一种多逻辑通道下的线性内存空间以及辅助栈空间的示意图。
在图6中,逻辑通道0运行应用A中的目标应用模块A,虚拟机可以从全局线性内存空间中为逻辑通道0运行的目标应用模块A分配线性内存子空间1,从辅助栈空间中的起始内存地址为逻辑通道0运行的目标应用模块A的函数分配辅助栈子空间1。
逻辑通道1运行应用B中的目标应用模块B,虚拟机可以从全局线性内存空间中,在逻辑通道0使用的线性内存空间之外,顺序为逻辑通道1运行的目标应用模块B分配线性内存子空间2。并且,在逻辑通道0运行的目标应用模块A的函数结束后,释放辅助栈子空间1,仍从辅助栈空间的起始内存地址为逻辑通道1运行的目标应用模块B的函数分配辅助栈子空间1。以此类推,为其他逻辑通道运行的目标应用模块分配线性内存子空间以及辅助栈子空间。
可以看出,每个逻辑通道运行的应用均对应有一个线性内存空间,而每个逻辑通道运行的应用调用函数时,为该函数分配一个辅助栈子空间,当该函数执行完成时,释放与该函数对应的辅助栈子空间,也就是说,各个逻辑通道运行的应用共享辅助栈空间。
在本说明书实施例中,不同的逻辑通道可能会运行同一个应用。为了避免该应用线性内存子空间出现冲突,该应用在不同的逻辑通道均会分配一个单独的线性内存子空间。具体如图7所示。
图7是一示例性的实施例示出的另一种多逻辑通道下的线性内存空间以及辅助栈空间的示意图。
在图7中,逻辑通道0运行应用A中的目标应用模块A,虚拟机可以从全局线性内存空间中为逻辑通道0运行的目标应用模块A分配线性内存子空间1,从辅助栈空间中的起始内存地址为逻辑通道0运行的目标应用模块A的函数分配辅助栈子空间1。
逻辑通道1运行应用A中的目标应用模块A,虚拟机可以从全局线性内存空间中在逻辑通道0使用的线性内存空间之外,顺序为逻辑通道1运行的目标应用模块A分配线性内存子空间2。并且,在逻辑通道0运行的目标应用模块A的函数结束后,释放辅助栈子空间1,仍从辅助栈空间的起始内存地址为逻辑通道1运行的目标应用模块A的函数分配辅助栈子空间1。
在本说明书实施例中,其他应用模块的目标函数包括:库模块的接口函数以及其他应用模块的共享服务函数。这里提到的库模块用于表示封装特定功能的模块。这里提到的共享服务函数用于表示访问其他应用模块与目标应用模块共享的数据实例的函数。这里提到的数据实例可以是指目标应用模块或其他应用模块用于存放个人化数据信息以及交易数据信息的数据或者文件。
其中,共享的数据或文件可以由其他应用模块在个人化阶段创建。在交易流程中,目标应用模块通过其他应用模块创建的共享服务函数,访问共享的数据实例。
终端设备发送给资源受限设备的任务请求可以包含打开逻辑通道、创建应用、写入个人化数据、选择应用、执行交易、认证等。资源受限设备可以在应用创建任务中完成应用的数据实例或者文件系统。其中,写入个人化数据的过程可以为应用的个人化过程。应用交易可以为钱包扣减操作等。
逻辑通道可由终端设备发送任务请求,显式的打开,也可以通过一条选择应用的任务请求,隐式的打开。任务请求中的选择应用包含了应用在哪个逻辑通道上被打开的信息。
若其他应用模块的目标函数为库模块的接口函数,在目标应用模块调用库模块的接口函数的过程中,将接口函数所需的目标应用模块的参数存放到虚拟机栈。
虚拟机可以读取虚拟机栈中的参数输入给接口函数,若确定参数为线性内存子空间的偏移量,则按照线性内存子空间的偏移量,从线性内存子空间中读取与线性内存子空间的偏移量对应的变量的取值。若确定参数为辅助栈子空间的偏移量,则按照辅助栈子空间的偏移量,从辅助栈子空间中读取与辅助栈子空间的偏移量对应的变量的取值。
需要说明的是,在目标应用模块调用库模块的接口函数的过程中,虚拟机不再为库模块分配独立的线性内存子空间。只允许定义分布在辅助栈子空间以及虚拟机栈的局部变量,不允许定义被分布在线性内存子空间的变量。
若其他应用模块的目标函数为其他应用模块的共享服务函数,在目标应用模块调用其他应用模块的共享服务函数的过程中,将共享服务函数所需的目标应用模块的参数存放到虚拟机栈。
虚拟机可以读取虚拟机栈中的参数输入给接口函数,若确定参数为线性内存子空间的偏移量,则按照线性内存子空间的偏移量,从线性内存子空间中读取与线性内存子空间的偏移量对应的变量的取值。若确定参数为辅助栈子空间的偏移量,则按照辅助栈子空间的偏移量,从辅助栈子空间中读取与辅助栈子空间的偏移量对应的变量的取值。
需要说明的是,在目标应用模块调用其他应用模块的共享服务函数的过程中,虚拟机不再为其他应用模块分配独立的线性内存子空间。只允许定义分布在辅助栈子空间以及虚拟机栈的局部变量,不允许定义被分布在线性内存子空间的变量。
并且,由于其他应用模块没有分配独立的线性内存子空间,虚拟机也就无法访问其他应用模块定义的变量。
S108:根据与所述参数对应的变量的取值,执行针对所述目标函数的函数调用。
在本说明书实施例中,虚拟机可以根据与参数对应的变量的取值,执行针对目标函数的函数调用。
从上述方法中可以看出,从全局线性内存空间中为目标应用模块分配线性内存子空间,在目标应用模块调用其他应用模块的目标函数的过程中,不再为其他应用模块分配线性内存子空间。而是,根据虚拟机栈中存放的线性内存子空间的偏移量,从线性内存子空间中读取与参数对应的变量的取值。然后,根据与参数对应的变量的取值,执行针对目标函数的函数调用。本方法可以在目标应用模块调用其他应用模块的目标函数的过程中,使得其他应用模块共享目标应用模块的线性内存子空间以及各函数共享辅助栈空间,从而,在各应用模块之间传递正确的参数,并降低内存资源的消耗。
与上述应用调用的方法的实施例对应的,本说明书还提供了一种应用调用的装置的实施例。
请参见图8,图8是一示例性的实施例示出的一种应用调用的装置所在电子设备的结构图。在硬件层面,该设备包括处理器802、内部总线804、网络接口806、内存808以及非易失性存储器810,当然还可能包括其他所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器802从非易失性存储器810中读取对应的计算机程序到内存808中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参见图9,图9是一示例性的实施例示出的一种应用调用的装置的框图。该应用调用的装置可以应用于如图8所示的电子设备中,以实现本说明书的技术方案。其中,所述应用调用的装置可以包括:
获取模块900,用于获取与所述多个应用模块中的目标应用模块的应用代码对应的WebAssembly字节码;
计算模块902,用于根据所述目标应用模块的应用代码中的各变量的大小,计算所述应用代码所需的线性内存空间的大小,并从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间,将所述目标应用模块的应用代码中的各变量存放到所述线性内存子空间;
存放模块904,用于执行所述目标应用模块的应用代码对应的WebAssembly字节码,在所述目标应用模块调用其他应用模块的目标函数的过程中,将所述目标函数所需的所述目标应用模块的参数存放到所述虚拟机栈;
读取模块906,用于读取所述虚拟机栈中的所述参数输入给所述目标函数,若确定所述参数为所述线性内存子空间的偏移量,则按照所述线性内存子空间的偏移量,从所述线性内存子空间中读取与所述参数对应的变量的取值;
执行模块908,用于根据与所述参数对应的变量的取值,执行针对所述目标函数的函数调用。
可选的,所述电子设备包括:资源受限设备。
可选的,所述内存空间还包括:辅助栈空间,所述读取模块906,具体用于根据所述目标函数中的各变量的大小,计算所述目标函数所需的辅助栈空间的大小,并从所述辅助栈空间中为所述目标函数分配辅助栈子空间,将所述目标函数中的各变量存放到辅助栈子空间,读取所述虚拟机栈中的所述参数输入给所述目标函数,若确定所述参数为所述辅助栈子空间的偏移量,则按照所述辅助栈子空间的偏移量,从所述辅助栈子空间中读取与所述参数对应的变量的取值。
可选的,所述读取模块906,具体用于确定与所述线性内存子空间对应的结束偏移量,所述结束偏移量用于表示所述线性内存子空间中的偏移量最大的变量的偏移量与所述偏移量最大的变量所占用的线性内存空间的大小之和确定出的内存地址,若与所述参数对应的偏移量不大于所述结束偏移量,则确定所述参数为所述线性内存子空间的偏移量,若与所述参数对应的偏移量大于所述结束偏移量,则确定所述参数为所述辅助栈子空间的偏移量。
可选的,所述计算模块902,具体用于按照预设的空间参数,对所述内存空间进行划分,得到全局线性内存空间以及辅助栈空间,所述空间参数包括:全局线性内存空间的起始内存地址、全局线性内存空间的大小、全局线性内存空间的结束内存地址,辅助栈空间的起始内存地址以及辅助栈空间的大小。
可选的,所述虚拟机包含有用于并行运行应用的若干逻辑通道,所述计算模块902,具体用于针对各个逻辑通道运行的应用,获取多个应用模块中,该逻辑通道运行的目标应用模块的应用代码对应的WebAssembly字节码,根据该逻辑通道运行的目标应用模块的应用代码中的各变量的大小,计算该逻辑通道运行的目标应用模块的应用代码所需的线性内存空间的大小,根据各逻辑通道的编号以及各逻辑通道运行的目标应用模块的应用代码所需的线性内存空间的大小,按照逻辑通道打开的顺序,从所述全局线性内存空间中为各逻辑通道运行的目标应用模块分配线性内存子空间,将各逻辑通道运行的目标应用模块的应用代码中的各变量存放到所述线性内存子空间。
可选的,所述虚拟机包含有用于并行运行应用的若干逻辑通道,所述计算模块902,具体用于根据各个逻辑通道运行的目标应用模块调用的其他应用模块的目标函数中的各变量的大小,计算各个逻辑通道调用的目标函数所需的辅助栈子空间的大小,针对各个逻辑通道调用的目标函数,在该逻辑通道调用目标函数时,将生成的与该逻辑通道调用的目标函数对应的虚拟机栈帧压入帧栈,并根据该逻辑通道调用的目标函数所需的辅助栈子空间的大小,从所述辅助栈空间中为该逻辑通道调用的目标函数分配辅助栈子空间,将该逻辑通道调用的目标函数中的各变量存放到辅助栈子空间,在该逻辑通道调用目标函数结束时,销毁所述帧栈中的与该逻辑通道调用的目标函数对应的虚拟机栈帧,并释放与该逻辑通道调用的目标函数对应的辅助栈子空间,将与该逻辑通道调用的目标函数对应的辅助栈子空间中的各变量进行清除。
可选的,所述其他应用模块的目标函数包括:库模块的接口函数以及其他应用模块的共享服务函数,所述库模块用于表示封装特定功能的模块,所述共享服务函数用于表示访问其他应用模块与所述目标应用模块共享的数据实例的函数。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例只是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

Claims (11)

1.一种应用调用的方法,所述应用包含多个应用模块;所述方法应用于电子设备上搭载的用于运行所述应用的虚拟机,所述虚拟机的内存空间包括为所述应用包含的多个应用模块分配的全局线性内存空间,包括:
获取与所述多个应用模块中的目标应用模块的应用代码对应的WebAssembly字节码;
根据所述目标应用模块的应用代码中的各变量的大小,计算所述应用代码所需的线性内存空间的大小,并从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间,将所述目标应用模块的应用代码中的各变量存放到所述线性内存子空间;
执行所述目标应用模块的应用代码对应的WebAssembly字节码,在所述目标应用模块调用其他应用模块的目标函数的过程中,将所述目标函数所需的所述目标应用模块的参数存放到所述虚拟机栈;
读取所述虚拟机栈中的所述参数输入给所述目标函数,若确定所述参数为所述线性内存子空间的偏移量,则按照所述线性内存子空间的偏移量,从所述线性内存子空间中读取与所述参数对应的变量的取值;
根据与所述参数对应的变量的取值,执行针对所述目标函数的函数调用。
2.如权利要求1所述的方法,所述电子设备包括:资源受限设备。
3.如权利要求1所述的方法,所述内存空间还包括:辅助栈空间;
在根据与所述参数对应的变量的取值,执行针对所述目标函数的函数调用之前,所述方法还包括:
根据所述目标函数中的各变量的大小,计算所述目标函数所需的辅助栈空间的大小,并从所述辅助栈空间中为所述目标函数分配辅助栈子空间,将所述目标函数中的各变量存放到辅助栈子空间;
读取所述虚拟机栈中的所述参数输入给所述目标函数,若确定所述参数为所述辅助栈子空间的偏移量,则按照所述辅助栈子空间的偏移量,从所述辅助栈子空间中读取与所述参数对应的变量的取值。
4.如权利要求3所述的方法,在读取与所述参数对应的变量的取值之前,包括:
确定与所述线性内存子空间对应的结束偏移量,所述结束偏移量用于表示所述线性内存子空间中的偏移量最大的变量的偏移量与所述偏移量最大的变量所占用的线性内存空间的大小之和确定出的内存地址;
确定所述参数为所述线性内存子空间的偏移量,包括:
若与所述参数对应的偏移量不大于所述结束偏移量,则确定所述参数为所述线性内存子空间的偏移量;
确定所述参数为所述辅助栈子空间的偏移量,包括:
若与所述参数对应的偏移量大于所述结束偏移量,则确定所述参数为所述辅助栈子空间的偏移量。
5.如权利要求3所述的方法,在从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间之前,所述方法还包括:
按照预设的空间参数,对所述内存空间进行划分,得到全局线性内存空间以及辅助栈空间,所述空间参数包括:全局线性内存空间的起始内存地址、全局线性内存空间的大小、全局线性内存空间的结束内存地址,辅助栈空间的起始内存地址以及辅助栈空间的大小。
6.如权利要求1所述的方法,所述虚拟机包含有用于并行运行应用的若干逻辑通道;
根据所述目标应用模块的应用代码中的各变量的大小,计算所述应用代码所需的线性内存空间的大小,并从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间,将所述目标应用模块的应用代码中的各变量存放到所述线性内存子空间,包括:
针对各个逻辑通道运行的应用,获取多个应用模块中,该逻辑通道运行的目标应用模块的应用代码对应的WebAssembly字节码;
根据该逻辑通道运行的目标应用模块的应用代码中的各变量的大小,计算该逻辑通道运行的目标应用模块的应用代码所需的线性内存空间的大小;
根据各逻辑通道的编号以及各逻辑通道运行的目标应用模块的应用代码所需的线性内存空间的大小,按照逻辑通道打开的顺序,从所述全局线性内存空间中为各逻辑通道运行的目标应用模块分配线性内存子空间,将各逻辑通道运行的目标应用模块的应用代码中的各变量存放到所述线性内存子空间。
7.如权利要求3所述的方法,所述虚拟机包含有用于并行运行应用的若干逻辑通道;
根据所述目标函数中的各变量的大小,计算所述目标函数所需的辅助栈空间的大小,并从所述辅助栈空间中为所述目标函数分配辅助栈子空间,将所述目标函数中的各变量存放到辅助栈子空间,包括:
根据各个逻辑通道运行的目标应用模块调用的其他应用模块的目标函数中的各变量的大小,计算各个逻辑通道调用的目标函数所需的辅助栈子空间的大小;
针对各个逻辑通道调用的目标函数,在该逻辑通道调用目标函数时,将生成的与该逻辑通道调用的目标函数对应的虚拟机栈帧压入帧栈,并根据该逻辑通道调用的目标函数所需的辅助栈子空间的大小,从所述辅助栈空间中为该逻辑通道调用的目标函数分配辅助栈子空间,将该逻辑通道调用的目标函数中的各变量存放到辅助栈子空间;
在该逻辑通道调用目标函数结束时,销毁所述帧栈中的与该逻辑通道调用的目标函数对应的虚拟机栈帧,并释放与该逻辑通道调用的目标函数对应的辅助栈子空间,将与该逻辑通道调用的目标函数对应的辅助栈子空间中的各变量进行清除。
8.如权利要求1所述的方法,所述其他应用模块的目标函数包括:库模块的接口函数以及其他应用模块的共享服务函数,所述库模块用于表示封装特定功能的模块,所述共享服务函数用于表示访问其他应用模块与所述目标应用模块共享的数据实例的函数。
9.一种应用调用的装置,所述应用包含多个应用模块,所述装置应用于电子设备上搭载的用于运行所述应用的虚拟机,所述虚拟机的内存空间包括为所述应用包含的多个应用模块分配的全局线性内存空间,包括:
获取模块,用于获取与所述多个应用模块中的目标应用模块的应用代码对应的WebAssembly字节码;
计算模块,用于根据所述目标应用模块的应用代码中的各变量的大小,计算所述应用代码所需的线性内存空间的大小,并从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间,将所述目标应用模块的应用代码中的各变量存放到所述线性内存子空间;
存放模块,用于执行所述目标应用模块的应用代码对应的WebAssembly字节码,在所述目标应用模块调用其他应用模块的目标函数的过程中,将所述目标函数所需的所述目标应用模块的参数存放到所述虚拟机栈;
读取模块,用于读取所述虚拟机栈中的所述参数输入给所述目标函数,若确定所述参数为所述线性内存子空间的偏移量,则按照所述线性内存子空间的偏移量,从所述线性内存子空间中读取与所述参数对应的变量的取值;
执行模块,用于根据与所述参数对应的变量的取值,执行针对所述目标函数的函数调用。
10.一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行权利要求1至8任一项所述的方法。
11.一种机器可读存储介质,所述机器可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现权利要求1至8任一项所述的方法。
CN202310962898.XA 2023-08-01 2023-08-01 一种应用调用的方法及装置 Active CN116661910B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310962898.XA CN116661910B (zh) 2023-08-01 2023-08-01 一种应用调用的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310962898.XA CN116661910B (zh) 2023-08-01 2023-08-01 一种应用调用的方法及装置

Publications (2)

Publication Number Publication Date
CN116661910A true CN116661910A (zh) 2023-08-29
CN116661910B CN116661910B (zh) 2023-09-22

Family

ID=87710417

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310962898.XA Active CN116661910B (zh) 2023-08-01 2023-08-01 一种应用调用的方法及装置

Country Status (1)

Country Link
CN (1) CN116661910B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116820785A (zh) * 2023-08-30 2023-09-29 紫光同芯微电子有限公司 用于管理内存的方法及装置、资源受限设备、存储介质
CN117707652A (zh) * 2023-12-14 2024-03-15 北京中电华大电子设计有限责任公司 数据编译、参数传递方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102467452A (zh) * 2010-11-16 2012-05-23 北京中电华大电子设计有限责任公司 一种静态存储分配的局部非静态数据的存储空间分配方法
CN111008067A (zh) * 2020-03-05 2020-04-14 支付宝(杭州)信息技术有限公司 一种在虚拟机中执行功能模块的方法和装置
CN115495087A (zh) * 2022-08-31 2022-12-20 蚂蚁区块链科技(上海)有限公司 一种区块链中实现反射机制的方法、编译方法和编译器、Wasm虚拟机
CN115495086A (zh) * 2022-08-31 2022-12-20 蚂蚁区块链科技(上海)有限公司 一种编译方法和编译器、Wasm虚拟机
US20230074090A1 (en) * 2021-09-08 2023-03-09 Sap Se Staged query compilation with common data structure

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102467452A (zh) * 2010-11-16 2012-05-23 北京中电华大电子设计有限责任公司 一种静态存储分配的局部非静态数据的存储空间分配方法
CN111008067A (zh) * 2020-03-05 2020-04-14 支付宝(杭州)信息技术有限公司 一种在虚拟机中执行功能模块的方法和装置
US20230074090A1 (en) * 2021-09-08 2023-03-09 Sap Se Staged query compilation with common data structure
CN115495087A (zh) * 2022-08-31 2022-12-20 蚂蚁区块链科技(上海)有限公司 一种区块链中实现反射机制的方法、编译方法和编译器、Wasm虚拟机
CN115495086A (zh) * 2022-08-31 2022-12-20 蚂蚁区块链科技(上海)有限公司 一种编译方法和编译器、Wasm虚拟机

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
罗雄: "面向智能合约的安全开发调试平台研究与实现", 《中国优秀硕士学位论文全文数据库(信息科技辑)》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116820785A (zh) * 2023-08-30 2023-09-29 紫光同芯微电子有限公司 用于管理内存的方法及装置、资源受限设备、存储介质
CN116820785B (zh) * 2023-08-30 2024-01-02 紫光同芯微电子有限公司 用于管理内存的方法及装置、资源受限设备、存储介质
CN117707652A (zh) * 2023-12-14 2024-03-15 北京中电华大电子设计有限责任公司 数据编译、参数传递方法及装置
CN117707652B (zh) * 2023-12-14 2024-06-11 北京中电华大电子设计有限责任公司 数据编译、参数传递方法及装置

Also Published As

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

Similar Documents

Publication Publication Date Title
CN116661910B (zh) 一种应用调用的方法及装置
US6865659B2 (en) Using short references to access program elements in a large address space
US11880298B2 (en) Allocation of memory within a data type-specific memory heap
CN102667714B (zh) 支持访问由操作系统环境外的资源提供的功能的方法和系统
JP2012164350A (ja) 携帯型データ記憶媒体のメモリ管理
EP0403124A2 (en) Overlay swapping
CN113760193B (zh) 用于资源受限制装置的数据读写方法、装置及指令集
CZ423598A3 (cs) Přenosný bezpečný transakční systém pro programovatelná inteligentní zařízení
CN116680014B (zh) 数据处理方法和装置
CN116700629B (zh) 数据处理方法和装置
CN102428472B (zh) 本地代码的安全执行
US7228532B1 (en) Method and apparatus to facilitate code verification and garbage collection in a platform-independent virtual machine
US6772171B1 (en) Method and device for creating an object in a non-persistent memory and/or keeping accessibility to said object
EP1444572B1 (en) Method and apparatus for facilitating compact object headers
Oestreicher et al. Object lifetimes in Java card
EP4020297A1 (en) Method for managing a volatile memory and java card device
WO2017142525A1 (en) Allocating a zone of a shared memory region
CN116700841B (zh) 一种原生api调用的方法及装置
US11204700B2 (en) Data storage device and non-volatile memory control method, with security extension
KR101140522B1 (ko) 객체 관리 시스템 및 방법
CN117251234B (zh) 基于补丁的函数调用方法及装置
CN116755845A (zh) 数据处理方法和装置
CN117785728A (zh) 数据处理方法和装置
CN117033064A (zh) 一种代码异常处理的方法及装置
CN116909472A (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