CN117785728A - 数据处理方法和装置 - Google Patents
数据处理方法和装置 Download PDFInfo
- Publication number
- CN117785728A CN117785728A CN202311747674.3A CN202311747674A CN117785728A CN 117785728 A CN117785728 A CN 117785728A CN 202311747674 A CN202311747674 A CN 202311747674A CN 117785728 A CN117785728 A CN 117785728A
- Authority
- CN
- China
- Prior art keywords
- data
- management information
- access
- reference information
- information
- 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.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 11
- 238000000034 method Methods 0.000 claims abstract description 36
- 230000006870 function Effects 0.000 claims description 146
- 230000015654 memory Effects 0.000 claims description 61
- 238000007726 management method Methods 0.000 description 119
- 230000008676 import Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 230000004044 response Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000002085 persistent effect Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 229910052799 carbon Inorganic materials 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- JEIPFZHSYJVQDO-UHFFFAOYSA-N iron(III) oxide Inorganic materials O=[Fe]O[Fe]=O JEIPFZHSYJVQDO-UHFFFAOYSA-N 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请一个或多个实施例提供一种数据处理方法和装置,应用于电子设备;其中,所述电子设备维护了用于存储与数据对应的管理信息的管理信息表;所述管理信息包括所述数据的存储地址;所述方法包括:基于WebAssembly应用模块创建应用实例,为所述应用实例中的数据分配存储空间,并生成与所述数据对应的管理信息,以及将所述管理信息存储到所述管理信息表中;获取与所述数据对应的引用信息,并存储所述引用信息,以基于存储的所述引用信息访问所述数据;其中,所述引用信息包括所述管理信息在所述管理信息表中的索引信息。
Description
技术领域
本申请一个或多个实施例涉及计算机技术领域,尤其涉及一种数据处理方法和装置。
背景技术
WebAssembly是一种新的编码格式,其类似于一种低级的汇编语言,但是可以提供新的性能特性和效果。WebAssembly设计的目的是为高级语言(例如:C、C++、Rust等)提供一个高效的编译目标。
模块是WebAssembly程序编译、传输和加载的单位。基于高级语言编写的程序(例如:应用程序、程序库、系统函数等)的程序代码,可以被编译成WebAssembly程序模块。WebAssembly程序模块实际上是一种以WebAssembly二进制文件的形式呈现的字节码,可以被加载到WebAssembly虚拟机中,由WebAssembly虚拟机解释成机器码并执行。WebAssembly二进制文件通常以.wasm作为文件后缀。
资源受限设备通常是指电量供应有限、计算能力有限以及存储容量有限的电子设备,包括智能卡、安全元件(Secure Element,SE)、物联网设备等。也即,资源受限设备的非易失性存储器(Non-Volatile Memory,NVM)资源有限,一般大小为几十kB至几百kB,最大为几MB;资源受限设备的随机存取存储器(Random Access Memory,RAM)资源也有限,一般为几kB至几十kB。
由于资源受限设备的NVM资源和RAM资源有限,通常不能将标准的WebAssembly技术直接应用于资源受限设备,而是需要进行相应的优化。
发明内容
本申请一个或多个实施例提供技术方案如下:
本申请提供一种数据处理方法,应用于电子设备;其中,所述电子设备维护了用于存储与数据对应的管理信息的管理信息表;所述管理信息包括所述数据的存储地址;所述方法包括:
基于WebAssembly应用模块创建应用实例,为所述应用实例中的数据分配存储空间,并生成与所述数据对应的管理信息,以及将所述管理信息存储到所述管理信息表中;
获取与所述数据对应的引用信息,并存储所述引用信息,以基于存储的所述引用信息访问所述数据;其中,所述引用信息包括所述管理信息在所述管理信息表中的索引信息。
本申请还提供一种数据处理装置,应用于电子设备;其中,所述电子设备维护了用于存储与数据对应的管理信息的管理信息表;所述管理信息包括所述数据的存储地址;所述装置包括:
第一存储模块,用于基于WebAssembly应用模块创建应用实例,为所述应用实例中的数据分配存储空间,并生成与所述数据对应的管理信息,以及将所述管理信息存储到所述管理信息表中;
第二存储模块,用于获取与所述数据对应的引用信息,并存储所述引用信息,以基于存储的所述引用信息访问所述数据;其中,所述引用信息包括所述管理信息在所述管理信息表中的索引信息。
本申请还提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述任一项所述方法的步骤。
本申请还提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述任一项所述方法的步骤。
在上述技术方案中,针对基于WebAssembly应用模块创建的应用实例,可以为该应用实例中的数据分配存储空间,并生成包含各数据的存储地址的管理信息,以及将各管理信息存储到用于存储与数据对应的管理信息的管理信息表中;并且,可以获取包含与各数据对应的管理信息在该管理信息表中的索引信息的引用信息,并存储各引用信息,以基于存储的各引用信息访问各数据。
采用上述方式,对于与WebAssembly应用模块对应的应用的数据而言,可以将与数据对应的管理信息存储在管理信息表中,并通过包含管理信息在该管理信息表中的索引信息的引用信息来访问数据,可以实现对与WebAssembly应用模块对应的应用的数据进行访问管理,从而可以提高数据的安全性。
附图说明
下面将对示例性实施例的描述中所需要使用的附图进行说明,其中:
图1是本申请一示例性实施例示出的一种数据处理方法的流程图;
图2是本申请一示例性实施例示出的一种设备的结构示意图;
图3是本申请一示例性实施例示出的一种数据处理装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或者相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请一个或多个实施例相一致的所有实施方式。相反,它们仅是与本申请一个或多个实施例的一些方面相一致的例子。
需要说明的是,在其他实施例中并不一定按照本申请示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本申请所描述的更多或者更少。此外,本申请中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本申请中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
为了便于理解,下面先对标准的WebAssembly二进制文件的数据格式进行简要说明。
WebAssembly程序模块包含其程序代码中的函数、表、内存、全局变量、导入信息、导出信息等;另外,还包含内存和表的初始化数据以及模块的入口函数。
作为WebAssembly程序模块的呈现形式的WebAssembly二进制文件一共有11种数据段,分别为类型段、导入段、函数段、表段、内存段、全局段、导出段、起始段、元素段、代码段、数据段和自定义段。其中:
(1)类型段
类型段存储模块使用到的所有函数类型。
(2)导入段和导出段
导入段存储模块所有的导入项目(例如:导入函数的函数名称、与导入函数对应的模块名称),导出段存储模块所有的导出项目(例如:导出函数的函数名称和函数索引)。多个模块可以通过导入项目和导出项目链接在一起。一个模块可以根据该模块包含的导入段中与导入函数对应的模块名称以及导入函数的函数名称,确定该模块需要调用的其他模块以及其他模块中的函数;相应地,一个模块可以对外提供该模块包含的导出段中的导出函数的函数名称,从而使其他模块可以通过将导出函数的函数名称以及该模块的模块名称(通常存储在自定义段中)添加到其他模块包含的导入段中,调用该模块中的导出函数。
(3)函数段和代码段
模块内的函数信息分开存储在函数段和代码段中。函数段存储模块内所有函数对应类型索引,代码段存储模块内所有函数的局部变量信息和字节码。函数段和代码段存储的项目数量一致,且一一对应。
(4)表段和元素段
表段存储模块内定义的所有表,元素段存储表初始化数据。
(5)内存段和数据段
内存段存储模块内定义的所有内存,数据段存储常量和内存初始化数据。
(6)全局段
全局段存储模块内定义的所有全局变量信息。
(7)起始段
起始段存储模块的入口函数索引。
(8)自定义段
自定义段存储自定义信息,包括模块名称、数据段属性等。自定义段还包含namesection字段,该字段中存储函数名、局部变量名等调试信息和第三方扩展信息。
在标准的WebAssembly技术中,资源受限设备的资源有限(例如:易失性存储空间为几kB至几十kB),WebAssembly程序模块的大小也为几kB至几十kB,如果在运行时动态加载WebAssembly程序模块到WebAssembly虚拟机的运行时数据区,由于性能限制,加载速度会特别慢,因此通常将WebAssembly程序模块下载并存储在资源受限设备的非易失性存储空间中,并在下载时进行必要的链接优化,以加快运行时WebAssembly程序模块的解析、链接的速度。在WebAssembly虚拟机运行时,读取WebAssembly程序模块的字节码,即时解释并执行。
与WebAssembly程序模块对应的应用的数据也为几K到几十K,通常在运行过程中为这些数据临时申请存储空间。
然而,并未对与WebAssembly程序模块对应的应用的数据进行访问管理,导致数据的安全性较低。
本申请提供一种针对标准的WebAssembly技术进行优化的技术方案,以实现对与WebAssembly程序模块对应的应用的数据的访问管理,提供数据的安全性。
请参考图1,图1是本申请一示例性实施例示出的一种数据处理方法。
在本实施例中,上述数据处理方法可以应用于任意一个电子设备。其中,该电子设备可以是具有存储资源(例如:NVM、RAM等)且具有一定的计算能力的设备,例如:包含一台独立的物理主机的服务器、由多台互相独立的物理主机构成的服务器集群、台式计算机、笔记本电脑、掌上电脑(PDAs,Personal Digital Assistants)等,也可以是智能卡、安全元件、物联网设备等资源受限设备。
在实际的应用中,上述电子设备上还可以搭载WebAssembly虚拟机。在由该电子设备上搭载的WebAssembly虚拟机加载WebAssembly程序模块时,具体可以由该WebAssembly虚拟机读取相应的WebAssembly二进制文件,并将该WebAssembly二进制文件解释成机器码;而在由该WebAssembly虚拟机执行WebAssembly的程序模块时,具体可以由该WebAssembly虚拟机执行对相应的WebAssembly二进制文件进行解释得到的机器码。
需要说明的是,WebAssembly虚拟机可以基于软件方式来实现,而NVM和RAM则可以是作为电子设备的组成部分的硬件。
与WebAssembly程序模块对应的应用的数据也为几K到几十K,通常在运行过程中为这些数据临时申请存储空间,如果所申请的存储空间分布在易失性存储器空间,则资源受限设备的资源较难满足应用需求;如果所申请的存储空间分布在非易失性存储空间,则会受到资源受限设备的擦写速度的影响,应用执行速度较慢。
因此,可以对WebAssembly程序模块进行预安装,创建与WebAssembly程序模块对应的应用,并将所创建的应用的数据存储到非易失性存储空间中,后续,WebAssembly虚拟机在执行WebAssembly程序模块的字节码时,可以直接读取与WebAssembly程序模块对应的应用的数据,加快应用执行速度。
上述数据处理方法可以包括以下步骤:
步骤101:基于WebAssembly应用模块创建应用实例,为所述应用实例中的数据分配存储空间,并生成与所述数据对应的管理信息,以及将所述管理信息存储到所述管理信息表中。
需要说明的是,WebAssembly程序模块可以包括WebAssembly应用模块、WebAssembly库模块。其中,WebAssembly应用模块可以是通过对基于高级语言编写的应用程序进行编译得到的WebAssembly程序模块;WebAssembly库模块可以是通过对基于高级语言编写的程序库进行编译得到的WebAssembly程序模块。该程序库中的程序可以作为系统程序,此时WebAssembly库模块可以被称为WebAssembly系统库模块,系统库模块的代码与虚拟机解释器代码(或者操作系统代码)一起编译。
基于一个WebAssembly应用模块可以创建多个应用实例,通过分别运行这多个应用实例可以实现相同的功能,但通常分别为这多个应用实例分配的易失性存储空间和非易失性存储空间不同。因此,虽然这多个应用实例是基于同一个WebAssembly应用模块创建的,但实际上是不同的应用实例。
在本实施例中,上述电子设备可以维护用于存储与数据对应的管理信息的管理信息表。其中,与数据对应的管理信息可以包括数据的存储地址(具体可以是数据的存储地址偏移,即数据的存储地址=数据所属数据类型的起始地址+数据的存储地址偏移)。
上述电子设备首先可以获取到任意一个待运行的WebAssembly应用模块。
在实际应用中,在一个例子中,上述电子设备必须将编译功能分离,由设备外的其他设备完成编译。外部设备对基于高级语言编写的程序(例如:应用程序、程序库等)的程序代码进行编译,得到WebAssembly程序模块。
在另一个例子中,上述电子设备可以接收由其他设备发送的WebAssembly程序模块,并对该程序模块进行存储。
在获取到上述WebAssembly应用模块的情况下,可以基于该WebAssembly应用模块创建应用实例;例如,可以对该WebAssembly应用模块进行预安装,创建应用实例。在创建该应用实例时,可以为该应用实例中的数据分配存储空间,其中的数据可以是临时数据、持久性数据和文件形式的数据,也可以是全局变量和局部结构类型变量,等等;并且,可以生成与该应用实例中的数据对应的管理信息,并将与数据对应的管理信息存储到上述管理信息表中。
在一些实施例中,在为所述应用实例中的数据分配存储空间,并生成与所述数据对应的管理信息,以及将所述管理信息存储到所述管理信息表中时,具体可以调用WebAssembly系统库模块中的API(Application Programming Interface,应用程序编程接口)函数(可称为第一API函数),通过执行第一API函数,为上述应用实例中的数据分配存储空间,并生成与该应用实例中的数据对应的管理信息,以及将与数据对应的管理信息存储到上述管理信息表中。
在实际应用中,上述WebAssembly系统库模块中的API函数可以属于该WebAssembly系统库模块中的导出函数。
需要说明的是,上述WebAssembly系统库模块中的上述第一API函数还可以返回所分配的存储空间的引用信息。
步骤102:获取与所述数据对应的引用信息,并存储所述引用信息,以基于存储的所述引用信息访问所述数据;其中,所述引用信息包括所述管理信息在所述管理信息表中的索引信息。
在本实施例中,在为上述应用实例中的数据分配了存储空间的情况下,可以获取与该应用实例中的数据对应的引用信息,并存储与该应用实例中的数据对应的引用信息,从而可以基于存储的与该应用实例中的数据对应的引用信息,访问该应用实例中的数据。
对于上述应用实例中的一个数据(例如:一个变量、一个文件形式的数据、一个临时性数据、一个持久性数据等)而言,与这个数据对应的引用信息可以包括与这个数据对应的管理信息在上述管理信息表中的索引信息。
在一些实施例中,如前所述,上述第一API函数可以返回所分配的存储空间的引用信息,也即,第一API函数可以返回与上述应用实例中的数据对应的引用信息。因此,在获取与该应用实例中的数据对应的引用信息时,具体可以获取第一API函数返回的与该应用实例中的数据对应的引用信息。
在一些实施例中,上述管理信息表可以包括一个总表和多个子表。其中,这个总表可以用于存储这多个子表中的各个子表的存储地址;这多个子表可以用于存储与数据对应的管理信息。
在这种情况下,对于上述应用实例中的一个数据而言,与这个数据对应的引用信息具体可以包括与这个数据对应的管理信息在其所在的子表(可称为目标子表)中的索引信息,以及目标子表的存储地址在其所在的总表中的索引信息。
在一些实施例中,上述总表还可以用于存储上述多个子表中的各个子表所包含的有效表项个数。
例如,上述总表的结构可以如表1所示:
字节偏移 | 索引 | 子表的存储地址 |
0-3字节 | 0 | 第0个子表的存储地址 |
4-7字节 | 1 | 第1个子表的存储地址 |
…… | …… | …… |
(4N)~(4N+3)字节 | N | 第N个子表的存储地址 |
表1
如表1所示,上述总表中的每个表项对应于一个子表,用于存储这个子表的存储地址。对于这个总表中与任意一个子表对应的表项而言,这个表项所占的存储空间大小可以是4字节,其中的3字节存储的是这个子表的存储地址,剩余的1字节可以根据实际需要存储这个子表的其他信息。以上述第1个子表为例,假设这个总表的存储地址为X,则这个总表中与第1个子表对应的表项的存储地址为X+4至X+7字节,其中的第X+5至X+7字节存储的是第1个子表的存储地址。
需要说明的是,字节偏移并不是上述总表中实际存储的内容,索引也可以不是上述总表中实际存储的内容。
在一些实施例中,可以在初始化Boot时,创建第0个子表,并初始化第0个子表的存储地址以及第0个子表所包含的有效表项个数;在第0个子表所包含的表项达到上限时,再创建第1个子表,并初始化第1个子表的存储地址以及第1个子表所包含的有效表项个数;在第1个子表所包含的表项达到上限时,再创建第2个子表,并初始化第2个子表的存储地址以及第2个子表所包含的有效表项个数;以此类推。
例如,上述子表的结构可以如表2所示:
字节偏移 | 索引 | 管理信息 |
0-7字节 | 0 | 与第0个数据对应的管理信息 |
8-15字节 | 1 | 与第1个数据对应的管理信息 |
…… | …… | …… |
(8N)~(8N+7)字节 | N | 与第N个数据对应的管理信息 |
表2
如表2所示,上述子表中的每个表项对应于一个数据,用于存储与这个数据对应的管理信息。对于这个子表中与任意一个数据对应的表项而言,这个表项所占的存储空间大小为8字节。以上述第1个数据为例,假设这个子表的存储地址为Y,则这个子表中与第1个数据对应的表项的存储地址为Y+8至Y+15字节。
需要说明的是,字节偏移并不是上述子表中实际存储的内容,索引也可以不是上述子表中实际存储的内容。
在一些实施例中,上述索引信息可以是编号。例如,假设如表2所示的子表为上述第1个子表,则与上述第1个数据对应的管理信息在这个子表中的索引信息为编号1,这个子表的存储地址在如表1所示的总表中的索引信息为编号1。
在实际应用中,对于一个数组型数据而言,如果要通过指针访问这个数组中的某个位置的具体内容,则需要使用指向这个数组的存储地址的指针,以及这个位置在这个数组中的访问偏移。例如,假设这个数组为字节数组(即这个数组中的一个位置占用一个字节),则这个数组中的第0个位置在这个数组中的访问偏移为0字节,这个数组中的第1个位置在这个数组中的访问偏移为1字节,以此类推。
因此,在一些实施例中,对于上述应用实例中的一个数据而言,与这个数据对应的引用信息还可以包括针对这个数据的访问偏移(例如:针对一个数组的访问偏移,即要访问的具体内容的位置在这个数组中的访问偏移)。
在一些实施例中,WebAssembly系统库模块中的某类API函数(可称为第二API函数)的输入参数可以包括上述应用实例中的一个数据和针对这个数据的访问偏移。在这种情况下,可以在上述WebAssembly虚拟机中执行该应用实例,并响应于针对第二API函数的调用指令,将与这个数据对应的引用信息和针对这个数据的访问偏移传递给第二API函数,通过基于该引用信息和该访问偏移执行第二API函数,基于该引用信息和该访问偏移针对这个数据进行访问。
进一步地,在一些实施例中,上述引用信息还可以包括句柄标识,句柄标识可以用于指示是否为与上述应用实例中的数据对应的引用信息。在这种情况下,在将上述引用信息和上述访问偏移传递给上述第二API函数,以由第二API函数基于该引用信息和该访问偏移针对上述数据进行访问时,具体可以将该引用信息和该访问偏移传递给第二API函数,以由第二API函数检查该引用信息中是否包含句柄标识,如果是,则可以进一步检查上述管理信息表中是否存储了与该引用信息中的索引信息对应的管理信息(即与这个数据对应的管理信息),如果是,则可以基于该管理信息和该访问偏移针对这个数据进行访问。
在实际应用中,对于采用C语言编写的程序的程序代码而言,可以由WebAssembly编译器对其进行编译、链接,得到WebAssembly程序模块。在采用C语言进行编程时,经常会使用指针,指针是一种变量类型,用于存储内存地址,它指向(或引用)数据的存储位置,通过使用指针,可以直接访问和操作内存中的数据,而无需复制数据本身。采用C语言编写的程序代码,经过WebAssembly编译器的编译后,其中的指针转变为针对存储空间的地址偏移。
然而,由于通常在运行过程中才为与WebAssembly程序模块对应的应用的数据临时申请存储空间,就导致WebAssembly编译器在对WebAssembly程序模块进行编译时,无法直接将其中的指针转变为针对存储空间的地址偏移。
在本申请中,WebAssembly编译器在对WebAssembly程序模块进行编译时,则可以将其中的指针(和访问偏移)转变为上述引用信息,由此可以兼容指针这种编程方式。
在一些实施例中,如前所述,上述引用信息还可以包括针对数据的访问偏移,而WebAssembly系统库模块中的某类API函数(可称为第三API函数)的输入参数则可以包括与上述应用实例中的一个数据对应的指针和针对这个数据的访问偏移。在这种情况下,可以在上述WebAssembly虚拟机中执行该应用实例,并响应于针对第三API函数的调用指令,基于与这个数据对应的指针和针对这个数据的访问偏移生成与这个数据对应的引用信息,并将该引用信息传递给第三API函数,通过基于该引用信息执行第三API函数,基于该引用信息针对这个数据进行访问。
需要说明的是,基于与上述数据对应的指针和针对这个数据的访问偏移生成与这个数据对应的引用信息,具体可以是先基于与这个数据对应的指针,确定与这个数据对应的管理信息在其所在的子表中的索引信息,以及这个子表的存储地址在其所在的总表中的索引信息,再基于这两个索引信息和和针对这个数据的访问偏移生成与这个数据对应的引用信息。
在一些实施例中,如前所述,上述引用信息还可以包括句柄标识。在这种情况下,在基于上述指针和上述访问偏移生成上述引用信息,并将该引用信息传递给上述第三API函数,以由第三API函数基于该引用信息针对上述数据进行访问时,具体可以基于该指针和该访问偏移生成该引用信息,并将该引用信息传递给第三API函数,以由第三API函数检查该引用信息中是否包含句柄标识,如果是,则可以进一步检查上述管理信息表中是否存储了与该引用信息中的索引信息对应的管理信息(即与这个数据对应的管理信息),如果是,则可以基于该管理信息和该引用信息中的访问偏移针对这个数据进行访问。
在一些实施例中,可以在上述WebAssembly虚拟机中执行上述应用实例,并响应于针对该应用实例中的一个数据的访问指令,获取该访问指令中包含的基于与这个数据对应的指针和针对这个数据的访问偏移生成的引用信息,并基于该引用信息针对这个数据进行访问。
需要说明的是,对于采用高级语言编写的应用的程序代码而言,可以由WebAssembly编译器对其进行编译、链接,得到WebAssembly应用模块。而该程序代码中使用指针(和访问偏移)直接访问或操作数据的代码,经过WebAssembly编译器的编译后,WebAssembly编译器可以为其生成load/store字节码,所生成的load/store字节码即为上述访问指令,包含基于该指针(和该访问偏移)生成的引用信息。
进一步地,在一些实施例中,在获取上述访问指令中包含的基于与上述数据对应的指针和针对这个数据的访问偏移生成的引用信息,并基于该引用信息针对这个数据进行访问时,具体可以获取该访问指令中包含的基于与这个数据对应的指针和针对这个数据的访问偏移生成的引用信息,并检查该引用信息中是否包含句柄标识,如果是,则可以进一步检查上述管理信息表中是否存储了与该引用信息中的索引信息对应的管理信息(即与这个数据对应的管理信息),如果是,则可以基于该管理信息和该引用信息中的访问偏移针对这个数据进行访问。
在一些实施例中,对于上述应用实例中的一个数据而言,与这个数据对应的管理信息还可以包括这个数据的访问控制属性。在这种情况下,在针对这个数据进行访问之前,可以先确定该管理信息中的访问控制属性与上述WebAssembly虚拟机对应的访问控制属性是否相关联,如果两者相关联,则可以针对这个数据进行访问。
在一些实施例中,对于上述应用实例中的一个数据而言,与这个数据对应的管理信息还可以包括这个数据的数据大小。在这种情况下,在针对这个数据进行访问时,具体可以先基于针对这个数据的访问偏移和该管理信息中的数据大小确定所访问的数据空间是否在这个数据的数据空间的范围内(例如:基于针对一个数组的访问偏移和与这个数组对应的管理信息中的数据大小确定所访问的位置是否为这个数组所包含的位置中的一个),如果是,则可以针对这个数据进行访问。
下面对上述访问控制属性进行详细说明。
上述电子设备首先可以获取到任意一个待运行的WebAssembly应用模块。
在获取到上述WebAssembly应用模块的情况下,可以基于该WebAssembly应用模块创建应用实例(可称为第一应用实例)。在创建该第一应用实例时,可以将该第一应用实例的应用实例标识(AID)、权限、所关联的WebAssembly应用模块的应用模块标识、应用实例所有者等信息记录到注册表中,使得后续可以利用注册表中记录的相关信息运行该第一应用实例。其中,一个应用实例的相关信息形成注册表中的一个注册表条目;注册表中不同的注册表条目可以记录不同的应用实例的相关信息。
在实际应用中,应用实例标识可以是顺序编码,例如:每个应用实例可以根据用于记录自己的相关信息的注册表条目在注册表中的顺序,获得自己的编码。或者,应用实例标识也可以是注册表条目的引用信息,例如:每个应用实例可以将用于记录自己的相关信息的注册表条目的引用信息,作为自己的应用实例标识。
此外,在创建上述第一应用实例时,可以为该第一应用实例中的数据分配存储子空间(可称为第一存储子空间),并为该第一存储子空间设置访问控制属性(可称为第一访问控制属性)。需要说明的是,该第一存储子空间与下述第二存储子空间共同作为该第一应用实例的安全存储空间(可称为第一安全存储空间)。
在一些实施例中,一个应用实例中的数据可以包括用于创建这个应用实例的WebAssembly应用模块中的临时数据、持久性数据、文件形式的数据(即被组织成文件的数据);为这个应用实例中的数据分配的安全存储空间中的存储子空间可以包括:用于存储所述临时数据的易失性临时数据存储空间、用于存储所述持久性数据的非易失性存储空间(堆)、用于存储所述文件形式的数据的非易失性存储空间(堆)。
相应地,在一些实施例中,在为上述第一应用实例中的数据分配上述第一安全存储空间中的上述第一存储子空间时,具体可以调用WebAssembly系统库模块中的API(Application Programming Interface,应用程序编程接口)函数(可称为第四API函数),通过执行该第四API函数,从作为内存的易失性存储空间中为上述临时数据分配用于存储所述临时数据的易失性临时数据存储空间,并从非易失性存储空间中为上述持久性数据分配用于存储所述持久性数据的非易失性存储空间(堆),以及从非易失性存储空间中为上述文件形式的数据分配用于存储所述文件形式的数据的非易失性存储空间(堆)。
在实际应用中,上述WebAssembly系统库模块中的API函数可以属于该WebAssembly系统库模块中的导出函数。
需要说明的是,上述WebAssembly系统库模块中的上述第四API函数还可以返回所分配的存储空间的引用信息。其中,一个存储空间的引用信息可以是这个存储空间的起始地址的相关信息;例如,一个存储空间的引用信息可以是一个大小为4字节或2字节的数值,这个数值=这个存储空间的起始地址-堆起始地址。
在实际应用中,可以将标准的WebAssembly技术中的数据分成变量和非变量,数据中的变量保持存储在线性内存和辅助栈中,而数据中的非变量则作为临时数据存储在易失性临时数据存储空间和非易失性存储空间(堆)中。
在一些实施例中,为一个应用实例的安全存储空间设置的访问控制属性可以包括这个应用实例的应用实例标识,和/或用于创建这个应用实例的WebAssembly应用模块的应用模块标识。以上述第一应用实例为例,上述第一访问控制属性可以包括该第一应用实例的应用实例标识,和/或上述WebAssembly应用模块的应用模块标识。
在实际应用中,对于一个应用实例而言,可以将这个应用实例的安全存储空间的访问控制属性,与用于记录这个应用实例的相关信息的注册表条目建立关联。相应地,这个应用实例中的每个新创建的数据/文件,都可以被设置与用于记录这个应用实例的相关信息的注册表条目关联的访问控制属性,由此保证为这个应用实例中的数据/文件设置了相同的访问控制属性。其中,应用实例中的数据/文件可以与为其设置的访问控制属性一起存放,也可以将应用实例中的数据/文件的访问控制属性存放在单独的存储空间中;如果访问控制属性被存放在单独的存储空间中,则需要将应用实例中的数据/文件与为其设置的访问控制属性建立关联,例如:可以将用于存储应用实例中的数据/文件的存储空间的起始地址存放在用于存储为其设置的访问控制属性的存储空间中。
在创建了上述第一应用实例的情况下,可以在上述WebAssembly虚拟机中执行该第一应用实例。在该WebAssembly虚拟机中开始执行该第一应用实例时,可以为该第一应用实例中的变量分配存储子空间(可称为第二存储子空间),并为该第二存储子空间设置上述第一访问控制属性,例如:可以确定与用于记录该第一应用实例的相关信息的注册表条目关联的访问控制属性为第一访问控制属性,从而可以为该第二存储子空间设置该第一访问控制属性。需要说明的是,该第二存储子空间与上述第一存储子空间共同作为上述第一安全存储空间。
在一些实施例中,一个应用实例中的变量可以包括用于创建这个应用实例的WebAssembly应用模块中的全局变量、局部结构类型变量;为这个应用实例中的变量分配的安全存储空间中的存储子空间可以包括:用于存储所述全局变量的线性内存;用于存储所述局部结构类型变量的辅助栈。其中,线性内存和辅助栈均为内存的易失性存储空间。
相应地,在一些实施例中,在为上述第一应用实例中的变量分配上述第一安全存储空间中的上述第二存储子空间时,具体可以从作为内存的易失性存储空间中为上述全局变量分配上述线性内存,并从作为内存的易失性存储空间中为上述局部结构类型变量分配上述辅助栈。
此外,在上述WebAssembly虚拟机中准备开始执行上述第一应用实例时,可以注册表中记录的该第一应用实例的相关信息,将该WebAssembly虚拟机对应的访问控制属性更新为该第一应用实例的安全存储空间的上述第一访问控制属性。
在一些实施例中,上述WebAssembly虚拟机可以包含用于并行运行应用实例的若干逻辑通道。通常,一个逻辑通道用于运行一个应用实例;在一个逻辑通道中准备开始执行一个应用实例时,可以将这个逻辑对应的访问控制属性更新为这个应用实例的安全存储空间的访问控制属性。也即,该WebAssembly虚拟机对应的访问控制属性,实际上是该WebAssembly虚拟机包含的若干逻辑通道分别对应的访问控制属性。在这种情况下,在将该WebAssembly虚拟机对应的访问控制属性更新为所述上述第一访问控制属性时,具体可以将用于运行上述第一应用实例的逻辑通道对应的访问控制属性更新为该第一访问控制属性。
需要说明的是,在上述第一应用实例运行时,与该WebAssembly虚拟机(或者该WebAssembly虚拟机包含的用于运行该第一应用实例的逻辑通道)对应的访问控制属性保持为上述第一访问控制属性。
可以在上述WebAssembly虚拟机中响应于针对任意一个安全存储空间(可称为第二安全存储空间)的访问操作,确定与该WebAssembly虚拟机(或者该WebAssembly虚拟机包含的用于运行该第一应用实例的逻辑通道)对应的上述第一访问控制属性与为该第二安全存储空间设置的访问控制属性(可称为第二访问控制属性)是否相关联。如果该第一访问控制属性与该第二访问控制属性相关联,则可以执行该访问操作,来访问该第二安全存储空间,具体可以访问该第二安全存储空间中存储的变量、数据/文件等。
实际上,在一个应用实例运行时,可能需要访问这个应用实例的安全存储空间,也可能需要访问其他应用实例的安全存储空间。下面以上述第一应用实例为例,分别对这两种可能进行描述。
(1)在上述第一应用实例运行时,访问该第一应用实例的上述第一安全存储空间
在一些实施例中,在确定上述第一访问控制属性与上述第二安全存储空间的上述第二访问控制属性是否相关联时,具体可以确定该第一访问控制属性与该第二访问控制属性是否匹配;此时,如果该第一访问控制属性与该第二访问控制属性匹配(例如:该第一访问控制属性的数值与该第二访问控制属性的数值相等),则可以认为该第二安全存储空间实际上是上述第一应用实例的上述第一安全存储空间,因此可以执行针对该第一安全存储空间(即该第二安全存储空间)的访问操作,来访问该第一安全存储空间。
需要说明的是,由于用于运行上述第一应用实例的逻辑通道对应的访问控制属性为上述第一访问控制属性,而用于运行其他应用实例的逻辑通道对应的访问控制属性则不为该第一访问控制属性,在这种可能下,就只有在用于运行该第一应用实例的逻辑通道中可以执行针对该第一应用实例的上述第一安全存储空间的访问操作,来访问该第一安全存储空间。
也即,一个应用实例通常只能访问自己的安全存储空间,而无法随意地访问其他应用实例的安全存储空间,由此实现了应用实例的独立性,从而保证了应用实例的安全性。
在实际应用中,可以通过执行load/store字节码,访问上述第一应用实例的上述第一安全存储空间中的上述第二存储子空间。而在访问上述第一应用实例的上述第一安全存储空间中的上述第一存储子空间时,则具体可以调用上述WebAssembly系统库模块中相应的API函数,通过执行该API函数,访问该第一存储子空间。
在一些实施例中,在确定上述第一访问控制属性与上述第二访问控制属性匹配的情况下,在执行针对上述第二安全存储空间的访问操作之前,可以先进一步确定该访问操作包含的访问地址是否超出该第二安全存储空间的边界,如果该访问地址未超出该第二安全存储空间的边界,则可以执行该访问操作。
进一步地,在一些实施例中,在确定上述访问操作包含的访问地址是否超出上述第二安全存储空间的边界时,由于该访问操作包含的访问地址具体可以是针对用于存储上述全局变量的上述线性内存的地址偏移,就可以基于针对该线性内存的地址偏移确定针对该线性内存的访问地址,并确定该访问地址是否超出该线性内存的边界。
并且,在一些实施例中,在确定上述访问操作包含的访问地址是否超出上述第二安全存储空间的边界时,由于该访问操作包含的访问地址具体可以是存储空间的引用信息,一个存储空间的引用信息可以是这个存储空间的地址的相关信息,可以基于该存储空间的引用信息,确定该访问操作对应的存储空间的起始地址,从而可以基于该起始地址,以及该访问操作还包含的地址偏移和数据长度,确定针对该访问操作对应的该存储空间的访问地址的范围,并确定该访问地址的范围是否超出该存储空间的边界。
(2)在上述第一应用实例运行时,访问其他应用实例的上述第二安全存储空间
需要说明的是,一个应用实例通常需要通过调用其他应用实例(以应用实例X表示)中的函数,由应用实例X中的函数来访问应用实例X的安全存储空间。也即,一个应用实例通过这类函数,向其他应用实例提供安全存储空间的共享服务,此时这类函数可以被称为共享服务函数。
在实际应用中,一个应用实例中的函数实际上是用于创建这个应用实例的WebAssembly应用模块中的函数。
WebAssembly应用模块中的共享服务函数可以属于该WebAssembly应用模块中的导出函数。WebAssembly应用模块中的共享服务函数可以由该WebAssembly应用模块声明。例如,可以在该WebAssembly应用模块的导出段中添加与一个导出函数对应的声明信息,该声明信息表示这个导出函数作为一个共享服务函数。WebAssembly应用模块中未声明为共享服务函数的其他函数不提供安全存储空间的共享服务。
在一些实施例中,在确定上述第一访问控制属性与上述第二安全存储空间的上述第二访问控制属性是否相关联时,具体可以确定针对该第二安全存储空间的上述访问操作是否满足该第一访问控制属性、该第二访问控制属性、共享许可信息的关联关系;此时,如果该访问操作满足该关联关系,则可以认为与该第二安全存储空间对应的应用实例(可称为第二应用实例)许可该第一应用实例访问该第二应用实例的该第二安全存储空间,因此可以执行针对该第二安全存储空间的访问操作,来访问该第二安全存储空间。
具体地,上述第一访问控制属性、上述第二访问控制属性、上述共享许可信息的关联关系可以表示上述第二应用实例许可上述第一应用实例访问该第二应用实例的上述第二安全存储空间中存储的被设置了共享属性的数据和变量,而该第二安全存储空间中存储的未被设置共享属性的数据和变量则不允许除该第二应用实例之外的其他应用实例访问。
相应地,在一些实施例中,对于一个应用实例而言,可以调用上述WebAssembly系统库模块中的API函数(可称为第六API函数),通过执行该第六API函数,为该应用实例的安全存储空间中存储的部分数据和部分变量设置共享属性。其中,这部分数据和这部分变量可以通过应用编程指定,也可以由系统指定,本申请对此不作限制。
在一些实施例中,如果针对上述第二安全存储空间的上述访问操作满足上述第一访问控制属性、上述第二访问控制属性、上述共享许可信息的关联关系,则可以执行该访问操作,具体可以调用该第二安全存储空间对应的上述第二应用实例中的共享服务函数,由该第二应用实例中的该共享服务函数针对该第二安全存储空间中存储的被设置了共享属性的数据和变量进行访问。
在一些实施例中,如果针对上述第二安全存储空间的上述访问操作不满足上述第一访问控制属性、上述第二访问控制属性、上述共享许可信息的关联关系,则可以调用上述WebAssembly系统库模块中的API函数(可称为第五API函数),通过执行该第五API函数,先根据应用实例标识查找到与该第二安全存储空间对应的上述第二应用实例,再查找到该第二应用实例中的用于共享许可的函数(可称为共享许可函数)时,进一步调用该第二应用实例中的该共享许可函数,通过执行该共享许可函数,许可上述第一应用实例访问该第二安全存储空间中存储的被设置了共享属性的数据和变量。
需要说明的是,如果上述WebAssembly系统库模块中的上述第五API函数未查找到上述第二应用实例,或者未查找到该第二应用实例中的上述共享许可函数,则会返回共享服务被拒绝的信息。
在实际应用中,一个应用实例中的共享许可函数可以被记录到注册表中,即可以与这个应用实例的其他相关信息一起形成注册表中一个用于记录这个应用实例的相关信息的注册表条目。或者,各个应用实例中的共享许可函数可以存储在系统的共享服务管理信息中。在这种情况下,如果上述WebAssembly系统库模块中的上述第五API函数可以在注册表或系统的共享服务管理信息中查找上述第二应用实例中的上述共享许可函数。
后续,可以由上述WebAssembly系统库模块中的上述第五API函数获取上述第二应用实例中的上述共享许可函数返回的上述共享许可信息,并获取该第五API函数返回的该共享许可信息,从而可以存储上述第一访问控制属性、上述第二访问控制属性、该共享许可信息的关联关系。
在获得了上述共享许可信息后,也可以调用上述第二安全存储空间对应的上述第二应用实例中的共享服务函数,由该第二应用实例中的该共享服务函数针对该第二安全存储空间中存储的被设置了共享属性的数据和变量进行访问。共享服务函数是由第二应用实例所在的应用模块声明在“导出段”的函数;未被声明导出的函数,不可以被其他模块调用。
也即,一个应用实例可以访问被许可了的部分应用实例的安全存储空间,但无法访问未被许可的其他应用实例的安全存储空间,由此实现了应用实例的独立性,从而保证了应用实例的安全性。
如前所述,在一些实施例中,上述WebAssembly虚拟机可以包含用于并行运行应用实例的若干逻辑通道。在这种情况下,可以将用于运行上述第一应用实例的逻辑通道对应的访问控制属性更新为上述第一访问控制属性。
相应地,在一些实施例中,表示一个应用实例(以应用实例Y表示)被另一个应用实例(以应用实例X表示)许可了访问应用实例X的安全存储空间的共享许可信息,可以存储在用于运行应用实例Y的逻辑通道中。例如,在确定上述访问操作是否满足上述第一访问控制属性、上述第二安全存储空间的上述第二访问控制属性、上述共享许可信息的关联关系时,具体可以确定用于运行上述第一应用实例的逻辑通道的管理信息是否包含该第一访问控制属性、该第二访问控制属性、该共享许可信息的关联关系;此时,如果该逻辑通道的管理信息包含该关联关系,则可以执行所述访问操作;当出现逻辑通道上的应用被弃选、有其他应用被重新选择、或者设备复位的情况,该逻辑通道上的所有上述信息都被清除。
在一些实施例中,在上述第一应用实例运行时,如前所述,与上述WebAssembly虚拟机(或者上述WebAssembly虚拟机包含的用于运行该第一应用实例的逻辑通道)对应的访问控制属性保持为上述第一访问控制属性;然而,在执行上述WebAssembly系统库模块中的某些特殊API函数时,可以将与该WebAssembly虚拟机(或者该WebAssembly虚拟机包含的用于运行该第一应用实例的逻辑通道)对应的访问控制属性由该第一访问控制属性更新为系统访问控制属性。
需要说明的是,上述系统访问控制属性为最高等级的访问控制属性。也即,当与上述WebAssembly虚拟机或一个逻辑通道对应的访问控制属性为该系统访问控制属性时,可以在该WebAssembly虚拟机或该逻辑通道中访问全部易失性存储空间和全部非易失性存储空间。
相应地,在执行完上述WebAssembly系统库模块中的任意一个API函数后,可以重新将与该WebAssembly虚拟机(或者该WebAssembly虚拟机包含的用于运行该第一应用实例的逻辑通道)对应的访问控制属性由上述系统访问控制属性更新为上述第一访问控制属性。
在一些实施例中,还可以从作为内存的易失性存储空间中分配一个未被设置访问控制属性的内存块,作为全局内存。其中,全局内存可以用于存储被所有应用实例共享的全局数据等。对于该全局内存而言,由于该全局内存未被设置访问控制属性,就可以在上述WebAssembly虚拟机中响应于针对该全局内存的访问操作,直接执行所述访问操作。
在上述技术方案中,针对基于WebAssembly应用模块创建的应用实例,可以为该应用实例中的数据分配存储空间,并生成包含各数据的存储地址的管理信息,以及将各管理信息存储到用于存储与数据对应的管理信息的管理信息表中;并且,可以获取包含与各数据对应的管理信息在该管理信息表中的索引信息的引用信息,并存储各引用信息,以基于存储的各引用信息访问各数据。
采用上述方式,对于与WebAssembly应用模块对应的应用的数据而言,可以将与数据对应的管理信息存储在管理信息表中,并通过包含管理信息在该管理信息表中的索引信息的引用信息来访问数据,可以实现对与WebAssembly应用模块对应的应用的数据进行访问管理,从而可以提高数据的安全性。
与前述数据处理方法的实施例相对应,本申请还提供了数据处理装置的实施例。
请参考图2,图2是本申请一示例性实施例示出的一种设备的结构示意图。在硬件层面,该设备包括处理器201、内部总线202、网络接口203、内存204以及非易失性存储器205,当然还可能包括所需要的其他硬件。本申请一个或多个实施例可以基于软件方式来实现,比如由处理器201从非易失性存储器205中读取对应的计算机程序到内存204中然后运行。当然,除了软件实现方式之外,本申请一个或多个实施例并不排除其他实现方式,比如逻辑器件或者软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑模块,也可以是硬件或者逻辑器件。
请参考图3,图3是本申请一示例性实施例示出的一种数据处理装置的框图。
上述数据处理装置可以应用于图2所示的设备,以实现本申请的技术方案。其中,所述电子设备维护了用于存储与数据对应的管理信息的管理信息表;所述管理信息包括所述数据的存储地址;该数据处理装置可以包括:
第一存储模块301,用于基于WebAssembly应用模块创建应用实例,为所述应用实例中的数据分配存储空间,并生成与所述数据对应的管理信息,以及将所述管理信息存储到所述管理信息表中;
第二存储模块302,用于获取与所述数据对应的引用信息,并存储所述引用信息,以基于存储的所述引用信息访问所述数据;其中,所述引用信息包括所述管理信息在所述管理信息表中的索引信息。
可选地,所述管理信息表包括一个总表和多个子表;所述总表用于存储所述多个子表的存储地址;所述子表用于存储与数据对应的管理信息;
所述引用信息包括所述管理信息在目标子表中的索引信息,以及所述目标子表的存储地址在所述总表中的索引信息。
可选地,所述为所述应用实例中的数据分配存储空间,并生成与所述数据对应的管理信息,以及将所述管理信息存储到所述管理信息表中,包括:
调用WebAssembly系统库模块中的第一API函数,由所述第一API函数为所述应用实例中的数据分配存储空间,并生成与所述数据对应的管理信息,以及将所述管理信息存储到所述管理信息表中;
所述获取与所述数据对应的引用信息,包括:
获取所述第一API函数返回的与所述数据对应的引用信息。
可选地,WebAssembly系统库模块中的第二API函数的输入参数包括所述数据和针对所述数据的访问偏移;
所述装置还包括:
第一访问模块,用于在WebAssembly虚拟机中执行所述应用实例,响应于针对所述第二API函数的调用指令,将所述引用信息和所述访问偏移传递给所述第二API函数,以由所述第二API函数基于所述引用信息和所述访问偏移针对所述数据进行访问。
可选地,所述引用信息还包括句柄标识;
所述将所述引用信息和所述访问偏移传递给所述第二API函数,以由所述第二API函数基于所述引用信息和所述访问偏移针对所述数据进行访问,包括:
将所述引用信息和所述访问偏移传递给所述第二API函数,以由所述第二API函数检查所述引用信息中是否包含句柄标识,如果是,进一步检查所述管理信息表中是否存储了与所述引用信息中的索引信息对应的管理信息,如果是,基于所述管理信息和所述访问偏移针对所述数据进行访问。
可选地,所述引用信息还包括针对所述数据的访问偏移;WebAssembly系统库模块中的第三API函数的输入参数包括与所述数据对应的指针和针对所述数据的访问偏移;
所述装置还包括:
第二访问模块,用于在WebAssembly虚拟机中执行所述应用实例,响应于针对所述第三API函数的调用指令,基于所述指针和所述访问偏移生成所述引用信息,并将所述引用信息传递给所述第三API函数,以由所述第三API函数基于所述引用信息针对所述数据进行访问。
可选地,所述引用信息还包括句柄标识;
所述基于所述指针和所述访问偏移生成所述引用信息,并将所述引用信息传递给所述第三API函数,以由所述第三API函数基于所述引用信息针对所述数据进行访问,包括:
基于所述指针和所述访问偏移生成所述引用信息,并将所述引用信息传递给所述第三API函数,以由所述第三API函数检查所述引用信息中是否包含句柄标识,如果是,进一步检查所述管理信息表中是否存储了与所述引用信息中的索引信息对应的管理信息,如果是,基于所述管理信息和所述引用信息中的访问偏移针对所述数据进行访问。
可选地,所述装置还包括:
第三访问模块,用于在WebAssembly虚拟机中执行所述应用实例,响应于针对所述数据的访问指令,获取所述访问指令中包含的基于与所述数据对应的指针和针对所述数据的访问偏移生成的引用信息,并基于所述引用信息针对所述数据进行访问。
可选地,所述获取所述访问指令中包含的基于与所述数据对应的指针和访问偏移生成的引用信息,并基于所述引用信息针对所述数据进行访问,包括:
获取所述访问指令中包含的基于与所述数据对应的指针和访问偏移生成的引用信息,并检查所述引用信息中是否包含句柄标识,如果是,进一步检查所述管理信息表中是否存储了与所述引用信息中的索引信息对应的管理信息,如果是,基于所述管理信息和所述引用信息中的访问偏移针对所述数据进行访问。
可选地,所述管理信息还包括所述数据的访问控制属性;
所述装置还包括:
确定模块,用于在针对所述数据进行访问之前,确定所述管理信息中的访问控制属性与所述WebAssembly虚拟机对应的访问控制属性是否相关联;
第四访问模块,用于如果两者相关联,针对所述数据进行访问。
可选地,所述管理信息还包括所述数据的数据大小;
所述如果两者相关联,针对所述数据进行访问,包括:
如果两者相关联,基于所述访问偏移和所述管理信息中的数据大小确定所访问的数据空间是否在所述数据的数据空间的范围内;
如果是,针对所述数据进行访问。
对于装置实施例而言,其基本对应于方法实施例,因此相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请的技术方案的目的。
上述实施例阐明的系统、装置、模块或者单元,具体可以由计算机芯片或者实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或者闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或者技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或者其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或者其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或者其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或者其他磁性存储设备或者任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确存储的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本申请特定实施例进行了描述。其他实施例在本申请的范围内。在一些情况下,在本申请中记载的动作或者步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本申请一个或多个实施例中所使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请一个或多个实施例。单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。术语“和/或”是指并包含一个或多个相关联的存储项目的任何或者所有可能组合。
在本申请一个或多个实施例中所使用的术语“一个实施例”、“一些实施例”、“示例”、“具体示例”或者“一种实施方式”等的描述意指结合该实施例所描述的具体特征或者特点包含于本申请的至少一个实施例中。对这些术语的示意性描述不必须针对相同的实施例。而且,所描述的具体特征或者特点可以在本申请一个或多个实施例中以合适的方式结合。此外,在不相互矛盾的情况下,可以将不同的实施例以及不同实施例中的具体特征或者特点进行结合。
应当理解,尽管在本申请一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或者“当……时”或者“响应于确定”。
以上所述仅为本申请一个或多个实施例的较佳实施例而已,并不用以限制本申请一个或多个实施例,凡在本申请一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请一个或多个实施例保护的范围之内。
Claims (14)
1.一种数据处理方法,应用于电子设备;其中,所述电子设备维护了用于存储与数据对应的管理信息的管理信息表;所述管理信息包括所述数据的存储地址;所述方法包括:
基于WebAssembly应用模块创建应用实例,为所述应用实例中的数据分配存储空间,并生成与所述数据对应的管理信息,以及将所述管理信息存储到所述管理信息表中;
获取与所述数据对应的引用信息,并存储所述引用信息,以基于存储的所述引用信息访问所述数据;其中,所述引用信息包括所述管理信息在所述管理信息表中的索引信息。
2.根据权利要求1所述的方法,所述管理信息表包括一个总表和多个子表;所述总表用于存储所述多个子表的存储地址;所述子表用于存储与数据对应的管理信息;
所述引用信息包括所述管理信息在目标子表中的索引信息,以及所述目标子表的存储地址在所述总表中的索引信息。
3.根据权利要求1或2所述的方法,所述为所述应用实例中的数据分配存储空间,并生成与所述数据对应的管理信息,以及将所述管理信息存储到所述管理信息表中,包括:
调用WebAssembly系统库模块中的第一API函数,由所述第一API函数为所述应用实例中的数据分配存储空间,并生成与所述数据对应的管理信息,以及将所述管理信息存储到所述管理信息表中;
所述获取与所述数据对应的引用信息,包括:
获取所述第一API函数返回的与所述数据对应的引用信息。
4.根据权利要求1所述的方法,WebAssembly系统库模块中的第二API函数的输入参数包括所述数据和针对所述数据的访问偏移;
所述方法还包括:
在WebAssembly虚拟机中执行所述应用实例,响应于针对所述第二API函数的调用指令,将所述引用信息和所述访问偏移传递给所述第二API函数,以由所述第二API函数基于所述引用信息和所述访问偏移针对所述数据进行访问。
5.根据权利要求4所述的方法,所述引用信息还包括句柄标识;
所述将所述引用信息和所述访问偏移传递给所述第二API函数,以由所述第二API函数基于所述引用信息和所述访问偏移针对所述数据进行访问,包括:
将所述引用信息和所述访问偏移传递给所述第二API函数,以由所述第二API函数检查所述引用信息中是否包含句柄标识,如果是,进一步检查所述管理信息表中是否存储了与所述引用信息中的索引信息对应的管理信息,如果是,基于所述管理信息和所述访问偏移针对所述数据进行访问。
6.根据权利要求1所述的方法,所述引用信息还包括针对所述数据的访问偏移;WebAssembly系统库模块中的第三API函数的输入参数包括与所述数据对应的指针和针对所述数据的访问偏移;
所述方法还包括:
在WebAssembly虚拟机中执行所述应用实例,响应于针对所述第三API函数的调用指令,基于所述指针和所述访问偏移生成所述引用信息,并将所述引用信息传递给所述第三API函数,以由所述第三API函数基于所述引用信息针对所述数据进行访问。
7.根据权利要求6所述的方法,所述引用信息还包括句柄标识;
所述基于所述指针和所述访问偏移生成所述引用信息,并将所述引用信息传递给所述第三API函数,以由所述第三API函数基于所述引用信息针对所述数据进行访问,包括:
基于所述指针和所述访问偏移生成所述引用信息,并将所述引用信息传递给所述第三API函数,以由所述第三API函数检查所述引用信息中是否包含句柄标识,如果是,进一步检查所述管理信息表中是否存储了与所述引用信息中的索引信息对应的管理信息,如果是,基于所述管理信息和所述引用信息中的访问偏移针对所述数据进行访问。
8.根据权利要求1所述的方法,所述方法还包括:
在WebAssembly虚拟机中执行所述应用实例,响应于针对所述数据的访问指令,获取所述访问指令中包含的基于与所述数据对应的指针和针对所述数据的访问偏移生成的引用信息,并基于所述引用信息针对所述数据进行访问。
9.根据权利要求8所述的方法,所述获取所述访问指令中包含的基于与所述数据对应的指针和访问偏移生成的引用信息,并基于所述引用信息针对所述数据进行访问,包括:
获取所述访问指令中包含的基于与所述数据对应的指针和访问偏移生成的引用信息,并检查所述引用信息中是否包含句柄标识,如果是,进一步检查所述管理信息表中是否存储了与所述引用信息中的索引信息对应的管理信息,如果是,基于所述管理信息和所述引用信息中的访问偏移针对所述数据进行访问。
10.根据权利要求5、7、9中任一项所述的方法,所述管理信息还包括所述数据的访问控制属性;
所述方法还包括:
在针对所述数据进行访问之前,确定所述管理信息中的访问控制属性与所述WebAssembly虚拟机对应的访问控制属性是否相关联;
如果两者相关联,针对所述数据进行访问。
11.根据权利要求10所述的方法,所述管理信息还包括所述数据的数据大小;
所述如果两者相关联,针对所述数据进行访问,包括:
如果两者相关联,基于所述访问偏移和所述管理信息中的数据大小确定所访问的数据空间是否在所述数据的数据空间的范围内;
如果是,针对所述数据进行访问。
12.一种数据处理装置,应用于电子设备;其中,所述电子设备维护了用于存储与数据对应的管理信息的管理信息表;所述管理信息包括所述数据的存储地址;所述装置包括:
第一存储模块,用于基于WebAssembly应用模块创建应用实例,为所述应用实例中的数据分配存储空间,并生成与所述数据对应的管理信息,以及将所述管理信息存储到所述管理信息表中;
第二存储模块,用于获取与所述数据对应的引用信息,并存储所述引用信息,以基于存储的所述引用信息访问所述数据;其中,所述引用信息包括所述管理信息在所述管理信息表中的索引信息。
13.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1至11中任一项所述的方法。
14.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1至11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311747674.3A CN117785728A (zh) | 2023-12-18 | 2023-12-18 | 数据处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311747674.3A CN117785728A (zh) | 2023-12-18 | 2023-12-18 | 数据处理方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117785728A true CN117785728A (zh) | 2024-03-29 |
Family
ID=90386159
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311747674.3A Pending CN117785728A (zh) | 2023-12-18 | 2023-12-18 | 数据处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117785728A (zh) |
-
2023
- 2023-12-18 CN CN202311747674.3A patent/CN117785728A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6799173B2 (en) | Method and apparatus for sharing code containing references to non-shared objects | |
US10089119B2 (en) | API namespace virtualization | |
CN111399990B (zh) | 解释执行智能合约指令的方法及装置 | |
CN116680015B (zh) | 函数调用方法、装置、电子设备及可读存储介质 | |
US20080034359A1 (en) | Software transactional protection of managed pointers | |
US9971703B2 (en) | Technologies for position-independent persistent memory pointers | |
US20120011512A1 (en) | Minimizing overhead in resolving operating system symbols | |
US6813762B1 (en) | Method for processing program files in a programming language capable of dynamic loading | |
CN116661910B (zh) | 一种应用调用的方法及装置 | |
US20240111669A1 (en) | Allocation of memory within a data type-specific memory heap | |
CN116680014B (zh) | 数据处理方法和装置 | |
CN116700629B (zh) | 数据处理方法和装置 | |
CN116755845B (zh) | 数据处理方法和装置 | |
CN117785728A (zh) | 数据处理方法和装置 | |
EP4020297A1 (en) | Method for managing a volatile memory and java card device | |
KR101140522B1 (ko) | 객체 관리 시스템 및 방법 | |
US7181724B2 (en) | Representation of Java® data types in virtual machines | |
CN116700841B (zh) | 一种原生api调用的方法及装置 | |
CN117251234B (zh) | 基于补丁的函数调用方法及装置 | |
US6934726B2 (en) | Storing and retrieving of field descriptors in Java computing environments | |
CN116700840B (zh) | 文件执行方法、装置、电子设备及可读存储介质 | |
CN117707652B (zh) | 数据编译、参数传递方法及装置 | |
CN116955209B (zh) | WebAssembly虚拟机的测试方法和装置 | |
CN115309405B (zh) | 一种代码链接优化方法 | |
CN117032719A (zh) | 针对TypeScript的静态编译方法及装置 |
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 |