一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

代码运行方法、装置、设备以及存储介质与流程

2022-04-13 19:48:49 来源:中国专利 TAG:


1.本公开涉及计算机技术领域,具体涉及云服务、边缘计算、人工智能、区块链等技术领域,尤其涉及代码运行方法、装置、设备以及存储介质。


背景技术:

2.代码的可停止性在区块链、云原生应用等领域有重要意义。在云计算方面,当资源消耗超出限制的情况下,需要停止有关模块的运行;当面临恶意代码的时候也需要有停止恶意代码的能力。


技术实现要素:

3.本公开提供了一种代码运行方法、装置、设备以及存储介质。
4.根据第一方面,提供了一种代码运行方法,包括:获取目标程序在运行时的第一代码;将第一代码转换为可编辑代码;基于预先设置的资源使用阈值,确定可编辑代码的停止位置;运行可编辑代码至停止位置处停止。
5.根据第二方面,提供了一种代码运行装置,包括:获取单元,被配置成获取目标程序在运行时的第一代码;转换单元,被配置成将第一代码转换为可编辑代码;确定单元,被配置成基于预先设置的资源使用阈值,确定可编辑代码的停止位置;停止单元,被配置成运行可编辑代码至停止位置处停止。
6.根据第三方面,提供了一种电子设备,包括:至少一个处理器;以及与上述至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器运行的指令,上述指令被至少一个处理器运行,以使至少一个处理器能够运行如第一方面所描述的方法。
7.根据第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,上述计算机指令用于使计算机运行如第一方面所描述的方法。
8.根据第五方面,一种计算机程序产品,包括计算机程序,上述计算机程序在被处理器运行时实现如第一方面所描述的方法。
9.根据本公开的技术可以在预计代码运行使用的资源超出资源上限时停止代码的运行,防止代码的运行所占用的资源超过资源的上限。
10.应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
11.附图用于更好地理解本方案,不构成对本公开的限定。其中:
12.图1是本公开的一个实施例可以应用于其中的示例性系统架构图;
13.图2是根据本公开的代码运行方法的一个实施例的流程图;
14.图3是根据本公开的代码运行方法的另一个实施例的流程图;
15.图4是根据本公开的代码运行方法的一个应用场景的示意图;
16.图5是根据本公开的代码运行装置的一个实施例的结构示意图;
17.图6是用来实现本公开实施例的代码运行方法的电子设备的框图。
具体实施方式
18.以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
19.需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
20.图1示出了可以应用本公开的代码运行方法或代码运行装置的实施例的示例性系统架构。
21.如图1所示,系统架构可以包括虚拟机及其执行引擎。虚拟机可以是各种虚拟机,例如java虚拟机(jvm,java virtual machine)、以太坊虚拟机(evm,ethereum virtual machine)。执行引擎可以是虚拟机中负责代码出执行的部分,如aot(ahead-of-time,预先编译)执行引擎、jit(just-in-time,实时编译)执行引擎、解释器等。
22.虚拟机是一个相对于“物理机”的概念,这两种机器都有代码运行能力,其区别是物理机的运行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的运行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与运行引擎的结构体系,能够运行那些不被硬件直接支持的指令集格式。
23.需要说明的是,本公开实施例所提供的代码运行方法一般由虚拟机运行。相应地,代码运行装置一般设置于虚拟机中。
24.应该理解,图1中的虚拟机和运行引擎的数目仅仅是示意性的。根据实现需要,可以具有任意数目的虚拟机和运行引擎。
25.继续参考图2,示出了根据本公开的代码运行方法的一个实施例的流程200。本实施例的代码运行方法,包括以下步骤:
26.步骤201,获取目标程序在运行时的第一代码。
27.本实施例中,执行主体可以首先获取目标程序在运行时的第一代码。上述目标程序可以是安装在虚拟机上的任意程序。一个程序要在一个硬件或者平台上跑,就必须要有一个中间层用来把程序语言转换为机器能听懂的机器语言。这里,机器语言可以称为第一代码。在一些具体的应用中,目标程序可以是运行引擎webassembly,webassembly(缩写为wasm)是一种使用非javascript代码,并使其在浏览器中运行的方法。这些代码可以是c、c 或rust等。它们会被编译进浏览器,在cpu上以接近原生的速度运行。这些代码的形式是二进制文件,可以直接在javascript中将它们当作模块来用。因此,第一代码可以是二进制代码或文本。第一代码可以以wasm文件或wast文件的形式存在,这两种文件都是webassembly的可读形式。
28.步骤202,将第一代码转换为可编辑代码。
29.执行主体在得到第一代码后,可以利用代码转换工具将第一代码转换为可编辑代码。这里,可编辑代码可以是c语言代码、llvm(llvm是构架编译器(compiler)的框架系统,
以c 编写而成)的ir(intermediate representation,中间表示)、抽象语法树等。上述代码转换工具可以是wabt(the webassembly binary toolkit,webassembly二进制工具包),wabt是用于webassembly的一套工具包含一系列的工具,如wat2wasm工具(从webassembly文本格式转换为webassembly二进制格式)、wasm2wat工具(与wat2wasm相反,从二进制格式转换回文本格式(也称为.wat))、wasm2c工具(从二进制格式转换为c语言格式)、wasm2js工具(从二进制格式转换为json语言格式)、wasm-objdump(显示有关wasm二进制文件的信息)。
30.步骤203,基于预先设置的资源使用阈值,确定可编辑代码的停止位置。
31.执行主体可以在可编辑代码的运行过程中,确定当前的资源使用量是否接近资源使用阈值,如果当前的资源使用量与资源使用阈值之间的差距位于预设范围内,则不再运行可编辑代码。当前位置即为可编辑代码的停止位置。或者,执行主体在运行可编辑代码前,预估可编辑代码中各指令占用的资源量。将各指令占用的资源量加和后与资源使用阈值进行比较。将加和小于并且最接近上述资源使用阈值的指令位置作为停止位置。
32.步骤204,运行可编辑代码至上述停止位置处停止。
33.在确定停止位置后,可以运行可编辑代码至上述停止位置处停止。这样,不会使得代码运行过程中使用的资源量超过资源上限。
34.本公开的上述实施例提供的代码运行方法,可以在适当条件下停止代码的运行,防止代码的运行所占用的资源超过资源的上限。
35.继续参见图3,其示出了根据本公开的代码运行方法的另一个实施例的流程300。如图3所示,本实施例的方法可以包括以下步骤:
36.步骤301,获取目标程序在运行时的第一代码。
37.步骤302,将第一代码转换为可编辑代码。
38.步骤303,确定可编辑代码的控制流图。
39.执行主体可以在确定可编辑代码后,进一步确定可编辑代码的控制流图。具体的,执行主体可以分析可编辑代码中的各指令的运行顺序,如果指令的运行顺序与指令的排列顺序不同,则说明指令间存在跳转。通过分析指令间的跳转关系,可以得到可编辑代码的控制流图。控制流图是程序的一种抽象表现,在控制流图中,每个节点是一个基本块,边表示跳转相关的指令。一个基本块是指不存在任何跳转指令的指令序列,一个基本快中的指令要么都运行,要么都不运行。
40.步骤304,基于控制流图以及预先设置的资源使用阈值,确定可编辑代码的停止位置。
41.执行主体在确定控制流图后,可以确定可编辑代码中的基本块。执行主体可以在各基本块之间的位置中确定出停止位置。具体的,执行主体可以预测各基本块所占用的资源量。并按照控制流图所连接的各基本块的顺序,依次将各资源量相加,将得到的和值与资源使用阈值进行比较,从而得到停止位置。
42.在本实施例的一些可选的实现方式中,执行主体可以通过以下步骤确定停止位置:
43.步骤3041,根据控制流图,确定可编辑代码的基本块之间的跳转指令位置。
44.执行主体可以将控制流图中,跳转的两个基本块之间的指令作为跳转指令。执行
主体可以进一步确认上述跳转指令在可编辑代码中的位置作为跳转指令位置。
45.步骤3042,在各跳转指令位置处,确定已运行的基本块占用的资源总量。
46.执行主体可以在每个跳转指令位置处,计算其之前的已运行的基本块占用的资源总量。具体的,执行主体可以通过资源统计代码,对各基本块占用的资源量进行统计,得到上述资源总量。
47.在本实施例的一些可选的实现方式中,执行主体可以通过以下步骤实现资源统计代码的注入:根据可编辑代码的类型,确定资源统计代码的注入形式;根据注入形式,在跳转指令位置处注入资源统计代码。
48.执行主体可以根据可编辑代码的类型,确定第二代码的注入形式。例如,如果可编辑代码为c代码,则第二代码的注入形式可以为c代码。如果可编辑代码的类型为llvm ir,则第二代码的注入形式可以为llvm ir的指令。如果可编辑代码的类型为抽象语法树,则第二代码的注入形式可以为抽象语法树的节点。执行主体可以通过上述注入形式将第二代码注入可编辑代码中,得到第三代码。例如,如果可编辑代码的类型为抽象语法树,则执行主体可以通过修改抽象语法树节点的方式注入第二代码。
49.步骤3043,预测未运行的基本块占用的资源量。
50.执行主体可以进一步预测各跳转指令位置之后的未运行的基本块需要占用的资源量。具体的,执行主体可以根据未运行的基本块中包括的指令,确定每条指令对应的资源占用量。将各指令的资源占用量相加,得到未运行的各基本块占用的资源量。
51.步骤3044,根据资源使用阈值、资源总量以及预测得到的资源量,确定可编辑代码的停止位置。
52.执行主体可以将步骤3042计算得到的资源总量与步骤3043计算得到的资源量相加。并将得到的和值与资源使用阈值进行比较,从而确定出停止位置。
53.在本实施例的一些可选的实现方式中,上述方法还可以包括以下步骤:在跳转指令位置处注入资源统计代码。相应地,上述步骤3042具体可以通过以下步骤来实现:根据资源统计代码,确定已运行的基本块占用的资源总量。
54.本实现方式中,执行主体可以将预先设置的资源统计代码在跳转指令位置处注入。这样,在下一基本块运行之前,可以运行上述资源统计代码,以统计已运行的基本块所占用的资源量。
55.在本实施例的一些可选的实现方式中,上述步骤3043具体可以通过以下步骤来实现:根据未运行的基本块中包括的指令以及运行与占用资源的对应关系,预测未运行的基本块占用的资源量。
56.本实现方式中,执行主体可以预先获取指令与占用资源的对应关系。上述对应关系中可以包括不同类型的指令对应的占用资源。这样,执行主体就可以在上述对应关系中查找各基本块中包括的指令,从而能够预测出各基本块占用的资源量。
57.在本实施例的一些可选的实现方式中,上述步骤3044具体可以通过以下步骤来实现:响应于确定资源总量与预测得到的资源量之和大于资源使用阈值,确定当前跳转指令位置为停止位置。
58.本实现方式中,执行主体可以将资源总量与预测得到的资源量相加,将得到的和值与资源使用阈值进行比较。如果上述和值大于资源使用阈值,说明如果运行下一基本块
则会超过资源的上限,则不能运行下一基本块,此时可以将当前跳转指令位置确定为停止位置。
59.在本实施例的一些可选的实现方式中,上述方法还可以包括以下步骤:响应于确定资源总量与预测得到的资源量之和小于或等于资源使用阈值,运行当前跳转指令位置的下一基本块。
60.本实现方式中,如果上述和值小于或等于资源使用阈值,说明如果运行下一基本块不会超过资源的上限,可以运行下一基本块。
61.步骤305,运行可编辑代码至停止位置处停止。
62.继续参见图4,其示出了根据本公开的代码运行方法的一个应用场景的示意图。在图4的应用场景中,用户源代码经语言工具链转换后,得到运行引擎webassembly的文本文件或二进制代码。上述文本文件或二进制代码经不同的语言转换工具转换后得到不同的可编辑代码(包括c代码、llvm ir、其他可修改中间表示等)。然后,确定出可编辑代码的控制流图。将资源统计代码注入到上述可编辑代码的跳转指令位置处,得到注入代码后的中间表示。将注入代码后的中间表示输入运行时中的不同模块进行运行。由于资源统计代码可以统计已运行的各基本块所占用的资源总量,也可以预测未运行的基本块占用的资源量。从而能够实现对资源占用量的控制,避免其超出资源上限。
63.本公开的上述实施例提供的代码运行方法,引入了资源预检查机制,在基本块入口处判断运行下一个基本块是否会导致资源超出限制,如果超出限制则提前终止运行,这在区块链技术领域,可以有效地确保资源限制严格不超出限制。
64.在区块链应用领域,用户在区块链网络利用外部账户通过区块链中的节点发起交易,交易既可以是普通的转账交易,也可以用于创建智能合约或调用智能合约。以用户发布智能合约为例,用户以高级语言的形式编写智能合约,智能合约需要经编译器编译为webassembly字节码,生成合约模块(也可以称为webassembly模块)。然后用户可以以交易的形式,将该合约发布到区块链网络中。每个交易均有一个gas limit(该交易的运行时使用gas的上限),当运行的资源消耗超过gas limit的时候,需要停止后续的运行并回滚交易。通过本公开的方法,可以动态的在智能合约的执行过程中注入资源统计代码,实现对可编辑代码中每个基本块的gas统计,从而能够实时地统计每个交易的gas使用量,避免了交易的gas使用量超过gas limit的情况。
65.进一步参考图5,作为对上述各图所示方法的实现,本公开提供了一种代码运行装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
66.如图5所示,本实施例的代码运行装置500包括:获取单元501、转换单元502、确定单元503和停止单元504。
67.获取单元501,被配置成获取目标程序在运行时的第一代码。
68.转换单元502,被配置成将第一代码转换为可编辑代码。
69.确定单元503,被配置成基于预先设置的资源使用阈值,确定可编辑代码的停止位置。
70.停止单元504,被配置成运行可编辑代码至停止位置处停止。
71.在本实施例的一些可选的实现方式中,确定单元503可以进一步被配置成:确定可
编辑代码的控制流图;基于控制流图以及预先设置的资源使用阈值,确定可编辑代码的停止位置。
72.在本实施例的一些可选的实现方式中,确定单元503可以进一步被配置成:根据控制流图,确定可编辑代码的基本块之间的跳转指令位置;在各跳转指令位置处,确定已运行的基本块占用的资源总量;预测未运行的基本块占用的资源量;根据资源使用阈值、资源总量以及预测得到的资源量,确定可编辑代码的停止位置。
73.在本实施例的一些可选的实现方式中,装置500还可以包括注入单元,被配置成:在跳转指令位置处注入资源统计代码。确定单元503可以进一步被配置成:根据资源统计代码,确定已运行的基本块占用的资源总量。
74.在本实施例的一些可选的实现方式中,确定单元503可以进一步被配置成:根据未运行的基本块中包括的指令以及指令与占用资源的对应关系,预测未运行的基本块占用的资源量。
75.在本实施例的一些可选的实现方式中,确定单元503可以进一步被配置成:响应于确定资源总量与预测得到的资源量之和大于资源使用阈值,确定当前跳转指令位置为运行停止位置。
76.在本实施例的一些可选的实现方式中,运行单元504可以进一步被配置成:响应于确定资源总量与预测得到的资源量之和小于或等于资源使用阈值,运行当前跳转指令位置的下一基本块。
77.在本实施例的一些可选的实现方式中,注入单元进一步被配置成:根据可编辑代码的类型,确定资源统计代码的注入形式;根据注入形式,在跳转指令位置处注入资源统计代码。
78.应当理解,代码运行装置500中记载的各单元分别与图2中描述的方法中的各个步骤相对应。由此,上文针对代码运行方法描述的操作和特征同样适用于装置500及其中包含的单元,在此不再赘述。
79.本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
80.根据本公开的实施例,本公开还提供了还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
81.图6示出了根据本公开实施例的运行代码运行方法的电子设备600的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
82.如图6所示,电子设备600包括处理器601,其可以根据存储在只读存储器(rom)602中的计算机程序或者从存储器608加载到随机访问存储器(ram)603中的计算机程序,来运行各种适当的动作和处理。在ram603中,还可存储电子设备600操作所需的各种程序和数据。处理器601、rom 602以及ram 603通过总线604彼此相连。i/o接口(输入/输出接口)605也连接至总线604。
83.电子设备600中的多个部件连接至i/o接口605,包括:输入单元606,例如键盘、鼠标等;输出单元607,例如各种类型的显示器、扬声器等;存储器608,例如磁盘、光盘等;以及通信单元609,例如网卡、调制解调器、无线通信收发机等。通信单元609允许电子设备600通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
84.处理器601可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器601的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。处理器601运行上文所描述的各个方法和处理,例如代码运行方法。例如,在一些实施例中,代码运行方法可被实现为计算机软件程序,其被有形地包含于机器可读存储介质,例如存储器608。在一些实施例中,计算机程序的部分或者全部可以经由rom 602和/或通信单元609而被载入和/或安装到电子设备600上。当计算机程序加载到ram603并由处理器601运行时,可以运行上文描述的代码运行方法的一个或多个步骤。备选地,在其他实施例中,处理器601可以通过其他任何适当的方式(例如,借助于固件)而被配置为运行代码运行方法。
85.本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上运行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
86.用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。上述程序代码可以封装成计算机程序产品。这些程序代码或计算机程序产品可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器601运行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上运行、部分地在机器上运行,作为独立软件包部分地在机器上运行且部分地在远程机器上运行或完全在远程机器或服务器上运行。
87.在本公开的上下文中,机器可读存储介质可以是有形的介质,其可以包含或存储以供指令运行系统、装置或设备使用或与指令运行系统、装置或设备结合地使用的程序。机器可读存储介质可以是机器可读信号存储介质或机器可读存储介质。机器可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学存储设备、磁存储设备、或上述内容的任何合适组合。
88.为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来
将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
89.可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
90.计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与vps服务(“virtual private server”,或简称“vps”)中,存在的管理难度大,业务扩展性弱的缺陷。服务器也可以是分布式系统的服务器,或者是结合了区块链的服务器。
91.应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地运行也可以顺序地运行也可以不同的次序运行,只要能够实现本公开的技术方案所期望的结果,本文在此不进行限制。
92.上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献