首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

能下载程序代码的Java智能卡操作系统

能下载程序代码的Java智能卡操作系统

  1996年,欧洲出现了一篇关于开放终端结构OTA(Open Terminal Architecture)的论文,其中描述了用于 终端的第4代解释器并做了主要的规定。其目的是建立用于终端的统一的软件结构以便奠定与硬件无关的终 端编程基础。据此,一特定应用(诸如用信用卡支付)只需要一次编程就能在不同厂商制造的所有终端上运 行而不必做任何修改。虽然,这一建议的设计到目前为止尚未能完全实现,但确实在智能卡世界引起了广泛 的讨论。

  当1996年底人们了解到Schlumberger开发了一个可以处理用Java语言编写程序的智能卡时,没有人感到特 别惊奇。从OTA的建议中,人们已经了解到把一个解释器和存储量贫乏的微控制器结合起来的概念,已出版 的Java卡1.0规范提供了一个把Java集成到ISO/IEC 7816-4操作系统中去的应用编程接口API(Application Programming Interface)。这将允许Java去访问标准的智能卡文件系统中的MF,DE和FF。

  起初,许多智能卡操作系统的开发者对于像Java这样的语言将用于智能卡的想法感到惊异,因为通常需要 超过一兆字节的存储量。然而,几乎所有主要的智能卡制造和开发商促进Java的Sun公司的第1次会议,在 1997年的春天召开了。

  这个第1次的会议被称之为Java卡论坛JCF(Java Card Forum),它起到了关于Java在智能卡中的国际标准 化座谈小组的作用。Java卡论坛技术组的任务就是去定义一个用于智能卡的Java子集,规定Java解释器的概 要(称之为Java虚拟机,或JVM)并规定通用API和专用API(例如,用于GSM或金融交易卡)二者的区别。这 些API形成了智能卡操作系统和Java之间的接口。Java卡论坛市场组的任务是推进智能卡的Java技术。

  书中写这一段①时的现行规范的名字是“Java卡2.1版应用编程接口,语言的子集和虚拟机规范及编程概念 ”,最新的版本可从Java卡论坛的www服务器[JCF]得到。

  1,Java编程语盲

  1990年,Sun的一个开发组在James Gosling的指导下开始发展一种新的编程语言。其目的是建立一个与硬 件无关的,安全并现代化的可用于消费产品(诸如烤箱和咖啡机)微控制器的语言。在这类产品中使用了大 量的有不同结构的微控制器类型。不一致性加上硬件的经常修改,使得软件开发者难以写出可移植的程序代 码。十分引人注意地是,智能卡准确地配合了原来的目标中的应用领域。

  程序语言起初被叫做“Oak”,以James Gosling办公室中的橡木家俱来命名,但在1995年被重新命名为 “Java’”并重新制定了目标。在1995年夏天,作为因特网上异机种的与硬件无关的语言,Sun开始大力推 广Java。经常引用的由Sun杜撰的口号是:“写一遍就到处运行”,它极清楚地表明了Java试图达到的与硬件无关的程度。

  开始广泛使用Java之时正好与World Wide Web(WWs)大量增长的时间相符合。有大量的理由说明这不是技 术的原因,而完全是起源于商业领域的策略和对世界的观察,新语言激发了全世界的研究者,高等学校和软件公司[Franz 98]。在极短的时间内,导致Java成了事实上的因特网应用的标准。当然,这个新语言的特 性支持这方面的发展。

  Java编程语言完全是面向对象的极其典型的语言。程序员很容易掌握它,因为它和C及C++有很多共同之 处,把C或汇编代码转换成目标处理器的可执行代码的数据流程图如图1所示。但是,Java也是一种强化的语 言,它不允许那些在C和C++(例如)中允许用的技巧以及那些流行但不确定的技术的使用。例如,Java没 有指针,字段边界在运行时受到监视,而且在那里进行严格的类型检查。此外,存储管理由Java和一个有关 的“废料收集器”接管,所以设计中不可能出现存储泄露(C和C十十中的一个比较可怕的概念)。Java也是 一种安全的程序语言,这就是说一个程序需要实现的功能,当它在运行时会受到检查,所以运行时的环境会 在必要时停止程序。这是调用例外处理程序的几个可能的场合之一,如果发生了一个例外,就调用一个专门 的程序,在其响应中可对此特殊情况做出规定。


