学习JCVM之二JCVM的工作原理

来源:互联网 发布:纵横公路预算软件 编辑:程序博客网 时间:2024/06/14 05:30

学习JCVM之二JCVM的工作原理

一、下面是智能卡的一个结构图:

 

学习JCVM之二JCVM的工作原理

学习JCVM之二JCVM的工作原理

 

 

 

JCRE就是智能卡java程序运行的环境,主要包括JCVM、核心API类库、本地方法,

 

1.下面介绍一下智能卡的工作原理:

首先,源代码经过 Java 编译器编译后产生类文件,也称为字节码。

然后,Java 智能卡转换器将类文件转换成一个 CAP 文件。转换器主要的功能是对字节码文件进行优化以适合在卡中有限的内存中运行。

以上都是在卡外虚拟机完成的。

下面都是在java卡运行环境中完成的。

接下来就是将 CAP 文件下载到卡中。每个 Applet 都会被赋予的一个特定AID(这个AID是怎么赋予我不太清楚,现在也不需要清楚)。当一个Applet被正确下载到EEPROM后,并与Java智能卡类库和卡上的其它库关联后,JCRE就调用该Applet的安装方法install来安装该Applet。install是一种公共静态方法(JAVA卡不支持动态加载),用来创建Applet的一个实例,此时,JCRE会调用解释器来完成创建实例的工作。同时,JCRE会在Applet注册表中进行记录。由于存储器有限,通常在这一阶段创建和初始化Applet生命期内需要的对象。

安装在卡上的 Applet 还需要被显式地选择后才会被激活。就是终端设备给卡发送的APDU命令,当 JCRE 接受到“SELECT APDU”命令时。JCRE 暂停当前选中的 Applet,并调用该 Applet 的deselect 方法进行清理。然后,JCRE 根据命令中的 AID 选中对应的 Applet,调用该 Applet 的 select 方法。如果是多个逻辑通道选择了这个 Applet,需要调用它的Multiselectable.deselect 方法。select 方法让该 Applet 做好接受 APDU 命令的准备。所有接受到的 APDU 命令 JCRE 将发送给当前选中 Applet 的 process 方法,此时JCRE 会调用解释器,将系统的控制权交给解释器,直到它接收到下一个“SELECTAPDU”命令为止。

解释器启动后,进行必要的初始化,就跳转至当前 Applet 的 process 方法中,根据具体的字节码进行解释执行。这时,解释器就如同使用不同语言的人在交流时所需要的翻译一样,使得用 Java 语言编写的程序可以运行在不同的系统上,使得 Java“一次编写,到处运行”的理念得以实现。当 Java 栈中为空时,解释器会将系统控制权转交给 JCRE。

二、Java卡的虚拟机有两部分组成:卡内虚拟机和卡外虚拟机

1.卡外虚拟机的工作原理:

卡外虚拟机工作在PC平台,它将Java源文件进行编译转换,转化后的字节码文件称为CAP文件,即为将要下载到Java卡上的安装文件.

Java卡应用程序的开发与其它Java应用程序的开发在开始阶段是相同的,开发者编写一个或多个Java类的源代码,经Java编译器编译成一个或多个类文件。相应的类文件用Java卡转换器转换成CAP文件,转换完成后,CAP文件被传到卡内虚拟机,卡内虚拟机执行CAP文件中的程序代码。CAP文件是两部分虚拟机的接口文件,CAP文件由卡外虚拟机产生,卡内虚拟机使用。

CAP文件可下载并安装到卡内,其中包括可执行代码,CAP文件与JCVM的关系相当于类文件与JVM的关系。CAP文件由Java卡外虚拟机的转换器产生,一个包中的所有类转换完成后都存于同一CAP文件中,其转换过程见图4。EXPORT文件存有卡内虚拟机操作所必须的信息,可以由转换器在转换一个包时产生,其它引用此包中类的程序在转换时要用到此包的EXPORT文件,转换的CAP文件中包含EXPORT文件的信息,卡内虚拟机用此信息链接包中相关项目(类、接口、域、方法)。转换器将Java卡applet用到的同一包中的所有类转换成一个CAP文件,CAP文件由一系列构件组成,这些构件的功能各不相同。CAP文件与类文件相比,结构更加紧凑、短小,对类、方法、域的表示比较简单,是基于标记的链接方式(Token based linking),这样,Java卡处理起来更有效。同时,在类文件向CAP文件的转换过程中,可以做各种优化处理。

