引 言 嵌入式系统是指以应用为中心、以计算机技术为基础、软件硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。随着计算机技术和相关电子技术的发展,嵌入式系统的应用已经深入到社会中的各个领域,如家用电器、移动通信、航空、航天、医疗、工业控制和军事等。在嵌入式系统的某些应用中,通常采用分布式体系结构,不同的嵌入式设备之间以某种方式相互连接、彼此协作,这就要求整个系统具有很好的灵活性和可靠性。 Jini是一种全新的构建分布式系统的技术,具有动态的、自形成的和自管理的特性,它是一种真正的基于服务的分布式体系结构。另外,基于Java的Jini技术提高了分布式系统编程的抽象级别,简化了分布式系统的开发。在构建分布式嵌入式系统的过程中利用Jini互联技术,不但可以降低系统开发难度,实现嵌入式环境中基于服务级的互操作,而且还可提高整个系统的灵活性和可靠性。因此Jini技术推出后,人们很快就开始关注如何将Jini应用于分布式嵌入式系统的开发。 1 Jini技术概述 1.1 Jini的体系结构 Jini是1999年1月Sun公司发布的一种基于Java的全新的用于构建分布式系统的技术,利用Jini可以使得软件和硬件自发地结合起来,形成一个Jini服务联盟。 一个Jini系统由下列组件组成[4]: ◇基础设施组件——提供一个在分布式系统中建立起服务联盟的框架; ◇编程模型组件——支持建立可靠的分布式服务; ◇服务组件——可以成为Jini服务联盟中的一部分并且向联盟中的成员提供服务。 尽管Jini系统由三部分组件组成,但是它们之间的界限是模糊的,组件之间紧密相连、彼此协作。Jini是建立在分布式系统、经常动态变化这一原则之上的。它的体系结构如图1所示。
服务是Jini体系结构中最重要的概念。它可以指任何实体提供的功能。其中实体可以是任何硬件设备、软件或是硬件和软件的结合体。服务通过查找服务注册后就可以通过实现了Java远程接口的一个接口来调用。用户通过向查找服务请求并且下载服务的代理对象来和服务之间通信。查找服务自身也是一个服务,能够跟踪每个服务并且向用户提供服务的代理对象。 Jini的体系结构建立在以下环境假设的基础上[5]: ◇有一个网络并且具有合理的网络延迟,以不影响Jini系统的性能(要求网络底层使用的通信协议是TCP和UDP[3]); ◇每个支持Jini的设备具有一定内存和处理能力; ◇每个设备都需要装备一个Java虚拟机。
任何实体都可以成为服务提供者(即服务)或服务请求者(即用户)。当一个实体作为一个服务的提供者时,对它具有如下的要求: ◇为实现发现和加入查找服务的功能,服务提供者必须拥有网络功能; ◇为了能够下载一个查找服务的代理,需要一个Java虚拟机,并且虚拟机支持标准的Java和RMI; ◇为保存与注册相关的信息,需要有存储功能; ◇为了实现以上的各种计算,需要有一个处理器。 同样,一个服务请求者的实体具有如下要求: ◇为实现发现查找服务的功能,服务请求者必须支持网络; ◇为了下载并且服务对象代理,需要一个Java虚拟机和存储功能; ◇需要实现计算的处理器。 因此,一个实体要接入Jini网络成为服务提供者或是服务请求者,它自身需要具备一定的内存和处理能力,以及网络和Java功能,称满足这些要求的实体是支持Jini的。 1.2 Jini技术的特点 Jini的核心功能是提供一种基于网络动态的、自形成的和自管理的服务联盟,具有如下特点。 ① Jini是即插即用的:服务提供者加入Jini网络后,通过查找服务注册后即可向使用者提供服务;服务的使用者加入Jini网络后即可通过查找服务使用相应的服务,之后离开。 ② 使用户可以很容易地访问网络中任何位置的资源,即使是用户在网络中的位置经常变化。 ③ Jini以自发的方式实现实体间的互联:任何实体之间可以相互发现和加入Jini网络来组成一个Jini联盟。 ④ Jini消除了硬件和软件之间的差别:Jini把硬件和软件都抽象为服务,是一种真正的基于服务的体系结构。 ⑤ Jini是一种分布式计算框架,使得分布式编程变得容易:Jini将Java应用环境由单独的Java虚拟机扩展到一个Java虚拟机网络;Java虚拟机屏蔽了不同机器平台和操作系统的异构性,降低了分布式编程的难度。 1.3 利用Jini开发分布式嵌入式系统 近些年来随着计算机网络技术的不断发展,分布式系统已经得到了越来越广泛的研究和应用,分布式计算成为实现高性能和高可靠性计算的一种新的计算模型[5]。在嵌入式应用领域中采用分布式体系结构,一方面可以实现嵌入式环境中的分布式计算(例如一个系统本身可能是由分布在不同位置的多个嵌入式系统相互连接构成的,如电梯、汽车等);另一方面可以在可靠性要求较高的嵌入式应用中实现容错计算。 Jini可以把分布式嵌入式系统变成动态的、灵活的和易管理的系统。Jini的自形成特性提供了一种自动相互发现和加入Jini网络来组成服务联盟的能力,可以使各种嵌入式设备以一种简捷的方式实现集成和互操作。Jini的动态性使得每个嵌入式设备可以灵活地加入和离开Jini服务联盟。这样,当一些嵌入式设备(如移动设备、PDA等)在需要使用服务时,可以建立暂时性的连接加入Jini联盟;服务完成时,离开。在不需要人为参与管理的情况下,整个系统仍具有良好的可伸缩性。 另外,Jini是基于Java的。Java虚拟机屏蔽了不同机器平台和操作系统的异构性,简化了嵌入式系统的编程;而且Jini将Java的应用环境由单独的Java虚拟机扩展到一个Java虚拟机网络,为实现分布式计算提供了一个良好的计算平台。它提高了分布式系统编程的抽象级别,使得用户只需在高层的对象接口上进行编程,而不必处理底层的通信协议,简化了分布式系统的开发。 因此,Jini为开发分布式嵌入式系统提供了一种新的解决方案。但是,要把Jini应用到嵌入式领域中也存在一些需要解决的问题,下面将进行说明。
2 嵌入式系统接入Jini网络的方法 Jini并不是专门为开发嵌入式应用而设计的。由上面的分析可知,一个支持Jini的设备必须具备一定的处理能力、内存、网络功能和Java功能;而通常嵌入式系统对资源是严格限制的,完全支持Jini的嵌入式设备实际上并不多。另外,一些分布式嵌入式应用中底层的通信协议也不支持Jini。 如何使嵌入式系统能够加入到Jini网络,成为在分布式嵌入式应用领域中应用Jini技术的难点。结合现有的技术,目前主要有三种解决方法:一种是提高嵌入式设备的资源,如采用32位的处理器、2MB以上的存储空间和支持网络连接,这样的嵌入式系统可以完全支持Jini;另外一种方法是采用Jini代理体系结构,不要求设备自身支持Java和Jini技术;第三种方法是将Jini进行移植。 2.1 J2ME与Jini技术相结合 继Java技术在桌面系统和后端服务器领域取得巨大成功后,为了将Java的应用扩展到消费类电子设备和嵌入式设备,Sun推出了Java 2 平台Micro Edition(J2ME)。它包括两个基本的配置集:连接设备配置集(CDC ,Connected Device Configuration)和连接有限设备配置集(CLDC ,Connected Limited Device Configuration)。CDC面向的是具有更强计算能力的嵌入式设备;CLDC面向的是资源有限的消费类电子设备。对应于CDC和CLDC两个不同的配置集,可以将J2ME设备分为两类:低端信息设备和高端信息设备。J2ME设备分类如表1所列。 表1 J2ME设备分类表
这两种不同设备要求的J2ME的运行环境也不同。低端信息设备比较适合使用CLDC中定义的KVM,这是一款专用的Java虚拟机,是以小型的资源有限的消费类设备为目标平台的;而高端信息设备适合使用CDC中定义的CVM,它与常规的JVM是完全兼容的。 J2ME CDC可以使嵌入式设备具备Java 2的功能。基于J2ME CDC的RMI可选包完全满足实现Jini的技术需求,因此可以直接加入Jini网络。 对于那些J2ME CLDC的设备或是根本不支持Java和Jini的嵌入式设备来说,Jini代理体系结构(Jini Surrogate Architecture)使其接入Jini网络成为可能。 2.2 Jini代理体系结构 Jini代理体系结构是由Sun公司的工程师Jim Waldo提出的,现在已成为www.jini.org站点中一个开放源代码的项目。开发Jini代理的主要目标是使那些资源有限的设备能够完全参与到Jini网络中。 Jini代理体系结构由下列组件构成:可宿主机(host-capable machine)、代理宿主(Surrogate Host)、宿主资源(Host Resources)和相互连接(Interconnect)。组件之间的关系如图2所示[6]。 设备是指那些不能够加入Jini网络的任何硬件设备或者软件;可宿主机具备执行Java语言编写的,用于代表设备的代码,并且能够为执行这些Java代码提供所需的资源;代理宿主是驻留在可宿主机上,为执行代理体系结构的组件提供Java运行环境的框架,除了提供计算资源、运行环境和生命周期管理外,它还提供宿主的资源来帮助体系结构中的组件。 可宿主机在Jini网络和设备两者之间建立连接,在Jini网络中充当这个设备的代言人。设备和代理宿主之间可以用有线或无线的方式相互连接。连接也可以采用任何的协议,有线连接如TCP/IP、RS-232、USB和IEEE1394等;无线连接可以采用蓝牙协议。 这样,Jini代理体系结构通过降低对设备资源的要求,实现了小型设备完全参与到Jini网络中的目标,使得那些资源有限的小型设备可以充分利用Jini技术的优势。代理通过一个运行Java 2虚拟机支持Jini技术的宿主代理系统,使得本来需要运行在用户中的服务代理对象可以在代理的环境中运行。任何小型设备与代理宿主通过相互连接进行对话,从而成为一个完全的支持Jini的用户或服务,且仍保持Jini即插即用的特性。 2.3 移植Jini Jini体系结构假设网络底层使用的通信协议是TCP和UDP,而一些分布式嵌入式系统中通常采用的是实时、可靠的数据传输协议,如CAN、TTP等。为了在这样的应用领域中使用Jini技术,可以考虑将Jini进行移植。RoSES(Robust Self-Configuring Embedded Systems)[3]是梅隆大学通用发动机协作实验室的一个研究项目。目的是寻找一种建立灵活的、健壮的和可维护的分布式嵌入式系统的通用方法,在研究过程中尝试把Jini移植到CAN上。移植Jini的方法也可以解决嵌入式系统接入Jini网络的问题,但其中的工作量相对较大。
3 应用实例 Jini在开发分布式嵌入式系统方面已经做了很多的工作[1~3]。下面介绍一下Jini在EIB(European Installation Bus)中的应用[1,2]。 现场总线分为多种,不同厂商的现场总线产品是不兼容的。为了解决这一问题,EIBA(European Installation Bus Association)提出了EIB。EIB代表了最新的现场总线技术,主要应用领域是家庭和建筑物的自动化。EIB网络的拓扑结构可以是线形、星形和树形。 EIB网络中每个节点是一个EIB设备。一个EIB系统中最大可以安装60 000个设备。每个EIB设备中有一个嵌入式微用来运行通信协议。它从总线上接收数据后传送给应用程序,或是把应用程序数据传给设备。每个EIB设备通过LC(Line Connector,具有路由功能)连接到主线(Main Line)上,BC(Bus Coupling)向特定应用的硬件(如传感器和作动器)提供了定义良好的接口。 EIB中的设备(例如传感器)都是资源非常有限的设备,很难直接支持Jini,而且EIB系统使用的底层通信协议也不支持Jini。因此在实现中,采用Jini代理体系结构来使EIB设备接入Jini网络。系统结构如图3所示[2]。 EIB代理(EIB Agent)是EIB设备在Jini网络中映射的服务代理。它向服务的使用者(Service User)提供EIB设备的功能;EIB服务器(EIB Server)由Jini数据库(Jini Database)和EIB(EIB Controller)两个模块组成。它负责管理代理宿主机与现场总线之间的连接,其中Jini数据库是一个存放EIB设备和相应的EIB代理之间的映射关系的数据库。EIB代理和EIB服务器运行在代理宿主机上。 这样,在EIB系统中使用Jini技术会带来如下好处: ◇EIB系统中,每个设备提供的功能都可以映射成Jini服务,这样,不仅可以被的现场总线使用,而且还可以被支持Jini的任何设备(如PDA)来访问; ◇Jini简化了网络编程,并且Java提高了系统的安全性; ◇EIB网络可以连接到Internet,这样系统变成了开放的,提高了EIB设备的可访问性; ◇Jini使EIB系统中的设备可以与家用消费电器和自动化设备通信,增强EIB设备的功能; ◇Jini提供了一种独立于厂商的服务平台,使得不同厂商的现场总线产品相互兼容。 应当指出的是,Jini并不是完全适用于实时性要求高的嵌入式应用。RoSES的研究项目中,将Jini移植到了CAN上;但实验结果表明,Jini的实时性能并不令人满意。
4 总 结 在构建分布式嵌入式系统的过程中利用Jini技术,不但可以降低系统的开发难度、实现嵌入式环境中基于服务级的互操作,而且可使系统具有很好的灵活性和可靠性。同时,在分布式嵌入式领域中使用Jini技术也存在一些需要解决的问题,包括如何使得嵌入式系统支持Jini以及Jini的实时性等。