移动装置的JAVA Virtual Machine - KVM

原文转自:http://hi.baidu.com/ige5460/blog/item/ee2bd52a761e2e29d52af179.html

 

(节选一个台湾人——行动装置的 Java Virtual Machine – KVM)

图-KVM的标志

       在各式各样的 PDA 窜起之际,也许读者们可以仔细看看,每一台 PDA里 所安装的作业系统是否一样?目前可以看出来, PalmOS 仍然是大宗,除了 Palm 公司本身之外, IBM 、 Sony 等公司也推出使用 PalmOS 的 PDA ,只不过周边有些不一样而已,其次就是 WinCE 紧追在後,在这个市场之上, Microsoft 仍然有一段距离要追。

       讨论如何在PDA (特别是 PalmOS 上)开发 Java 应用程序,今天来说说不太一样的,笔者告诉大家如何在 PDA 上开发出一个 Java Virtual Machine。

      如果您想在一个作业系统上面摆一个 K Virtual Machine - KVM ,首先第一件事情就是最好对 Java 的操作流程很清楚,你才知道现在你是站在整个系统的那一个地方,先建议您到 Sun 的网站上搜寻一下 KVM 这个关键字,你就会看到一些文件说明,如下图,如果您完全不知道什么是 KVM 的话,您可以先看一下 KVM 的白皮书,他会告诉你一大堆 KVM 的原始构想及发展,最後你会发现,原来 KVM 就是配合 PalmOS 所发展的一个 Java Virtual Machine ,所以您可以直接从 Sun 的网站上直接下载几种版本的 KVM 原始程式,分别是 Solaris 、 Windows 、 Linux 、 Palm 版本。

      KVM主要是 Sun 所提出 Java 在不同能力平台下的一个解决方案, Java 在其 SDK 1.2 之後的版本都统称叫 Java 2 ,主要 Sun 把 Java 2 的规格裡头的平台分为叁种不同范围的版本部分,分别是 J2ME 、 J2SE 、 J2EE 叁种,如下说明∶

  • Java 2 Enterprise Edition(J2EE , Java 2 企业版 )
  • Java 2 Standard Edition(J2SE , Java 2 标准版 )
  • Java 2 Micro Edition(J2ME , Java 2 微小版 )

 

图- Java 2 的不同平台示意图

很明显可以看出在嵌入式系统中的行动装置 (Mobile Device) 是在微小版的规则范围之中,白皮书自己也提到,这种技術的应用平台主要是在比较便宜的行动装置,在没有很好的硬体设备中,还是要能够执行基本的 Java 技術,由于 KVM 最小只要 160K bytes 的记忆体就可以执行,因此称为 K Virtual Machine ,其中 K 是表示 kilo byte 的意思,其中包含了 128K 用来执行 Virtual Machine 及本身所必须具备的基本 Libraries 。

        KVM主要设计理念就是∶

l      要能够在具有比较少记忆体的行动装置上执行,所以希望整个核心能够在 40kilobyte 到 80kilobyte 左右。

l      具有高可携性

l      模组化 (modular) 及客制化 (customizable)

l      能够尽量完整而且快速执行 Java 的程式

KVM 本身可以在 16/32-bit RISC/CISC 的处理器上执行,典型的例子就是 PDA 或是手机。她希望透过下载的方式,将应用程序放置到 target 端,並透过 VM 本身的解译器 (interpreter) 来直接执行应用程序,所以程序设计人员开发应用程序的时候,可以在 PC 透过 Java 的开发程序,例如 IBM 的 Visual Age for Java 、 Borland 的 Jbuilder 来开发 Java 应用程序,如下图所示的发展流程∶

