專利名稱:基于緩存的java卡事務(wù)處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息安全領(lǐng)域,特別涉及一種基于緩存的java卡事務(wù)處理方法。
背景技術(shù):
智能卡內(nèi)部的集成電路包括中央處理器CPU、可編程只讀存儲器 EEPROM(ElectricalIy Erasable Programmable Read-Only Memory)> 隨機存儲器 RAM (Random Access Memory)和固化在只讀存儲器 R0M(Read_0nly Memory)中的片內(nèi)操作系統(tǒng)COS (Chip Operating System)。目前智能卡的性能比較低,其中影響最大的是對 EEPROM的寫操作過多,然而,事務(wù)處理相關(guān)部分對EEPROM的寫操作占EEPROM寫操作總數(shù)的 75%左右,所以,要提高智能卡的性能,事務(wù)處理機制的優(yōu)化是急需解決的任務(wù)。
發(fā)明內(nèi)容
鑒于現(xiàn)有技術(shù)的不足,為了提高智能卡的性能,本發(fā)明提出了一種基于緩存的 java卡事務(wù)處理方法。本發(fā)明采用的技術(shù)方案如下包括Sl java卡虛擬機上電,判斷是否啟動掉電保護,是則執(zhí)行掉電保護,然后執(zhí)行 S3,否則執(zhí)行S2 ;S2 java卡虛擬機進行事務(wù)處理初始化,執(zhí)行S3 ;S3 java卡虛擬機獲取applet字節(jié)碼;S4 所述java卡虛擬機解析所述applet字節(jié)碼;當(dāng)解析得到的是第一應(yīng)用程序接口對應(yīng)的字節(jié)碼時,調(diào)用第一應(yīng)用程序接口開始事務(wù),返回S3 ;當(dāng)解析得到的是第一函數(shù)對應(yīng)的字節(jié)碼時,調(diào)用第一函數(shù)寫數(shù)據(jù),返回S3,包括步驟A 當(dāng)事務(wù)處理標志位有效且包含有當(dāng)前原數(shù)據(jù)的第一數(shù)據(jù)結(jié)構(gòu)的長度小于或等于所述第二存儲器的備份緩存區(qū)的剩余存儲空間時,所述java卡虛擬機判斷所述第二存儲器的備份緩沖區(qū)中是否存在包含有所述當(dāng)前原數(shù)據(jù)的第一數(shù)據(jù)結(jié)構(gòu)體;如存在則所述java卡虛擬機用當(dāng)前新值替換所述第一數(shù)據(jù)結(jié)構(gòu)體中的當(dāng)前原數(shù)據(jù);如不存在則所述java卡虛擬機將所述當(dāng)前原數(shù)據(jù)按照第一預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到所述第二存儲器的備份緩沖區(qū)中,并將所述當(dāng)前新值按照第二預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式寫入到所述第二存儲器的新值緩沖區(qū)中;所述第二存儲器的備份緩存區(qū)中存儲的第一數(shù)據(jù)結(jié)構(gòu)、新值緩存區(qū)中存儲的是第二數(shù)據(jù)結(jié)構(gòu),所述第一存儲器的備份緩存區(qū)中存儲的是第三數(shù)據(jù)結(jié)構(gòu)、原數(shù)據(jù)存儲區(qū)存儲的是原數(shù)據(jù)和/或新值;當(dāng)解析得到的是第二函數(shù)對應(yīng)的字節(jié)碼時,調(diào)用第二函數(shù)讀數(shù)據(jù),返回S3,包括當(dāng)事務(wù)處理標志有效時,所述java卡虛擬機從包含有全部讀取地址的所述第二數(shù)據(jù)結(jié)構(gòu)中讀取新值;或所述java卡虛擬機從第二數(shù)據(jù)結(jié)構(gòu)中根據(jù)所述讀取地址讀取對應(yīng)的新值,根據(jù)所述讀取地址從所述第一存儲器的原數(shù)據(jù)緩存區(qū)中讀取原數(shù)據(jù),并用所述讀取的新值替換所述讀取的原數(shù)據(jù)中的與所述新值的寫入地址相同的對應(yīng)部分;當(dāng)解析得到的是第二應(yīng)用程序接口對應(yīng)的字節(jié)碼時,調(diào)用第二應(yīng)用程序接口提交事務(wù),返回S3,包括當(dāng)事務(wù)處理標志有效且所述第二存儲器的備份緩沖區(qū)的整體標志位有效時,所述 java卡虛擬機將所述第一數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù)按照第三預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到所述第一存儲器的備份緩沖區(qū)中,將所述第二存儲器的新值緩沖區(qū)中第二數(shù)據(jù)結(jié)構(gòu)中的新值寫入到所述第一存儲器的原數(shù)據(jù)存儲區(qū)中相應(yīng)的寫入地址中,清除第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu),并將事務(wù)處理標志位的值置為無效;當(dāng)解析得到的是第三應(yīng)用程序接口對應(yīng)的字節(jié)碼時,調(diào)用第三應(yīng)用程序接口終止事務(wù),返回S3,包括當(dāng)事務(wù)處理標志有效時,所述java卡虛擬機還原所述第一存儲器的備份緩沖區(qū)中標志位為有效的第三數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù);清除第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu);當(dāng)解析得到的是其他字節(jié)碼時,根據(jù)所述字節(jié)碼執(zhí)行相應(yīng)操作,返回S3。所述java卡虛擬機解析所述applet字節(jié)碼包括步驟a 所述java卡虛擬機判斷所述applet字節(jié)碼中的首字節(jié)是否為預(yù)先約定的第一字節(jié),是則執(zhí)行步驟b,否則返回S3 ;步驟b 所述java卡虛擬機根據(jù)所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)檢索索引表,并判斷所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)是否為預(yù)先約定的字節(jié);如所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)為預(yù)先約定的第二字節(jié),則所述 applet字節(jié)碼為所述第一應(yīng)用程序接口對應(yīng)的字節(jié)碼,所述java卡虛擬機調(diào)用第一應(yīng)用程序接口開始事務(wù),返回S3;如所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)為預(yù)先約定的第三字節(jié),則所述 applet字節(jié)碼為所述第一函數(shù)對應(yīng)的字節(jié)碼,所述java卡虛擬機調(diào)用第一函數(shù)寫數(shù)據(jù),返回S3 ;如所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)為預(yù)先約定的第四字節(jié),則所述 applet字節(jié)碼為所述第二函數(shù)對應(yīng)的字節(jié)碼,所述java卡虛擬機調(diào)用第二函數(shù)讀數(shù)據(jù),返回S3 ;如所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)為預(yù)先約定的第五字節(jié),則所述 applet字節(jié)碼為所述第二應(yīng)用程序接口對應(yīng)的字節(jié)碼,所述java卡虛擬機調(diào)用第二應(yīng)用程序接口提交事務(wù),返回S3;如所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)為預(yù)先約定的第六字節(jié),則所述 applet字節(jié)碼為所述第三應(yīng)用程序接口對應(yīng)的字節(jié)碼,所述java卡虛擬機調(diào)用第三應(yīng)用程序接口終止事務(wù),返回S3;如所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)為其他字節(jié)則調(diào)用對應(yīng)接口進行相應(yīng)操作,返回S3。所述java卡虛擬機調(diào)用第一應(yīng)用程序接口開始事物包括
當(dāng)java卡的第一應(yīng)用程序接口被調(diào)用時,所述java卡虛擬機判斷事務(wù)處理標志位的值是否為true,是則報錯,否則將事務(wù)處理標志位的值置為true。所述步驟A具體為步驟Al 當(dāng)java卡的所述第一函數(shù)被調(diào)用時,所述java卡虛擬機判斷所述事務(wù)處理標志位的值是否為true,是則執(zhí)行步驟A3,否則執(zhí)行步驟A2 ;步驟A2 所述java卡虛擬機用接收到當(dāng)前新值替換所述第一存儲器的原數(shù)據(jù)存儲區(qū)中的當(dāng)前原數(shù)據(jù);步驟A3 所述java卡虛擬機判斷包含有所述當(dāng)前新值的第二數(shù)據(jù)結(jié)構(gòu)的長度是否大于所述第二存儲區(qū)的備份緩存區(qū)的存儲空間,是則執(zhí)行步驟A4,否則執(zhí)行步驟A6 ;步驟A4 所述java卡虛擬機從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取所述當(dāng)前原數(shù)據(jù),并將所述當(dāng)前原數(shù)據(jù)按照第三預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到所述第一存儲器的備份緩沖區(qū)中;步驟A5 所述java卡虛擬機用接收到的當(dāng)前新值替換所述第一存儲器的原數(shù)據(jù)存儲區(qū)中的當(dāng)前原數(shù)據(jù);步驟A6 所述java卡虛擬機判斷所述第二存儲器的備份緩存區(qū)中的剩余存儲空間是否大于所述包含有所述當(dāng)前新值的第二數(shù)據(jù)結(jié)構(gòu)的長度,是則執(zhí)行步驟A7,否則執(zhí)行步驟A8 ;步驟A7 所述java卡虛擬機判斷在所述第二存儲器的備份緩沖區(qū)中是否存在包含有所述第一存儲器的原數(shù)據(jù)存儲區(qū)中當(dāng)前新值寫入地址中的原數(shù)據(jù)的第一數(shù)據(jù)結(jié)構(gòu),如存在則執(zhí)行步驟A12,如不存在則執(zhí)行步驟AlO ;步驟A8 所述java卡虛擬機從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取所述當(dāng)前原數(shù)據(jù),并將所述當(dāng)前原數(shù)據(jù)按所述第三預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到所述第一存儲器的備份緩沖區(qū)中;步驟A9 所述java卡虛擬機讀取所述第二數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù),并用所述讀取到的數(shù)據(jù)替換所述第一存儲器的原數(shù)據(jù)存儲區(qū)中的當(dāng)前原數(shù)據(jù),清除所述第二數(shù)據(jù)結(jié)構(gòu)和第一數(shù)據(jù)結(jié)構(gòu),順序執(zhí)行步驟A10;步驟AlO 所述java卡虛擬機從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取所述當(dāng)前原數(shù)據(jù),并將所述讀取到的當(dāng)前原數(shù)據(jù)按照所述第一預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到所述第二存儲器的備份緩沖區(qū)中;步驟All 所述java卡虛擬機將所述當(dāng)前新值按照所述第二預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式寫入到第二存儲器的新值緩沖區(qū)中;步驟A12 所述java卡虛擬機用所述當(dāng)前新值替換所述第二數(shù)據(jù)結(jié)構(gòu)中的相應(yīng)數(shù)據(jù)。所述java卡虛擬機調(diào)用第二函數(shù)讀數(shù)據(jù)包括步驟B 當(dāng)事務(wù)處理標志位的值為true時,所述java卡虛擬機判斷在所述第二數(shù)據(jù)結(jié)構(gòu)中的新值寫入地址是否包含讀取地址;如包含全部讀取地址,則所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)體中根據(jù)所述讀取地址讀取對應(yīng)的新值;如包含讀取地址,則所述java卡虛擬機根據(jù)所述讀取地址從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取對應(yīng)的原數(shù)據(jù),從所述第二數(shù)據(jù)結(jié)構(gòu)體中根據(jù)所述讀取地址讀取對應(yīng)的新值,并用所述新值替換所述原數(shù)據(jù)中的與所述新值的寫入地址相同的對應(yīng)部分;如不包含讀取地址,則所述java卡虛擬機根據(jù)所述讀取地址從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取對應(yīng)的原數(shù)據(jù)。所述步驟B具體為步驟Bl 當(dāng)java卡的所述第二函數(shù)被調(diào)用時,所述java卡虛擬機判斷事務(wù)處理標志的值是否為true,是則執(zhí)行步驟B3,否則執(zhí)行步驟B2 ;步驟B2 所述java卡虛擬機根據(jù)所述讀取地址從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取對應(yīng)的原數(shù)據(jù);步驟B3 所述java卡虛擬機將第一個第一數(shù)據(jù)結(jié)構(gòu)作為當(dāng)前數(shù)據(jù)結(jié)構(gòu),判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否為有效,是則執(zhí)行步驟B4,否則執(zhí)行步驟B14 ;步驟B4 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)中是否包含讀取地址,若包含全部的所述讀取地址則執(zhí)行步驟B5,若包含部分的所述讀取地址則執(zhí)行步驟B6,若不包含所述讀取地址則執(zhí)行步驟B14 ;步驟B5 所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)根據(jù)所述讀取地址讀取對應(yīng)的新值;步驟B6 所述java卡虛擬機根據(jù)所述讀取地址從第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取對應(yīng)的原數(shù)據(jù);步驟B7 所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)中根據(jù)所述讀取地址讀取對應(yīng)的新值,并用所述新值替換所述步驟B6中讀取到的原數(shù)據(jù)中與所述新值的寫入地址相同的對應(yīng)部分;步驟B8 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)是否為最后一個,是則返回 S3,否則執(zhí)行步驟B9 ;步驟B9 所述java卡虛擬機將所述第二存儲器的備份緩沖區(qū)中的下一個第一數(shù)據(jù)結(jié)構(gòu)作為當(dāng)前數(shù)據(jù)結(jié)構(gòu);步驟BlO 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否為有效,是則執(zhí)行步驟B11,否則返回執(zhí)行步驟B8 ;步驟Bll 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)是否包含所述讀取地址的剩余部分,若包含全部的所述讀取地址的剩余部分則執(zhí)行步驟B13,若包含部分所述讀取地址的剩余部分則執(zhí)行步驟B12,若不包含所述讀取地址的剩余部分,則返回執(zhí)行步驟B8 ;步驟B12 所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)中根據(jù)所述讀取地址的剩余部分讀取對應(yīng)的新值,并用所述讀取到的新值替換所述步驟B6中讀取到的原數(shù)據(jù)中與所述新值的寫入地址相同的對應(yīng)部分,返回執(zhí)行步驟B8 ;步驟B13 所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)中根據(jù)所述讀取地址的剩余部分讀取對應(yīng)的新值,并用所述讀取到的新值替換所述步驟B6中讀取到的原數(shù)據(jù)中與所述新值的寫入地址相同的對應(yīng)部分;步驟B14 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)是否是最后一個,是則執(zhí)行步驟B15,否則執(zhí)行步驟B16 ;步驟B15 所述java卡虛擬機根據(jù)所述讀取地址從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取對應(yīng)的原數(shù)據(jù);步驟B16 所述java卡虛擬機將所述第二存儲器的備份緩沖區(qū)中的下一個數(shù)據(jù)結(jié)構(gòu)作為當(dāng)前數(shù)據(jù)結(jié)構(gòu);步驟B17 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否為有效,是則執(zhí)行步驟B18,否則返回執(zhí)行步驟B14 ;步驟B18 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)是否包所述含讀取地址,若包含全部所述讀取地址則執(zhí)行步驟B19,若包含部分所述讀取地址則返回執(zhí)行步驟B6,若不包含所述讀取地址則返回執(zhí)行步驟B14 ;步驟B19 所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)中根據(jù)所述讀取地址讀取對應(yīng)的新值。所述java卡虛擬機調(diào)用第二應(yīng)用程序接口提交事務(wù)包括步驟C 當(dāng)事務(wù)處理標志位的值為true時,所述java卡虛擬機判斷第二存儲器的備份緩沖區(qū)的整體標志位是否有效;是則將所述第二存儲器的備份緩沖區(qū)中的原數(shù)據(jù)按照第三預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到第一存儲器的備份緩沖區(qū)的中,將所述第二存儲器的新值緩沖區(qū)中的新值寫入到所述第一存儲器的原數(shù)據(jù)存儲區(qū)的相應(yīng)地址中,將事務(wù)處理標志位的值置為false,并清除所述第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu);否則將事務(wù)處理標志位的值置為false,并清除所述第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu)。所述步驟C具體為步驟Cl 當(dāng)java卡的第二應(yīng)用程序接口被調(diào)用時,所述java卡虛擬機判斷事務(wù)處理標志的值是否為true,是則執(zhí)行步驟C2,否則返回S3 ;步驟C2 所述java卡虛擬機判斷第一個第一數(shù)據(jù)結(jié)構(gòu)的標志位是否有效,是則執(zhí)行步驟C3,否則執(zhí)行步驟C8;步驟C3 所述java卡虛擬機將第一個第一數(shù)據(jù)結(jié)構(gòu)的整體標志位置為無效;步驟C4 所述java卡虛擬機從所述第一數(shù)據(jù)結(jié)構(gòu)中讀取原數(shù)據(jù),并將所述原數(shù)據(jù)按照第三預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到所述第一存儲器的備份緩沖區(qū)中;步驟C5 所述java卡虛擬機將包含有所述原數(shù)據(jù)的第三數(shù)據(jù)結(jié)構(gòu)的標志位置為有效;步驟C6 所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)中讀取新值,并根據(jù)所述第二數(shù)據(jù)結(jié)構(gòu)中的寫入地址將所述新值寫入到所述第一存儲器的原數(shù)據(jù)存儲區(qū)的相應(yīng)地址中;步驟C7 所述java卡虛擬機將所述第一存儲器的備份緩沖區(qū)的整體標志位置為無效,順序執(zhí)行步驟C8;步驟C8 所述java卡虛擬機將事務(wù)處理標志位的值置為false,并清除所述第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu)。所述java卡虛擬機調(diào)用第三應(yīng)用程序接口終止事務(wù),具體包括步驟Dl 當(dāng)java卡的第三應(yīng)用程序接口被調(diào)用時,所述java卡虛擬機判斷所述事務(wù)處理標志位的值是否為true,是則執(zhí)行步驟D2,否則返回S3 ;步驟D2 所述java卡虛擬機將第一個第三數(shù)據(jù)結(jié)構(gòu)作為當(dāng)前數(shù)據(jù)結(jié)構(gòu);
步驟D3 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否有效,是則執(zhí)行步驟D5,否則執(zhí)行步驟D4;步驟D4 所述java卡虛擬機清除所述第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu);步驟D5 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)是否為最后一個,是則執(zhí)行步驟D6,否則執(zhí)行步驟D8;步驟D6 所述java卡虛擬機還原所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù);步驟D7 所述java卡虛擬機將所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位置為無效,返回執(zhí)行步驟D2 ;步驟D8 所述java卡虛擬機將下一個第三數(shù)據(jù)結(jié)構(gòu)為作為當(dāng)前數(shù)據(jù)結(jié)構(gòu);步驟D9 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否為有效,是則執(zhí)行步驟D5,否則執(zhí)行步驟D10;步驟DlO 所述java卡虛擬機還原所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的上一個數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù);步驟Dll 所述java卡虛擬機將所述上一個數(shù)據(jù)結(jié)構(gòu)的標志位置為無效,返回執(zhí)行步驟D2。所述掉電保護包括當(dāng)事務(wù)處理標志有效時,所述java卡虛擬機還原標志位為有效的第三數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù),清除第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu),將事務(wù)處理標志置為無效;當(dāng)事務(wù)處理標志無效時,所述java卡虛擬機清除第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu)。所述掉電保護具體包括步驟El 所述java卡虛擬機判斷事務(wù)標志位的值是否為true,是則執(zhí)行步驟E3, 否則執(zhí)行步驟E2;步驟E2 所述java卡虛擬機清除所述第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu);步驟E3 所述java卡虛擬機將第一個第三數(shù)據(jù)結(jié)構(gòu)作為當(dāng)前數(shù)據(jù)結(jié)構(gòu);步驟E4 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否為有效,是則執(zhí)行步驟E6,否則執(zhí)行步驟E5;步驟E5 所述java卡虛擬機清除所述第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu),將所述事務(wù)標志位置位的值置為false ;步驟E6 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)是否為最后一個,是則執(zhí)行步驟E7,否則執(zhí)行步驟E9;步驟E7 所述java卡虛擬機還原所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù);步驟E8 所述java卡虛擬機將所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位置為無效,返回執(zhí)行步驟E 3 ;步驟E9 所述java卡虛擬機將下一個第三數(shù)據(jù)結(jié)構(gòu)作為當(dāng)前數(shù)據(jù)結(jié)構(gòu);步驟ElO 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否為有效,是則返回執(zhí)行步驟E6,否則執(zhí)行步驟Ell ;步驟Ell 所述java卡虛擬機還原所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的上一個數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù);步驟E12 所述java卡虛擬機將所述上一個數(shù)據(jù)結(jié)構(gòu)的標志位置為無效,返回執(zhí)行步驟E3。所述java卡虛擬機進行事務(wù)處理初始化包括java卡虛擬機清除第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu),將所述事務(wù)處理標志位置為無效,將所述第一存儲器備份緩沖區(qū)中第一個第三數(shù)據(jù)結(jié)構(gòu)的標志位置為無效。所述還原具體為所述java卡虛擬機所述第一數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù),并根據(jù)所述第一數(shù)據(jù)結(jié)構(gòu)體中的寫入地址將所述讀取到的原數(shù)據(jù)寫入到對應(yīng)的地址中。本發(fā)明的有益效果在于將事務(wù)處理機制中多次備份EEPROM改為在提交事務(wù)時一次性備份,并減少了在終止事務(wù)時寫EEPROM的操作,同時還保持了掉電保護功能。
圖1為發(fā)明實施例一中提供的一種基于緩存的java卡事務(wù)處理方法的流程圖;圖2為發(fā)明實施例二中提供的一種基于緩存的java卡事務(wù)處理方法中第一應(yīng)用程序接口被調(diào)用后的操作流程圖;圖3為發(fā)明實施例二中提供的一種基于緩存的java卡事務(wù)處理方法中第一函數(shù)被調(diào)用后的操作流程圖;圖4為發(fā)明實施例二中提供的一種基于緩存的java卡事務(wù)處理方法中第二函數(shù)被調(diào)用后的操作流程圖;圖5為發(fā)明實施例二中提供的一種基于緩存的java卡事務(wù)處理方法中第二應(yīng)用程序接口被調(diào)用后的操作流程圖;圖6為發(fā)明實施例二中提供的一種基于緩存的java卡事務(wù)處理方法中第三應(yīng)用程序接口被調(diào)用后的操作流程圖;圖7為發(fā)明實施例二中提供的一種基于緩存的java卡事務(wù)處理方法中java卡掉電后重新上電的操作流程圖;圖8為發(fā)明實施例三中提供的一種基于緩存的java卡事務(wù)處理方法中事務(wù)處理實例的方法流程圖;圖9為發(fā)明實施例三中執(zhí)行完第一部分向EEPROM中0x4000為起始的地址中寫入
第一新值的結(jié)果示意圖;圖10為發(fā)明實施例三中執(zhí)行完第二部分向EEPROM中0x4050為起始的地址中寫
入第二新值的結(jié)果示意圖;圖11為發(fā)明實施例三中執(zhí)行完第三部分向EEPROM中0x4200為起始的地址中寫入第三新值的結(jié)果示意圖;圖12為發(fā)明實施例三中執(zhí)行完第四部分提交事務(wù)后的結(jié)果示意圖。
具體實施例方式在許多大型、關(guān)鍵的應(yīng)用程序中,計算機每秒鐘都在執(zhí)行大量的任務(wù),將這些任務(wù)結(jié)合在一起完成一個業(yè)務(wù)要求,稱為事務(wù)。事務(wù)不論成功與否都作為一個整體進行工作,當(dāng)事務(wù)失敗時,系統(tǒng)返回到事務(wù)開始前的狀態(tài),這個取消所有變化的過程稱為回滾。事務(wù)處理機制的任務(wù)就是要保證整個事務(wù)或者完全成功,或者什么都不做,如果操作中的某一部分不能成功的完成則回滾系統(tǒng)的變化。在以下實施例中,Java卡包括java卡虛擬機、第一存儲器和第二存儲器,Java卡的第一存儲器中包含備份緩沖區(qū),java卡的第二存儲器中設(shè)置有備份緩沖區(qū)和新值緩沖區(qū),其中,第一存儲器為非易失性存儲器,如EEPR0M,第二存儲器為易失性存儲器,如RAM, 第一存儲器中存儲的數(shù)據(jù)稱為原數(shù)據(jù),將要寫入第一存儲器中的數(shù)據(jù)稱為新值。為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖和具體實施例對本發(fā)明做進一步地詳細說明。實施例一本發(fā)明實施例提供了一種基于緩存的java卡事務(wù)處理方法,包括開始事務(wù)、執(zhí)行事務(wù)、提交事務(wù)、終止事務(wù)和掉電保護過程,其中執(zhí)行事務(wù)包括讀數(shù)據(jù)的操作和寫數(shù)據(jù)的操作。參見圖1,基于緩存的java卡事務(wù)處理方法的具體表述如下步驟Sl java卡虛擬機上電,判斷是否要啟動掉電保護,是則啟動掉電保護,執(zhí)行完掉電保護后執(zhí)行步驟S3,否則執(zhí)行步驟S2 ;步驟S2 java卡虛擬機進行事務(wù)處理初始化;具體的,在本實施例中,步驟S2具體為清除第二存儲器備份緩沖區(qū)和新值緩沖區(qū)中的數(shù)據(jù),將事務(wù)處理標志位置為無效,將第一存儲器備份緩沖區(qū)中第一個數(shù)據(jù)結(jié)構(gòu)的標志位置為無效;步驟S3 java卡虛擬機接收applet字節(jié)碼;步驟S4 java卡虛擬機解析所述字節(jié)碼;當(dāng)解析得到第一應(yīng)用程序接口對應(yīng)的字節(jié)碼時執(zhí)行步驟S5,當(dāng)解析得到第一函數(shù)對應(yīng)的字節(jié)碼時執(zhí)行步驟S6,當(dāng)解析得到第二函數(shù)對應(yīng)的字節(jié)碼時執(zhí)行步驟S7,當(dāng)解析得到第二應(yīng)用程序接口對應(yīng)的字節(jié)碼時執(zhí)行步驟S8,當(dāng)解析得到第三應(yīng)用程序接口對應(yīng)的字節(jié)碼時執(zhí)行步驟S9,當(dāng)解析得到上述字節(jié)碼之外的其它字節(jié)碼時,根據(jù)所述其它字節(jié)碼執(zhí)行相應(yīng)操作,返回執(zhí)行步驟S3 ;具體地,所述java卡虛擬機解析字節(jié)碼包括步驟a 判斷所述字節(jié)碼的首字節(jié)是否為預(yù)先約定的第一字節(jié),是則執(zhí)行步驟b, 否則根據(jù)所述字節(jié)碼執(zhí)行相應(yīng)操作;具體地,在本實施例中所述預(yù)先約定的第一字節(jié)為8d ;步驟b 根據(jù)所述字節(jié)碼首字節(jié)以外的字節(jié)檢索索引表,判斷所述字節(jié)碼首字節(jié)以外的字節(jié)是否為預(yù)先約定的字節(jié);若為預(yù)先約定的第二字節(jié)則所述字節(jié)碼為第一應(yīng)用程序接口對應(yīng)的字節(jié)碼,例如,所述預(yù)先約定的第二字節(jié)為0001 ;若為預(yù)先約定的第三字節(jié)則所述字節(jié)碼為第一函數(shù)對應(yīng)的字節(jié)碼,例如,所述預(yù)先約定的第三字節(jié)為0002 ;若為預(yù)先約定的第四字節(jié)則所述字節(jié)碼為第二函數(shù)對應(yīng)的字節(jié)碼,例如,所述預(yù)先約定的第四字節(jié)為0003;若為預(yù)先約定的第五字節(jié)則所述字節(jié)碼為第二應(yīng)用程序接口對應(yīng)的字節(jié)碼,例如,所述預(yù)先約定的第五字節(jié)為0004 ;
若為預(yù)先約定的第六字節(jié)則所述字節(jié)碼為第三應(yīng)用程序接口對應(yīng)的字節(jié)碼,例如,所述預(yù)先約定的第六字節(jié)為0005 ;否則根據(jù)所述字節(jié)碼執(zhí)行相應(yīng)操作,返回步驟S3 ;步驟S5 調(diào)用第一應(yīng)用程序接口開始事務(wù),返回執(zhí)行步驟S3 ;所述開始事務(wù)具體包括檢查事務(wù)處理標志位a,當(dāng)a有效時報錯,當(dāng)a無效時將a置為有效;步驟S6 調(diào)用第一函數(shù)寫數(shù)據(jù),返回執(zhí)行步驟S3 ;所述寫數(shù)據(jù)具體包括當(dāng)事務(wù)處理標志位a有效且當(dāng)前新值的長度不大于第二存儲器中剩余字節(jié)長度時,判斷第二存儲器備份緩沖區(qū)中是否已經(jīng)備份有所述當(dāng)前新值寫入地址中的原數(shù)據(jù);是則用所述當(dāng)前新值替換第二存儲器新值緩沖區(qū)中相應(yīng)的新值;否則向第二存儲器備份緩沖區(qū)中備份所述當(dāng)前新值寫入地址中的原數(shù)據(jù),并將所述當(dāng)前新值添加到第二存儲器的新值緩沖區(qū)中;步驟S7 調(diào)用第二函數(shù)讀數(shù)據(jù),返回執(zhí)行步驟S3 ;所述讀數(shù)據(jù)具體包括當(dāng)事務(wù)處理標志位a有效時判斷第二存儲器備份緩沖區(qū)中備份的新值寫入地址中是否包含讀取地址;若包含全部讀取地址則從第二存儲器新值緩沖區(qū)中讀取全部讀取地址對應(yīng)的新值;若包含部分讀取地址則從第一存儲器中讀取全部讀取地址中的數(shù)據(jù),從第二存儲器備份緩沖區(qū)中讀取所述部分讀取地址對應(yīng)的新值并用讀取到的新值替換所述數(shù)據(jù)的相應(yīng)部分;若不包含讀取地址則從第一存儲器中讀取全部讀取地址中的數(shù)據(jù);步驟S8 調(diào)用第二應(yīng)用程序接口提交事務(wù),返回執(zhí)行步驟S3 ;所述提交事務(wù)具體包括當(dāng)事務(wù)處理標志位a有效時判斷第二存儲器備份緩沖區(qū)的標志位是否為有效;是則將第二存儲器備份緩沖區(qū)中的數(shù)據(jù)備份到第一存儲器備份緩沖區(qū)中,將第二存儲器新值緩沖區(qū)中的數(shù)據(jù)寫入第一存儲器的相應(yīng)地址中,將事務(wù)處理標志位a置為無效,并清除第二存儲器中的數(shù)據(jù);否則直接將事務(wù)處理標志位a置為無效,并清除第二存儲器中的數(shù)據(jù);步驟S9 調(diào)用第三應(yīng)用程序接口終止事務(wù),返回執(zhí)行步驟S3 ;所述終止事務(wù)具體包括當(dāng)事務(wù)處理標志位a有效時還原第一存儲器備份緩沖區(qū)中標志位為有效的數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù);清除第二存儲器備份緩存區(qū)和新值緩存區(qū)中的數(shù)據(jù)。所述掉電保護具體包括判斷檢測事務(wù)處理標志位a ;當(dāng)a有效時還原第一存儲器備份緩沖區(qū)中標志位為有效的數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù);
清除第二存儲器中的數(shù)據(jù),將事務(wù)處理標志位置為無效;當(dāng)a無效時直接清除第二存儲器中的數(shù)據(jù)。優(yōu)選地,在本實施例中,所述事務(wù)處理標志位a有效時其值為true,當(dāng)所述事務(wù)處理標志位a無效時其值為false ;在本實施例中,所述第一存儲器為EEPR0M,第二存儲器為RAM,第二存儲器的讀寫速度較第一存儲器快,本發(fā)明提供的基于緩存的java卡事務(wù)處理方法通過將對第一存儲器的部分操作轉(zhuǎn)為對第二存儲器的操作,減少了對第一存儲器的操作,提高了 java卡的運行速度。實施例二參見圖1,事務(wù)處理機制中當(dāng)?shù)谝粦?yīng)用程序接口被調(diào)用時開始事務(wù),具體步驟如下步驟101 當(dāng)java卡第一應(yīng)用程序接口被調(diào)用時,判斷事務(wù)處理標志位a的值是否為true,是則報錯,否則執(zhí)行步驟102 ;優(yōu)選地,在本實施例中,所述第一應(yīng)用程序接口具體為開始事務(wù) (begintranscation)步驟102 將事務(wù)處理標志位a的值置為true。參見圖2,事務(wù)處理機制中當(dāng)?shù)谝缓瘮?shù)被調(diào)用時執(zhí)行寫數(shù)據(jù)操作步驟201 當(dāng)?shù)谝缓瘮?shù)被調(diào)用時,判斷事務(wù)處理標志位a的值是否為true,是則執(zhí)行步驟203,否則執(zhí)行步驟202 ;優(yōu)選地,在本實施例中,所述第一函數(shù)具體為寫(write)函數(shù)。步驟202 將當(dāng)前新值寫入第一存儲器的相應(yīng)地址,返回執(zhí)行步驟S3 ;具體地,所述第一存儲器的相應(yīng)地址為當(dāng)前新值的寫入地址。步驟203 判斷當(dāng)前新值的長度是否大于第二存儲可以備份的最大長度,是則執(zhí)行步驟204,否則執(zhí)行步驟206 ;步驟204 向第一存儲器的備份緩沖區(qū)中備份當(dāng)前新值寫入地址中的原數(shù)據(jù);優(yōu)選地,在本實施例中,向第一存儲器的備份緩沖區(qū)中備份當(dāng)前新值寫入地址中的原數(shù)據(jù)具體為按照指定數(shù)據(jù)結(jié)構(gòu)向第一存儲器的備份緩沖區(qū)中備份當(dāng)前新值寫入地址中的原數(shù)據(jù),并將所述數(shù)據(jù)結(jié)構(gòu)中的標志位置為有效,其中,所述數(shù)據(jù)結(jié)構(gòu)為log" _l|log" _21. . . log" _n ;當(dāng)所述原數(shù)據(jù)的長度小于255時log" _i(i = 1,2,3,..., η)的結(jié)構(gòu)為I標志位I原數(shù)據(jù)長度I當(dāng)前新值寫入地址I原數(shù)據(jù)I ;當(dāng)所述原數(shù)據(jù)的長度大于255時log" _i(i = 1,2,3,..., η)的結(jié)構(gòu)為I標志位|0 I原數(shù)據(jù)長度I新值寫入地址I原數(shù)據(jù)I。步驟205 將當(dāng)前新值寫入第一存儲器的相應(yīng)地址,返回執(zhí)行步驟S3 ;具體地,所述第一存儲器的相應(yīng)地址為當(dāng)前新值的寫入地址。步驟206 判斷第二存儲器中剩余字節(jié)長度是否大于當(dāng)前新值的長度,是則執(zhí)行步驟207,否則執(zhí)行步驟208 ;步驟207 檢查第二存儲器備份緩沖區(qū)中是否已經(jīng)備份有第一存儲器的新值寫入地址中的數(shù)據(jù),是則執(zhí)行步驟212,否則執(zhí)行步驟210 ;
步驟208 將第二存儲器備份緩沖區(qū)中的數(shù)據(jù)按預(yù)先設(shè)定的格式寫入第一存儲器備份緩沖區(qū)中;步驟209 將第二存儲器新值緩沖區(qū)中的數(shù)據(jù)寫入第一存儲器的相應(yīng)地址,清除第二存儲器新值緩沖區(qū)和備份緩沖區(qū)中的數(shù)據(jù);具體地,所述第一存儲器的相應(yīng)地址為所述第二存儲器新值緩沖區(qū)中的數(shù)據(jù)對應(yīng)的寫入地址。步驟210 向第二存儲器的備份緩沖區(qū)中備份當(dāng)前新值寫入地址中的原數(shù)據(jù);具體地,在本實施例中所述向第二存儲器的備份緩沖區(qū)中備份當(dāng)前新值寫入地址中的原數(shù)據(jù)具體為按照指定數(shù)據(jù)結(jié)構(gòu)向第二存儲器的備份緩沖區(qū)中備份當(dāng)前新值寫入地址中的原數(shù)據(jù),并將所述數(shù)據(jù)結(jié)構(gòu)中的標志位置為有效,其中,所述數(shù)據(jù)結(jié)構(gòu)為log_lIlog_2I. . . |log_n' ;log_j(j = 1,2,... η')的結(jié)構(gòu)為:I標志位I原數(shù)據(jù)長度I新值寫入地址I原數(shù)據(jù)I。步驟211 將所述當(dāng)前新值添加到第二存儲器的新值緩沖區(qū)中,返回執(zhí)行步驟S3 ;具體地,在本實施例中所述將所述當(dāng)前新值添加到第二存儲器的新值緩沖區(qū)中具體為按照指定數(shù)據(jù)結(jié)構(gòu)將所述當(dāng)前新值添加到第二存儲器的新值緩沖區(qū)中,并將所述數(shù)據(jù)結(jié)構(gòu)中的標志位置為有效,其中,所述數(shù)據(jù)結(jié)構(gòu)為log' _l|log' _2|... |log' _n";log' _k(k = 1,2,3,...η")的結(jié)構(gòu)為:I新值寫入地址I新值長度I新值I。步驟212 用當(dāng)前新值替換第二存儲器新值緩沖區(qū)中當(dāng)前新值的寫入地址對應(yīng)的 log'中的新值,返回執(zhí)行步驟S3。參見圖3,事務(wù)處理機制中當(dāng)?shù)诙瘮?shù)被調(diào)用時執(zhí)行讀數(shù)據(jù)操作,具體步驟如下步驟301 當(dāng)?shù)诙瘮?shù)被調(diào)用時,判斷事務(wù)處理標志a的值是否為true,是則執(zhí)行步驟303,否則執(zhí)行步驟302 ;優(yōu)選地,在本實施例中,所述第二函數(shù)具體為讀(read)函數(shù)。步驟302 從第一存儲器的相應(yīng)地址中讀取全部數(shù)據(jù),返回執(zhí)行步驟S3 ;具體地,所述全部數(shù)據(jù)為全部要讀取的數(shù)據(jù)。步驟303 設(shè)置變量i的值為1,設(shè)置常量η的值等于第二存儲器備份緩沖區(qū)中l(wèi)og 的數(shù)量;步驟304 判斷第二存儲器備份緩沖區(qū)中l(wèi)og_i的標志位是否為有效,是則執(zhí)行步驟305,否則執(zhí)行步驟315 ;步驟305 判斷第二存儲器備份緩沖區(qū)中l(wèi)og_i對應(yīng)的地址中是否包含讀取地址, 若包含全部讀取地址則執(zhí)行步驟306,若包含部分讀取地址則執(zhí)行步驟307,若不包含讀取地址則執(zhí)行步驟315 ;步驟306 從第二存儲器的新值緩沖區(qū)中讀取全部數(shù)據(jù),進程返回執(zhí)行步驟S3 ;步驟307 從第一存儲器的相應(yīng)地址中讀取全部數(shù)據(jù);步驟308 從第二存儲器新值緩沖區(qū)中讀取部分數(shù)據(jù),并用讀取到的數(shù)據(jù)替換步驟307中讀取到的數(shù)據(jù)的相應(yīng)部分;
步驟309 判斷i+Ι的值是否大于η的值,是則返回執(zhí)行步驟S3進程,否則執(zhí)行步驟 310 ;步驟310 :i的值自加1 ;步驟311 判斷第二存儲器備份緩沖區(qū)中l(wèi)og_i的標志位是否為有效,是則執(zhí)行步驟312,否則返回執(zhí)行步驟309 ;步驟312 判斷第二存儲器備份緩沖區(qū)中l(wèi)og_i對應(yīng)的地址是否包含剩余讀取地址,若包含全部剩余讀取地址則執(zhí)行步驟314,若包含部分剩余讀取地址則執(zhí)行步驟313, 若不包含剩余讀取地址,則返回執(zhí)行步驟309 ;步驟313 從第二存儲器新值緩沖區(qū)中讀取部分數(shù)據(jù),并用讀取到的數(shù)據(jù)替換步驟307中讀取到的數(shù)據(jù)的相應(yīng)部分;具體地,所述部分數(shù)據(jù)為第二存儲器備份緩沖區(qū)中包含的部分剩余讀取地址對應(yīng)的新值緩沖區(qū)中的新值。步驟314:從第二存儲器新值緩沖區(qū)中讀取剩余讀取地址對應(yīng)的數(shù)據(jù),并用讀取到的數(shù)據(jù)替換步驟307中讀取到的數(shù)據(jù)的相應(yīng)部分,返回執(zhí)行步驟S3 ;步驟315 判斷i+Ι的值是否大于η的值,是則執(zhí)行步驟316,否則執(zhí)行步驟317 ;步驟316 從第一存儲器的相應(yīng)地址中讀取全部數(shù)據(jù),返回執(zhí)行步驟S3 ;具體地,所述第一存儲器的相應(yīng)地址為讀取地址。步驟317 :i的值自加1 ;步驟318 判斷第二存儲器備份緩沖區(qū)中l(wèi)og_i的標志位是否有效,是則執(zhí)行步驟 319,否則返回執(zhí)行步驟315 ;步驟319 判斷第二存儲器備份緩沖區(qū)中l(wèi)og_i對應(yīng)的地址中是否包含讀取地址, 若包含全部讀取地址則執(zhí)行步驟320,若包含部分讀取地址則返回執(zhí)行步驟307,若不包含讀取地址則返回執(zhí)行步驟315 ;步驟320 從第二存儲器的新值緩沖區(qū)中讀取全部數(shù)據(jù),返回執(zhí)行步驟S3。參見圖4,在事務(wù)處理機制中當(dāng)?shù)诙?yīng)用程序接口被調(diào)用時提交事務(wù),具體步驟如下步驟401 當(dāng)?shù)诙?yīng)用程序接口被調(diào)用時,判斷事務(wù)處理標志a的值是否為true, 是則執(zhí)行步驟402,否則返回執(zhí)行步驟S3 ;優(yōu)選地,在本實施例中,所述第二應(yīng)用程序接口具體為提交事務(wù) (committranscation)接口。步驟402:判斷第二存儲器備份緩沖區(qū)的標志位是否為有效,是則執(zhí)行步驟403, 否則執(zhí)行步驟408 ;步驟403 將第二存儲器備份緩沖區(qū)的標志位置為無效;步驟404 將第二存儲器備份緩沖區(qū)中的數(shù)據(jù)寫入第一存儲器備份緩沖區(qū);步驟405 將在步驟404中寫入第一存儲器備份緩沖區(qū)中的log"的標志位置為有效;步驟406 將第二存儲器新值緩沖區(qū)中的數(shù)據(jù)寫入到第一存儲器的相應(yīng)地址;步驟407 將第一存儲器備份緩沖區(qū)的標志位置為無效;步驟408 將事務(wù)處理標志位的值置為false,并清除第二存儲器中新值緩沖區(qū)和備份緩沖區(qū)中的數(shù)據(jù)。參見圖5,事務(wù)處理機制中當(dāng)?shù)谌龖?yīng)用程序接口被調(diào)用時終止事務(wù)、系統(tǒng)回滾,具體步驟如下步驟501 當(dāng)?shù)谌龖?yīng)用程序接口被調(diào)用時,判斷事務(wù)處理標志位a的值是否為 true,是則執(zhí)行步驟502,否則返回執(zhí)行步驟S3 ;優(yōu)選地,在本實施例中,所述第三應(yīng)用程序接口具體為終止事務(wù) (aborttranscation) ^ Π ο步驟502:設(shè)置變量i的初始值為1,常量η的值等于第一存儲器備份緩沖區(qū)中 log"的數(shù)量;步驟503 判斷第一存儲器備份緩沖區(qū)log" _i的標志位是否為有效,是則執(zhí)行步驟505,否則執(zhí)行步驟504;步驟504 清除第二存儲器備份緩沖區(qū)和新值緩沖區(qū)中的數(shù)據(jù),返回執(zhí)行步驟S3 ;步驟505 判斷i+Ι的值是否大于η的值,是則執(zhí)行步驟506,否則執(zhí)行步驟508 ;步驟506:將log" _i中備份的數(shù)據(jù)還原;步驟507 將log" _i的標志位置為無效,返回執(zhí)行步驟502 ;步驟508 :i的值自加1 ;步驟509 判斷第一存儲器備份緩沖區(qū)log" _i的標志位是否為有效,是則返回執(zhí)行步驟505,否則執(zhí)行步驟510 ;步驟510 將log" _i-l中備份的數(shù)據(jù)還原;步驟511:log" _i-l的標志位置為無效,返回執(zhí)行步驟502。參見圖6,本發(fā)明實施例提供了一種基于緩存的java卡事務(wù)處理方法中掉電保護的方法,具體步驟如下步驟601 :jaVa卡掉電后重新上電時,判斷事務(wù)標志位a的值是否為true,是則執(zhí)行步驟603,否則執(zhí)行步驟602 ;步驟602 清除第二存儲器備份緩沖區(qū)和新值緩沖區(qū)中的數(shù)據(jù),返回執(zhí)行步驟S3 ;步驟603:設(shè)置變量i的初始值為1,常量η的值等于第一存儲器備份緩沖區(qū)中 log"的數(shù)量;步驟604 判斷第一存儲器備份緩沖區(qū)log" _i的標志位是否為有效,是則執(zhí)行步驟606,否則執(zhí)行步驟605 ;步驟605 清除第二存儲器備份緩沖區(qū)和新值緩沖區(qū)中的數(shù)據(jù),返回執(zhí)行步驟S3 ;步驟606 判斷i+Ι的值是否大于η的值,是則執(zhí)行步驟607,否則執(zhí)行步驟609 ;步驟607:將log" _i中備份的數(shù)據(jù)還原;步驟608 將log" _i的標志位置為無效,返回執(zhí)行步驟603 ;步驟609 :i的值自加1 ;步驟610 判斷第一存儲器備份緩沖區(qū)log" _i的標志位是否為有效,是則返回執(zhí)行步驟606,否則執(zhí)行步驟611 ;步驟611 將log" _i-l中備份的數(shù)據(jù)還原;步驟612 將log" _i-l的標志位置為無效,返回執(zhí)行步驟603。實施例三
參見圖7,本發(fā)明實施例以向第一存儲器中0x4000為起始的地址中寫入第一新值,向第一存儲器中0x4050為起始的地址中寫入第二新值,向第一存儲器中0x4200為起始的地址中寫入第三新值為例提供了一種基于緩存的java事務(wù)處理方法流程,其中所述第一新值為40個字節(jié)的數(shù)據(jù)(5,6,7,8. . .,45),所述第二新值為90個字節(jié)的數(shù)據(jù)(5,6,7, 8,...,95),所述第三新值為130個字節(jié)的數(shù)據(jù)(5,6,7,8, ...,135),第一存儲器備份緩沖區(qū)的大小為2560個字節(jié),第二存儲器備份緩沖區(qū)的大小為1 個字節(jié),第二存儲器新值緩沖區(qū)的大小為1 個字節(jié)。具體步驟如下一、調(diào)用第一應(yīng)用程序接口,開始事務(wù);二、調(diào)用第一函數(shù),向第一存儲器中0x4000為起始的地址中寫入第一新值;首先判斷得出事務(wù)處理標志位a為true后判斷所述第一新值的長度40是否大于第二存儲器可以備份的最大長度128,判斷結(jié)果為否,執(zhí)行步驟701、702,執(zhí)行結(jié)果參見圖 9 ;步驟701 向第二存儲器的備份緩沖區(qū)中備份第一存儲器地址0x4000 0x4040 中的原數(shù)據(jù);步驟702 將第一新值按預(yù)定的數(shù)據(jù)結(jié)構(gòu)添加到第二存儲器的新值緩沖區(qū)中;具體地,若此時第三應(yīng)用程序接口被調(diào)用或java卡虛擬機啟動掉電保護,則清除第二存儲器中的數(shù)據(jù)。三、調(diào)用第一函數(shù),向第一存儲器中0x4050為起始的地址中寫入第二新值;首先判斷得出事務(wù)處理標志位a的值為true后判斷所述第二新值的長度90是否大于第二存儲器可以備份的最大長度128,判斷結(jié)果為否,繼續(xù)判斷第二存儲器中剩余字節(jié)長度82是否大于所述第二新值的長度90,判斷結(jié)果為否,執(zhí)行步驟703、704、705、706,執(zhí)行結(jié)果參見圖10 ;步驟703 將第二存儲器備份緩沖區(qū)中的數(shù)據(jù)按預(yù)定的數(shù)據(jù)結(jié)構(gòu)備份到第一存儲器的備份緩沖區(qū)中;具體地,將第二存儲器備份緩沖區(qū)中的數(shù)據(jù)按預(yù)定的數(shù)據(jù)結(jié)構(gòu)備份到第一存儲器的備份緩沖區(qū)之前,將第二存儲器的第一個log的標志位置為無效,數(shù)據(jù)備份完成后,將數(shù)據(jù)備份前置為無效的標志位重新置為有效。步驟704 將第二存儲器新值緩沖區(qū)中的數(shù)據(jù)寫入第一存儲器地址0x4000 0x4040 中;步驟705 按預(yù)定的數(shù)據(jù)結(jié)構(gòu)向第二存儲器的備份緩沖區(qū)中備份第一存儲器地址為0x4050 0x4140中的數(shù)據(jù);步驟706 將第二新值按預(yù)定的數(shù)據(jù)結(jié)構(gòu)添加到第二存儲器的新值緩沖區(qū)中;具體地,若此時第三應(yīng)用程序接口被調(diào)用或java卡虛擬機啟動掉電保護,則從第一存儲器的備份緩沖區(qū)中還原地址為0x4000 0x4040中的原數(shù)據(jù)。四、調(diào)用第一函數(shù),向第一存儲器中0x4200為起始的地址中寫入第三新值;首先判斷得出事務(wù)處理標志位a的值為true后判斷所述第三新值的長度130是否大于第二存儲器可以備份的最大長度128,判斷結(jié)果為是,執(zhí)行步驟707、708,執(zhí)行結(jié)果參見圖11 ;
步驟707 將第一存儲器地址0x4200 0x4330中的數(shù)據(jù)按預(yù)定的數(shù)據(jù)結(jié)構(gòu)備份到第一存儲器的備份緩沖區(qū);步驟708 將第三新值寫入第一存儲器的相應(yīng)地址;具體地,若此時第三應(yīng)用程序接口被調(diào)用或java卡虛擬機啟動掉電保護,則從第一存儲器的備份緩沖區(qū)中還原地址為0x4000 0x4040以及地址為0x4200 0x4330中的原數(shù)據(jù)。五、調(diào)用第二應(yīng)用程序接口,提交事務(wù);首先判斷得出事務(wù)處理標志位a的值為true后,判斷第二存儲器備份緩沖區(qū)的標志位是否為有效,判斷結(jié)果為是,執(zhí)行步驟709、710、711、712,執(zhí)行結(jié)果參見圖12 ;步驟709 將第二存儲器備份緩沖區(qū)中的數(shù)據(jù)按預(yù)定的數(shù)據(jù)結(jié)構(gòu)添加到第一存儲器的備份緩沖區(qū)中;具體地,將第二存儲器備份緩沖區(qū)中的數(shù)據(jù)按預(yù)定的數(shù)據(jù)結(jié)構(gòu)備份到第一存儲器的備份緩沖區(qū)之前,將第二存儲器的第一個log(即整體的標志位)的標志位置為無效,數(shù)據(jù)備份完成后,將在步驟709中寫入第一存儲器備份緩沖區(qū)的log"的標志位置為有效。步驟710 將第二存儲器新值緩沖區(qū)中的數(shù)據(jù)寫入第一存儲器地址0x4050 0x4140 中;步驟711 將第一存儲器備份緩沖區(qū)的標志位置為無效;具體地,所述第一存儲器備份緩沖區(qū)的標志位為log" _1的標志位。步驟712 將事務(wù)處理標志位a的值置為false,并清除第二存儲器備份緩沖區(qū)和新值緩沖區(qū)中的數(shù)據(jù)。以上所述的實施例只是本發(fā)明較優(yōu)選的具體實施方式
,本領(lǐng)域的技術(shù)人員在本發(fā)明技術(shù)方案范圍內(nèi)進行的通常變化和替換都應(yīng)包含在本發(fā)明的保護范圍內(nèi)。
權(quán)利要求
1.一種基于緩存的java卡事務(wù)處理方法,其特征在于,51 java卡虛擬機上電,判斷是否啟動掉電保護,是則執(zhí)行掉電保護,然后執(zhí)行S3,否則執(zhí)行S2 ;52所述java卡虛擬機進行事務(wù)處理初始化;53所述java卡虛擬機獲取applet字節(jié)碼;54所述java卡虛擬機解析所述applet字節(jié)碼;當(dāng)解析得到的是第一應(yīng)用程序接口對應(yīng)的字節(jié)碼時,調(diào)用第一應(yīng)用程序接口開始事務(wù),返回S3 ;當(dāng)解析得到的是第一函數(shù)對應(yīng)的字節(jié)碼時,調(diào)用第一函數(shù)寫數(shù)據(jù),返回S3,包括 步驟A 當(dāng)事務(wù)處理標志位有效且包含有當(dāng)前原數(shù)據(jù)的第一數(shù)據(jù)結(jié)構(gòu)的長度小于或等于所述第二存儲器的備份緩存區(qū)的剩余存儲空間時,所述java卡虛擬機判斷所述第二存儲器的備份緩沖區(qū)中是否存在包含有所述當(dāng)前原數(shù)據(jù)的第一數(shù)據(jù)結(jié)構(gòu)體;如存在則所述java卡虛擬機用當(dāng)前新值替換所述第一數(shù)據(jù)結(jié)構(gòu)體中的當(dāng)前原數(shù)據(jù); 如不存在則所述java卡虛擬機將所述當(dāng)前原數(shù)據(jù)按照第一預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到所述第二存儲器的備份緩沖區(qū)中,并將所述當(dāng)前新值按照第二預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式寫入到所述第二存儲器的新值緩沖區(qū)中;所述第二存儲器的備份緩存區(qū)中存儲的是第一數(shù)據(jù)結(jié)構(gòu)、 新值緩存區(qū)中存儲的是第二數(shù)據(jù)結(jié)構(gòu),所述第一存儲器的備份緩存區(qū)中存儲的是第三數(shù)據(jù)結(jié)構(gòu)、原數(shù)據(jù)存儲區(qū)存儲的是原數(shù)據(jù)和/或新值;當(dāng)解析得到的是第二函數(shù)對應(yīng)的字節(jié)碼時,調(diào)用所述第二函數(shù)讀數(shù)據(jù),返回S3,包括 當(dāng)事務(wù)處理標志有效時,所述java卡虛擬機從包含有全部讀取地址的所述第二數(shù)據(jù)結(jié)構(gòu)中讀取新值;或所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)中根據(jù)所述讀取地址讀取對應(yīng)的新值,根據(jù)所述讀取地址從所述第一存儲器的原數(shù)據(jù)緩存區(qū)中讀取原數(shù)據(jù),并用所述讀取的新值替換所述讀取的原數(shù)據(jù)中的與所述新值的寫入地址相同的對應(yīng)部分;當(dāng)解析得到的是第二應(yīng)用程序接口對應(yīng)的字節(jié)碼時,調(diào)用所述第二應(yīng)用程序接口提交事務(wù),返回S3,包括當(dāng)事務(wù)處理標志有效且所述第二存儲器的備份緩沖區(qū)的整體標志位有效時,所述java 卡虛擬機將所述第一數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù)按照第三預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到所述第一存儲器的備份緩沖區(qū)中,將所述第二存儲器的新值緩沖區(qū)中第二數(shù)據(jù)結(jié)構(gòu)中的新值寫入到所述第一存儲器的原數(shù)據(jù)存儲區(qū)中相應(yīng)的寫入地址中,清除所述第一數(shù)據(jù)結(jié)構(gòu)和所述第二數(shù)據(jù)結(jié)構(gòu),并將所述事務(wù)處理標志位的值置為無效;當(dāng)解析得到的是第三應(yīng)用程序接口對應(yīng)的字節(jié)碼時,調(diào)用所述第三應(yīng)用程序接口終止事務(wù),返回S3,包括當(dāng)事務(wù)處理標志有效時,所述java卡虛擬機還原所述第一存儲器的備份緩沖區(qū)中標志位為有效的第三數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù);清除第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu); 當(dāng)解析得到的是其他字節(jié)碼時,根據(jù)所述字節(jié)碼執(zhí)行相應(yīng)操作,返回S3。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述java卡虛擬機解析所述applet字節(jié)碼包括步驟a 所述java卡虛擬機判斷所述applet字節(jié)碼中的首字節(jié)是否為預(yù)先約定的第一字節(jié),是則執(zhí)行步驟b,否則返回S3 ;步驟b 所述java卡虛擬機根據(jù)所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)檢索索引表,并判斷所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)是否為預(yù)先約定的字節(jié);如所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)為預(yù)先約定的第二字節(jié),則所述applet 字節(jié)碼為所述第一應(yīng)用程序接口對應(yīng)的字節(jié)碼,所述java卡虛擬機調(diào)用第一應(yīng)用程序接口開始事務(wù),返回S3;如所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)為預(yù)先約定的第三字節(jié),則所述applet 字節(jié)碼為所述第一函數(shù)對應(yīng)的字節(jié)碼,所述java卡虛擬機調(diào)用第一函數(shù)寫數(shù)據(jù),返回S3 ; 如所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)為預(yù)先約定的第四字節(jié),則所述applet 字節(jié)碼為所述第二函數(shù)對應(yīng)的字節(jié)碼,所述java卡虛擬機調(diào)用第二函數(shù)讀數(shù)據(jù),返回S3 ; 如所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)為預(yù)先約定的第五字節(jié),則所述applet 字節(jié)碼為所述第二應(yīng)用程序接口對應(yīng)的字節(jié)碼,所述java卡虛擬機調(diào)用第二應(yīng)用程序接口提交事務(wù),返回S3;如所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)為預(yù)先約定的第六字節(jié),則所述applet 字節(jié)碼為所述第三應(yīng)用程序接口對應(yīng)的字節(jié)碼,所述java卡虛擬機調(diào)用第三應(yīng)用程序接口終止事務(wù),返回S3 ;如所述applet字節(jié)碼中除首字節(jié)以外的字節(jié)為其他字節(jié)則調(diào)用對應(yīng)接口進行相應(yīng)操作,返回S3。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述java卡虛擬機調(diào)用第一應(yīng)用程序接口開始事物包括當(dāng)java卡的所述第一應(yīng)用程序接口被調(diào)用時,所述java卡虛擬機判斷所述事務(wù)處理標志位的值是否為true,是則報錯,否則將所述事務(wù)處理標志位的值置為true。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟A具體為步驟Al 當(dāng)java卡的所述第一函數(shù)被調(diào)用時,所述java卡虛擬機判斷所述事務(wù)處理標志位的值是否為true,是則執(zhí)行步驟A3,否則執(zhí)行步驟A2 ;步驟A2 所述java卡虛擬機用接收到當(dāng)前新值替換所述第一存儲器的原數(shù)據(jù)存儲區(qū)中的當(dāng)前原數(shù)據(jù);步驟A3 所述java卡虛擬機判斷包含有所述當(dāng)前新值的第二數(shù)據(jù)結(jié)構(gòu)的長度是否大于所述第二存儲區(qū)的備份緩存區(qū)的存儲空間,是則執(zhí)行步驟A4,否則執(zhí)行步驟A6 ;步驟A4 所述java卡虛擬機從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取所述當(dāng)前原數(shù)據(jù),并將所述當(dāng)前原數(shù)據(jù)按照所述第三預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到所述第一存儲器的備份緩沖區(qū)中;步驟A5 所述java卡虛擬機用接收到的當(dāng)前新值替換所述第一存儲器的原數(shù)據(jù)存儲區(qū)中的當(dāng)前原數(shù)據(jù);步驟A6:所述java卡虛擬機判斷所述第二存儲器的備份緩存區(qū)中的剩余存儲空間是否大于所述包含有所述當(dāng)前新值的第二數(shù)據(jù)結(jié)構(gòu)的長度,是則執(zhí)行步驟A7,否則執(zhí)行步驟 A8 ;步驟A7:所述java卡虛擬機判斷在所述第二存儲器的備份緩沖區(qū)中是否存在包含有所述第一存儲器的原數(shù)據(jù)存儲區(qū)中當(dāng)前新值寫入地址中的原數(shù)據(jù)的第一數(shù)據(jù)結(jié)構(gòu),如存在則執(zhí)行步驟A12,如不存在則執(zhí)行步驟AlO ;步驟A8 所述java卡虛擬機從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取所述當(dāng)前原數(shù)據(jù),并將所述當(dāng)前原數(shù)據(jù)按所述第三預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到所述第一存儲器的備份緩沖區(qū)中;步驟A9 所述java卡虛擬機讀取所述第二數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù),并用所述讀取到的數(shù)據(jù)替換所述第一存儲器的原數(shù)據(jù)存儲區(qū)中的當(dāng)前原數(shù)據(jù),清除所述第二數(shù)據(jù)結(jié)構(gòu)和所述第一數(shù)據(jù)結(jié)構(gòu),順序執(zhí)行步驟A10;步驟AlO 所述java卡虛擬機從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取所述當(dāng)前原數(shù)據(jù),并將所述讀取到的當(dāng)前原數(shù)據(jù)按照所述第一預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到所述第二存儲器的備份緩沖區(qū)中;步驟All 所述java卡虛擬機將所述當(dāng)前新值按照所述第二預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式寫入到第二存儲器的新值緩沖區(qū)中;步驟A12 所述java卡虛擬機用所述當(dāng)前新值替換所述第二數(shù)據(jù)結(jié)構(gòu)中的相應(yīng)數(shù)據(jù)。
5.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述java卡虛擬機調(diào)用第二函數(shù)讀數(shù)據(jù)包括步驟B 當(dāng)所述事務(wù)處理標志位的值為true時,所述java卡虛擬機判斷在所述第二數(shù)據(jù)結(jié)構(gòu)中的新值寫入地址是否包含讀取地址;如包含全部讀取地址,則所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)體中根據(jù)所述讀取地址讀取對應(yīng)的新值;如包含讀取地址,則所述java卡虛擬機根據(jù)所述讀取地址從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取對應(yīng)的原數(shù)據(jù),從所述第二數(shù)據(jù)結(jié)構(gòu)體中根據(jù)所述讀取地址讀取對應(yīng)的新值,并用所述新值替換所述原數(shù)據(jù)中的與所述新值的寫入地址相同的對應(yīng)部分;如不包含讀取地址,則所述java卡虛擬機根據(jù)所述讀取地址從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取對應(yīng)的原數(shù)據(jù)。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述步驟B具體為步驟Bl 當(dāng)java卡的所述第二函數(shù)被調(diào)用時,所述java卡虛擬機判斷所述事務(wù)處理標志的值是否為true,是則執(zhí)行步驟B3,否則執(zhí)行步驟B2 ;步驟B2 所述java卡虛擬機根據(jù)所述讀取地址從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取對應(yīng)的原數(shù)據(jù);步驟B3:所述java卡虛擬機將第一個第一數(shù)據(jù)結(jié)構(gòu)作為當(dāng)前數(shù)據(jù)結(jié)構(gòu),判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否為有效,是則執(zhí)行步驟B4,否則執(zhí)行步驟B14 ;步驟B4 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)中是否包含讀取地址,若包含全部的所述讀取地址則執(zhí)行步驟B5,若包含部分的所述讀取地址則執(zhí)行步驟B6,若不包含所述讀取地址則執(zhí)行步驟B14;步驟B5 所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)根據(jù)所述讀取地址讀取對應(yīng)的新值;步驟B6 所述java卡虛擬機根據(jù)所述讀取地址從第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取對應(yīng)的原數(shù)據(jù);步驟B7 所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)中根據(jù)所述讀取地址讀取對應(yīng)的新值,并用所述新值替換所述步驟B6中讀取到的原數(shù)據(jù)中與所述新值的寫入地址相同的對應(yīng)部分;步驟B8 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)是否為最后一個數(shù)據(jù)結(jié)構(gòu),是則返回S3,否則執(zhí)行步驟B9;步驟B9 所述java卡虛擬機將所述第二存儲器的備份緩沖區(qū)中的下一個第一數(shù)據(jù)結(jié)構(gòu)作為當(dāng)前數(shù)據(jù)結(jié)構(gòu);步驟BlO 所述java卡虛擬機判斷步驟B9中所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否為有效, 是則執(zhí)行步驟B11,否則返回執(zhí)行步驟B8 ;步驟Bll 所述java卡虛擬機判斷步驟B9中所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)是否包含所述讀取地址的剩余部分,若包含全部的所述讀取地址的剩余部分則執(zhí)行步驟B13,若包含部分所述讀取地址的剩余部分則執(zhí)行步驟B12,若不包含所述讀取地址的剩余部分,則返回執(zhí)行步驟 B8 ;步驟B12 所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)中根據(jù)所述讀取地址的剩余部分讀取對應(yīng)的新值,并用所述讀取到的新值替換所述步驟B6中讀取到的原數(shù)據(jù)中與所述新值的寫入地址相同的對應(yīng)部分,返回執(zhí)行步驟B8 ;步驟B13 所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)中根據(jù)所述讀取地址的剩余部分讀取對應(yīng)的新值,并用所述讀取到的新值替換所述步驟B6中讀取到的原數(shù)據(jù)中與所述新值的寫入地址相同的對應(yīng)部分;步驟B14 所述java卡虛擬機判斷步驟B9中所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)是否是最后一個,是則執(zhí)行步驟B15,否則執(zhí)行步驟B16 ;步驟B15 所述java卡虛擬機根據(jù)所述讀取地址從所述第一存儲器的原數(shù)據(jù)存儲區(qū)中讀取對應(yīng)的原數(shù)據(jù);步驟B16 所述java卡虛擬機將所述第二存儲器的備份緩沖區(qū)中的下一個數(shù)據(jù)結(jié)構(gòu)作為當(dāng)前數(shù)據(jù)結(jié)構(gòu);步驟B17 所述java卡虛擬機判斷步驟B16中所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否為有效,是則執(zhí)行步驟B18,否則返回執(zhí)行步驟B14 ;步驟B18 所述java卡虛擬機判斷步驟B16中所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)是否包所述含讀取地址,若包含全部所述讀取地址則執(zhí)行步驟B19,若包含部分所述讀取地址則返回執(zhí)行步驟 B6,若不包含所述讀取地址則返回執(zhí)行步驟B14 ;步驟B19 所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)中根據(jù)所述讀取地址讀取對應(yīng)的新值。
7.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述java卡虛擬機調(diào)用第二應(yīng)用程序接口提交事務(wù)包括步驟C 當(dāng)所述事務(wù)處理標志位的值為true時,所述java卡虛擬機判斷第二存儲器的備份緩沖區(qū)的整體標志位是否有效;是則將所述第二存儲器的備份緩沖區(qū)中的原數(shù)據(jù)按照所述第三預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到第一存儲器的備份緩沖區(qū)的中,將所述第二存儲器的新值緩沖區(qū)中的新值寫入到所述第一存儲器的原數(shù)據(jù)存儲區(qū)的相應(yīng)地址中,將所述事務(wù)處理標志位的值置為false,并清除所述第一數(shù)據(jù)結(jié)構(gòu)和所述第二數(shù)據(jù)結(jié)構(gòu);否則將所述事務(wù)處理標志位的值置為false,并清除所述第一數(shù)據(jù)結(jié)構(gòu)和所述第二數(shù)據(jù)結(jié)構(gòu)。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述步驟C具體為步驟Cl 當(dāng)java卡的第二應(yīng)用程序接口被調(diào)用時,所述java卡虛擬機判斷所述事務(wù)處理標志的值是否為true,是則執(zhí)行步驟C2,否則返回S3 ;步驟C2 所述java卡虛擬機判斷第一個第一數(shù)據(jù)結(jié)構(gòu)的標志位是否有效,是則執(zhí)行步驟C3,否則執(zhí)行步驟C8;步驟C3 所述java卡虛擬機將所述第一個第一數(shù)據(jù)結(jié)構(gòu)的整體標志位置為無效; 步驟C4 所述java卡虛擬機從所述第一數(shù)據(jù)結(jié)構(gòu)中讀取原數(shù)據(jù),并將所述原數(shù)據(jù)按照所述第三預(yù)設(shè)數(shù)據(jù)結(jié)構(gòu)格式備份到所述第一存儲器的備份緩沖區(qū)中;步驟C5 所述java卡虛擬機將包含有所述原數(shù)據(jù)的第三數(shù)據(jù)結(jié)構(gòu)的標志位置為有效;步驟C6 所述java卡虛擬機從所述第二數(shù)據(jù)結(jié)構(gòu)中讀取新值,并根據(jù)所述第二數(shù)據(jù)結(jié)構(gòu)中的寫入地址將所述新值寫入到所述第一存儲器的原數(shù)據(jù)存儲區(qū)的相應(yīng)地址中;步驟C7 所述java卡虛擬機將所述第一存儲器的備份緩沖區(qū)的整體標志位置為無效, 順序執(zhí)行步驟C8 ;步驟C8 所述java卡虛擬機將所述事務(wù)處理標志位的值置為false,并清除所述第一數(shù)據(jù)結(jié)構(gòu)和所述第二數(shù)據(jù)結(jié)構(gòu)。
9.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述java卡虛擬機調(diào)用第三應(yīng)用程序接口終止事務(wù),具體包括步驟Dl 當(dāng)java卡的所述第三應(yīng)用程序接口被調(diào)用時,所述java卡虛擬機判斷所述事務(wù)處理標志位的值是否為true,是則執(zhí)行步驟D2,否則返回S3 ;步驟D2 所述java卡虛擬機將第一個第三數(shù)據(jù)結(jié)構(gòu)作為當(dāng)前數(shù)據(jù)結(jié)構(gòu); 步驟D3 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否有效,是則執(zhí)行步驟 D5,否則執(zhí)行步驟D4;步驟D4 所述java卡虛擬機清除所述第一數(shù)據(jù)結(jié)構(gòu)和所述第二數(shù)據(jù)結(jié)構(gòu); 步驟D5 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)是否為最后一個數(shù)據(jù)結(jié)構(gòu),是則執(zhí)行步驟D6,否則執(zhí)行步驟D8;步驟D6 所述java卡虛擬機還原所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù);步驟D7 所述java卡虛擬機將所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位置為無效,返回執(zhí)行步驟D2 ;步驟D8 所述java卡虛擬機將下一個第三數(shù)據(jù)結(jié)構(gòu)為作為當(dāng)前數(shù)據(jù)結(jié)構(gòu); 步驟D9 所述java卡虛擬機判斷步驟D8中所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否為有效, 是則執(zhí)行步驟D5,否則執(zhí)行步驟DlO ;步驟DlO 所述java卡虛擬機還原步驟D8中所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的上一個數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù);步驟Dll 所述java卡虛擬機將所述上一個數(shù)據(jù)結(jié)構(gòu)的標志位置為無效,返回執(zhí)行步驟D2。
10.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述掉電保護包括當(dāng)事務(wù)處理標志有效時,所述java卡虛擬機還原標志位為有效的第三數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù),清除第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu),將事務(wù)處理標志置為無效;當(dāng)事務(wù)處理標志無效時,所述java卡虛擬機清除第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu)。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述掉電保護具體包括步驟El 所述java卡虛擬機判斷所述事務(wù)標志位的值是否為true,是則執(zhí)行步驟E3, 否則執(zhí)行步驟E2 ;步驟E2 所述java卡虛擬機清除所述第一數(shù)據(jù)結(jié)構(gòu)和所述第二數(shù)據(jù)結(jié)構(gòu); 步驟E3 所述java卡虛擬機將第一個第三數(shù)據(jù)結(jié)構(gòu)作為當(dāng)前數(shù)據(jù)結(jié)構(gòu); 步驟E4 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否為有效,是則執(zhí)行步驟E6,否則執(zhí)行步驟E5 ;步驟E5 所述java卡虛擬機清除所述第一數(shù)據(jù)結(jié)構(gòu)和所述第二數(shù)據(jù)結(jié)構(gòu),將所述事務(wù)標志位置位的值置為false ;步驟E6 所述java卡虛擬機判斷所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)是否為最后一個數(shù)據(jù)結(jié)構(gòu),是則執(zhí)行步驟E7,否則執(zhí)行步驟E9;步驟E7 所述java卡虛擬機還原所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù);步驟E8 所述java卡虛擬機將所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位置為無效,返回執(zhí)行步驟E3 ;步驟E9 所述java卡虛擬機將下一個第三數(shù)據(jù)結(jié)構(gòu)作為當(dāng)前數(shù)據(jù)結(jié)構(gòu); 步驟ElO 所述java卡虛擬機判斷步驟E9中所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的標志位是否為有效, 是則返回執(zhí)行步驟E6,否則執(zhí)行步驟Ell ;步驟Ell 所述java卡虛擬機還原步驟E9中所述當(dāng)前數(shù)據(jù)結(jié)構(gòu)的上一個數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù);步驟E12 所述java卡虛擬機將所述上一個數(shù)據(jù)結(jié)構(gòu)的標志位置為無效,返回執(zhí)行步驟E3。
12.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述java卡虛擬機進行事務(wù)處理初始化包括java卡虛擬機清除第一數(shù)據(jù)結(jié)構(gòu)和第二數(shù)據(jù)結(jié)構(gòu),將所述事務(wù)處理標志位置為無效, 將所述第一存儲器備份緩沖區(qū)中第一個第三數(shù)據(jù)結(jié)構(gòu)的標志位置為無效。
13.根據(jù)權(quán)利要求1-12任意一項所述的方法,其特征在于,所述還原具體為所述java卡虛擬機所述第一數(shù)據(jù)結(jié)構(gòu)中的原數(shù)據(jù),并根據(jù)所述第一數(shù)據(jù)結(jié)構(gòu)體中的寫入地址將所述讀取到的原數(shù)據(jù)寫入到對應(yīng)的地址中。
全文摘要
本發(fā)明公開了一種基于緩存的java卡事務(wù)處理方法,屬于信息安全領(lǐng)域。所述方法包括S1java卡虛擬機上電,判斷是否啟動掉電保護,是則啟動掉電保護,然后直接執(zhí)行S3,否則順序執(zhí)行S2;S2進行事務(wù)處理初始化;S3獲取applet字節(jié)碼;S4解析applet字節(jié)碼,若為第一應(yīng)用程序接口對應(yīng)的字節(jié)碼,則調(diào)用第一應(yīng)用程序接口,返回S3;為第一函數(shù)對應(yīng)的字節(jié)碼時,則調(diào)用第一函數(shù),返回S3;為第二函數(shù)對應(yīng)的字節(jié)碼時,則調(diào)用第二函數(shù),返回S3;為第二應(yīng)用程序接口對應(yīng)的字節(jié)碼時,則調(diào)用第二應(yīng)用程序接口,返回S3;為第三應(yīng)用程序接口對應(yīng)的字節(jié)碼時,則調(diào)用第三應(yīng)用程序接口,返回S3;為其他字節(jié)碼時,則根據(jù)所述字節(jié)碼執(zhí)行相應(yīng)操作,返回S3。
文檔編號G06F9/46GK102495754SQ201110332419
公開日2012年6月13日 申請日期2011年10月27日 優(yōu)先權(quán)日2011年10月27日
發(fā)明者于華章, 陸舟 申請人:飛天誠信科技股份有限公司