学习JCVM之二JCVM的工作原理

2.卡内虚拟机原理:

卡内虚拟机则工作在智能卡平台,它对下载到卡上的CAP文件字节码解释执行,将之转化为相关的本地硬件实现.

卡内虚拟机执行字节码、管理类和对象、提供各种Java卡应用程序之间的防火墙、提供保密数据共享等。由于智能卡环境中的资源很有限,所以采用解释执行的方式,且其堆栈模型、堆的存储器组织、异常处理方式都各有特点。

 

卡内虚拟的主要模块:

JavaCard虚拟机是JavaCard的工作引擎,其大体结构较Java其他版本的虚拟机简单,包括Java字节码解析器、Java栈、Java堆、方法区、异常处理模块等。

1.Java字节码解析器对所有的Java语言字节码进行解析执行;就是当解释器解析CAP文件时,从方法区调用该应用程序对应的类和方法以及静态域来完成对对应用程序的解析。

2.Java栈是Java语言执行时方法调用的工作区;JCVM是以栈为基本存储机制的处理机。栈的特点是先进后出(FILO)。对每个类的每个方法,JCVM都定义一定的栈空间,是在我们需要调用类的方法的信息压入到栈中。

3.Java堆用来存储永久和临时的对象数据:

堆的技术是为了存放Java程序运行时创建的所有实例或者数组。在处理字节码对象创建指令时,Java卡虚拟机要在堆中为其分配存储空闻。

4.方法区是Java类库的所在地,这是Java的基础功能模块,包括本地方法和纯Java类方法。

5.异常处理模块

6. Java Card虚拟机的Java栈工作在卡的RAM中,方法区在卡发行时被掩模到ROM中,而Java堆被分配到EEP-ROM或是Flash上。

类库的解析过程分析

API 类库实现时所要解决的第一个重要问题就是如何由编译后的字节码信息找到所引用的API类、方法和域。在Java智能卡中,无论类库还是应用程序Applet,转换器已经为所有类和实例化方法都分配了一个值,称为 token 值。Applet 运行时,解释器根据 token 值作为索引标记,利用 CAP 文件各组件所包含的具体包信息、类信息、方法信息和域信息,完成对类的引用、方法引用和域引用的解析,这就是 token 的动态链接原理。因此,针对该问题所要研究的就是解释器对 Applet中调用外包方法的具体解析过程。

在 Java 智能卡应用程序 Applet 运行时,如果引用了外包中的方法,解释器将获得引用的外包的索引,以类和方法 token 值作为索引标记,通过 CAP 文件中各组件中具体的包信息、类信息和方法信息,可以准确地完成从 token 值跳转到被引用方法的具体实现。这一过程主要涉及到 Export 文件和 CAP 文件。                                                                         

Export 文件主要描述了 Applet 和引用的包之间的关联信息,包含了当前类所在包完整的公有的方法的连接信息,并且为当前包中类、方法和域都分配了不同的 token 值。

CAP 文件不仅包含一个程序包自身的内容,而且包括本包和其他程序包的链接信息。它是 Java 源代码经过编译后生成的 class 文件,再经过 Converter 转换器后生成的二进制文件,然后被 JCRE 下载并安装到卡上,解释器将进行解析,具体格式已由 Java 智能卡虚拟机规范给出

 

 

 

硬件系统的要求:

最底层是硬件系统,主要是为了保证Java智能卡运行环境的需要。

Java智能卡对硬件配置的最低要求为

8 位处理器;

512 字节的 RAM:主要用于存储应用程序运行时的栈和输出输入

缓冲区;

24KB 的 ROM:主要用于存储程序类库和系统的运行时系统;

8KB 的 EEPROM:主要用于存储 Java 智能卡的 Applet 和堆

0 0