图- Java applet 发展及载入具有 KVM 的 target 的流程

        从上图我们可以看到 KVM 载入程式的时候,只做了简单的验证工作 (verifier) 就开始执行了,一般的 Java Virtual Machine 会先经过一个 Byte code verifier 的验证,不过这个动作费时费力,一般的行动装置为了考虑效率的问题,就把这个动作简化了。

        第二个步骤当然就是先把原始程式抓过来,您可以到 Sun 的网站下载,不过要先注册就是了,请各位读者先到 Java Download Center ( http://www.sun.com/software/communitysource/j2me/download.html ) 下载 CLDC (CONNECTED LIMITED DEVICE CONFIGURATION v1.0) 档案。因为笔者对於 Win/Linux 的操作比较熟,所以抓的是 Win/Linux 版本的 KVM 原始程式,因为 KVM 的构想就是小巧精简,所以您会发现事实上档案并不会很多,而且更好的消息就是,根据 CLDC 移植说明所说,如果您的 target 平台的支援足够的话,几乎您都可以不用改到什么程序,就可以直接把整个 KVM 移植到您的作业系统上面,不过您还是要依据您的作业系统特性来修改一下 KVM 的原始程序,真的都不用改的话,那老板就不需要您的存在啦!这个就是您的 domain knowledge 啦,其实不用懂太多,就刚好懂到别人不懂的地方,就可以吃喝玩乐好一阵子了。

档名

长度

j2me_cldc-1_0_2-fcs-kjava_overlay.zip

1,616,839

j2me_cldc-1_0_2-fcs-winunix.zip

4,769,262

表-所要下载的档案及长度

第叁个步骤当然就是开始修改,因为这个地方和作业系统很相关,例如怎麽样开启档案、如何动态取得记忆体、如何将视窗系统移植上去、如何处理不同 CPU 之间的特性、如何处理 64 bits 运算( KVM 的规格就是您必须要处理 64 bits 的运算,如果您的作业系统或是 compiler并 不支持这一部份的话,就要自己动手做)、网路连线的处理等等,笔者把大概会碰到的问题整理如下∶

l      data alignment ∶例如 2bits 或是 4bits 的资料对齐的动作

l      long integers (64-bit) ∶长整数的处理

l      floating point ∶浮点处理,很多嵌入式系统的 CPU 不包含浮点处理功能,您必须自行模拟

l      endianness ∶就是 big endian 或是 little endian 的问题了

l      class paths ∶所有 JAR 的档案路径

l      system class preloading ∶如何从 ROM 裡执行您的 KVM

l      platform-specific features ∶您的 target 是否有特殊要求及应用

l      memory allocation ∶记忆体的管理

l      garbage collection ∶回收机制,还好这一部份 KVM 自己做掉了

l      interpreter options and optimizations ∶解译器的选项,有许多的设定

l      debugging and tracing options ∶总是要 debug 吧!也有许多设定问题

l      networking and storage options ∶网路很重要,所以 TCP/IP 最好要能够执行,另外 KVM 本身针对短距离无线传送也有相关的处理,因此红外线部份要处理,当然咯,储存装置的存取也必须要做处理啦!

我们必须特别注意初始化 (initialization) 及结束 (finalizations) 、 heap 的索取跟释放、例外错误的处理、事件 (event) 处理、时间处理等等,当然咯,嵌入式系统的精神之一就是可以变成一颗 ROM 的 image ,这个动作称为 ROMizer ,您必须可以实际的放到 target 端,也就是 PDA 上做测试。

第四步骤当然就是测试,我们在第叁步骤花费了许多的工夫,拿了几个 KVM 的程序做完简单的测试之後,您怎麽能够保证您的 KVM 是百分之百的相容呢?其实系统验证是一项非常重要的步骤,偏偏许多人认为这个只是小儿科,所以常常到最後问题百出,却不知道究竟错在那裡,所以 Sun 也提供了一套 KVM 的验证工具,提供移植开发 KVM 的系统厂商一个验證的机制,称为『 TCK 』 (Testing Compatible Kit ,给 KVM 验证的话,其版本为 for CLDC) ,若是发现验证不过,就赶快修改一下,大部分都是 stack 不够大或是记忆体配置的问题,若是全部都验证过了,就可以说您已经得到了 Sun 这家公司的背书,保證您的 KVM 是没有问题的。

TCK 主要验证的包括了 bytecode 解释的验证及动态载入 class 及其函式, KVM 的验证方式,是由测试程式透过 TCP/IP 网路,利用 HTTP 的协定来发送 JAR 测试程式给 target 端做测试,经过一段测试的程序之後, target 端会将计算的结果传回测试程序,若是 KVM 移植有问题,最直接明显 target 端就当机,这时候您就知道应该要做修正的工作;如果 target 端没当机,但是仍然有问题,例如字串处理有问题, target 端就会把结果回报给测试程序,测试程序的画面上就会告诉我们那几个测试的案例没有通过,那些已经通过了,全部的测试案例共有四千多个,如果测试一个要 3 分钟的话,那要测个好几天才会测结束,下图显示一个正在执行测试的一个情形∶

图- KVM 测试程式运作情况

KVM 测试程式虽然有四千多个案例,不过主要还是分为几项,例如画面的处理、记忆体配置、执行绪状态、资源回收、字串及数字处理、例外及事件处理等。我们首先建立一个测试的平台,笔者的平台建立在 Linux 上面,因为这个测试程序本身就是用 Java 写的,所以可以在其他的平台上执行,首先要指定执行那些测试的案例如下图所示∶

 

图-- KVM 测试的程序案例说明

 

图-指定要执行的 KVM 测试程式

将要执行的案例加到这一次执行的专案里,我们可以指定部份的案例来执行,例如说测到某个地方没有通过,就另外再开一个专案来作测试,不必把已经跑过的案例再跑一次,如下图所示∶

图-选择要执行的 KVM 测试程式

一般来说,没有特别的因素的话,是不需要特别指定测试的参数,所以我们不在下图这个参数设定的部份做设定。

当设定完之后,就可以开始跑测试的案例了,这时候测试程序本身就是一个类似 http 伺服器的程式,等待我们的 target 端连上伺服器来传送测试的案例,传完之后,她就会等待一段时间等待 target 端将结果传送回来,下图是一个正在传送的情况∶

图--执行 KVM 测试程序

如果测试通过的话,就会在通过的显示视窗里显示通过的讯息,如果有失败的话,就会在失败的视窗里告诉你那一个测试案例没有通过,原因是什么?您可以依据这些讯息去修改程序码,显示视窗如下图所示∶

图--通过 KVM 测试的程序案例

我们可以透过测试程序所显示的讯息了解一下我们测试的案例基本说明,如下图所示∶

 

当您通过这些测试之後,就证明了您的 target 端系统可以正确的执行 KVM 的程式了,不过还是有些地方提醒您,因为 target 端本身系统资源的限制,有些应用程式可能还是无法执行,主要还是因为记忆体不足,並不是说 KVM 无法解释这些应用程式的程式码,这一点在 PalmOS 的一些产品上也有相同的情况,因为 PalmOS 的 KVM 所给的 heap 记忆体上限为 33K ,也许有些应用程式就没办法执行。

        在 PDA 百家争鸣的时代中, Java 无疑是所有程式设计人员的明路,让我们不在惶恐及担忧,可以专心作好我们自己本身拿手的领域,虽然说目前 KVM 或是其他的 Java Virtual Machine 执行的速度还不是很快,但是随着软硬体的进步,相信这些问题在不久的将来将会全部解决,因此 Java 将是在嵌入式系统裡的良好解决方案。

        目前日本 DoCoMo 所推出的 iMode 服务裡,将 Java 应用程式的下载列入重要的服务之一,虽然这项服务延後到年底才推出,不过 Java 夹其跨平台的优势将会在未来佔有相当重要的地位。

        最後笔者将一些网站的资源列表如下,读者们可以去看看更多的资料做进一步的发展。

官方网站

J2ME

http://java.sun.com/j2me

KVM

http://java.sun.com/kvm

Palm OSEmulator

http://www.palmos.com/dev/tech/tools/emulator

CLDC

http://java.sun.com/products/cldc

技術网站

KVM World

http://www.kvmworld.com/

Color KVM

http://www.kawt.de/ColorKVM.html

KVM for Linuix

http://www.kvmworld.com/Downloads/KVM/LinuxKVM.shtml

KVM on the Palm Pilot

http://webdev.apl.jhu.edu/~rbe/kvm/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值