智能卡中java程序指令的执行方法

文档序号:6458778阅读:117来源:国知局
专利名称:智能卡中java程序指令的执行方法
技术领域
本发明涉及一种高级语言的解释与执行方法,尤其是智能卡中 JAVA程序指令的执行方法。
背景技术
JAVA语言作为一种高级编程语言,因其具有简单、安全、可移 植等优点而被采用来作为操作系统程序、应用软件的编程工具语言。 由于JAVA语言具有跨平台性的特点,因此, 一般的计算机系统硬件 设备不能直接执行由JAVA语言编写而成的程序。例如,现有的部分 智能卡操作系统程序使用JAVA语言编写而成,程序经过编译后以字 节码的形式存储在智能卡中,但智能卡的中央处理器不能直接执行 JAVA语言编译成的字节码。因此,智能卡中需要设置一个虚拟机, 由虚拟机将JAVA字节码翻译成智能卡可直接执行的本地可执行代码 然后再由中央处理器执行。现有的虚拟才几解释执行字节码时,是以不断循环地逐条读取并逐 条解释字节码的方式进行的。每次读取解释字节码时,需要完成读取 字节码、读取字节码解释程序地址、跳转至该地址并解释、跳转至循 环的起点读取下一字节码等步骤。这样,每次读取解释字节码需要完 成两次读取与两次跳转过程,这占用了大量时间,使智能卡运行效率 低下,不能满足人们对智能卡运行速度的要求。公告号为CN1173262C的中国发明专利公开了 一种名为"虚拟机 指令的优化字节码解释器"的发明创造。该专利公开的虚拟机使用宏 代码来代替简单字节码的序列,在虚拟机中设置一个间接线程解释 器,并使用该间接线程解释器来解释宏代码。虚拟机解释字节码时, 使用间接线程解释器解释宏代码,而并不逐条解释字节码。这样,执 行一 个宏代码的解释程序即实现执行多条字节码解释程序所实现的功 能,相对减少了读取与解释多条字节码的时间,尤其是减少了因多次 跳转而消耗的时间,相对加快了智能卡的运行速度。但由于这种虚拟机还是需要将宏代码翻译成本地代码才能执行, 仍需要消耗一定的时间,智能卡的运行效率仍不理想。同时,还需要 在虛拟机中设置间接线程解释器,使虚拟机变得更加复杂,不利于智 能卡简^更开发。发明内容本发明的主要目的是提供一种使需要运行JAVA程序的智能卡运 行速度较快的JAVA程序指令执行方法。为实现上述的主要目的,本发明提供的JAVA程序指令的执行方 法中,JAVA程序存储在一智能卡内,该智能卡中设置有可执行JAVA 程序的虚拟机、中央处理器及可由中央处理器访问的存储器,该存储 器中存储有JAVA程序的字节码,该方法包括以下步骤步骤一根据字节码,将其转换成对本地代码的一系列调用,形 成本地程序;步骤二将本地程序编译成本地可执行代码,将本地可执行代码 存储至智能卡的存储器中;步骤三虚拟机读取字节码,并判断是否有本地程序与所读取的 字节码对应,若有,则执行对应的本地程序,否则解释并执行所读取 的字节码。由上述方法可见,由于预先将字节码转换成本地程序,并将本地 程序编译成智能卡中央处理器能够直接执行的本地可执行代码,同时将本地可执行代码存储在智能卡中,虛拟机读取字节码时即可判断在 智能卡中是否有与该字节码对应的本地程序,如果有对应的本地程序 则执行本地程序,并不将字节码进行解释。由于智能卡执行本地程 序,也就是执行本地可执行代码所消耗的时间远远小于虚拟机解释字 节码所消耗的时间,因此,采样本发明的方法可大大提高智能卡运行 速度。同时,由于虛拟机解释字节码时不需要对宏代码进行解释,因此 不需要在虛拟机中设置间接线程解释器,使虚拟机变得简单,也给智 能卡的开发带来便利。进一步的方案是,智能卡的开发人员预先转换好多段本地程序, 并对每一本地程序进行编号,通过该编号将每一本地程序与对应的字 节码对应起来,然后再编译成多段本地可执行代码。当虚拟机读取字 节码后判断该字节码对应哪一本地程序,并通过该编号判断需要执行哪一段本地程序,并^l行该本地程序。这样,虚拟才几可在执行本地程序时可方^f更地识别需要纟丸行哪一本 地程序,有利于虚拟机快速准确的执行本地程序,提高智能卡的运行 速度。


