學習JCVM之二JCVM的工作原理

學習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 和堆

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章