启动运行时实例的方法、运行时命名空间系统及存储介质与流程

文档序号:32306779发布日期:2022-11-23 10:15阅读:38来源:国知局
1.本技术涉及存储领域,尤其涉及一种启动运行时实例的方法、运行时命名空间系统及存储介质。
背景技术
::2.现有的沙盒(sandbox)、linuxnamespace(命名空间)和fuchsianamespace等,都或多或少的对访问资源有一定的限制,同时又依赖操作系统本身提供的应用程序编程接口(applicationprogramminginterface,api)实现,访问不够灵活。技术实现要素:3.本技术实施例提供了一种启动运行时实例的方法、运行时命名空间系统及存储介质,用于运行时实例级别命名空间,与现有进程级别的命名空间相比,能支持的使用场景更广泛,适用于一个进程运行多个运行时实例的场景。4.本技术第一方面提供一种启动运行时实例的方法,所述方法应用于运行时命名空间系统,所述运行时命名空间系统包括运行时,所述方法可以包括:5.通过所述运行时创建运行时实例级别的上下文对象,所述上下文对象包括命名空间;6.通过所述运行时获取运行的代码;7.通过所述运行时根据所述运行的代码,创建运行时实例;8.通过所述运行时使用所述上下文对象,启动所述运行时实例。9.本技术第二方面提供一种运行时命名空间系统,其特征在于,所述运行时命名空间系统包括运行时;10.所述运行时,用于创建运行时实例级别的上下文对象,所述上下文对象包括命名空间;获取运行的代码;根据所述运行的代码,创建运行时实例;使用所述上下文对象,启动所述运行时实例。11.本技术实施例又一方面提供一种计算机可读存储介质,包括指令,当其在处理器上运行时,使得处理器执行本技术第一方面所述的方法。12.本技术实施例又一方面公开一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行本技术第一方面所述的方法。13.本技术实施例又一方面公开一种应用发布平台,所述应用发布平台用于发布计算机程序产品,其中,当所述计算机程序产品在计算机上运行时,使得所述计算机执行本技术第一方面所述的方法。14.从以上技术方案可以看出,本技术实施例具有以下优点:15.在本技术实施例中,通过所述运行时创建运行时实例级别的上下文对象,所述上下文对象包括命名空间;通过所述运行时获取运行的代码;通过所述运行时根据所述运行的代码,创建运行时实例;通过所述运行时使用所述上下文对象,启动所述运行时实例。用于运行时实例级别命名空间,与现有进程级别的命名空间相比,能支持的使用场景更广泛,适用于一个进程运行多个运行时实例的场景。附图说明16.为了更清楚地说明本技术实施例技术方案,下面将对实施例和现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,还可以根据这些附图获得其它的附图。17.图1a为本技术实施例使用资源对象的系统架构图;18.图1b为本技术实施例中使用资源对象的一个流程示意图;19.图2为本技术实施例中启动运行时实例的方法的一个实施例示意图;20.图3为本技术实施例中启动运行时实例的方法的另一个实施例示意图;21.图4a为本技术实施例中关于资源抽象、管理和访问的一个系统架构图;22.图4b为本技术实施例中一个camera资源描述的一个示意图;23.图4c为本技术实施例中一个当前可用的camera资源对象的一个示意图;24.图4d为本技术实施例中资源管理的一个示意图;25.图4e为本技术实施例中资源管理的另一个示意图;26.图4f为本技术实施例中资源对象访问服务化的一个示意图;27.图4g为本技术实施例中资源对象在运行时中的组织的一个示意图;28.图4h为本技术实施例中数据目录的一个示意图;29.图4i为本技术实施例中打开服务目录的一个示意图;30.图5a为本技术实施例中运行时命名空间系统的一个示意图;31.图5b为本技术实施例中运行时命名空间系统的另一个示意图;32.图5c为本技术实施例中运行时命名空间系统的另一个示意图。具体实施方式33.本技术实施例提供了一种启动运行时实例的方法、运行时命名空间系统及存储介质,用于运行时实例级别命名空间,与现有进程级别的命名空间相比,能支持的使用场景更广泛,适用于一个进程运行多个运行时实例的场景。34.为了使本
技术领域
:的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。基于本技术中的实施例,都应当属于本技术保护的范围。35.下面先对本技术中所涉及的一些术语做一个简要的说明,如下所示:36.运行时,运行时是一段代码,它实现了编程语言执行模型的一部分。在此过程中,它允许程序与其工作所需的计算资源进行交互。运行时通常是编程语言的组成部分,不需要单独安装。(runtimeisapieceofcodethatimplementsportionsofaprogramminglanguage'sexecutionmodel.indoingthis,itallowstheprogramtointeractwiththecomputingresourcesitneedstowork.runtimesareoftenintegralpartsoftheprogramminglanguageanddon'tneedtobeinstalledseparately.)37.命名空间,命名空间(有时也称为名称范围)是一个抽象容器或环境,用于保存唯一标识符或符号(即名称)的逻辑分组。命名空间中定义的标识符仅与该命名空间相关联。同一个标识符可以在多个命名空间中独立定义。(anamespaceincomputerscience(sometimesalsocalledanamescope)isanabstractcontainerorenvironmentcreatedtoholdalogicalgroupingofuniqueidentifiersorsymbols(i.e.names).anidentifierdefinedinanamespaceisassociatedonlywiththatnamespace.thesameidentifiercanbeindependentlydefinedinmultiplenamespaces.)38.沙盒,在计算机安全中,沙盒(sandbox)是一种用于隔离正在运行程序的安全机制,通常用于执行未经测试或不受信任的程序或代码,它会为待执行的程序创建一个独立的执行环境,内部程序的执行不会影响到外部程序的运行。(incomputersecurity,asandboxisasecuritymechanismusedtoisolaterunningprograms,usuallyfortheexecutionofuntestedoruntrustedprogramsorcode.itcreatesaseparateexecutionenvironment,theexecutionofinternalprogramswillnotaffecttheoperationofexternalprograms.)39.linux,linux是最著名和最常用的开源操作系统。作为一个操作系统,linux是位于计算机上所有其他软件之下的软件,它接收来自这些程序的请求并将这些请求中继到计算机的硬件。(linuxisthebest-knownandmost-usedopensourceoperatingsystem.asanoperatingsystem,linuxissoftwarethatsitsunderneathalloftheothersoftwareonacomputer,receivingrequestsfromthoseprogramsandrelayingtheserequeststothecomputer’shardware.)40.fuchsia,fuchsia是一个简单、安全、可更新和高性能的现代开源操作系统。入门作为通用操作系统,fuchsia旨在为多样化的硬件和软件生态系统提供支持。(fuchsiaisamodernopensourceoperatingsystemthat'ssimple,secure,updatable,andperformant.getstartedasageneralpurposeoperatingsystem,fuchsiaisdesignedtopoweradiverseecosystemofhardwareandsoftware.)41.异构资源,异构资源是分布式系统在计算过程中使用到的许多不同种类的硬件和软件,它们以协作的方式协同工作以解决问题。(heterogeneousresourcesaremanydifferentkindsofhardwareandsoftwareusedinthecomputingprocessofdistributedsystems,whichworktogetherinacooperativemannertosolveproblems.)42.handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接收消息不是同步的处理。这种机制通常用来处理相对耗时比较长的操作。43.listener用于监听某个事件的发生,状态的改变。44.1、sandbox(沙盒)45.在计算机安全中,沙盒(sandbox)是一种用于隔离正在运行程序的安全机制,通常用于执行未经测试或不受信任的程序或代码。它会为待执行的程序创建一个独立的执行环境,内部程序的执行不会影响到外部程序的运行。典型的沙盒有javascriptsandbox、webassemblysandbox等。46.以下是典型的沙盒实现示意代码:[0047][0048]沙盒规定了一个程序在运行时能够访问的资源,通常包括能调用的函数(ctx.func)、能访问的变量(ctx.val)和能读写的宿主机器文件目录(ctx.dir)。[0049]可以在一个进程中创建多个沙盒。其中,在同一个进程的不同沙盒中运行的程序是相互隔离的,同样在不同进程的沙盒中运行的程序也是相互隔离的。它们之间不能够互相调用,除非在执行上下文对象(ctx)中指定可以相互调用的函数和变量。[0050]同时,沙盒机制通常不依赖于特定的操作系统。由于它是通过用户空间的纯软件方式实现的,因此不依赖底层操作系统提供的特定应用程序编程接口(applicationprogramminginterface,api)。[0051]沙盒机制为正在运行程序提供一个隔离的环境。一方面限制正在运行程序能够访问的宿主机器资源,例如文件,实现程序与宿主之间的隔离。另一方面限制两个正在运行程序相互访问,实现程序与程序之间的隔离。然而,现有的沙盒机制存在一个缺点:没有对不同的宿主资源提供统一的抽象和访问方式。不同的资源使用不同的方式访问,缺乏统一抽象。例如函数、变量和文件均需要使用不同的方式进行访问。[0052]2、linuxnamespace[0053]linuxnamespace(命名空间)是在当前运行的系统环境中创建(隔离)另一个进程的运行环境出来,并在此运行环境中将一些必要的系统全局资源进行虚拟化。进程可以运行在指定的namespace中,因此,namespace中的每个进程都认为自己拥有所有这些虚拟化的全局资源。目前,linux已经支持8种全局资源的虚拟化:[0054]cgroupnamespace:该namespace可单独管理自己的cgroup。[0055]ipcnamespace:该namespace有自己的进程间通信(inter-processcommunication,ipc),比如共享内存、信号量等。[0056]networknamespace:该namespace有自己的网络资源,包括网络协议栈、网络设备、路由表、防火墙、端口等。[0057]mountnamespace:该namespace有自己的挂载信息,即拥有独立的目录层次。[0058]pidnamespace:该namespace有自己的进程号,使得namespace中的进程pid(processidentifier,进程号)单独编号,比如可以pid=1。[0059]timenamespace:该namespace有自己的启动时间点信息和单调时间,比如可设置某个namespace的开机时间点为1年前启动,再比如不同的namespace创建后可能流逝的时间不一样。[0060]usernamespace:该namespace有自己的用户权限管理机制(比如独立的uid(useridentifier,用户号)/gid(groupidentifier,组号),使得namespace更安全。[0061]utsnamespace:该namepsace有自己的主机信息,包括主机名(hostname)、诺顿网络安全特警域名(nortoninternetsecuritydomainname,nisdomainname)。[0062]linuxnamespace作用在进程级别,即运行在一个进程中的所有代码都受到相同的限制,能够访问到相同的资源。不同的资源的访问方式遵循操作系统的api规范,例如访问网络通过套接字(socket)/send(发送)/recv(接收)等网络api,读写文件通过open(打开)/read(读)/write(写)/close(关闭)等文件操作api。[0063]linuxnamespace一方面对正在运行程序能够访问的宿主资源进行了限制,例如通过cgroupnamespace限制程序能够使用的中央处理器(centralprocessingunit,cpu)和内在配额。另一方面对两个正在运行的程序进行隔离,例如通过mountnamespace,同样的一个虚拟文件路径,可以指向两个不同的真实文件。然而,linuxnamespace存在两个缺点:[0064](1)没有对不同的宿主资源提供统一的抽象和访问方式。不同的资源使用不同的方式访问,缺乏统一抽象。例如访问网络通过socket/send/recv等网络api,读写文件通过open/read/write/close等文件操作api。[0065](2)作用在进程级别,无法为运行在同一个进程中的不同代码提供隔离环境,同时依赖操作系统本身提供的api实现,无法跨平台。[0066]3、fuchsianamespace[0067]fuchsianamespace是一个综合的层级结构,包括文件、目录、套接口、服务、设备和其它的有名对象,这些对象被其环境提供给组件使用:[0068]1)文件:包含二进制数据的对象。[0069]2)目录:包含其它对象的对象。[0070]3)套接口:打开后可建立连接的对象,类似命名管道。[0071]4)服务:打开后提供fidl(fuchsiainterfacedefinitionlanguage,fuchsia接口定义语言)服务的对象。[0072]5)设备:提供访问硬件资源的对象。[0073]对象名称由二进制8位组字符组成(字节顺序任意),受限于以下约束:[0074]1)最小长度1个字节。[0075]2)最大长度255个字节。[0076]3)不包含nuls(零值字节)。[0077]4)不包含/。[0078]5)不等于.或者..。[0079]6)总是可比较的字节等式(意味着区分字母大小写)。[0080]为了访问命名空间中的对象,必须已经拥有另外一个对象。典型的,在命名空间转移过程中,组件会在其命名空间的范围内接收到对象的通道句柄。给定一个对象的通道,可以打开其子对象的通道,方法是给其发送一条fidl消息,fidl消息内容包含表示希望打开的子对象的相对路径表达式。[0081]典型的fuchsianamespace目录结构:[0082]1)pkg/:当前程序包的内容[0083](1)bin/:包内的可执行二进制文件;[0084](2)lib/:包内的共享库;[0085](3)data/:包内的数据,如资产。[0086]2)data/:本地持久存储(可读写read-write,包私有)[0087]3)tmp/:临时存储(可读写,包私有)[0088]4)svc/:提供给组件的服务[0089](1)fuchsia.process.launcher:加载进程;[0090](2)fuchsia.logger.log:日志信息;[0091](3)vendor.topic.interface:厂商定义服务。[0092]5)dev/:设备树(按照需要对特权组件可见的部分)[0093](1)class/,…。[0094]6)hub/:内省系统[0095](1)config/:组件的配置数据。[0096]fuchsianamespace作用在进程级别,即运行在一个进程中的所有代码都受到相同的限制,能够访问到相同的资源。fuchsianamespace将不同的资源统一抽象为对象,并且统一通过fidl消息访问这些资源。[0097]fuchsianamespace同样也限制了正在运行程序能够访问的宿主资源。与此同时,它也对程序能够访问的宿主资源进行了统一的命名对象抽象,即每一个资源都是一个对象,每一个对象都一个名称,并在此基础上通过fidl提供统一的访问方式。然而,fuchsianamespace存在一个缺点:作用在进程级别,无法为运行在同一个进程中的不同代码提供隔离环境,同时依赖操作系统本身提供的api实现,无法跨平台。[0098]在本技术实施例中,可以基于命名空间(namespace)实现运行时实例级别的宿主资源限制访问,并且对异构资源提供统一的抽象、组织和访问方式。在此基础上,实现多设备融合计算。如图1a所示,为本技术实施例使用资源对象的系统架构图。如图1b所示,为本技术实施例中使用资源对象的一个流程示意图。[0099]主机应用程序(hostapp)将应用程序逻辑b(applogicb)迁移到访问设备(guestdevice)中执行,同时将用户界面对象b(userinterfaceobjectb,uiobjectb)迁移至guestdevice中显示。applogicb在运行过程需要访问hostapp的数据(data)目录。用户在uiobjectb的输入同时也会传递给applogica处理。这个示例中涉及到①计算融合,②数据融合,③外设融合。[0100]④:hostapp通过命名空间中的cpu消费者(consumer)在guestdevice中创建新的运行时实例,用来运行applogicb,并且通过cgroup/cpu,cpuacct技术限制cpu配额。[0101]⑤:hostapp通过命名空间中的memconsumer(memoryconsumer,存储器消费者)在guestdevice中为①创建的运行时实例限制内存配额,基于cgroup/memory技术。[0102]⑥:在applogica的运行时实例命名空间中增加新的输入(input)资源对象,applogica通过访问该input资源对象,与applogicb建立控制通道。[0103]⑦:利用③处的控制通道创建一个数据通道,并分别在applogica和applogicb的命名空间新增pantanal.io.inputchannel文件,表示新创建的数据通道。applogicb将userinput事件写入app-logic-a文件,即可通过新创建的数据通道传递给applogica,后者通过读取app-logic-b文件获取传递过来的用户输入(userinput)。[0104]⑧:applogicb的运行时实例命名空间的data目录是一个挂载点(mountpoint),访问该目录时,通过远程文件系统重定向到applogica中的数据目录。[0105]下面以实施例的方式,对本技术技术方案做进一步的说明,如图2所示,为本技术实施例中启动运行时实例的方法的一个实施例示意图,所述方法应用于运行时命名空间系统,所述运行时命名空间系统包括运行时,所述方法可以包括:[0106]201、通过所述运行时创建运行时实例级别的上下文对象,所述上下文对象包括命名空间。[0107]202、通过所述运行时获取运行的代码。[0108]203、通过所述运行时根据所述运行的代码,创建运行时实例。[0109]204、通过所述运行时使用所述上下文对象,启动所述运行时实例。[0110]示例性的,可以使用沙盒机制,创建运行时(runtime)实例级别的上下文对象,并且在上下文对象中初始化命名空间,以实现运行时实例级别的命名空间,如下所示:[0111][0112]在本技术实施例中,通过所述运行时创建运行时实例级别的上下文对象,所述上下文对象包括命名空间;通过所述运行时获取运行的代码;通过所述运行时根据所述运行的代码,创建运行时实例;通过所述运行时使用所述上下文对象,启动所述运行时实例。用于运行时实例级别命名空间,与现有进程级别的命名空间相比,能支持的使用场景更广泛,适用于一个进程运行多个运行时实例的场景。[0113]如图3所示,为本技术实施例中启动运行时实例的方法的另一个实施例示意图,所述方法应用于运行时命名空间系统,所述运行时命名空间系统包括运行时、资源提供者、资源管理器、资源消费者、资源服务管理器和应用,所述方法可以包括:[0114]301、通过所述运行时创建运行时实例级别的上下文对象,所述上下文对象包括命名空间。[0115]302、通过所述运行时获取运行的代码。[0116]303、通过所述运行时根据所述运行的代码,创建运行时实例。[0117]304、通过所述运行时使用所述上下文对象,启动所述运行时实例。[0118]步骤301-304参考图2所示实施例中的步骤201-204,此处不再赘述。[0119]305、通过所述资源提供者创建资源对象,添加到所述资源管理器。[0120]如图4a所示,为本技术实施例中关于资源抽象、管理和访问的一个系统架构图。示例性的,①资源提供者(resourceprovider)创建资源对象,添加到资源管理器(resourcemanger),即添加资源对象描述(addresourcedescription)。这里的资源对象可以理解为可用的资源对象。资源提供者可以包括云端资源和其他设备资源。[0121]306、通过所述资源管理器,将所述资源对象根据资源类型分发给对应的资源控制器。[0122]示例性的,②资源管理器(resourcemanager)根据资源类型,将资源对象(resource)分发(dispatch)给对应的资源控制器(resourcecontroller)处理。[0123]307、通过所述资源控制器,解析所述资源对象,启动对应的资源消费者。[0124]示例性的,③资源控制器(resourcecontroller)解析所述资源对象,启动对应的资源消费者(resourceconsumer),即启动服务(startservice)。[0125]308、通过所述资源消费者,将所述资源消费者注册到所述资源服务管理器中。[0126]示例性的,④资源消费者(resourceconsumer)将自己注册到资源服务管理器(resourceservicemanager)中,即添加服务(addservice)。[0127]309、通过所述应用,使用所述运行时从所述资源服务管理器获取资源消费者接口;使用所述资源消费者接口与资源提供者建立控制通道;使用所述控制通道创建数据通道;使用所述数据通道访问所述资源提供者创建的资源对象。[0128]示例性的,⑤应用通过运行时从资源服务管理器(resourceservicemanager)获取资源消费者(resourceconsumer)接口(interface),即获取服务(getservice);⑥应用通过resourceconsumer与云端资源(resourceprovider)建立(dedicated)控制通道(controlchannel);⑦应用通过resourceconsumer与其它设备资源(resourceprovider)建立(dedicated)控制通道;⑧应用通过控制通道创建专用数据通道(datachannel)直接访问远程(云端和其它设备)资源。[0129]1、对资源抽象进行说明,如下所示:[0130]可选的,所述方法应用于异构资源,对所述异构资源用资源抽象表征,所述资源抽象包括资源描述和资源对象;[0131]所述资源描述包括版本、类型、元数据和规格;[0132]所述资源对象包括版本、类型、元数据、规格和状态。[0133]可以理解的是,资源抽象由资源描述与资源对象两部分组成。[0134]一个资源描述代表一个资源类型,支持标准资源类型(如cpu、内存、存储、麦克风(mic)、显示(display)、相机(camera)、鼠标(mouse)、键盘(keyboard)等)和自定义资源类型。一个资源描述分为版本(version)、类型(kind)、元数据(metadata)和规格(spec)四部分,每一部分都由一系列的key:value值组成。[0135]如图4b所示,为本技术实施例中一个camera资源描述的一个示意图。[0136]在图4b所示中,一个camera资源描述如下所示:[0137]版本(version):1.0[0138]类型(kind):resourcedefinition(资源定义)[0139]元数据(metadata):[0140]namespace(命名空间):“default(默认)”[0141]name(名称):cameras.pantanal.io[0142]creationtime(创建时间):“2022-03-31t02:56:25z”[0143]规格(spec):[0144]names(名称):[0145]kind(类型):camera[0146]plural(复数):cameras[0147]singular(单数):camera[0148]一个资源对象代表一个当前可用的资源,分为版本、类型、元数据、规格和状态五部分,每一部分都由一系列的key:value值组成。其中,状态可以动态更新。[0149]如图4c所示,为本技术实施例中一个当前可用的camera资源对象的一个示意图。在图4c所示中,一个当前可用的camera资源对象如下所示:[0150]版本(version):1.0[0151]类型(kind):camera(相机)[0152]元数据(metadata):[0153]namespace(命名空间):“default(默认)”[0154]name(名称):“remote-camera(遥控相机)”[0155]creationtime(创建时间):“2022-03-31t02:56:25z”[0156]规格(spec):[0157]vendor(品牌):“sony(索尼)”[0158]model(型号):“imx179”[0159]resolution(分辨率):“1980×1024”[0160]interface(接口):“pantanal.resource.camera”[0161]状态(status):[0162]enabled:true[0163]used:false[0164]2、对资源管理进行说明,如下所示:[0165]可选的,每个资源控制器处理一种资源类型;所述方法还可以包括:在所述资源控制器在初始化的情况下,向所述资源管理器注册对应的资源描述;在所述资源控制器在停止运行的情况下,向所述资源管理器注销对应的资源描述。[0166]可选的,所述资源控制器在初始化时,向所述资源管理器注册对应的资源描述之后,所述方法还可以包括:通过所述资源管理器向所述资源控制器分发资源事件。[0167]可选的,所述资源事件包括添加资源对象事件、更新资源对象事件和删除资源对象事件。[0168]可选的,所述资源控制器包括监听者和处理者;所述方法还可以包括:[0169]通过所述监听者监听所述资源管理器分发的资源事件,并将监听到的资源事件放在事件队列中;[0170]通过所述处理者检查所述事件队列,使用添加事件函数处理添加资源对象事件,使用更新事件函数处理更新资源对象事件,使用删除事件函数处理删除资源对象事件。[0171]示例性的,如图4d所示,为本技术实施例中资源管理的一个示意图。在图4d所示中,①和②分别为:resourcecontroller采用模块化设计,每一个resourcecontroller处理一种资源类型。resourcecontroller在初始化时,需要向resourcemanager注册一个资源描述,表示它能处理的资源类型。resourcecontroller停止运行时,也可以称为结束时,向resourcemanager注销相应的资源描述。通过这种方式,除了支持标准资源,也支持自定义资源扩展。[0172]示例性的,如图4e所示,为本技术实施例中资源管理的另一个示意图。在图4e所示中,③、④和⑤分别为:resourcecontroller向resourcemanager注册资源描述后,后者就可以向前者分发资源事件。分为添加、更新和删除资源对象三种事件。resourcecontroller内部包含一个监听者(listener)和一个处理者(handler)。listener负责监听resourcemanager分发的资源事件,并且会放在一个事件队列(eventqueue)中。handler通过syncloop检查事件队列(eventqueue),分别通过添加事件(addfunc)函数、更新事件(updatefunc)函数和删除事件(delfunc)函数处理资源对象添加、更新和删除事件。⑥为:resourcemanager提供获取(get)接口,供其它模块查询当前可用的资源对象。[0173]3、对资源对象访问服务化进行说明,如下所示:[0174]可选的,所述方法还可以包括:通过所述资源控制器,使用添加事件函数启动相应的第一资源消费者,通过所述第一资源消费者,将所述第一资源消费者注册到所述资源服务管理器中;使用更新事件函数更新所述资源对象的状态,并通知相应的资源消费者;使用删除事件函数停止运行相应的第二资源消费者,通过所述第二资源消费者,将所述第二资源消费者从所述资源服务管理器中注销。[0175]可选的,所述资源服务管理器中维护有服务列表,所述服务列表包括每个注册的资源消费者的名称和代理,所述代理用于与注册的资源消费者进行交互。[0176]可选的,所述名称包括所述资源对象实现的接口名称。[0177]示例性的,如图4f所示,为本技术实施例中资源对象访问服务化的一个示意图。①resourcecontroller在addfunc中启动相应的resourceconsumer,后者将自己注册到resourceservicemanager中。[0178]②resourcecontroller在updatefunc中更新资源对象的状态,并且通知相应的resourceconsumer。[0179]③resourcecontroller在delfunc中停止相应的resourceconsumer,后者将自己从resourceservicemanager中注销。[0180]④resourceservicemanager内部维护一个服务列表(servicetable),每一个注册进来的resouceconsumer由名称和代理组成。其中,名称由《interface》/《name》组成,通过代理(proxy)可以与resourceconsumer进行交互。《interface》表示资源对象实现的接口,《name》表示资源对象名称(具有唯一性)。[0181]如表1所示,为resourceservicemanager内部维护一个服务列表的示例,如下所示:[0182]《interface》/《name》接口/资源对象名称handler处理者pantanal.resource.camera/remote-camera-1《《proxy》》pantanal.resource.camera/remote-camera-2《《proxy》》pantanal.resource.audio/remote-audio《《proxy》》[0183]表1[0184]4、对资源对象在运行时中的组织进行说明,如下所示:[0185]可选的,每个应用都运行在一个运行时实例中;每个运行时实例包括一个命名空间,在运行时实例启动时创建,在运行过程中动态调整。[0186]可选的,所述命名空间以文件树结构存在。[0187]可选的,所述命名空间下的数据目录,表示应用访问的存储;所述命名空间下的服务目录,表示应用访问的资源对象。[0188]可选的,相同类型的资源对象位于同一个父目录中,文件名为对应资源对象的名称;父目录名称为资源对象实现的接口名称。[0189]示例性的,如图4g所示,为本技术实施例中资源对象在运行时中的组织的一个示意图。①和②:每一个应用①都运行在一个运行时实例②中,例如webassembly运行时。[0190]③:每一个运行时实例都有一个命名空间,类似linux和fuchsia的namespace。在运行时实例启动时创建,并且可以在运行过程中动态调整。命名空间以文件树结构存在。[0191]④:命名空间下的数据(data)目录,表示应用可以访问的存储。可以是一个挂载点(mountpoint),指向远程设备的目录。例如,云端存储目录,或者另外一个设备的目录。[0192]⑤:命令空间下的服务(svc)目录,表示应用可以访问的资源对象,它们是从resourceservicemanager中获取的代理,打开相应的文件即可获取这些代理。应用能访问的资源对象在应用描述中声明,且经过用户同意。相同类型的资源对象位于同一个父目录中,文件名为资源对象的名称。父目录名称为资源对象实现的接口名称。当存在多个相同类型的资源对象时,不同的资源对象存放在以整数或小数命名的子目录中。例如:整数可以从0或1开始,数值越小,表示该资源对当前运行的应用来说,越优先使用;或者,数值越大,表示该资源对当前运行的应用来说,越优先使用。这是由资源智能分配根据用户意图来决策的。[0193]可选的,所述数据目录为真实文件系统的目录,包括本地文件系统目录或远程文件系统目录中的至少一项;[0194]所述服务目录指向fuse文件系统目录,所述fuse文件系统目录中的文件与资源服务管理器中的资源对象一一映射。[0195]示例性的,如图4h所示,为本技术实施例中数据目录的一个示意图。命名空间中的“/data”目录一个真实文件系统的目录。它可以是一个本地文件系统目录,也可以是一个远程文件系统目录,以及融合了本地文件系统和远程文件系统的overlayfs文件系统目录。[0196]命名空间中的“/svc”指向一个fuse文件系统目录。该fuse文件系统目录中的文件与resourceservicemanager中的资源对象进行一一映射。[0197]可选的,所述运行时命名空间系统还包括运行时管理器;所述方法还可以包括:[0198]通过所述应用,使用所述运行时管理器提供的打开函数打开服务目录下的文件时,通过fush进入到所述运行时管理器;[0199]通过所述运行时管理器,在资源服务管理器中的服务列表中检查是否存在被所述应用调用的资源接口;如果存在,构造一个文件对象,向所述应用返回文件描述符fd;如果不存在,向所述应用返回enoent错误。[0200]示例性的,如图4i所示,为本技术实施例中打开服务目录的一个示意图。打开/svc目录下的文件的流程:[0201]应用命名空间下的/svc目录由runtimemanager中的namespacefs文件系统提供,这是一个fuse文件系统。[0202]①应用透过libc提供的open函数打开/svc目录下的文件时,最终通过fuse进入到namespacefs。[0203]②namespacefs把要打开的文件名当作接口名称,在resourceservicemanager的servicetable中检查是否存在能被应用调用的资源接口。如果存在,则构造一个文件对象,并且返回其文件描述符fd,代表要访问的资源接口的代理对象《《proxy》》。如果不存在,返回enoent错误。[0204]③namespacefs返回文件描述符fd或者enoent给应用。[0205]在传统的沙盒实现中,没有对异构资源提供统一的描述和访问方法;传统的命名空间实现在进程级别,没有对运行时提供实例级别的支持,并且依赖特定的操作系统接口,无法做到跨平台支持。本技术技术方案实现了运行时级别的命名空间,并且通过统一的资源抽象描述,以及通过命名空间和namespacefs文件系统对它们进行组织,为异构资源的访问提供了一致的方式,简化了异构资源的管理。[0206]在本技术实施例中,通过所述运行时创建运行时实例级别的上下文对象,所述上下文对象包括命名空间;通过所述运行时获取运行的代码;通过所述运行时根据所述运行的代码,创建运行时实例;通过所述运行时使用所述上下文对象,启动所述运行时实例。用于运行时实例级别命名空间,与现有进程级别的命名空间相比,能支持的使用场景更广泛,适用于一个进程运行多个运行时实例的场景。运行时实例级别的命名空间,与进程级别的命名空间相比,不依赖于操作系统的特定机制,能实现跨平台支持,例如同时支持android、linux、windows和macos等平台。通过资源描述抽象,即版本、类型、元数据、规格和状态,对运行在不同平台上的资源,如cpu、内存、存储、mic、display、camera、mouse、keyboard等,实现异构资源的统一抽象,以及支持扩展自定义资源。通过命名空间和文件抽象,实现异构资源的统一组织,以及简化异构资源的访问方式。[0207]如图5a所示,为本技术实施例中运行时命名空间系统的一个示意图,运行时501命名空间系统包括运行时501;[0208]运行时501,用于创建运行时实例级别的上下文对象,所述上下文对象包括命名空间;获取运行的代码;根据所述运行的代码,创建运行时实例;使用所述上下文对象,启动所述运行时实例。[0209]可选的,如图5b所示,为本技术实施例中运行时命名空间系统的另一个示意图;所述运行时命名空间系统还包括资源提供者502、资源管理器503、资源控制器504、资源消费者505、资源服务管理器506和应用507;[0210]资源提供者502,用于创建资源对象,添加到资源管理器503;[0211]资源管理器503,用于将所述资源对象根据资源类型分发给对应的资源控制器504;[0212]资源控制器504,用于解析所述资源对象,启动对应的资源消费者;[0213]资源消费者505,用于将资源消费者505注册到资源服务管理器506中;[0214]应用507,用于使用运行时501从资源服务管理器506获取资源消费者接口;使用所述资源消费者接口与资源提供者502建立控制通道;使用所述控制通道创建数据通道;使用所述数据通道访问资源提供者502创建的资源对象。[0215]可选的,所述方法应用于异构资源,对所述异构资源用资源抽象表征,所述资源抽象包括资源描述和资源对象;[0216]所述资源描述包括版本、类型、元数据和规格;[0217]所述资源对象包括版本、类型、元数据、规格和状态。[0218]可选的,每个资源控制器504处理一种资源类型;[0219]资源控制器504,用于在资源控制器504在初始化的情况下,向资源管理器503注册对应的资源描述;在资源控制器504在停止运行的情况下,向资源管理器503注销对应的资源描述。[0220]可选的,资源控制器504在初始化时,向资源管理器503注册对应的资源描述之后,[0221]资源管理器503,用于向资源控制器504分发资源事件。[0222]可选的,所述资源事件包括添加资源对象事件、更新资源对象事件和删除资源对象事件。[0223]可选的,资源控制器504包括监听者和处理者;[0224]所述监听者,用于监听资源管理器503分发的资源事件,并将监听到的资源事件放在事件队列中;[0225]所述处理者,用于检查所述事件队列,使用添加事件函数处理添加资源对象事件,使用更新事件函数处理更新资源对象事件,使用删除事件函数处理删除资源对象事件。[0226]可选的,资源控制器504,用于使用添加事件函数启动相应的第一资源消费者,通过所述第一资源消费者,将所述第一资源消费者注册到资源服务管理器506中;使用更新事件函数更新所述资源对象的状态,并通知相应的资源消费者;使用删除事件函数停止运行相应的第二资源消费者,通过所述第二资源消费者,将所述第二资源消费者从资源服务管理器506中注销。[0227]可选的,资源服务管理器506中维护有服务列表,所述服务列表包括每个注册的资源消费者的名称和代理,所述代理用于与注册的资源消费者进行交互。[0228]可选的,所述名称包括所述资源对象实现的接口名称。[0229]可选的,每个应用507都运行在一个运行时实例中;每个运行时实例包括一个命名空间,在运行时实例启动时创建,在运行过程中动态调整。[0230]可选的,所述命名空间以文件树结构存在。[0231]可选的,所述命名空间下的数据目录,表示应用507访问的存储;[0232]所述命名空间下的服务目录,表示应用507访问的资源对象。[0233]可选的,相同类型的资源对象位于同一个父目录中,文件名为对应资源对象的名称;父目录名称为资源对象实现的接口名称。[0234]可选的,所述数据目录为真实文件系统的目录,包括本地文件系统目录或远程文件系统目录中的至少一项;[0235]所述服务目录指向fuse文件系统目录,所述fuse文件系统目录中的文件与资源服务管理器506中的资源对象一一映射。[0236]可选的,如图5c所示,为本技术实施例中运行时命名空间系统的另一个示意图;所述运行时命名空间系统还包括运行时管理器508;[0237]应用507,用于使用运行时管理器508提供的打开函数打开服务目录下的文件时,通过fush进入到运行时管理器508;[0238]运行时管理器508,用于在资源服务管理器506中的服务列表中检查是否存在被应用507调用的资源接口;如果存在,构造一个文件对象,向应用507返回文件描述符fd;如果不存在,向所述应用返回enoent错误。[0239]在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘(solidstatedisk,ssd))等。[0240]所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。[0241]在本技术所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。[0242]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。[0243]另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。[0244]所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。[0245]以上所述,以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1