CN105144085B - 针对存储设备的软件框架 - Google Patents
针对存储设备的软件框架 Download PDFInfo
- Publication number
- CN105144085B CN105144085B CN201480021510.5A CN201480021510A CN105144085B CN 105144085 B CN105144085 B CN 105144085B CN 201480021510 A CN201480021510 A CN 201480021510A CN 105144085 B CN105144085 B CN 105144085B
- Authority
- CN
- China
- Prior art keywords
- software module
- frame
- bundle
- embedded device
- program code
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- 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/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
-
- 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/445—Program loading or initiating
- G06F9/44536—Selecting among different versions
- G06F9/44542—Retargetable
-
- 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/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明的实施例涉及用于针对嵌入式系统的跨平台框架的方法和系统。一个实施例提供针对网络附加存储或其他存储设备的框架。所述框架提供诸如插件之类的软件模块的标准化结构,以在所述嵌入式系统上实现各种特征。另外,所述框架支持以诸如C、C++之类的本地代码和诸如Java之类的解释型代码编写的软件模块之间的互操作性。
Description
背景技术
在嵌入式的并因此资源受限的设备上进行更新以添加新的功能以及进行错误修正变得越来越必要。典型地,诸如网络附加存储(NAS)之类的存储设备被构建为专用计算机或设备。一般地,这样的设备使用低功耗硬件并且具有诸如LINUX之类的嵌入式操作系统,这样的设备被配置为专门作为存储设备。
如今,由于存储设备逐渐增加的复杂度,存储设备现在运行软件来实现它们的各种特征并且管理它们与其他设备的交互。不幸的是,针对每个存储设备的软件都是自定义构建的并且与操作系统集成在单个的包中。这种形式的软件开发是困难的并且经常导致错误等。
附图说明
现在将参考以下附图来描述体现本发明的各种特征的系统和方法,在附图中:
图1示出了已被配置为网络附加存储系统以示出本发明的实施例的实施方式的示例性数据存储设备。
图1A示出了根据本发明的实施例的框架的示例性部署。
图2示出了根据本发明的实施例的框架的示例性架构。
图3示出了根据本发明的实施例的框架的示例性结构单元。
图4示出了示例性包。
图5示出了清单(manifest)及其头部的示例性结构。
图6示出了由一个实施例的框架所使用的示例性解析器。
图7示出了由本发明的一个实施例所使用的示例性服务对象。
图8示出了由一个实施例中的框架所使用的示例性服务观察器。
图9示出了一个实施例中的框架的示例性状态图。
图10示出了在一个实施例的框架中使用的示例性解析器。
图11示出了示例性捆绑包(bundle)状态图。
图12示出了在一个实施例的框架中使用的示例性服务对象。
图13示出了示例性服务观察器对象。
具体实施方式
当前在嵌入式设备中使用的软件架构,使得开发者和供应商难以写出以一致的方式与其他应用(例如,运行于该存储设备上的应用)交互的应用。以不同语言来编写应用以及更新程序代码,对开发者和供应商来说也是困难的。因此,期望的是,提供一种针对嵌入式设备特别是存储设备的不同的架构。
实施例涉及用于针对嵌入式系统的跨平台框架的方法和系统。该框架实现了能够被实施在各种平台上的插件架构,所述各种平台包括诸如存储设备之类的嵌入式设备。该框架使得能够以模块化方式创建针对应用的部件,这些部件能够被聚集在一起并且能够整体地或部分地递增升级。一个实施例提供了针对网络附加存储或其他存储设备的框架。该框架为软件的模块(例如,插件)提供标准化的结构以在嵌入式系统上实施各种特征。在一些实施例中,该框架基于本地代码,所述本地代码被编译以用于运行嵌入式设备,并因此能够实质上支持编写针对该框架的应用和插件所使用的任何编程语言。此外,该框架支持以任一本地代码(例如,C++)编写的软件模块与各种客户端之间的互操作性。在一些实施例中,该框架可以支持以解释型代码编写的应用和插件,例如Java客户端及插件。
该框架提供抽象层并使得在诸如存储设备之类的嵌入式设备上运行的代码模块化、可配置。因此,各种嵌入式设备产品能够配置有不同的特征。在一些实施例中,框架还对供应哪些插件进行修改。
由框架所提供的一致的编程模型帮助捆绑包(bundle)开发者处理在很多不同维度中的可扩展性问题。框架可以在各种设备上运行,这些设备的不同的硬件特性可能影响服务实现的多个方面。由框架所提供的一致接口能够保证框架所支持的软件部件能够被混合和匹配并且仍然带来稳定的系统。
例如,框架允许捆绑包(bundle)通过框架服务注册表而在运行时选择可用的实现方式。捆绑包可以注册新的服务、接收关于服务状态的通知、或查找适合于设备的当前能力的已有服务。框架的这个方面使得安装的捆绑包在部署之后是可扩展的:即,可以安装新的捆绑包以添加特征或者可以修改和更新已有的捆绑包而不需要重新启动系统。
在一个实施例中,使用诸如C++之类的本地程序代码来实现框架。框架的本地实现方式提供了若干优点。可以利用标准的机制来实现模块的动态加载。当模块被加载时,可以对模块之间的依赖性进行解析。框架还可以提供关于能力和存储器需求的显著优势。一些实施例使用开放的标准和本地二进制代码的执行并且能够在任何标准POSIX系统上运行。
实施例使得能够基于共享的目标文件在运行时动态加载代码并且控制代码模块(例如,导入/导出包)的可见性。框架提供加载相同包的不同版本的机制,并且如果期望,框架支持面向对象的代码以及诸如Java归档文件格式(JAR)之类的不同的文件格式来对捆绑包(bundle)进行封装和部署。在一些实施例中,框架允许在运行时更新捆绑包。
此外,实施例提供了生命周期层(例如,解析/启动/停止/更新)、服务层(即,服务、服务监听器、过滤器)的功能,并且支持参与软件定义的存储的各种设备。
在一个实施例中,本发明的框架提供了一种异步的、事件驱动的、消息传递的框架,该框架实现了适合于跨平台和产品线使用的插件架构。该框架使得能够创建沿着软件工厂线开发的部件,所述软件工厂生产被设计为聚集成产品的软件部分,以及升级到现有产品和现有产品的未来版本。
现在将对本发明的某些实施例进行描述。这些实施例仅以示例的形式给出,而并不是想要限制本发明的范围。事实上,本文所描述的新颖的方法和系统可以以各种其他方式实现。此外,可以对本文所描述的方法和系统的形式进行各种省略、替换和改变而不偏离本发明的精神。为了对实施例中的一些进行说明,现在将参考附图。
图1示出了实施例可以在其中实现的系统100。出于说明的目的,示例性的框架被示出为在网络附加存储(NAS)上实施。然而,那些本领域的技术人员将会意识到,任何类型的嵌入式设备或能够运行框架的设备均在本发明的原理之内。
如所示出的,系统100可以包括客户端或主机设备102、网络104、以及存储设备106。存储设备106可以被实施为具有多个存储介质108的NAS设备。现在将对这些部件进行进一步的描述。
主机设备102指的是用于访问由存储设备106共享的文件的任何计算设备。例如,主机设备102可以是个人计算机、膝上型计算机、平板计算机、移动电话等。这样的设备对那些本领域技术人员而言是公知的。
网络104提供用于在主机设备102和存储设备106之间通信的通信设施。网络104可以包括各种部件和网络元件,例如,路由器、交换机、集线器等。
网络104可以支持各种通信协议,例如,以太网、互联网协议等。此外,网络104可以被实施为有线网络或无线网络或其组合。
存储设备106指的是能够提供或共享对文件的访问的任何数据存储设备。存储设备106可以被实施为硬盘驱动器、固态驱动器、混合驱动器、直接附加存储设备等。
在本公开中,以示例的方式,存储设备106被实施为NAS设备。作为NAS设备,存储设备106提供文件级访问并且通过网络104与主机设备102共享文件。存储设备106可以使用已知的硬件、固件和软件来实现。例如,作为NAS设备,存储设备106可以被实施为被配置为通过网络104来存储和供应文件的专用计算机或设备。在一些实施例中,存储设备106包括处理器,例如,ARM、PowerPC、或MIPS处理器。
存储介质108指的是存储设备106在其上存储数据的介质。例如,存储介质108可以包括磁盘或磁性介质、固态存储器、光学介质等。如所示出,出于容量和冗余的目的,存储设备106可以包括多个存储介质108。例如,作为NAS设备,存储设备106可以支持各种RAID级别。
控制器110表示控制存储设备的操作的硬件和软件。在一些实施例中,控制器110还可以包括用来补充其操作的一个或多个其他部件,例如,片上RAID控制器、存储器或磁盘缓存等。如下文将要进一步描述的,控制器110可以执行操作系统112以及框架114。
操作系统112表示由控制器110执行的软件以管理硬件资源以及向在存储设备106上运行的应用提供诸如网络服务之类的各种服务。控制器110可以支持各种操作系统,例如,那些本领域技术人员已知的UNIX、LINUX、Windows等。例如,在一个实施例中,控制器110可以基于操作系统运行,所述操作系统例如是Plan 9、UNIX、LINUX等。
此外,在一个实施例中,存储设备106包括为软件的模块(例如,插件)提供标准化结构的框架114,以在存储设备106上实现各种特征。在一些实施例中,该框架可以利用诸如C++之类的本地代码来实现,并且因此能够虚拟地支持任何编程语言。此外,该框架支持以任一本地代码(例如,C++)编写的软件模块与以解释型代码(例如,Java)编写的软件模块之间的互操作性。例如,在一个实施例中,Java运行时环境(“JRE”)可以被安装在存储设备106上并且在框架114上执行以支持基于Java的软件和插件。
实施例提供了能够在任何标准的POSIX兼容的操作系统(例如,LINUX)上运行的框架114。实施例使用共享对象来提供软件模块化。例如,每个包(即,C++命名空间)可以由采用可执行和链接格式或者可执行可链接格式(“ELF”)的共享对象文件来表示。这允许利用dlopen和ELF机制在运行时实现在捆绑包之间对包的动态导入和导出。在一些实施例中,框架114可以支持其他类型的文件格式,例如,通用对象文件格式(“COFF”)、Win32、对象模块格式(“OMF”)等。
捆绑包可以被实施为ZIP归档,其包括标准化清单和表示包的共享对象文件。在清单中没有任何导入的情况下,不同捆绑包的共享对象可以是彼此隔离的。
为了建立共享对象之间的可见性,框架114的运行时系统在根据指定的导入对可用的包进行解析后,向所述共享对象文件添加ELF依赖性。因此,在一些实施例中,代码共享功能是由高度成熟的标准ELF机制提供的。
此外,框架114的实施例提供生命周期层功能(例如,捆绑包的启动、更新、和停止)。例如,框架114可以利用服务注册表来实现服务层,服务注册表包括对RFC1960兼容过滤器的支持。最后,实施例通过提供框架、捆绑包以及服务监听器来支持事件和监听器的概念。
在一个实施例中,框架114采用消息传递接口。例如,框架114可以采用BOOST.MPI库。BOOST.MPI可以充当消息传递接口(MPI)的包装。BOOST.MPI是用于在高能力并行应用中的消息传递的库。BOOST.MPI程序是能够或者经由发送和接收单独的消息(点到点通信)或者通过作为一个组协调(聚合通信)来进行通信的一个或多个进程。与线程环境中的通信或使用共享存储器库的通信不同,BOOST.MPI进程能够遍布可能具有不同操作系统和底层架构的很多不同的机器。
BOOST.MPI是到标准消息传递接口(MPI)的C++友好的接口,用于高能力、分布式计算的最常用的库接口。MPI定义了从C、Fortran和C++可用的库接口,针对C、Fortran和C++有很多MPI实现方式。
BOOST.MPI库提供了到MPI的可替代的C++接口,其更好地支持现代C++开发风格,包括完全支持用户定义的数据类型和C++标准库类型、用于聚合算法的任意函数对象、以及使用现代C++库技术来维持最大效率。
在一个实施例中,BOOST.MPI被配置为支持MPI 1.1中的功能。BOOST.MPI中的抽象允许对底层C MPI库的调用。
例如,在一个实施例中,BOOST.MPI用于支持:
通信器:BOOST.MPI支持对MPI通信器的创建、解构、复制和拆分,以及对进程组的操作。
点对点通信:BOOST.MPI利用阻塞(blocking)和非阻塞(non-blocking)接口,支持利用发送和接收操作对原始的数据类型和用户定义的数据类型的点对点通信。
聚合通信:BOOST.MPI支持聚合操作,例如,对内建数据类型和用户定义的数据类型以及函数对象二者进行约减和聚集。
MPI数据类型:BOOST.MPI可以使用例如BOOST序列化库来针对用户定义的类型建立MPI数据类型。
将结构与内容分离:BOOST.MPI可以传送复杂数据结构(列表、图等)的形状(或“骨架”)并且然后独立地传送它们的内容。这种设施对大的、静态数据结构中的数据需要被多次传输的情况进行了优化。
在实施例中,可以或者通过BOOST.MPI的本地C++绑定,或者通过诸如Python接口之类的可替代物来访问BOOST.MPI。在另一实施例中,框架114可以利用通信协议,诸如由Plan 9操作系统提供的9P。
框架114提供通用的、安全的、以及托管(managed)的框架,该框架支持对被称为捆绑包(bundle)的可扩展和可下载的应用的部署。框架114以动态和可扩展的方式来管理捆绑包的安装和更新。为了实现这一点,框架114对捆绑包和服务之间的依赖性进行详细地管理。框架114为捆绑包开发者提供利用平台独立性和动态代码加载能力所必要的资源,以便于容易地开发针对能够被大规模地部署的小型存储器设备的服务。
在一个实施例中,框架114使得存储设备106能够支持和实施软件定义的存储。特别地,框架114提供了平台和通信协议,通过该平台存储设备106可以将它的存储容量虚拟化,通过该通信协议独立地或与其他存储设备(未示出)合作地在存储设备106上建立虚拟化的存储。例如,框架114可以充当在存储设备106上运行的平台以递送块和文件存储服务。在一个实施例中,框架114为存储设备106的底层硬件提供抽象层。此外,框架114可以为各种存储管理函数提供一个或多个API,所述存储管理函数例如卷管理(volumemanagement)、存储配置(storage provisioning)服务、RAID配置等。
图1A示出了框架114的示例性部署实现方式。框架114使用捆绑包(bundle)来部署一个或多个服务。捆绑包包括库、资源,并且另外包括描述捆绑包的内容的清单文件。在C中,库仅包含由源编译出的对象。在先前技术中,添加资源和清单是不可能的。因此,在实施例中,使用zip文件,库和资源被打包在zip文件中。
图2示出了框架114的示例性架构。如所示出,框架114可以包括以下层:捆绑包(bundle)层200、执行环境层202、模块层204、生命周期层206、服务层208、以及安全层210。现在,将对框架114的这些部件进行进一步地描述。
捆绑包层200中的捆绑包为请求框架114的各种服务的插件以及其他插件提供程序代码。在实施例中,框架114定义模块化的单元,称作捆绑包。捆绑包包括二进制文件和其他资源,二进制文件和其他资源一起能够向终端用户提供功能。捆绑包能够以明确定义的方式共享捆绑包能力和捆绑包需求。因此,在框架114中,捆绑包是用于部署应用的实体。
如所提到的,捆绑包(bundle)可以被部署为ZIP文件。ZIP文件被用于以标准的基于ZIP的文件格式来存储应用以及它们的资源。捆绑包是包括提供某种功能所必须的资源的ZIP文件。这些资源可以是HTML文件、帮助文件、图标等。
捆绑包(bundle)还可以包括描述ZIP文件的内容并且提供关于捆绑包的信息的清单文件(manifest file)。该文件使用头部(header)来指定信息,框架114使用该信息来正确地激活捆绑包。例如,清单文件声明对在捆绑包能够运行之前必须对捆绑包可用的其他资源的依赖性。
一旦捆绑包被启动,它的功能就被提供并且服务被导出到安装在框架114中的其他捆绑包。捆绑包可以包括确定捆绑包如何执行的各种部件。例如,捆绑包激活策略规定一旦捆绑包被启动,框架应该如何激活捆绑包。在以下后续描述中对可能的头部的一些实施例进行描述。捆绑包激活器(bundle-activator)头部指定用于启动和停止该捆绑包的类的名称。捆绑包头部可以保持类别名(category name)的逗号分隔的列表。
另一个头部定义包括类和资源的捆绑包内的ZIP文件路径名或目录的逗号分隔的列表。版本(version)头部定义捆绑包已经根据序列化版本被发布。本地代码(nativecode)头部包括对包含在该捆绑包中的本地代码库的说明。
符号名称(symbolic name)头部指定该捆绑包的非本地化(non-localizable)的名称。捆绑包的符号名称与版本一起标识唯一的捆绑包,但在框架中该捆绑包能够被多次安装。
更新(update)头部指定URL,在该URL该捆绑包的更新是可获取的,例如,以ZIP文件的形式。动态导入包(dynamic import-package)头部包括在需要时应该被动态地导入的包名称的逗号分隔的列表。
导出包(export-package)头部包括对被导出的包的声明。需求捆绑包(require-bundle)头部指定来自另一捆绑包的所有被导出的包都必须被导入,有效地请求另一捆绑包的公共接口。需求能力(require-capability)头部指定捆绑包需要其他捆绑包来提供能力。
在一个实施例中,执行环境层202建立用于运行捆绑包200的执行环境。
在一个实施例中,模块层204定义模块化模型。模块层204可以具有针对捆绑包间共享或对其他捆绑包隐藏包的严格规则。在模块层204中,由于捆绑包依赖于一个或多个外部实体。捆绑包能够需求其他捆绑包、执行环境、特定的窗口系统、DLL或共享库、扩展器(extender)、特定外围设备等。一旦捆绑包启动,则假定这些依赖性被满足。捆绑包能够经由对由运行时环境或其他捆绑包所提供的能力的需求来表达它们的外部依赖性。例如,BOOST提供易于使用的接口(诸如MPI 1.1)并且提供使用任何版本的能力。
能力(capability)是在特定命名空间中的属性集合,而需求(requirement)是过滤器表达式(filter expression),该过滤器表达式断言它们相对应的命名空间的能力的属性。当存在与过滤器相匹配的至少一个能力时,需求被满足。命名空间还提供将需求与能力相匹配的语义。在捆绑包(bundle)的需求被满足时,捆绑包(bundle)可以仅提供它们的能力,即,需求是可传递的。
在一个实施例中,生命周期层206向捆绑包(例如,捆绑包层200中的捆绑包)提供生命周期接口,例如,应用程序接口(API)。该API为捆绑包提供运行时模型。它定义捆绑包如何被启动和停止以及捆绑包如何被安装、更新和卸载。此外,它提供全面的事件API以允许管理捆绑包来控制服务平台的操作。
在一个实施例中,服务层208为捆绑包开发者提供动态、简洁和一致的编程模型,通过将服务规范所使用的API从其实现中解耦(de-coupling)来简化对服务捆绑包的开发和部署。实施例可以支持任何种类的服务,包括网络服务、网络应用服务器、网络服务器等。该模型允许捆绑包开发者仅使用服务的接口说明来绑定到服务。对针对特定需求或根据特定供应商所优化的特定实现的选择,能够因此被推迟到运行时。
在服务层208中,捆绑包被建立在根据共享的服务注册表可用的一组协同服务的周围。这样的服务由其服务接口语义地定义并且被实施为服务对象。可以利用尽可能少的实现细节来规定服务接口。
服务对象可以被捆绑包拥有并且在捆绑包内运行。在一个实施例中,该捆绑包必须利用框架服务注册表来注册该服务对象以使得该服务的功能对框架控制下的其他捆绑包可用。
在一个实施例中,框架114管理拥有该服务的捆绑包和使用该服务的捆绑包之间的依赖性。例如,当捆绑包停止时,由该捆绑包向框架114注册的所有服务必须自动地被注销。框架114将服务映射到它们的底层服务对象,并且提供简单但强大的查询机制,以使得捆绑包能够请求其所需要的服务。框架114还提供了事件机制,以使得捆绑包能够接收服务被注册、被修改、或被注销的事件。
在一个实施例中,安全层210定义安全封装格式以及与框架114的运行时交互。在一个实施例中,安全层210基于X.509v3数字证书模型。被认可的捆绑包的清单包括最小的必需的能力和授权。可以使用私钥(private key)来对清单进行数字签名,并且利用驻留在设备固件中的公钥(public key)来对其进行认证。数字签名是对签名者进行验证并且保证内容在被当事人签名后没有被修改的安全特征。在一个实施例中,数字签名基于公钥密码学(public key cryptography)。在一个实施例中,在框架114上运行的插件被受信任的实体签名,所述实体例如存储设备106的制造商。各种实体中的一个或多个可以对插件进行签名以增强插件的安全性和/或认证。另外,一个或多个实体的公钥可以被永久地存储在存储设备106上。例如,公钥可以被烧入控制器110的固件中。在一个实施例中,安装在存储设备106上的中间证书包括各种元数据。
图3示出了根据本发明的实施例的框架的示例性结构要素。该框架形成支持对被称为捆绑包的可扩展和可下载的应用进行部署的通用、安全并且托管的框架的核心。其可以被实施为单件并且使用指向实现的指针术语(PIMPL idiom)来将实现与框架API描述自身分离。下文是框架的结构要素的一些示例性描述。
示例性框架API
std::vector<std::shared_ptr<bundle_t>>get_bundles():返回由shared_ptr构成的向量,该向量指向当前安装在框架内的捆绑包的全部;
std::shared_ptr<bundle_t>get_bundle(bundle_id_t):返回共享指针,该共享指针指向由唯一标识符指定的捆绑包对象。
service_registration_t register_service
service_reference_t get_service_reference(std::string)
图4示出了捆绑包的示例性包。捆绑包是在正常应用编程中可见的实体。下面提供一个示例。
bundle.std::shared_ptr<bundle_t>get_bundle():返回指向该捆绑包对象的共享指针。
bundle_identifier_t get_bundle_id()
std::string get_symbolic_name()
std::string get_vendor()
bundle_version_t get_version()
清单
每个捆绑包对象包括清单对象,该清单对象提供到作为该捆绑包的一部分交付的清单文件的内容的访问。
示例性清单API
const::string&bundle_copyright().
const std::string&bundle_contact_address().
const std::string&bundle_license().
void parse_manifest(const std::string&path).
void parse_manifest(boost::filesystem::filebuf infile).
const std::string&bundle_name().
const std::string&symbolic_name().
const::string&bundle_vendor().
manifest_version_t manifest_version().
std::vector<std::string>require_bundle():返回具有可选属性断言的所需的捆绑包符号名称(symbolic-name)的列表。
std::vector<std::string>provide_capability():指定捆绑包提供以一个或多个命名接口的形式的能力的集合。
std::vector<std::string>require_capability():指定捆绑包需求以一个或多个命名接口的形式的能力的集合。
图5示出了可以由框架114使用的清单及其头部的示例性结构。插件捆绑包在清单文件中承载关于其自身的描述性信息,清单文件包括在捆绑包档案中,例如,在名称META-INF/MANIFEST.MF之下。在一个实施例中,在以下部分中列出所规定的清单头部。
清单头部工厂
在一个实施例中,清单头部工厂类被实施为单件。其目的是对基于清单头部名称的特定manifest_header对象进行实例化。该类使得能够进行多态分派(polymorphicdispatch),并且如果需要新的头部类型,则不需要改变任何现有代码就可以添加新的头部类型。下面提供了一个示例:
示例性清单头部工厂API
static manifest_header_factory&instance()
void register_header()
值得注意的是,每个清单头部处理器均注册函数
void unregister_header()
图6示出了一个实施例的框架所使用的示例性解析器。捆绑包解析器使用包括在清单头部中的捆绑包需求(bundle_requirement)和捆绑包能力(bundle_capability)信息来识别针对任意给定捆绑包的“最佳匹配”。如果发生“无法解析”冲突,则解析器将创建“最佳”候选的重命名版本,对其进行解析,并且对elf中原始的捆绑包依赖性进行修改以反映“新”的库名称。然后该捆绑包的修改版本将被加载并在框架退出时被销毁。
图7示出了本发明的一个实施例的框架所使用的示例性服务对象。该服务对象由捆绑包所拥有并且在捆绑包内运行。该捆绑包必须利用框架服务注册表来注册该服务对象,以使得服务的功能对框架服务API(Framework.Services API)控制下的其他捆绑包可用。下面提供了一个示例:
std::shared_ptr<?>get_service(shared_ptr<service_reference>)
其中,服务接口(Service Interface):服务接口是对服务的公共方法的说明。
图8示出了一个实施例中的框架所使用的示例性服务观察器。
图9示出了一个实施例中的框架的示例性状态图。在退出已安装(INSTALLED)状态之后,以下动作可以发生:
事件处理被使能;
安全管理器被配置,
任何被安装的捆绑包处于已安装(INSTALLED)状态,以及
框架服务可用。
已解析状态
当框架处于已解析(RESOLVED)状态时,它是可操作的但是它的捆绑包都不是活动的。只要框架处在这个状态,新的捆绑包就能够被安装,而没有任何已安装代码的干扰。现有的捆绑包必须全部处在已安装(INSTALLED)状态。需要框架启动(framework_start)事件来将框架移动到启动(STARTING)状态。
可替代地,可以存在这样一个状态,其中捆绑包被解析,以及另一个状态,其中(在关闭期间)先前构建的资源在转变回框架已安装(INSTALLED)状态之前被销毁。
图10示出了一个实施例的框架中所使用的示例性解析器。
启动
在启动(STARTING)状态,框架启动所有安装的捆绑包。一旦所有捆绑包已经被启动,框架转变到活动(ACTIVE)状态。
活动
在框架活动状态,先前被记录为被启动的所有安装的捆绑包必须处于捆绑包活动(ACTIVE)状态。
停止
当框架被关闭时,它首先进入框架停止(STOPPING)状态,在该状态中,所有处于活动(ACTIVE)状态的捆绑包被停止。然后框架转变到已解析状态,在该状态中,资源被销毁。
图11示出了示例性的捆绑包的状态图。
已安装
捆绑包已经被成功地安装。当捆绑包被安装时,它被存储在框架的永久性存储中并且保持在其中直到它被明确地卸载为止。不论捆绑包已经被启动或停止,它必须被记录在框架的永久性存储中。每当框架启动时,已经被永久地记录为启动的捆绑包必须被启动,直到捆绑包被明确地停止为止。
已解析
捆绑包需要的所有类都是可用的。该状态表明捆绑包或者准备好被启动或者已经停止。
启动
捆绑包正在被启动。bundle_activator.start方法将已经被调用但是还没有返回。
活动
捆绑包已经被成功地激活并且正在运行。其bundle_activator.start方法已经被调用并且已经返回。
停止
捆绑包正在被停止。bundle_activator.stop方法已经被调用但是该停止方法还没有返回。
已卸载
捆绑包已经被卸载。它不能移动到其他状态。
图12示出了一个实施例的框架中所使用的示例性服务对象。服务可以由其服务接口语义地定义并且被实施为服务对象。服务接口被命名和版本化,并且由操作组成。
服务对象由捆绑包拥有并且在捆绑包内运行。该捆绑包必须利用框架服务注册表来注册该服务对象,以使得该服务的功能对框架控制下的其他捆绑包可用。
拥有该服务的捆绑包和使用该服务的捆绑包之间的依赖性由框架管理。框架使用解析器将服务映射到它们的底层服务对象。框架还提供事件机制,以使得捆绑包能够接收来自被注册的服务的事件。图13示出了示例性服务观察器对象。
上文所公开的特定实施例的特征和属性可以以不同的方式组合以形成另外的实施例,所有这些实施例全部落入本公开的范围内。尽管本公开提供了特定的实施例和应用,但是其他实施例对于那些本领域普通技术人员来说是显而易见的,包括没有提供本文所阐述的全部特征和优点的实施例也在本公开的范围内。因此,旨在仅通过参考所附的权利要求来定义本公开的范围。
Claims (14)
1.一种用于经由框架来控制嵌入式设备上的程序代码的执行的方法,所述方法包括:
将软件模块接收到由在所述框架中配置的指针所指示的目录中,其中,所述软件模块是以解释型程序代码和所述嵌入式设备的硬件平台本地的程序代码中的一个来编写的;
通过所述框架来对所述软件模块进行认证;
基于所述认证来确定对所述软件模块的授权的集合;
验证所述软件模块的执行所需要的所述软件模块的依赖性;
将所述软件模块解释或编译成在所述嵌入式设备的所述硬件平台上可执行的程序代码;以及
通过所述框架来控制所述软件模块的执行,其中,所述框架提供以解释型程序代码编写的软件模块与以本地程序代码编写的软件模块之间的互操作性。
2.根据权利要求1所述的方法,其中,所述嵌入式设备是网络附加存储。
3.根据权利要求1所述的方法,其中,对所述软件模块进行认证包括基于数字签名来对所述软件模块进行认证。
4.根据权利要求1所述的方法,其中,确定所述授权的集合包括基于由所述软件模块的清单所指示的数字证书来确定所述授权的集合。
5.根据权利要求1所述的方法,其中,确定所述软件模块的依赖性包括基于在所述软件模块中提供的头部和所述软件模块的清单来确定对本地程序代码库的依赖性。
6.根据权利要求1所述的方法,其中,控制所述软件模块的执行包括控制以所述本地程序代码编写的软件模块的执行。
7.根据权利要求1所述的方法,其中,控制所述软件模块的执行包括控制以C++编写的软件模块的执行。
8.一种被配置为经由框架控制程序代码的执行的嵌入式设备,所述嵌入式设备包括:
存储设备;
控制器,其耦合到所述存储设备,所述控制器被配置为:
将软件模块接收到由在所述框架中配置的指针所指示的目录中,所述软件模块是以解释型程序代码和所述嵌入式设备的硬件平台本地的程序代码中的一个来编写的;
使用所述框架来对所述软件模块进行认证;
基于所述认证来确定对所述软件模块的授权的集合;
验证所述软件模块的执行所需要的所述软件模块的依赖性;
将所述软件模块解释或编译成在所述嵌入式设备的所述硬件平台上可执行的程序代码;以及
使用所述框架来控制所述软件模块的执行,其中,所述框架提供以解释型程序代码编写的软件模块与以本地程序代码编写的软件模块之间的互操作性。
9.根据权利要求8所述的嵌入式设备,其中,所述嵌入式设备包括网络附加存储。
10.根据权利要求8所述的嵌入式设备,其中,所述控制器被配置为基于数字签名来对所述软件模块进行认证。
11.根据权利要求8所述的嵌入式设备,其中,所述控制器还被配置为基于由所述软件模块的清单所指示的数字证书来确定所述授权的集合。
12.根据权利要求8所述的嵌入式设备,其中,所述控制器还被配置为通过基于在所述软件模块中提供的头部和所述软件模块的清单来确定对本地程序代码库的依赖性以确定依赖性。
13.根据权利要求8所述的嵌入式设备,其中,所述控制器还被配置为控制以所述本地程序代码编写的软件模块的执行。
14.根据权利要求8所述的嵌入式设备,其中,所述控制器还被配置为控制以C++编写的软件模块的执行。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361798362P | 2013-03-15 | 2013-03-15 | |
US61/798,362 | 2013-03-15 | ||
US13/925,697 US9110758B2 (en) | 2013-03-15 | 2013-06-24 | Cross-platform software framework for embedded systems on data storage device |
US13/925,697 | 2013-06-24 | ||
PCT/US2014/029839 WO2014145132A1 (en) | 2013-03-15 | 2014-03-14 | Software framework for a storage device |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105144085A CN105144085A (zh) | 2015-12-09 |
CN105144085B true CN105144085B (zh) | 2018-06-22 |
Family
ID=51537887
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480021510.5A Active CN105144085B (zh) | 2013-03-15 | 2014-03-14 | 针对存储设备的软件框架 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9110758B2 (zh) |
EP (1) | EP2972793A4 (zh) |
CN (1) | CN105144085B (zh) |
HK (1) | HK1218010A1 (zh) |
WO (1) | WO2014145132A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10270654B2 (en) | 2016-08-19 | 2019-04-23 | Bank Of America Corporation | System for increasing computing efficiency of communication between applications running on networked machines |
US10180881B2 (en) | 2016-08-19 | 2019-01-15 | Bank Of America Corporation | System for increasing inter-application processing efficiency by transmitting failed processing work over a processing recovery network for resolution |
US10459811B2 (en) | 2016-08-19 | 2019-10-29 | Bank Of America Corporation | System for increasing intra-application processing efficiency by transmitting failed processing work over a processing recovery network for resolution |
US20200004522A1 (en) * | 2018-06-27 | 2020-01-02 | Hewlett Packard Enterprise Development Lp | Selective download of a portion of a firmware bundle |
CN110852139B (zh) * | 2018-08-21 | 2024-05-24 | 斑马智行网络(香港)有限公司 | 生物特征识别方法、装置、设备以及存储介质 |
US20200104118A1 (en) * | 2018-09-28 | 2020-04-02 | Bose Corporation | Systems and methods for providing staged updates in embedded devices |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1601467A (zh) * | 2003-09-22 | 2005-03-30 | 联想(北京)有限公司 | 一种嵌入式设备应用软件的定制方法 |
US7519976B2 (en) * | 2002-05-01 | 2009-04-14 | Bea Systems, Inc. | Collaborative business plug-in framework |
Family Cites Families (67)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6578193B1 (en) * | 1998-03-24 | 2003-06-10 | Novell, Inc. | Endian-neutral loader for interpretive environment |
US6256784B1 (en) * | 1998-08-14 | 2001-07-03 | Ati International Srl | Interpreter with reduced memory access and improved jump-through-register handling |
US6820255B2 (en) * | 1999-02-17 | 2004-11-16 | Elbrus International | Method for fast execution of translated binary code utilizing database cache for low-level code correspondence |
US6973649B1 (en) * | 1999-09-30 | 2005-12-06 | International Business Machines Corporation | Utilizing programming object visual representation for state reflection |
US8793374B2 (en) | 1999-12-02 | 2014-07-29 | Western Digital Technologies, Inc. | Managed peer-to-peer applications, systems and methods for distributed data access and storage |
US7917628B2 (en) | 1999-12-02 | 2011-03-29 | Western Digital Technologies, Inc. | Managed peer-to-peer applications, systems and methods for distributed data access and storage |
US6499054B1 (en) | 1999-12-02 | 2002-12-24 | Senvid, Inc. | Control and observation of physical devices, equipment and processes by multiple users over computer networks |
US7587467B2 (en) | 1999-12-02 | 2009-09-08 | Western Digital Technologies, Inc. | Managed peer-to-peer applications, systems and methods for distributed data access and storage |
US8688797B2 (en) | 1999-12-02 | 2014-04-01 | Western Digital Technologies, Inc. | Managed peer-to-peer applications, systems and methods for distributed data access and storage |
AU2056401A (en) | 1999-12-02 | 2001-06-12 | Senvid, Inc. | Method, system and service model for remote recording of television programs |
US7120692B2 (en) | 1999-12-02 | 2006-10-10 | Senvid, Inc. | Access and control system for network-enabled devices |
US9191443B2 (en) | 1999-12-02 | 2015-11-17 | Western Digital Technologies, Inc. | Managed peer-to-peer applications, systems and methods for distributed data access and storage |
US7934251B2 (en) | 1999-12-02 | 2011-04-26 | Western Digital Technologies, Inc. | Managed peer-to-peer applications, systems and methods for distributed data access and storage |
US7032216B1 (en) * | 2000-02-25 | 2006-04-18 | Oracle International Corporation | Native compilation and safe deployment of virtual machine code |
US7577834B1 (en) * | 2000-05-09 | 2009-08-18 | Sun Microsystems, Inc. | Message authentication using message gates in a distributed computing environment |
US7949564B1 (en) | 2000-05-31 | 2011-05-24 | Western Digital Technologies, Inc. | System and method of receiving advertisement content from advertisers and distributing the advertising content to a network of personal computers |
US7171475B2 (en) | 2000-12-01 | 2007-01-30 | Microsoft Corporation | Peer networking host framework and hosting API |
US6836796B2 (en) | 2001-03-16 | 2004-12-28 | Digi International, Inc. | System and method to manage network-enabled embedded devices operating under various protocols |
US6968546B2 (en) * | 2001-03-30 | 2005-11-22 | Intel Corporation | Debugging support using dynamic re-compilation |
US6996832B2 (en) | 2001-05-30 | 2006-02-07 | Bea Systems, Inc. | System and method for software component plug-in framework |
US7546576B2 (en) | 2001-06-15 | 2009-06-09 | Lightsurf Technology, Inc. | Software framework for web-based applications |
US7181732B2 (en) * | 2001-11-14 | 2007-02-20 | Sun Microsystems, Inc. | Method and apparatus for facilitating lazy type tagging for compiled activations |
US7246350B2 (en) | 2002-01-07 | 2007-07-17 | Intel Corporation | Dynamic composition and maintenance of applications |
US7124445B2 (en) * | 2002-06-21 | 2006-10-17 | Pace Anti-Piracy, Inc. | Protecting software from unauthorized use by converting source code modules to byte codes |
US7346897B2 (en) * | 2002-11-20 | 2008-03-18 | Purenative Software Corporation | System for translating programming languages |
US7051322B2 (en) * | 2002-12-06 | 2006-05-23 | @Stake, Inc. | Software analysis framework |
US7337436B2 (en) * | 2003-02-07 | 2008-02-26 | Sun Microsystems, Inc. | System and method for cross platform and configuration build system |
US20040194059A1 (en) | 2003-03-27 | 2004-09-30 | International Business Machines Corporation | Method to deploy software using an open service gateway initiative (OSGi) framework |
US20050033751A1 (en) | 2003-08-07 | 2005-02-10 | Jonathan Maron | Web service management leveraging a single process service framework |
US7454443B2 (en) | 2003-08-26 | 2008-11-18 | Tamir Ram | Method, system, and program for personal data management using content-based replication |
WO2005050625A2 (en) | 2003-11-14 | 2005-06-02 | Senvid, Inc. | Managed peer-to-peer applications in a secure network |
US20050165837A1 (en) * | 2004-01-22 | 2005-07-28 | International Business Machines Corporation | System and method for embedded java memory footprint performance improvement |
US7313789B1 (en) * | 2004-02-27 | 2007-12-25 | Sun Microsystems, Inc. | Methods and systems for reducing a program size |
US7644402B1 (en) * | 2004-03-17 | 2010-01-05 | Sun Microsystems, Inc. | Method for sharing runtime representation of software components across component loaders |
US7509638B2 (en) | 2004-08-02 | 2009-03-24 | International Business Machines Corporation | Method and apparatus for providing a pluggable and extendable J2EE architecture |
US7512699B2 (en) | 2004-11-12 | 2009-03-31 | International Business Machines Corporation | Managing position independent code using a software framework |
FI20041517A0 (fi) * | 2004-11-25 | 2004-11-25 | Nokia Corp | Menetelmä elektroniikkalaitteiden ohjelmien turvalliseen tulkintaan |
US20060140144A1 (en) * | 2004-12-27 | 2006-06-29 | Motorola, Inc. | Method and system for providing an open gateway initiative bundle over the air |
US7626931B2 (en) | 2005-03-23 | 2009-12-01 | Microsoft Corporation | Systems and methods for coordinating wireless traffic for heterogeneous wireless devices |
US7853934B2 (en) * | 2005-06-23 | 2010-12-14 | Hewlett-Packard Development Company, L.P. | Hot-swapping a dynamic code generator |
US8136100B1 (en) * | 2006-08-29 | 2012-03-13 | Adobe Systems Incorporated | Software installation and icon management support |
US8370818B2 (en) * | 2006-12-02 | 2013-02-05 | Time Warner Cable Inc. | Methods and apparatus for analyzing software interface usage |
WO2009084911A1 (en) * | 2007-12-31 | 2009-07-09 | Samsung Electronics Co., Ltd. | Method and system for sharing packages in a framework |
US8687547B2 (en) | 2008-02-04 | 2014-04-01 | British Telecommunications Public Limited Company | Method and system for automatic connection to a network |
US8004791B2 (en) | 2008-02-22 | 2011-08-23 | Western Digital Technologies, Inc. | Information storage device with a bridge controller and a plurality of electrically coupled conductive shields |
US8661407B2 (en) | 2008-06-26 | 2014-02-25 | Microsoft Corporation | Framework for programming embedded system applications |
US8271995B1 (en) | 2008-11-10 | 2012-09-18 | Google Inc. | System services for native code modules |
US8478798B2 (en) | 2008-11-10 | 2013-07-02 | Google Inc. | Filesystem access for web applications and native code modules |
US8626825B2 (en) | 2009-09-07 | 2014-01-07 | Oracle International Corporation | Facilitating a service application to operate with different service frameworks in application servers |
US8255661B2 (en) | 2009-11-13 | 2012-08-28 | Western Digital Technologies, Inc. | Data storage system comprising a mapping bridge for aligning host block size with physical block size of a data storage device |
US8285965B2 (en) | 2009-11-20 | 2012-10-09 | Western Digital Technologies, Inc. | Aligning data storage device partition to boundary of physical data sector |
US8526798B2 (en) | 2009-12-23 | 2013-09-03 | Western Digital Technologies, Inc. | Portable content container displaying A/V files in response to a command received from a consumer device |
US8631284B2 (en) | 2010-04-30 | 2014-01-14 | Western Digital Technologies, Inc. | Method for providing asynchronous event notification in systems |
US8762682B1 (en) | 2010-07-02 | 2014-06-24 | Western Digital Technologies, Inc. | Data storage apparatus providing host full duplex operations using half duplex storage devices |
US10019741B2 (en) | 2010-08-09 | 2018-07-10 | Western Digital Technologies, Inc. | Methods and systems for a personal multimedia content archive |
US8375009B2 (en) | 2010-08-12 | 2013-02-12 | Microsoft Corporation | Scalable and extensible framework for data-driven web services |
US8713265B1 (en) | 2010-09-21 | 2014-04-29 | Western Digital Technologies, Inc. | Visual indicator of online backup |
US8819649B2 (en) * | 2011-09-09 | 2014-08-26 | Microsoft Corporation | Profile guided just-in-time (JIT) compiler and byte code generation |
US8897782B2 (en) | 2012-01-16 | 2014-11-25 | Microsoft Corporation | System and method for offloading traffic from cellular networks using plugins |
US8780004B1 (en) | 2012-01-31 | 2014-07-15 | Western Digital Technologies, Inc. | Dual configuration enclosure with optional shielding |
US8819443B2 (en) | 2012-02-14 | 2014-08-26 | Western Digital Technologies, Inc. | Methods and devices for authentication and data encryption |
US8646054B1 (en) | 2012-03-23 | 2014-02-04 | Western Digital Technologies, Inc. | Mechanism to manage access to user data area with bridged direct-attached storage devices |
US8831218B2 (en) | 2012-04-10 | 2014-09-09 | Western Digital Technologies, Inc. | Digital rights management system and methods for provisioning content to an intelligent storage |
US8914634B2 (en) | 2012-04-10 | 2014-12-16 | Western Digital Technologies, Inc. | Digital rights management system transfer of content and distribution |
US9626373B2 (en) | 2012-10-01 | 2017-04-18 | Western Digital Technologies, Inc. | Optimizing data block size for deduplication |
US9280482B2 (en) | 2012-12-13 | 2016-03-08 | Western Digital Technologies, Inc. | Methods and systems for provisioning a bootable image on to an external drive |
US20140169921A1 (en) | 2012-12-19 | 2014-06-19 | Mark Carey | Cargo carrier |
-
2013
- 2013-06-24 US US13/925,697 patent/US9110758B2/en active Active
-
2014
- 2014-03-14 WO PCT/US2014/029839 patent/WO2014145132A1/en active Application Filing
- 2014-03-14 CN CN201480021510.5A patent/CN105144085B/zh active Active
- 2014-03-14 EP EP14764261.5A patent/EP2972793A4/en not_active Withdrawn
-
2016
- 2016-05-24 HK HK16105888.6A patent/HK1218010A1/zh unknown
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7519976B2 (en) * | 2002-05-01 | 2009-04-14 | Bea Systems, Inc. | Collaborative business plug-in framework |
CN1601467A (zh) * | 2003-09-22 | 2005-03-30 | 联想(北京)有限公司 | 一种嵌入式设备应用软件的定制方法 |
Also Published As
Publication number | Publication date |
---|---|
HK1218010A1 (zh) | 2017-01-27 |
EP2972793A4 (en) | 2016-10-05 |
CN105144085A (zh) | 2015-12-09 |
US20140304716A1 (en) | 2014-10-09 |
EP2972793A1 (en) | 2016-01-20 |
WO2014145132A1 (en) | 2014-09-18 |
US9110758B2 (en) | 2015-08-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105144085B (zh) | 针对存储设备的软件框架 | |
US20200351341A1 (en) | System method and model for social synchronization interoperability among intermittently connected interoperating devices | |
CN105224874A (zh) | 基于中间件插件框架的插件安全控制方法及客户端 | |
CN116028163A (zh) | 一种容器组的动态链接库调度方法、装置及存储介质 | |
CN105122209A (zh) | 从软件框架提供的网络服务 | |
CN105242910A (zh) | 基于中间件插件框架的插件状态控制方法及客户端 | |
CN109254856A (zh) | 智能pos服务端提供接口给客户端的方法 | |
CN105204829A (zh) | 基于中间件插件框架的插件套接字资源控制方法及客户端 | |
CN105224297A (zh) | 基于中间件插件框架的插件内存资源控制方法及客户端 | |
WO2010057526A1 (en) | Virtualization mediated system and method | |
CN105204830A (zh) | 基于中间件插件框架的插件文档资源控制方法及客户端 | |
CN116992434A (zh) | 一种以独立应用运行在沙盒环境中的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1218010 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1218010 Country of ref document: HK |