java的可移植性及具有用户熟悉的类似c语言的特性,使之成为互联网通信中的关键技术。今天,随着硬件技术的不断发展,java正逐渐冲破unix/windows系统编程环境,进入嵌入式装置。
java 正加快履行它早期对用户所做的承诺,为用户提供更多的好处。软件开发经理们认为java语言的编程效率高,它比c++程序更可靠,事实上越来越多的学生正在学习用java语言而非其他语言进行编程。而且,伴随java虚拟机执行的硬件抽象作用允许你实现代码编制功能,而不需要担心在下面所采用的是何种硬件。所有这些因素使之容易对项目进行分割,甚至可以把嵌入式软件开发工作交给主流商务的编程人员去完成。借助java嵌入式开发,那些投资在第三代无线蜂窝电话项目上的服务提供商,对其资金回收产生巨大推动作用,对他们来说,采用互联网技术所带来的新的和潜在的好处,仅仅是还没能很快地显现出来而已。
但是,java所具有的通用特性,意味着sun最初的技术规范很少能适合紧凑的嵌入式应用,导致第三方厂家开发相应的替代方案(参考文献1),java语言的解释特性产生很差的性 能,致使一些厂家为了提高运行速度,开发的编译工具虽然可以把java语言转化成特定机器的机器码,但它却牺牲了平台的独立性。并且,利用嵌入式系统作为独立任务运行任何java线索来实现严格的实时使用是不可能的,同样也不能运行用c/c++或汇编语言编写的时序严格的程序。为了解决这些问题,现在sun公司把java分成三个版本:标准版(j2se),java版本2;企业版(j2ee),面向如商业数据库开发等应用;java-2微型版(j2me),面向嵌入式装置。而且,为解决java在严格实时应用中的缺陷,sun公司支持一种新的独立标准。
java嵌入的困难始于存储要求。传统上,编程人员编写java 代码,编译器把它翻译成独立于机器的java"字节代码"。在运行时,目标装置中的校验器,分析这些字节代码以确保代码的安全执行。在目标装置中,内置一个jvm(java虚拟机),该java虚拟机使用一个解释器或一个jit(即时)编译器,它用来把字节代码翻译成目标处理器能够识别的机器语言。java虚拟机也能够提供类似操作系统一样的服务,例如,控制多线程执行、分配内存、内存使用完之后,释放它(即无用信息收集)。java虚拟机的存储器容量能够大到几兆字节,它适合台式pc,但是能使低端便携式装置陷于瘫痪。软件jvm解释器可能占用16k字节内存,它非常便宜,适合在智能卡一类的装置中使用。采用jit编译器运行速度可能比采用解释器运行快五倍,但是,它需要使用超过100k字节的存储器,所以它不太适合在低成本或低功率装置中使用。很显然,放弃软件翻译,采用硬件实现jvm将会大幅度地提高系统运行效率,这正是目前出现的一种java处理器系列,有许多途径可以实现它。现在,可以在嵌入式系统中使用java,甚至可以代替独立的rtos(实时操作系统)。
jvm与硬件结缘
java处理器生产厂家针对其产品的广泛应用划分成两个范畴:独立的μp/μc和加速器/协处理器。用户可以选择购买现成的java芯片,或者ip(知识产权)。进一步细分就能区分自然执行java的各种设计,换句话说,能够把java采用处理器汇编语言的这类设计与采用另外指令集的那些设计区分开。供选择的指令集能够支持多种语言,并可通过切断java就能处理中断和其他实时事件。尤其吸引人的是一些处理器内含rtos,该rtos可以以片上硬件功能或软件方式实现,潜在地减少用户的开发和生产许可费用。
设计的jvm硬件隐含着源于虚拟机技术规范的结构相似性(参考文献2)。共有200多条java指令,范围从简单指令如"pop"(上托操作数栈),到可能过长和很少使用的指令如"multianewarray"(创建一新的多维数组)。在设计过程中需要在以硬连接逻辑、微码序列执行的指令和影响性能和处理器复杂性的软件仿真程序之间作出折中。一些字节代码具有专指的功能,如调试用的断点、定制操作中的陷阱。对那些没有专指功能的字节代码,允许指令集扩充。所有的指令具有8位格式,并且操作数隐含在堆栈上。通常,java处理器强调堆栈结构而非寄存器结构,倾向于采用复杂指令集而不是精简指令集计算机设计。java处理器支持多线程操作,这意味着要频繁地在任务间进行切换,因此,减少寄存器的数量,有助于减少任务切换时用于保存处理器工作状态所浪费的系统资源。arm内核采用harvard结构的单独指令和数据空间,java处理器与arm内核不同,采用von neuman结构。但是,现在所有的java 处理器都采用32位数据通道,它允许多条指令和数据字节装载序列通常在一个时钟周期内完成执行。厂家产品性能测试通常参照pendragon软件的caffeinemark测试基准(现为v.3),你可以免费下载它;