專利名稱:智能卡存儲(chǔ)環(huán)境的控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種對(duì)智能卡存儲(chǔ)環(huán)境進(jìn)行控制的方法,具體地說(shuō),是指一種Java智能卡的存儲(chǔ)環(huán)境管理系統(tǒng)地控制方法。
背景技術(shù):
Java智能卡技術(shù)是Java虛擬機(jī)技術(shù)向有限資源設(shè)備平臺(tái)的移植。Java智能卡的Applet經(jīng)過(guò)編譯和轉(zhuǎn)換后生成虛擬機(jī)指令集的字節(jié)碼程序。這些字節(jié)碼再由卡上虛擬機(jī)來(lái)運(yùn)行。Java虛擬機(jī)早期的運(yùn)行技術(shù)主要是解釋執(zhí)行機(jī)制,即將字節(jié)碼通過(guò)解釋程序翻譯為相應(yīng)的本地執(zhí)行代碼來(lái)運(yùn)行,它適合于在資源較少的設(shè)備中使用。而后,為了提高字節(jié)碼的執(zhí)行速度,又相繼提出了編譯為本地代碼執(zhí)行、動(dòng)態(tài)編譯和JIT編譯執(zhí)行、HotSpot技術(shù)及直接的專用硬件結(jié)構(gòu)執(zhí)行等運(yùn)行技術(shù)。編譯為本地代碼的方法雖然顯著地提高了速度,但卻一定程度地影響了Java語(yǔ)言的安全機(jī)制和可移植性,這在高安全性要求的智能卡應(yīng)用中顯然并不適合。動(dòng)態(tài)編譯、JIT編譯技術(shù)和HotSpot技術(shù)是在運(yùn)行時(shí)將字節(jié)碼編譯為本地代碼,這需要大量的運(yùn)行時(shí)的存儲(chǔ)資源,這在通常只有2K左右RAM的智能卡中也不具可行性。
目前也有的采用專用的智能卡硬件結(jié)構(gòu)來(lái)運(yùn)行字節(jié)碼以提高速度,這帶來(lái)的性能增益是非常顯著的,但同時(shí)也成倍地提高了卡片的成本。專用的硬件結(jié)構(gòu)也具有一定的局限性,如偽指令的擴(kuò)展,并且在智能卡芯片和其它的有限資源設(shè)備領(lǐng)域目前并不存在大量的Java專用結(jié)構(gòu)的CPU。
內(nèi)存空間的自動(dòng)垃圾回收機(jī)制是Java語(yǔ)言的一大特點(diǎn),也是Java語(yǔ)言安全性的保證。但由于EEPROM較慢的寫速度和有限的讀寫次數(shù),這使得垃圾回收在Java卡中的實(shí)現(xiàn)必然不同于PC平臺(tái)。在存儲(chǔ)管理方面已有的文獻(xiàn)只是在Java Card 2.1規(guī)范的基礎(chǔ)上,在單Applet實(shí)例運(yùn)行的環(huán)境下對(duì)于臨時(shí)空間管理的研究。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種智能卡存儲(chǔ)環(huán)境的管理方法,該管理方法能夠有效地節(jié)省智能卡平臺(tái)有限的計(jì)算資源和存儲(chǔ)資源,增強(qiáng)空間分配和回收運(yùn)行時(shí)的自適應(yīng)性。本發(fā)明提出了多應(yīng)用運(yùn)行環(huán)境下雙向鏈表結(jié)構(gòu)的持久空間的存儲(chǔ)管理策略以及分段式的臨時(shí)空間的存儲(chǔ)管理策略,設(shè)計(jì)并實(shí)現(xiàn)了存儲(chǔ)分配和垃圾回收管理。
本發(fā)明的一種智能卡存儲(chǔ)環(huán)境的控制方法,所述智能卡由CPU、RAM存儲(chǔ)器、ROM存儲(chǔ)器、EEPROM存儲(chǔ)器、邏輯運(yùn)算模塊、加密引擎模塊、中斷處理模塊、CRC發(fā)生器、隨機(jī)數(shù)發(fā)生器、定時(shí)器和外部接口構(gòu)成,所述RAM存儲(chǔ)器用于存儲(chǔ)臨時(shí)數(shù)據(jù)信息,所述ROM存儲(chǔ)器和EEPROM存儲(chǔ)器用于存儲(chǔ)持久數(shù)據(jù)信息,對(duì)外部輸入的數(shù)據(jù)信息存儲(chǔ)步驟有
(A)對(duì)所述外部輸入的數(shù)據(jù)信息進(jìn)行存儲(chǔ)類型分類,得到存儲(chǔ)類型,
所述存儲(chǔ)類型有第一存儲(chǔ)類型,用于實(shí)現(xiàn)持久空間的存儲(chǔ)管理;和
第二存儲(chǔ)類型,用于實(shí)現(xiàn)CLEAR_ON_RESET屬性的臨時(shí)空間的存儲(chǔ)管理;和
第三存儲(chǔ)類型,用于實(shí)現(xiàn)CLEAR_ON_DESELECT屬性的臨時(shí)空間的存儲(chǔ)管理;
(B)對(duì)經(jīng)(A)存儲(chǔ)分類處理后的所述存儲(chǔ)類型按照存儲(chǔ)規(guī)則進(jìn)行存儲(chǔ)控制,并將分類處理后的所述數(shù)據(jù)信息分別存儲(chǔ)于智能卡中的存儲(chǔ)器內(nèi),
所述存儲(chǔ)規(guī)則有第一存儲(chǔ)規(guī)則,用于將所述第一存儲(chǔ)類型按照雙向鏈表結(jié)構(gòu)進(jìn)行存儲(chǔ)以及回收,存儲(chǔ)采用首次適配法,回收采用空間合并法;第二存儲(chǔ)規(guī)則,用于將所述的第二存儲(chǔ)類型按照從臨時(shí)空間的高地址端開(kāi)始向低地址進(jìn)行存儲(chǔ),回收采用對(duì)象標(biāo)記回收法;第三存儲(chǔ)規(guī)則,用于將所述的第三存儲(chǔ)類型按照從臨時(shí)空間的低地址端開(kāi)始向高地址進(jìn)行存儲(chǔ),回收采用對(duì)象標(biāo)記回收法。
所述的智能卡存儲(chǔ)環(huán)境的控制方法,第一存儲(chǔ)類型存儲(chǔ)于EEPROM存儲(chǔ)器中;第二存儲(chǔ)類型和第三存儲(chǔ)類型存儲(chǔ)于RAM存儲(chǔ)器中。
本發(fā)明的優(yōu)點(diǎn)(一)雙向鏈表結(jié)構(gòu)的優(yōu)點(diǎn)是通過(guò)調(diào)整連接指針,可以很容易插入或刪除一個(gè)記錄,節(jié)省了智能卡平臺(tái)有限的計(jì)算資源和存儲(chǔ)資源。同時(shí)方便地使檢測(cè)指針向前驅(qū)和后驅(qū)方向移動(dòng),因此很容易進(jìn)行實(shí)例化對(duì)象或?qū)?yīng)用程序存儲(chǔ)空間進(jìn)行分配或刪除操作。(二)分段式臨時(shí)空間存儲(chǔ)管理機(jī)制有效避免了傳統(tǒng)控制方法中的地址沖突問(wèn)題,運(yùn)行時(shí)具有較強(qiáng)的自適應(yīng)性,非常適合于智能卡的運(yùn)行環(huán)境。
圖1是智能卡的內(nèi)部結(jié)構(gòu)示意圖。
圖2是本發(fā)明持久空間的存儲(chǔ)分配流程圖。
圖3是本發(fā)明持久空間的垃圾回收管理流程圖。
圖4是本發(fā)明運(yùn)行時(shí)的分段式臨時(shí)空間存儲(chǔ)分配。
具體實(shí)施例方式
下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。
本發(fā)明是一種智能卡存儲(chǔ)環(huán)境的控制方法,智能卡由CPU、RAM存儲(chǔ)器、ROM存儲(chǔ)器、EEPROM存儲(chǔ)器、邏輯運(yùn)算模塊、加密引擎模塊、中斷處理模塊、CRC發(fā)生器、隨機(jī)數(shù)發(fā)生器、定時(shí)器和外部接口構(gòu)成,所述RAM存儲(chǔ)器用于存儲(chǔ)臨時(shí)數(shù)據(jù)信息,所述ROM存儲(chǔ)器和EEPROM存儲(chǔ)器用于存儲(chǔ)持久數(shù)據(jù)信息,對(duì)外部輸入的數(shù)據(jù)信息存儲(chǔ)步驟有
(A)對(duì)所述外部輸入的數(shù)據(jù)信息進(jìn)行存儲(chǔ)類型分類,得到存儲(chǔ)類型,
所述存儲(chǔ)類型有第一存儲(chǔ)類型,用于實(shí)現(xiàn)持久空間的存儲(chǔ)管理;和
第二存儲(chǔ)類型,用于實(shí)現(xiàn)CLEAR_ON_RESET屬性的臨時(shí)空間的存儲(chǔ)管理;和
第三存儲(chǔ)類型,用于實(shí)現(xiàn)CLEAR_ON_DESELECT屬性的臨時(shí)空間的存儲(chǔ)管理;
(B)對(duì)經(jīng)(A)存儲(chǔ)分類處理后的所述存儲(chǔ)類型按照存儲(chǔ)規(guī)則進(jìn)行存儲(chǔ)控制,并將分類處理后的所述數(shù)據(jù)信息分別存儲(chǔ)于智能卡中的存儲(chǔ)器內(nèi),
所述存儲(chǔ)規(guī)則有第一存儲(chǔ)規(guī)則,用于將所述第一存儲(chǔ)類型按照雙向鏈表結(jié)構(gòu)進(jìn)行存儲(chǔ)以及回收,存儲(chǔ)采用首次適配法,回收采用空間合并法;第二存儲(chǔ)規(guī)則,用于將所述的第二存儲(chǔ)類型按照從臨時(shí)空間的高地址端開(kāi)始向低地址進(jìn)行存儲(chǔ),回收采用對(duì)象標(biāo)記回收法;第三存儲(chǔ)規(guī)則,用于將所述的第三存儲(chǔ)類型按照從臨時(shí)空間的低地址端開(kāi)始向高地址進(jìn)行存儲(chǔ),回收采用對(duì)象標(biāo)記回收法。
在本發(fā)明中,第一存儲(chǔ)類型存儲(chǔ)于EEPROM存儲(chǔ)器中;第二存儲(chǔ)類型和第三存儲(chǔ)類型存儲(chǔ)于RAM存儲(chǔ)器中。
在本發(fā)明中,采用雙向鏈表結(jié)構(gòu)的持久空間存儲(chǔ)管理機(jī)制,其雙向鏈表如下表所示,
雙向鏈表結(jié)構(gòu)
表中,HEADER項(xiàng)為該結(jié)構(gòu)的頭,包括以下四個(gè)域Llink指向其左節(jié)點(diǎn)的指針,占用2字節(jié)的存儲(chǔ)空間。Tag占用標(biāo)記。當(dāng)tag為1時(shí),該塊為占用塊;tag為0時(shí),該塊為空閑塊。Size表示整個(gè)節(jié)點(diǎn)的大小,包括HEADER和FOOTER。Rlink指向其右節(jié)點(diǎn)的指針。
DATA項(xiàng)為一組地址連續(xù)的存儲(chǔ)單元,是可以分配給用戶使用的內(nèi)存區(qū)域。
FOOTER項(xiàng)為該結(jié)構(gòu)的尾,包括以下兩個(gè)域Uplink指向本節(jié)點(diǎn)頭的指針,其值為當(dāng)前節(jié)點(diǎn)的首地址。Tag占用標(biāo)志,同HEADER中的Tag域。
在存儲(chǔ)請(qǐng)求對(duì)象分配時(shí),采用首次適配法。其工作方式為在頭指針(指向一空閑塊,在對(duì)象分配時(shí)將從此空閑塊開(kāi)始向后搜索,因此該空閑塊可看作為空閑鏈表的頭)所指向的空閑鏈表中查找第一個(gè)滿足要求的足夠大的空間塊,若該空閑塊大小和所要分配的對(duì)象大小相同,則將此空閑塊分配給該對(duì)象;否則將其分為兩部分,一部分分配給對(duì)象,另一部分是未使用的存儲(chǔ)區(qū),將之作為一新的空閑塊插入到空閑列表中,同時(shí)修改頭指針,使之指向剛才所找到空閑塊的下一空閑塊,以便下次尋找空閑區(qū)時(shí)從上次結(jié)束的地方開(kāi)始搜索,而不是每次都從頭開(kāi)始。同時(shí)考慮到當(dāng)空閑空間僅比請(qǐng)求空間大幾個(gè)字節(jié)時(shí),此時(shí)再將該空閑塊分割,則空閑鏈表中將會(huì)出現(xiàn)大量幾字節(jié)的空閑塊,而此空閑塊將極少能被再分配,增加了存儲(chǔ)區(qū)的外部碎片,同時(shí)減少了存儲(chǔ)區(qū)的利用率,因此在這里我們?cè)O(shè)定一差額門限,為10字節(jié),當(dāng)空閑空間與請(qǐng)求空間的差額大于10字節(jié)時(shí),將此空閑塊分割;否則直接將此空閑塊分配給對(duì)象,而不再做分割。分配算法的流程描述如圖2所示。
存儲(chǔ)回收為對(duì)已給出存儲(chǔ)首地址的要回收存儲(chǔ)空間進(jìn)行回收,可分以下四種情況
1)給定塊左塊為空閑塊,則將此給定塊和左塊合并,作為一個(gè)空閑塊替代左塊插入到空閑塊隊(duì)列中。
2)給定塊右塊為空閑塊,則將此給定塊和右塊相合并,作為一個(gè)空閑塊替代右塊插入到空閑塊隊(duì)列中。
3)給定塊左塊和右塊均為空閑塊,則將此塊和左塊、右塊相合并,替代左塊插入到空閑塊隊(duì)列中,同時(shí)在空閑塊隊(duì)列中刪除右塊。
4)左塊和右塊均為占用塊,則修改此塊的占用標(biāo)志為空閑,將其插入到空閑塊隊(duì)列中。
將回收塊和相鄰的空閑塊相合并后,修改空閑鏈表的頭指針,使之指向剛合并的空閑塊,則再分配時(shí),從此回收塊起向后搜索空閑區(qū)間。其流程圖如圖3所示。
多Applet運(yùn)行環(huán)境下基于上下文和事件屬性的分段式臨時(shí)空間存儲(chǔ)管理機(jī)制
傳統(tǒng)的存儲(chǔ)分配方法在多Applet運(yùn)行環(huán)境下對(duì)于CLEAR_ON_DESELECT存儲(chǔ)空間的共享方案必然會(huì)產(chǎn)生地址沖突問(wèn)題,同時(shí)由于靜態(tài)分配CLEAR_ON_RESET空間,當(dāng)卡上已安裝的Applet用盡了已有的CLEAR_ON_RESET空間時(shí),后續(xù)的Applet再無(wú)法下載安裝到卡上。
為解決上述問(wèn)題,本發(fā)明將同一上下文具有相同事件屬性中的臨時(shí)數(shù)組組織在同一存儲(chǔ)段中并在持久存儲(chǔ)空間中為每個(gè)段創(chuàng)建一個(gè)根節(jié)點(diǎn)并指向相應(yīng)事件屬性的數(shù)組句柄隊(duì)列。實(shí)際上每個(gè)上下文中存在兩個(gè)數(shù)組句柄隊(duì)列,CLEAR_ON_RESET和CLEAR_ON_DESELECT事件屬性隊(duì)列。在運(yùn)行時(shí)一個(gè)上下文也對(duì)應(yīng)著相應(yīng)的兩個(gè)臨時(shí)存儲(chǔ)段。
本發(fā)明為每個(gè)存儲(chǔ)段設(shè)置相應(yīng)的段基址寄存器,數(shù)組句柄中的val_address元素存儲(chǔ)地址為段內(nèi)偏移量,實(shí)際的物理地址由基址加偏移量得到。此外,CLEAR_ON_RESET和CLEAR_ON_DESELECT存儲(chǔ)段分別從臨時(shí)空間的兩端進(jìn)行分配(高地址端和低地址端),其中CLEAR_ON_RESET段的生長(zhǎng)方向?yàn)橛筛叩刂废虻偷刂罚鳦LEAR_ON_DESELECT段的生長(zhǎng)方向?yàn)橛傻偷刂废蚋叩刂?,從而避免二者地址空間的重疊覆蓋。
若當(dāng)前請(qǐng)求分配的數(shù)組長(zhǎng)度為length,數(shù)組類型為type,相應(yīng)事件屬性的數(shù)組句柄隊(duì)列的根節(jié)點(diǎn)為root,則創(chuàng)建新的臨時(shí)數(shù)組對(duì)象的過(guò)程描述如下
Array_Handle*AllocateTransientObject() { pre_p=p=root; while(p<>null) { if((p->ref_tag==0)&&(p->length==length)&& (p->item_type==type)) { //重用已有的未引用對(duì)象空間 return p; } else { pre_p=p; p=p->next; } }<!-- SIPO <DP n="5"> --><dp n="d5"/> pre_p->next=new(Array_Handle); pre_p->next->val_address=AllocateMemoryBlock(pre_p); return pre->next; }
其中的new()函數(shù)用于在持久空間中分配Array_Handle結(jié)構(gòu)并返回首地址,AllocateMemoryBlock()函數(shù)用于分配臨時(shí)存儲(chǔ)空間,入口參數(shù)指針p為當(dāng)前隊(duì)列的隊(duì)尾指針,函數(shù)定義如下
u2 AllocateM emoryBlock(Array_handle*p) { if(有足夠的可用臨時(shí)空間) { address=p->val_address +p->length; return address; } else { 調(diào)用臨時(shí)空間垃圾回收進(jìn)程; if(有足夠的可用臨時(shí)空間) { address=p->val_address+p->length; return address; } else { 拋出臨時(shí)空間內(nèi)存溢出異常; } } }
在屬于某一上下文的Applet被成功選擇后,臨時(shí)存儲(chǔ)空間管理進(jìn)程會(huì)根據(jù)當(dāng)前的內(nèi)存使用情況來(lái)為此上下文中的兩個(gè)事件屬性存儲(chǔ)段確定段基址寄存器的值并遍歷臨時(shí)對(duì)象隊(duì)列進(jìn)行空間分配和初始化,同時(shí)考慮到運(yùn)行時(shí)Applet的臨時(shí)對(duì)象分配,在每個(gè)存儲(chǔ)段中都根據(jù)當(dāng)前的可用空間情況分配了一定的預(yù)留空間。為了存儲(chǔ)這些與存儲(chǔ)段相關(guān)的信息,系統(tǒng)在運(yùn)行時(shí)為每個(gè)分配的段在RAM中維護(hù)一個(gè)段描述符(最多為8個(gè))數(shù)據(jù)結(jié)構(gòu),其定義如下
Segment_Descriptor
{
u2 Base/段基址寄存器
u1 event_type //事件屬性RESET或DESELECT
u2 Length //段長(zhǎng)度
u2 Reserve_length //預(yù)留空間長(zhǎng)度
ul context //對(duì)象上下文
ul Non_ref_length //未引用空間長(zhǎng)度
}
多Applet實(shí)例運(yùn)行時(shí)的臨時(shí)空間分配情況如圖4所示。
當(dāng)某一上下文context啟動(dòng)后系統(tǒng)分配臨時(shí)空間存儲(chǔ)段的過(guò)程描述如下
void AllocateSegment(ulcontext) { s指向段描述符表中的第一個(gè)段描述符; while(s<>null) { if((s->context==0)&&(s->Length>請(qǐng)求長(zhǎng)度)) { s->context=context; 設(shè)置s->Reserve_length; 設(shè)置s->Non_ref_length; 設(shè)置s->event_type; return; } s指向下一段描述符; } 以存儲(chǔ)段為單位進(jìn)行存儲(chǔ)緊縮; if(無(wú)足夠的可用臨時(shí)存儲(chǔ)空間)<!-- SIPO <DP n="7"> --><dp n="d7"/> { 拋出臨時(shí)空間內(nèi)存溢出異常; } else { //設(shè)置相應(yīng)的段描述符 s->context=context; 設(shè)置s->Length; 設(shè)置s->Reserve_length; 設(shè)置s->Non_ref_length; 設(shè)置s->event_type; return; } }
垃圾回收管理
目前已有的一些垃圾回收管理機(jī)制不能完全適用于資源非常有限的智能卡環(huán)境,因此我們?cè)诰C合考慮響應(yīng)速度和有限資源的情況下給出了卡上臨時(shí)存儲(chǔ)空間的對(duì)象標(biāo)記回收法。
系統(tǒng)最初創(chuàng)建的臨時(shí)對(duì)象都被標(biāo)記為未引用。對(duì)于被持久系統(tǒng)中變量所引用的對(duì)象不能被回收。因此在字節(jié)碼解釋器的設(shè)計(jì)中對(duì)于所有的對(duì)引用域進(jìn)行賦值的指令都對(duì)被引用對(duì)象的類型進(jìn)行判斷并標(biāo)記臨時(shí)對(duì)象。若p為對(duì)象指針,則標(biāo)記過(guò)程如下
持久引用變量的賦值標(biāo)記過(guò)程如下
if(p->tag==00) //臨時(shí)對(duì)象
p->ref_tag=02; //持久引用
局部引用變量的賦值標(biāo)記過(guò)程如下
if((p->tag==00) //臨時(shí)對(duì)象
&&(p->ref_tag==00)) //未被引用
p->ref_tag=01; //局部變量引用
由于卡上的有限資源和實(shí)時(shí)響應(yīng)特性的要求,因此在卡上依據(jù)Java棧中的局部變量來(lái)進(jìn)行精確的垃圾回收是不可行的。所以我們將垃圾回收的標(biāo)記點(diǎn)選擇在Applet的select()、process()、deselect()方法返回后。此時(shí)的Java棧為空,所以只由局部變量所引用的對(duì)象均應(yīng)被回收。因此在標(biāo)記點(diǎn)處應(yīng)重新標(biāo)記root所指向隊(duì)列中的對(duì)象,若相應(yīng)的段描述符指針為s,標(biāo)記過(guò)程如下
p=root;while(p<>null) { if(p->ref_tag==01) { //局部變量引用,標(biāo)記為未引用并加到段描述符的未引用空間中 p->ref_tag=00; s->Non_ref_length+=p->length; } else { p=p->next; } }
由于Applet下載到智能卡上后不會(huì)被更改并會(huì)多次重復(fù)運(yùn)行,因此對(duì)于同一臨時(shí)對(duì)象的多次運(yùn)行引用概率非常高,所以對(duì)于局部變量引用的臨時(shí)對(duì)象我們?cè)跇?biāo)記過(guò)程中并不將其從隊(duì)列中刪除。這樣在此上下文重新運(yùn)行時(shí)此段RAM空間被預(yù)留出來(lái),以利于臨時(shí)對(duì)象的重用。
當(dāng)Applet請(qǐng)求分配臨時(shí)對(duì)象而無(wú)可用的臨時(shí)空間時(shí),系統(tǒng)會(huì)啟動(dòng)垃圾回收進(jìn)程。垃圾回收的策略步驟如下
1)為了滿足實(shí)時(shí)響應(yīng)特性,采取了增量式垃圾回收的策略,當(dāng)所需的存儲(chǔ)空間可提供時(shí)即結(jié)束回收過(guò)程。
2)在假設(shè)當(dāng)前運(yùn)行上下文中的臨時(shí)對(duì)象具有較高重用率的前提下,優(yōu)先垃圾回收當(dāng)前未運(yùn)行的上下文對(duì)應(yīng)的存儲(chǔ)段。
3)優(yōu)先回收預(yù)留的存儲(chǔ)空間。
4)優(yōu)先垃圾回收當(dāng)前運(yùn)行上下文存儲(chǔ)段的相鄰存儲(chǔ)段以減少數(shù)據(jù)移動(dòng)量。
5)若上述操作完成后仍不能提供所需的存儲(chǔ)空間,則對(duì)未運(yùn)行上下文存儲(chǔ)段中預(yù)留的未引用對(duì)象空間進(jìn)行存儲(chǔ)緊縮并進(jìn)行回收。
6)最后對(duì)運(yùn)行上下文的存儲(chǔ)段中預(yù)留的未引用對(duì)象空間進(jìn)行存儲(chǔ)緊縮并進(jìn)行回收。
臨時(shí)對(duì)象的垃圾回收過(guò)程描述如下
void GarbageCollection() { 根據(jù)段描述符表中未運(yùn)行上下文存儲(chǔ)段的Reserve_length來(lái)判斷預(yù)留空間是否<br/>滿足需求; if(預(yù)留空間滿足需求) { 回收未運(yùn)行上下文存儲(chǔ)段中的預(yù)留空間; 移動(dòng)相應(yīng)的存儲(chǔ)段并改變段基址寄存器; return; } 根據(jù)段描述符表中未運(yùn)行上下文存儲(chǔ)段的Non_ref_length來(lái)判斷未引用空間是<br/>否滿足需求; if(未引用空間滿足需求) { 對(duì)未運(yùn)行上下文存儲(chǔ)段中預(yù)留的未引用對(duì)象空間進(jìn)行存儲(chǔ)緊縮并進(jìn)行回 收; 移動(dòng)相應(yīng)的存儲(chǔ)段并改變段基址寄存器; return; } 根據(jù)段描述符表所有上下文存儲(chǔ)段的Non_ref_length來(lái)判斷未引用空間是否滿<br/>足需求; if(未引用空間滿足需求) { 對(duì)相應(yīng)的上下文存儲(chǔ)段中預(yù)留的未引用對(duì)象空間進(jìn)行存儲(chǔ)緊縮并進(jìn)行回 收; return; } if(上述二者的和滿足需求) {<!-- SIPO <DP n="10"> --><dp n="d10"/> 則分別進(jìn)行上述的回收過(guò)程; return; } }
若p、pre_p為數(shù)組句柄指針,root為隊(duì)列根節(jié)點(diǎn),s為段描述符指針,則對(duì)于預(yù)留的未引用對(duì)象空間進(jìn)行存儲(chǔ)緊縮的過(guò)程描述如下
void NonRefContraction() { pre_p=p=root; while(p<>null) { if(p->ref_tag==00) { //未引用對(duì)象 s->Non_ref_length-=p->length; for(;隊(duì)列中p的后續(xù)引用對(duì)象節(jié)點(diǎn);) { val_address-=p->length; } p=p->next; dispose(pre_p->next); pre_p->next=p; } else { pre_p=p; p=p->next; } } }
當(dāng)當(dāng)前上下文退出運(yùn)行環(huán)境時(shí),它所對(duì)應(yīng)的臨時(shí)空間整個(gè)都應(yīng)當(dāng)被系統(tǒng)回收,即回收此上下文對(duì)應(yīng)的全部存儲(chǔ)段,若當(dāng)前上下文為Current_context,s為段描述符指針,回收過(guò)程描述如下
while(Current_context對(duì)應(yīng)的段未回收完) { if(s->context==Current_context) { //context為0代表當(dāng)前段描述符未使用 s->context=0; } s指向下一段描述符; }
綜上所述,本發(fā)明提供了一種智能卡存儲(chǔ)環(huán)境的管理方法,該管理方法中采用雙向鏈表結(jié)構(gòu)進(jìn)行持久空間管理,可以較為容易地插入或刪除一個(gè)記錄,同時(shí)方便地使檢測(cè)指針向前驅(qū)和后驅(qū)方向移動(dòng),因此很容易進(jìn)行實(shí)例化對(duì)象或?qū)?yīng)用程序存儲(chǔ)空間進(jìn)行分配或刪除操作。有效地節(jié)省智能卡平臺(tái)有限的計(jì)算資源和存儲(chǔ)資源。該管理方法中對(duì)臨時(shí)空間采用分段式存儲(chǔ)管理機(jī)制,有效避免了傳統(tǒng)控制方法中的地址沖突問(wèn)題,增強(qiáng)空間分配和回收運(yùn)行時(shí)的自適應(yīng)性,非常適合于智能卡的運(yùn)行環(huán)境。
權(quán)利要求
1.一種智能卡存儲(chǔ)環(huán)境的控制方法,所述智能卡由CPU、RAM存儲(chǔ)器、ROM存儲(chǔ)器、EEPROM存儲(chǔ)器、邏輯運(yùn)算模塊、加密引擎模塊、中斷處理模塊、CRC發(fā)生器、隨機(jī)數(shù)發(fā)生器、定時(shí)器和外部接口構(gòu)成,所述RAM存儲(chǔ)器用于存儲(chǔ)臨時(shí)數(shù)據(jù)信息,所述ROM存儲(chǔ)器和EEPROM存儲(chǔ)器用于存儲(chǔ)持久數(shù)據(jù)信息,其特征在于對(duì)外部輸入的數(shù)據(jù)信息存儲(chǔ)步驟有
(A)對(duì)所述外部輸入的數(shù)據(jù)信息進(jìn)行存儲(chǔ)類型分類,得到存儲(chǔ)類型,所述存儲(chǔ)類型有第一存儲(chǔ)類型,用于實(shí)現(xiàn)持久空間的存儲(chǔ)管理;和第二存儲(chǔ)類型,用于實(shí)現(xiàn)CLEAR_ON_RESET屬性的臨時(shí)空間的存儲(chǔ)管理;和第三存儲(chǔ)類型,用于實(shí)現(xiàn)CLEAR_ON_DESELECT屬性的臨時(shí)空間的存儲(chǔ)管理;
(B)對(duì)經(jīng)(A)存儲(chǔ)分類處理后的所述存儲(chǔ)類型按照存儲(chǔ)規(guī)則進(jìn)行存儲(chǔ)控制,并將分類處理后的所述數(shù)據(jù)信息分別存儲(chǔ)于智能卡中的存儲(chǔ)器內(nèi),
所述存儲(chǔ)規(guī)則有第一存儲(chǔ)規(guī)則,用于將所述第一存儲(chǔ)類型按照雙向鏈表結(jié)構(gòu)進(jìn)行存儲(chǔ)以及回收,存儲(chǔ)采用首次適配法,回收采用空間合并法;第二存儲(chǔ)規(guī)則,用于將所述的第二存儲(chǔ)類型按照從臨時(shí)空間的高地址端開(kāi)始向低地址進(jìn)行存儲(chǔ),回收采用對(duì)象標(biāo)記回收法;第三存儲(chǔ)規(guī)則,用于將所述的第三存儲(chǔ)類型按照從臨時(shí)空間的低地址端開(kāi)始向高地址進(jìn)行存儲(chǔ),回收采用對(duì)象標(biāo)記回收法。
2.根據(jù)權(quán)利要求1所述的智能卡存儲(chǔ)環(huán)境的控制方法,其特征在于第一存儲(chǔ)類型存儲(chǔ)于EEPROM存儲(chǔ)器中;第二存儲(chǔ)類型和第三存儲(chǔ)類型存儲(chǔ)于RAM存儲(chǔ)器中。
3.根據(jù)權(quán)利要求1所述的智能卡存儲(chǔ)環(huán)境的控制方法,其特征在于存儲(chǔ)規(guī)則中的第一存儲(chǔ)規(guī)則對(duì)所述第一存儲(chǔ)類型進(jìn)行雙向鏈表存儲(chǔ)結(jié)構(gòu)的首次適配法是,由輸入的數(shù)據(jù)信息量n在頭指針pav所指向的空閑鏈表中查找滿足size≥n的空閑塊M;當(dāng)size-n≤10字節(jié)時(shí)直接將此空間塊分配給輸入的數(shù)據(jù)信息;否則,將空閑塊M分為兩部分,其中相等于輸入的數(shù)據(jù)信息量n的存儲(chǔ)空間分配給輸入的數(shù)據(jù)信息;剩余部分作為空閑塊插入到空閑鏈表中;對(duì)所述的輸入的數(shù)據(jù)信息量n分配完成后返回到分配指針,并修改頭指針pav為空閑塊M的下一空閑塊,結(jié)束第一存儲(chǔ)類型的首次適配;對(duì)空閑鏈表中所有的空閑塊不滿足size≥n時(shí)輸出錯(cuò)誤信息并結(jié)束第一存儲(chǔ)類型的首次適配。
4.根據(jù)權(quán)利要求1所述的智能卡存儲(chǔ)環(huán)境的控制方法,其特征在于存儲(chǔ)規(guī)則中的第一存儲(chǔ)規(guī)則對(duì)所述第一存儲(chǔ)類型進(jìn)行雙向鏈表回收結(jié)構(gòu)采用的空間合并法是,對(duì)回收空間塊H進(jìn)行相鄰塊的空閑判斷,當(dāng)左空間塊HL為空閑時(shí),則將回收空間塊H與左空間塊HL合并,用所述合并后的空間塊來(lái)替代左空間塊HL在空閑鏈表中的位置,并修改空閑鏈表的頭指針pav,使頭指針pav指向所述合并后的空間塊;當(dāng)右空間塊HR為空閑時(shí),則將回收空間塊H與右空間塊HR合并,用所述合并后的空間塊來(lái)替代右空間塊HR在空閑鏈表中的位置,并修改空閑鏈表的頭指針pav,使頭指針pav指向所述合并后的空間塊;當(dāng)左空間塊HL和右空間塊HR都空閑時(shí),將右空間塊HR和左空間塊HL與回收空間塊H進(jìn)行合并,用所述合并后的空間塊來(lái)替代左空間塊HL,并在空閑鏈表中刪除右空間塊HR,修改空閑鏈表的頭指針pav,使頭指針pav指向所述合并后的空間塊;當(dāng)左空間塊HL和右空間塊HR都不空閑時(shí),修改回收空間塊H占用標(biāo)志項(xiàng),將修改后的回收空間塊H插入到空閑鏈表的表首,修改空閑鏈表的頭指針pav,使頭指針pav指向所述修改后的回收空間塊H。
5.根據(jù)權(quán)利要求1所述的智能卡存儲(chǔ)環(huán)境的控制方法,其特征在于存儲(chǔ)規(guī)則中的第二存儲(chǔ)規(guī)則是對(duì)所述第二存儲(chǔ)類型按照從臨時(shí)空間的高地址端開(kāi)始向低地址進(jìn)行存儲(chǔ)的方法是,將同一上下文具有CLEAR_ON_RESET事件屬性中的臨時(shí)數(shù)據(jù)信息存儲(chǔ)在臨時(shí)空間中的同一存儲(chǔ)段中,并在持久空間為所述存儲(chǔ)段創(chuàng)建一個(gè)根節(jié)點(diǎn)并指向CLEAR_ON_RESET事件屬性的數(shù)組句柄隊(duì)列;在所述存儲(chǔ)段上設(shè)有段基址寄存器,所述段基址寄存器與所述數(shù)組句柄中的val_address元素存儲(chǔ)地址相加得到存儲(chǔ)數(shù)據(jù)的物理地址。
6.根據(jù)權(quán)利要求1所述的智能卡存儲(chǔ)環(huán)境的控制方法,其特征在于存儲(chǔ)規(guī)則中的第二存儲(chǔ)規(guī)則是對(duì)所述第二存儲(chǔ)類型進(jìn)行回收采用對(duì)象標(biāo)記回收法,所述對(duì)象標(biāo)記回收法回收過(guò)程是,
1)根據(jù)所述對(duì)象指針p所指向的臨時(shí)空間中的對(duì)象進(jìn)行賦值標(biāo)記,所述賦值標(biāo)記的數(shù)據(jù)信息被持久空間所引用記為“02”,所述賦值標(biāo)記的數(shù)據(jù)信息被當(dāng)前幀中的局部變量所引用記為“01”,所述賦值標(biāo)記的數(shù)據(jù)信息未被引用記為“00”;
2)對(duì)所述標(biāo)記“02”、所述標(biāo)記“01”和所述標(biāo)記“00”所標(biāo)記的對(duì)象進(jìn)行增量式垃圾回收。
7.根據(jù)權(quán)利要求6所述的智能卡存儲(chǔ)環(huán)境的控制方法,其特征在于所述增量式垃圾回收步驟有,1)對(duì)已存儲(chǔ)于智能卡內(nèi)的臨時(shí)空間的數(shù)據(jù)信息優(yōu)先進(jìn)行當(dāng)前未運(yùn)行的上下文對(duì)應(yīng)的存儲(chǔ)段的垃圾回收,對(duì)所述回收后的信息滿足所需空間,則結(jié)束回收;2)對(duì)所述經(jīng)1)步驟回收后的信息未滿足所需空間,則回收預(yù)留的存儲(chǔ)空間;3)對(duì)所述經(jīng)1)和2)步驟回收后的信息未滿足所需空間,則回收當(dāng)前運(yùn)行上下文存儲(chǔ)段的相鄰存儲(chǔ)段;4)對(duì)所述經(jīng)1)、2)和3)步驟回收后的信息未滿足所需空間,則回收未運(yùn)行上下文存儲(chǔ)段中預(yù)留的未引用對(duì)象空間;5)對(duì)所述經(jīng)1)、2)、3)和4)步驟回收后的信息未滿足所需空間,則回收運(yùn)行上下文的存儲(chǔ)段中預(yù)留的未引用對(duì)象空間。
8.根據(jù)權(quán)利要求1所述的智能卡存儲(chǔ)環(huán)境的控制方法,其特征在于存儲(chǔ)規(guī)則中的第三存儲(chǔ)規(guī)則是對(duì)所述第三存儲(chǔ)類型按照從臨時(shí)空間的低地址端開(kāi)始向高地址進(jìn)行存儲(chǔ)的方法是,將同一上下文具有CLEAR_ON_DESELECT事件屬性中的臨時(shí)數(shù)據(jù)信息存儲(chǔ)在臨時(shí)空間中的同一存儲(chǔ)段中,并在持久空間為所述存儲(chǔ)段創(chuàng)建一個(gè)根節(jié)點(diǎn)并指向CLEAR_ON_DESELECT事件屬性的數(shù)組句柄隊(duì)列;在所述存儲(chǔ)段上設(shè)有段基址寄存器,所述段基址寄存器與所述數(shù)組句柄中的val_address元素存儲(chǔ)地址相加得到存儲(chǔ)數(shù)據(jù)的物理地址。
9.根據(jù)權(quán)利要求1所述的智能卡存儲(chǔ)環(huán)境的控制方法,其特征在于存儲(chǔ)規(guī)則中的第三存儲(chǔ)規(guī)則是對(duì)所述第三存儲(chǔ)類型進(jìn)行回收采用對(duì)象標(biāo)記回收法,所述對(duì)象標(biāo)記回收法回收過(guò)程是,
1)根據(jù)所述對(duì)象指針p所指向的臨時(shí)空間中的對(duì)象進(jìn)行賦值標(biāo)記,所述賦值標(biāo)記的數(shù)據(jù)信息被持久空間所引用記為“02”,所述賦值標(biāo)記的數(shù)據(jù)信息被當(dāng)前幀中的局部變量所引用記為“01”,所述賦值標(biāo)記的數(shù)據(jù)信息未被引用記為“00”;
2)對(duì)所述標(biāo)記“02”、所述標(biāo)記“01”和所述標(biāo)記“00”所標(biāo)記的對(duì)象進(jìn)行增量式垃圾回收。
10.根據(jù)權(quán)利要求9所述的智能卡存儲(chǔ)環(huán)境的控制方法,其特征在于所述增量式垃圾回收步驟有,1)對(duì)已存儲(chǔ)于智能卡內(nèi)的臨時(shí)空間的數(shù)據(jù)信息進(jìn)行當(dāng)前未運(yùn)行的上下文對(duì)應(yīng)的存儲(chǔ)段進(jìn)行優(yōu)先垃圾回收,對(duì)所述回收后的信息滿足所需空間,則結(jié)束回收;2)對(duì)所述經(jīng)1)步驟回收后的信息未滿足所需空間,則回收預(yù)留的存儲(chǔ)空間;3)對(duì)所述經(jīng)1)和2)步驟回收后的信息未滿足所需空間,則回收當(dāng)前運(yùn)行上下文存儲(chǔ)段的相鄰存儲(chǔ)段;4)對(duì)所述經(jīng)1)、2)和3)步驟回收后的信息未滿足所需空間,則回收未運(yùn)行上下文存儲(chǔ)段中預(yù)留的未引用對(duì)象空間;5)對(duì)所述經(jīng)1)、2)、3)和4)步驟回收后的信息未滿足所需空間,則回收運(yùn)行上下文的存儲(chǔ)段中預(yù)留的未引用對(duì)象空間。
全文摘要
本發(fā)明公開(kāi)了一種智能卡存儲(chǔ)環(huán)境的控制方法,智能卡存儲(chǔ)環(huán)境由CPU、RAM存儲(chǔ)器、ROM存儲(chǔ)器、EEPROM存儲(chǔ)器、邏輯運(yùn)算模塊、加密引擎模塊、中斷處理模塊、CRC發(fā)生器、隨機(jī)數(shù)發(fā)生器、定時(shí)器和外部接口構(gòu)成,所述RAM存儲(chǔ)器用于存儲(chǔ)臨時(shí)數(shù)據(jù)信息,所述ROM存儲(chǔ)器和EEPROM存儲(chǔ)器用于存儲(chǔ)持久數(shù)據(jù)信息,在智能卡中對(duì)外部輸入的數(shù)據(jù)信息首先進(jìn)行存儲(chǔ)類型分類,然后對(duì)所述不同的存儲(chǔ)類型進(jìn)行存儲(chǔ)規(guī)則的控制,并將其存儲(chǔ)于智能卡卡內(nèi)。本發(fā)明的智能卡存儲(chǔ)環(huán)境的控制方法有效節(jié)省智能卡平臺(tái)有限的計(jì)算資源和存儲(chǔ)資源,增強(qiáng)了空間分配和回收運(yùn)行時(shí)的自適應(yīng)性,提出了多應(yīng)用運(yùn)行環(huán)境下雙向鏈表結(jié)構(gòu)的持久空間的存儲(chǔ)管理策略以及分段式的臨時(shí)空間的存儲(chǔ)管理策略,設(shè)計(jì)并實(shí)現(xiàn)了相應(yīng)的存儲(chǔ)分配和垃圾回收。
文檔編號(hào)G06F12/02GK1687904SQ200510077159
公開(kāi)日2005年10月26日 申請(qǐng)日期2005年6月16日 優(yōu)先權(quán)日2005年6月16日
發(fā)明者吳鑫山, 楊東凱, 姚黎明, 張其善 申請(qǐng)人:北京航空航天大學(xué)