图1 把C或汇编代码转换成目标处理器的可执行机器代码过程的顶层数据流程图

  这些特性的大部分仅对Java才是可能的,因为Java是解释性的程序语言,它不是由处理器直接执行的。 Java还有一些其他的特性,诸如多线程的能力和支持分布处理等,但这些在现今的智能卡环境中受不到支持 。

  令人感兴趣的是通过一个ISO标准使Java编程语言得到标准化,这将使其供应商相互独立。然而,在Java语 言成为国际标准的一个组成部分之前,这确实需要经过数年的时间,在Java可以为某产品(诸如智能卡)支 持之前需要取得Sun同意的许可证,确实是与此有关的一个重要因素。

  2,Java的特点

  用Java写的程序被一个编译器翻译成众所周知的Java字节码。它只不过是与处理器无关的目标代码,在某 种意义上说,字节码是虚拟Java处理器机器指令组成的程序。这个处理器并不是真正存在的,相反,它总是 用目标处理器模拟的。模拟Java虚拟机(JVM或VM)的运行,实际上这是个解释器。从不同的观点看来,JVM 是在任意一台目标系统上对Java处理器的模拟。目标处理器自然是用本机代码工作的。只有用本机代码编程 的JVM必须移植到某个给定的处理器,一旦完成后,Java字节码就可在新系统上运行。

  VM也被称为砂箱(sand box),因为它的运行任务并不仅仅是无意识地解释字节代码,而且还要实行类型 检查并监视对象的访问(在其他事务之中)。这一个名字生动地表明了一个Java程序必须预留在它自己的砂 箱内,否则VM就会使其停止活动。

  一个编译好的Java程序,或换句话说,一个已经翻译成字节码并提供某些补充信息的程序,被存储在称之 为类文件的文件之中。当装人Java虚拟机后,类文件被执行。一个或多个类文件组成了一个“支程序” (applet),它含有一个完整的智能卡应用并有着自己的应用标识符AID(Application IDentizier)。在 Java用于智能卡的环境中,支程序有时也称为“卡上小程序(cardlet)或简称为应用小程序、小应用。

  Java的与硬件无关的特性有其价值。比起其他标准的程序语言,它主要是执行速度很低,这个问题仍未以 满意的程度得到解决,然而,对Java的改进和发展都集中在这个课题之上了。已采取的一个步骤是采用“即 时”JIT(Just-In-Time)编译器,当程序第1次被调用时,它把Java字节码翻译为机器语言。这当然导致 程序第1次被调用时速度明显缓慢,但后继的调用则明显地加快。然而JIT编译器的软件是比较复杂的,而智 能卡有限的存储空间也意味着这样的编译器在智能卡中实现还要有数年时间。


图2 把Java源代码转换成目标处理器可执行的机器代码的顶层数据流程图
(最左边的路径是某些编译器生产 者提供的,它并不符合Java最初的主导思想,因为它没有保持对硬件的独立性)

  和PC机的世界不同,把Java程序直接编译成目标处理器的机器语言在智能卡的异种机世界中是没有意义的 ,惟一剩下的选择是使用Java处理器。某些智能卡微控制器制造商已经宣布计划扩展它们的产品使之能直接 执行Java字节码。比起目前的软件实现来,这将导致性能的显著改进。

  基于目前状况,在已有的8051或6805核心的傍边集成一个专门的Java处理器在芯片上也许可完成这一点。 这将使时间是关键性的程序(诸如数据传输程序和加密算法)得到好处,例如仍可用汇编程序编程,而同时 使得所有高于这一层次的软件可用像Java这样的高级语言编程。

  从技术上来说,如果考虑到下述事实,这确实是可能的。Sun的Java芯片(微Java 701)用0.25μm的工艺 时边长为7mm,在200MHz时工作电源为2.5V,包含了280万只晶体管,功耗为4W。由于这一芯片包括了许多智 能卡不需要的功能(诸如浮点算术运算和驱动外部存储器),确实存在着在技术上的可能性,使Java处理器减小到为智能卡所需要的程度并置人智能卡微控制器芯片中。

  另一个提高Java字节码执行速度的方式是由即将到来的32位智能卡微控制器提供的,它最近已由某些半导体制造商宣布了。然而,即使用32位的处理器Java程序代码的解释处理速度仍然要比用C写的程序的速度慢10~20倍,新处理器的主要优点在于它们是通用型的。这些执行速度的比较如表所示。

  表 以c/c++为参考的备程序语言的程序执行时间

  (所列之值是按PC估算的仅供参考之用。参照的PC处理器为300MHz的Pentium Ⅱ,而参照的Java处理器为200MHz的微Java 701)

  解释程序代码和编译程序代码相比的缺点即是不利于处理速度,使用对解释器适当的程序接口可极大地予以补救。这种接口被称为应用程序接口(API),能使解释的程序代码可以调用机器语言程序,用这种方式调用的本机代码程序以宿主处理器的全速处理运行。

  乍一看来,这种增加处理速度的方式似乎是极其理想的,但它仍有其本身的缺点。用于本机代码的API如果要成为通用的而不仅仅是对于一些特殊情况才有价值,它就必须是经过深思熟虑才得出的。当然,经过一段周密审议后这是可以达到的。第2个问题却比较严重,诸如Java之类的编程语言的兼容性和对硬件的无关性,只在所有的API都相同时才有可能。如果朋的类型不同,不论是关系到它们的接口或是所提供的功能,用标准化的编程语言去实现就不会有很大的好处。在这种情况下,对于有着自己的API的每一个不同平的台,都要对源代码做出某些修改。这是Java卡论坛继续对API的标准化投人大量努力的原因,对于与平台无关而言,它们具有重要性。

[此贴子已经被admin于2009-2-17 17:27:32编辑过]

返回列表