图1是应用本发明JAVA程序指令执行方法实施例的智能卡结构 示意框图;图2是本发明JAVA程序指令执行方法实施例中虚拟机读取字节 码的示意图;图3是本发明JAVA程序指令执行方法实施例的流程图。 以下结合附图及实施例对本发明作进 一 步说明。
具体实施方式
参见图1,图1是应用本发明JAVA程序指令执行方法实施例的 智能卡结构示意框图。智能卡1包括中央处理器11以及存储器,其 中存储器有R0M12、 RAM13以及EEPROMl4, R0M12中存储有智能卡1 的程序,包括才喿作系统程序以及应用程序。智能卡1的操作系统程序 由JAVA语言编写而成,因此需要在智能卡1中设置能够执行JAVA程 序的虚拟机。虚拟机是一个通过软件实现的虚拟设备,用于解释并执 行JAVA程序。参见图2,图2是本发明实施例中虚拟机读取字节码的示意图。 智能卡开发人员使用JAVA语言编写智能卡的操作系统程序21,该操 作系统程序经过编译后以字节码的形式存储在存储器中。智能卡运行 时,虛拟才几20逐条读取字节码。虚拟才几20的虚拟PC (Program Counter,程序计数器)指针将指向当前操作的字节码,在当前字节 码执行完毕后,虚拟PC指针指向下一字节码,即虚拟机20读取下一字节码,同时执行该字节码。虚拟机20不断读取并执行字节码,直 至字节码读取完毕。本发明JAVA程序指令执行方法的流程图如图3所示。应用本发 明方法时,智能卡开发人员根据开发出的JAVA程序,选取部分虚拟 机需要频繁执行的字节码,将其转换成对本地代码,如C语言的一系 列调用,从而形成本地程序(步骤SI)。这一步骤可在JAVA语言编 译成字节码时生产的信息来完成,因此本地程序实现的功能与被选取 的字节码所实现的功能完全相同,并在虚拟机执行字节码时可代替该 字节码。由于智能卡运行时频繁执行的字节码往往不止一条,因此可 选取多条字节码并分别对其转换成相应的对本地代码的调用,形成多 段本地程序。并对多,殳本地程序进4亍编号,然后将这些本地程序编译 成中央处理器可直接执行的本地可执行代码(步骤S2),并将本地 可执行代码存储到存储器中(步骤S3)。多段本地程序可以是连续 地存储在智能卡的存储中,也可以是不连续存储。即使多段本地程序 是被连续地存储,虚拟机也不是连续执行多段本地程序,而是每次只 执行一段相应的本地程序,即多段本地程序是不连续执行的。智能卡运行时,虚拟机逐条读取字节码(步骤S4),并判断是 否有相应的本地程序与读取的字节码向对应(步骤S5),若有,虛 拟机不解释该字节码,而直接执行对应的本地程序(步骤S6),也 就是执行该段本地程序所对应的本地可执行代码。由于每一本地程序 均有唯一编号,虚拟机可通过编号找出读取的字节码所对应的本地程 序,并执行该本地程序。由于执行本地程序实现的功能与解释执行字 节码所实现的功能相同,而执行本地程序所需要的时间远少于解释执 行字节码所消耗的时间,因此,执行本地程序能大大减少智能卡运行 时间,提高智能卡运行效率。当然,智能卡中并不是每一字节码均有本地程序与之对应,当虚 拟机判断所读取的字节码没有相应的本地程序时,则解释执行所读取 的字节码(步骤S7)。解释执行字节码的过程与现有的虚拟机解释 执行字节码的过程相同,都是读取字节码解释程序地址、跳转至该地 址并解释、跳转至循环的起点读取下一字节码,在此不在赘述。虚拟机判断所读取的字节码是否有相应的本地程序,可使用下面的一段程序实现Void interpreter()Byte Ins;While (PC!- INIT—PC)Ins = fetchByte(); Swi tch (Ins)Case IL0AD: I load (); Break; Case PUSH:Push(); Breakj Case POP:Pop(); 〃解释并执行字节码 Break;Case I扁KE-VM:I扁ke眉(); 〃执行本地程序 Break;虚拟机读取字节码后,判断字节码的类型,若字节码的类型为上 述程序中的ILOAD、 PUSH或POP等类型,则解释并执行该字节码,若 字节码的类型为INVOKE-VM类型,则虚拟机判断该字节码有相应的本地程序,并通过本地程序的编号找出对应的本地程序,同时执行该本 地程序。虚拟机执行完本地程序或字节码解释程序后,判断字节码是否已经读取完毕(步骤S8),若没有,返回步骤S4,继续读取字节码并 进行相关的操作,直至字节码读取完毕或程序终止。若字节码已经读 取完毕,即程序已经完成,虚拟机结束工作。在本发明的方法中,智能卡中存储有中央处理器可直接执行的本 地可执行代码,虚拟机读取字节码后判断若有本地程序与所读取的字 节码相对应,则扭j于本地程序,即执行本地可才丸行代码,而不解释执 行字节码。由于虛拟机执行本地程序时不需要进行跳转、翻译等过程,其执行速度远快于解释执行字节码的速度,因此,使用本地程序 来代替部分频繁执行的字节码,能大大减少虚拟机解释执行字节码所 消耗的时间,从而提高智能卡运行速度。同时,使用本发明的方法来执行JAVA程序,并不需要在智能卡 或虚拟机中设置其它软件或硬件设备,只需要在智能卡内存储若干本 地可执行代码即可,不增加智能卡开发成本,不会给智能卡的开发带 来不便,本领域的技术人员很容易即可实现。当然,上述实施例仅是本发明的一种实施方案,实际应用中,还 可以有更多的方式,例如,仅使用一段连续的本地程序来代替某一条 最频繁使用字节码,这样本地程序只有一段。当虚拟机读取该特定的 字节码时即执行该本地程序,也可以减少智能卡运行时间。又或者本地程序所代替的字节码不一定是频繁执行的字节码,还可以是解释执 行时消耗时间较长的字节码。同样,本地程序代替的也不一定是单一 的字节码,还可以是特定的若干条连续的字节码组成的字节码序列, 即使用 一段本地程序来代替一段字节码序列,这些均不影响本发明的 实现。同样,本发明的方法也不只限于执行智能卡操作系统程序时使 用,若智能卡的应用程序也是使用JAVA语言开发的,也可使用本发 明的方法来提高智能卡的运行速度。最后,需要强调的是,本发明不限于上述实施方式,诸如虚拟机类型的改变、使用的本地程序生产方法的改变等^:小变化也应该包括 在本发明的保护范围内。
权利要求
1、智能卡中JAVA程序指令的执行方法,该智能卡中设置有可执行JAVA程序的虚拟机以及中央处理器、可由中央处理器访问的存储器,该存储器中存储有JAVA程序的字节码,该方法包括以下步骤步骤一根据字节码,将其转换成对本地代码的一系列调用,形成本地程序;步骤二将本地程序编译成本地可执行代码,将本地可执行代码存储至智能卡的存储器中;步骤三虚拟机读取所述字节码,并判断是否有本地程序与所读取的字节码对应,若有,则执行对应的本地程序,否则解释并执行所读取的字节码。
2、 根据权利要求1所述智能卡中JAVA程序指令的执行方法,其 特征在于所述本地程序为 一段连续的本地程序。
3、 根据权利要求1所述智能卡中JAVA程序指令的执行方法,其 特征在于所述本地程序为二段或二段以上不连续的本地程序。
4、 根据权利要求3所述智能卡中JAVA程序指令的执行方法,其 特征在于所述步骤一 中还包括对本地程序进行编号。
5、 根据权利要求1至4任一项所述智能卡中JAVA程序指令的执 行方法,其特征在于所述本地程序所对应的字节码为虚拟机频繁读取解释的字节码。
全文摘要
本发明提供一种智能卡中JAVA程序指令的执行方法,该智能卡中设置有可执行JAVA程序的虚拟机以及中央处理器、可由中央处理器访问的存储器,存储器中存储有JAVA程序的字节码,该方法包括根据字节码,将其转换成对本地代码的一系列调用,形成本地程序;将本地程序编译成本地可执行代码,将本地可执行代码存储至智能卡的存储器中;虚拟机读取字节码,并判断是否有本地程序与所读取的字节码对应,若有,则执行对应的本地程序,否则解释并执行所读取的字节码。应用本本发明的方法执行JAVA程序,可大大减少JAVA程序执行时间,提高智能卡的运行速度。
文档编号G06F9/45GK101231597SQ200810026270
公开日2008年7月30日 申请日期2008年2月1日 优先权日2008年2月1日
发明者施伟周, 怡 朱, 辉 汪 申请人:东信和平智能卡股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1