一種動態(tài)管理JavaCard暫態(tài)資源的方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及JavaCard暫態(tài)資源的管理技術(shù)領(lǐng)域,具體來講是一種動態(tài)管理JavaCard暫態(tài)資源的方法及系統(tǒng)。
【背景技術(shù)】
[0002]JavaCard是一種能讓智能卡或與智能卡相近的裝置以具有安全防護性的方式來執(zhí)行小型的Java Applet (小應(yīng)用程序)的技術(shù)。JavaCard平臺是一個以JavaCard為基礎(chǔ)的作業(yè)系統(tǒng),可以為JavaCard應(yīng)用提供運行所需的暫態(tài)資源。JavaCard的問世,一方面是為了推展Java的應(yīng)用層次,另一方面也是為了將JavaCard平臺的特性以及Java的好處帶到智能卡上,由于在JavaCard的基礎(chǔ)之上開發(fā)應(yīng)用具有平臺無關(guān)性和安全性,因此,JavaCard已被廣泛應(yīng)用于金融和通訊等領(lǐng)域中。
[0003]在JavaCard的基礎(chǔ)之上開發(fā)Applet雖然方便,但是與傳統(tǒng)Applet開發(fā)比較而言,資源和性能的有效利用是它最大的問題。由于JavaCard平臺寫EEPROM(Electrically-Erasable Programmable Read-Only Memory,電子抹除式可復(fù)寫只讀存儲器)需要耗費的時間比例是常規(guī)流程中最大的,因此,解決資源和性能問題的最直接做法就是盡量用RAM (Random Access Memory,隨機存儲器)來代替EEPROM的操作(即減少寫EEPROM的次數(shù))。但是對于JavaCard平臺來說,RAM資源卻是非常有限的,如何有效管理并使用JavaCard平臺的RAM資源,使RAM提供的暫態(tài)資源能滿足各JavaCard應(yīng)用的需求是本領(lǐng)域亟待解決的問題。
[0004]JavaCard 應(yīng)用通過 JavaCard API (Applicat1n Programming Interface,應(yīng)用編程接口)來申請JavaCard暫態(tài)資源。JavaCard暫態(tài)資源按類型分為DTR(Clearn OnDeselect,取消清除)RTR (Clearn On Reset,復(fù)位清除)。
[0005]目前,對于JavaCard暫態(tài)資源的管理,大體分為以下兩種方式:
[0006](1)統(tǒng)一管理DTR、RTR資源的方式,其遵循以下管理機制:
[0007]如圖1所示,初始狀態(tài)下,整個可用的暫態(tài)資源大小為單個卡片可提供的最大空間:TRANSIENT_SIZE;當(dāng)含有JavaCard應(yīng)用的應(yīng)用包申請一個大小為sizeDl的DTR后,則剩余的暫態(tài)資源空間為:TRANSIENT_SIZE-siZeDl ;當(dāng)其他應(yīng)用包再申請大小為sizeRl的RTR后,則剩余暫態(tài)資源空間為:TRANSIENT_SIZE-sizeDl-sizeRl ;當(dāng)其他應(yīng)用包繼續(xù)申請大小為sizeD2的DTR后,則剩余的暫態(tài)資源空間為:TRANSIENT_SIZE-sizeDl-sizeRl-sizeD2 ;以此類推,無論是申請DTR還是RTR,剩余的暫態(tài)資源都會相應(yīng)的變化,整個暫態(tài)資源空間為線性結(jié)構(gòu),遵循誰先申請,分配給誰的原則。
[0008]這種管理方式雖然相對簡單,但是存在DTR資源空間、RTR資源空間不可復(fù)用的問題,使得資源利用率較低,遇到應(yīng)用包較多的情況,可能會導(dǎo)致后續(xù)應(yīng)用包的應(yīng)用因RAM不足而安裝不成功的風(fēng)險。
[0009](2)分開管理DTR、RTR資源的方式,其遵循以下管理機制:
[0010]如圖2所示,將DTR和RTR的資源空間獨立開,初始狀態(tài)下,按照卡片支持4個邏輯通道的實現(xiàn)方式(JCRE2.2.1規(guī)范支持4個邏輯通道),為每個邏輯通道預(yù)分配SizeDmax大小的DTR資源空間(sizeDmax為卡片可提供的最大DTR空間),則剩余的暫態(tài)資源空間為RTR資源的最大申請空間,即TRANSIENT_SIZE-sizeDmax*4 ;當(dāng)有應(yīng)用包申請了 sizeDl、sizeD2大小的DTR后,只有在激活某個邏輯通道(如邏輯通道O)的時候,才將申請的DTR的實際地址占用到對應(yīng)邏輯通道的物理地址上;當(dāng)有應(yīng)用包申請了 sizeRl、sizeR2大小的RTR后,則該應(yīng)用包的應(yīng)用會一直占用RTR資源空間,對應(yīng)的剩余暫態(tài)資源空間也會相應(yīng)的減少。
[0011]這種管理方式雖然使得DTR的資源空間可以得到資源復(fù)用,滿足了多應(yīng)用包都可以申請sizeDmax大小的DTR資源的要求,但是,DTR和RTR須分開進行管理,并且每個邏輯通道的DTR資源空間的大小開始就預(yù)置好了,導(dǎo)致用戶可使用的最大暫態(tài)資源受到限制,只能申請sizeDmax大小的DTR資源,RTRANSIENT_SIZE_4*sizeDmax大小的RTR資源,管理靈活性差,適應(yīng)性不高。
【發(fā)明內(nèi)容】
[0012]本發(fā)明的目的是為了克服上述【背景技術(shù)】的不足,提供一種動態(tài)管理JavaCard暫態(tài)資源的方法及系統(tǒng),不但有效提高了資源利用率,而且管理靈活,適應(yīng)性高。
[0013]為達到以上目的,本發(fā)明提供一種動態(tài)管理JavaCard暫態(tài)資源的方法及系統(tǒng),包括以下步驟:
[0014]S1:為暫態(tài)資源分配一個總的暫態(tài)資源空間,轉(zhuǎn)入S2 ;
[0015]S2:當(dāng)存儲于邏輯通道內(nèi)的應(yīng)用包申請暫態(tài)資源時,暫態(tài)資源包括DTR資源、RTR資源,判斷可用暫態(tài)資源空間大小是否滿足本次申請需求,若是,則申請相應(yīng)的暫態(tài)資源,轉(zhuǎn)入S3 ;若否,則提示空間不足的異常信息,結(jié)束;
[0016]S3:在RTR資源的使用過程中,將總的暫態(tài)資源空間內(nèi)的RTR空間提供給申請它的應(yīng)用包一直占用,直至卡片復(fù)位時,才進行清零處理;在DTR資源的使用過程中,根據(jù)申請DTR的應(yīng)用包的激活狀態(tài)或去激活狀態(tài),對總的暫態(tài)資源空間內(nèi)的DTR空間大小進行動態(tài)分配和調(diào)整。
[0017]在上述技術(shù)方案的基礎(chǔ)上,S2之前還包括以下步驟:記錄各應(yīng)用包所需申請的DTR空間大小,并將其中所需申請空間最大的應(yīng)用包的DTR空間大小記錄為sizeDm ;
[0018]S2中所述判斷可用暫態(tài)資源空間大小是否滿足本次申請需求,具體包括以下步驟:
[0019]將總的暫態(tài)資源空間大小TRANSIENT_SIZE定義為M,已申請的RTR空間大小sizeR定義為N,當(dāng)前被激活的所有應(yīng)用包的DTR空間大小sizeDruning定義為P,本次申請的空間大小定義為Q ;
[0020]當(dāng)所申請的暫態(tài)資源類型為RTR時,判斷過程如下:
[0021]先判斷此次申請之前是否有申請DTR的應(yīng)用包被激活;
[0022]若沒有申請DTR的應(yīng)用包被激活,則判斷M-N是否> Q,若是,則判斷為可用暫態(tài)資源空間大小能滿足本次申請需求,若否,則判斷為可用暫態(tài)資源空間大小不能滿足本次申請需求;
[0023]若有申請DTR的應(yīng)用包被激活,則判斷sizeDm是否> P,若是,則進一步判斷M-N-sizeDm是否> Q,若是,則判斷為可用暫態(tài)資源空間大小能滿足本次申請需求,若否,則判斷為可用暫態(tài)資源空間大小不能滿足本次申請需求;否則,判斷M-N-P是否> Q,若是,則判斷為可用暫態(tài)資源空間大小能滿足本次申請需求,若否,則判斷為可用暫態(tài)資源空間大小不能滿足本次申請需求;
[0024]