一種防掉電的數(shù)據(jù)保護(hù)方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種防掉電的數(shù)據(jù)保護(hù)方法,屬于信息安全領(lǐng)域。所述方法包括,A:java卡虛擬機(jī)上電,判斷是否需要上電恢復(fù)數(shù)據(jù),是則將備份頁(yè)數(shù)據(jù)寫(xiě)入目的存儲(chǔ)區(qū)中,執(zhí)行B,否則直接執(zhí)行B;B:當(dāng)檢測(cè)到向目的存儲(chǔ)區(qū)寫(xiě)數(shù)據(jù)的觸發(fā)操作時(shí),根據(jù)待寫(xiě)數(shù)據(jù)的地址計(jì)算得到當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào);C:判斷緩存中是否有當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào),是則用待寫(xiě)數(shù)據(jù)修改緩存數(shù)據(jù),執(zhí)行D,否則將目的存儲(chǔ)頁(yè)數(shù)據(jù)先寫(xiě)入備份頁(yè)中,再寫(xiě)入緩存中,用待寫(xiě)數(shù)據(jù)修改緩存,執(zhí)行D;D:當(dāng)待寫(xiě)數(shù)據(jù)處理完成時(shí),將緩存數(shù)據(jù)寫(xiě)入目的存儲(chǔ)區(qū)中,并置上電不需要恢復(fù)數(shù)據(jù)。采用本發(fā)明的技術(shù)方案,在未知情況下發(fā)生掉電時(shí),能夠?qū)⒃鎯?chǔ)區(qū)數(shù)據(jù)還原,保證了原數(shù)據(jù)的安全性。
【專(zhuān)利說(shuō)明】一種防掉電的數(shù)據(jù)保護(hù)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息安全領(lǐng)域,尤其涉及一種防掉電的數(shù)據(jù)保護(hù)方法。
【背景技術(shù)】
[0002]隨著科學(xué)技術(shù)的發(fā)展,智能卡的市場(chǎng)不斷擴(kuò)大,而在使用智能卡的過(guò)程中,會(huì)出現(xiàn)未知情況下由于非正常情況(斷電、失電或電的質(zhì)量達(dá)不到需求)而引起智能卡不能正常工作,如果智能卡正處于對(duì)目的存儲(chǔ)區(qū)進(jìn)行擦寫(xiě)的操作時(shí),由于突然掉電會(huì)導(dǎo)致目的存儲(chǔ)區(qū)中原有數(shù)據(jù)的丟失,從而降低了智能卡的安全性。
【發(fā)明內(nèi)容】
[0003]本發(fā)明為了解決現(xiàn)有技術(shù)中存在的不足,提供了一種防掉電的數(shù)據(jù)保護(hù)方法。
[0004]本發(fā)明采用的技術(shù)方案是:一種防掉電的數(shù)據(jù)保護(hù)方法,包括:
[0005]步驟101: java卡虛擬機(jī)上電,進(jìn)行初始化;
[0006]步驟102:所述java卡虛擬機(jī)獲取當(dāng)前標(biāo)記頁(yè),根據(jù)當(dāng)前標(biāo)記頁(yè)中的標(biāo)記判斷是否需要上電恢復(fù)數(shù)據(jù),如果是,則執(zhí)行步驟103,否則執(zhí)行步驟104 ;
[0007]步驟103:所述java卡虛擬機(jī)根據(jù)當(dāng)前標(biāo)記頁(yè)中包含的備份頁(yè)的信息,將備份頁(yè)中的數(shù)據(jù)寫(xiě)入目的存儲(chǔ)區(qū)中,將當(dāng)前標(biāo)記頁(yè)的下一標(biāo)記頁(yè)作為當(dāng)前標(biāo)記頁(yè),更新當(dāng)前標(biāo)記頁(yè)的信息,執(zhí)行步驟104;
[0008]步驟104:當(dāng)檢測(cè)到向目的存儲(chǔ)區(qū)中寫(xiě)數(shù)據(jù)的觸發(fā)操作時(shí),所述java卡虛擬機(jī)獲取待寫(xiě)數(shù)據(jù)的地址、待寫(xiě)數(shù)據(jù)和待寫(xiě)數(shù)據(jù)的長(zhǎng)度;
[0009]步驟105:所述java卡虛擬機(jī)根據(jù)所述待寫(xiě)數(shù)據(jù)的地址,計(jì)算與所述待寫(xiě)數(shù)據(jù)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào)及所述待寫(xiě)數(shù)據(jù)在目的存儲(chǔ)區(qū)中的偏移,將所述與待寫(xiě)數(shù)據(jù)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào)作為當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào);
[0010]步驟106:所述java卡虛擬機(jī)判斷所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)是否在緩存區(qū)中,如果是,則執(zhí)行步驟108,否則從所述目的存儲(chǔ)區(qū)中獲取與所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中的數(shù)據(jù),將所述目的存儲(chǔ)頁(yè)中的數(shù)據(jù)保存在對(duì)應(yīng)的備份頁(yè)中,執(zhí)行步驟107 ;
[0011]步驟107:所述java卡虛擬機(jī)將當(dāng)前標(biāo)記頁(yè)中的標(biāo)記設(shè)置為上電需要恢復(fù)數(shù)據(jù),將緩存區(qū)中的數(shù)據(jù)寫(xiě)入目的存儲(chǔ)區(qū)與其對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中,判斷是否寫(xiě)入成功,是則將所述目的存儲(chǔ)頁(yè)中的數(shù)據(jù)寫(xiě)入緩存區(qū)中,執(zhí)行步驟108,否則報(bào)錯(cuò);
[0012]步驟108:所述java卡虛擬機(jī)用當(dāng)前處理的待寫(xiě)數(shù)據(jù)修改所述緩存區(qū)中的數(shù)據(jù);
[0013]步驟109:所述java卡虛擬機(jī)更新待寫(xiě)數(shù)據(jù)的長(zhǎng)度和當(dāng)前處理的待寫(xiě)數(shù)據(jù),根據(jù)待寫(xiě)數(shù)據(jù)長(zhǎng)度判斷所有的待寫(xiě)數(shù)據(jù)是否已處理完成,是則執(zhí)行步驟110,否則根據(jù)所述待寫(xiě)數(shù)據(jù)在目的存儲(chǔ)區(qū)中的偏移,更新當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào),返回執(zhí)行步驟106 ;
[0014]步驟110:所述java卡虛擬機(jī)將所述緩存區(qū)中的全部數(shù)據(jù)寫(xiě)入當(dāng)前目的存儲(chǔ)區(qū)中,判斷是否能夠?qū)懭氤晒?,是則將當(dāng)前標(biāo)記頁(yè)中的標(biāo)記置為上電不需要恢復(fù)數(shù)據(jù),否則報(bào)錯(cuò)。[0015]所述步驟101中,所述java卡虛擬機(jī)進(jìn)行初始化,具體為:
[0016]步驟A:所述java卡虛擬機(jī)遍歷標(biāo)記頁(yè),判斷是否存在校驗(yàn)碼正確的標(biāo)記頁(yè),如果是,則執(zhí)行步驟B,否則執(zhí)行步驟C ;
[0017]步驟B:所述java卡虛擬機(jī)從校驗(yàn)碼正確的所有標(biāo)記頁(yè)中獲取計(jì)數(shù)值最大的標(biāo)記頁(yè),將所述計(jì)數(shù)值最大的標(biāo)記頁(yè)作為當(dāng)前標(biāo)記頁(yè),執(zhí)行步驟102 ;
[0018]步驟C:所述java卡虛擬機(jī)對(duì)備份區(qū)和標(biāo)記區(qū)進(jìn)行初始化,將第一頁(yè)標(biāo)記頁(yè)作為當(dāng)前標(biāo)記頁(yè),執(zhí)行步驟102。
[0019]所述步驟103中,所述根據(jù)當(dāng)前標(biāo)記頁(yè)中包含的備份頁(yè)的信息,將備份頁(yè)中的數(shù)據(jù)寫(xiě)入目的存儲(chǔ)區(qū)中,具體為:獲取當(dāng)前標(biāo)記頁(yè)中的備份頁(yè)頁(yè)號(hào)數(shù)組,根據(jù)當(dāng)前標(biāo)記頁(yè)中的備份頁(yè)頁(yè)號(hào)獲取對(duì)應(yīng)備份頁(yè)中的數(shù)據(jù),并將獲取到的數(shù)據(jù)寫(xiě)入目的存儲(chǔ)區(qū)中。
[0020]所述步驟103中,所述更新當(dāng)前標(biāo)記頁(yè)信息,具體為:將當(dāng)前標(biāo)記頁(yè)中的備份頁(yè)頁(yè)號(hào)數(shù)組設(shè)置為第一數(shù)值,將計(jì)數(shù)值加第二數(shù)值,將當(dāng)前標(biāo)記頁(yè)中的標(biāo)記設(shè)置為上電不需要恢復(fù)數(shù)據(jù),將已使用備份頁(yè)的頁(yè)號(hào)設(shè)置為第一數(shù)值,計(jì)算校驗(yàn)碼寫(xiě)入當(dāng)前標(biāo)記頁(yè)中。
[0021]所述步驟106、107和108具體為:
[0022]步驟S1:所述java卡虛擬機(jī)遍歷所述緩存區(qū),判斷所述緩存區(qū)中是否有所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào),如果是,則用當(dāng)前處理的待寫(xiě)數(shù)據(jù)修改所述緩存頁(yè)中的數(shù)據(jù),更新使用次數(shù),執(zhí)行步驟109,否則執(zhí)行步驟S2 ;
[0023]步驟S2:所述java卡虛擬機(jī)判斷備份區(qū)剩余的備份頁(yè)數(shù)是否等于緩存區(qū)剩余的緩存頁(yè)數(shù),如果是,則將所有緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中的數(shù)據(jù)全部備份到備份頁(yè)中,執(zhí)行步驟110,否則查找并獲取緩存區(qū)中使用次數(shù)最少的緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào),從目的存儲(chǔ)區(qū)中找到對(duì)應(yīng)的目的存儲(chǔ)頁(yè),將所述目的存儲(chǔ)頁(yè)中的數(shù)據(jù)備份到備份頁(yè)中,執(zhí)行步驟S3 ;
[0024]步驟S3:所述java卡虛擬機(jī)在當(dāng)前標(biāo)記頁(yè)中的備份頁(yè)號(hào)數(shù)組中寫(xiě)入所述目的存儲(chǔ)頁(yè)頁(yè)號(hào),更新當(dāng)前標(biāo)記頁(yè)信息,將當(dāng)前標(biāo)記頁(yè)的下一標(biāo)記頁(yè)作為當(dāng)前標(biāo)記頁(yè);
[0025]步驟S4:所述java卡虛擬機(jī)將使用次數(shù)最少的緩存頁(yè)中的數(shù)據(jù)寫(xiě)入對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中;
[0026]步驟S5:所述java卡虛擬機(jī)將所述對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中的數(shù)據(jù)寫(xiě)入使用次數(shù)最少的緩存頁(yè)中,并用當(dāng)前處理的待寫(xiě)數(shù)據(jù)修改使用次數(shù)最少的緩存頁(yè)中的數(shù)據(jù),并更新使用次數(shù),執(zhí)行步驟109。
[0027]所述步驟106、107和108具體為:
[0028]步驟Sll:所述java卡虛擬機(jī)遍歷一級(jí)緩存區(qū),判斷一級(jí)緩存區(qū)中是否包含當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào),如果是,則將當(dāng)前處理的待寫(xiě)數(shù)據(jù)寫(xiě)入包含當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)的一級(jí)緩存頁(yè)中,執(zhí)行步驟109,否則執(zhí)行步驟S12 ;
[0029]步驟S12:所述java卡虛擬機(jī)查找一級(jí)緩存區(qū)中使用次數(shù)最少的一級(jí)緩存頁(yè)的頁(yè)號(hào);
[0030]步驟S13:所述java卡虛擬機(jī)遍歷二級(jí)緩存區(qū),判斷二級(jí)緩存頁(yè)中是否有當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào),如果是,則執(zhí)行步驟S14,否則執(zhí)行步驟S18 ;
[0031]步驟S14:所述java卡虛擬機(jī)獲取一級(jí)緩存區(qū)中使用次數(shù)最少的一級(jí)緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào),從所述目的存儲(chǔ)區(qū)中找到對(duì)應(yīng)的目的存儲(chǔ)頁(yè),將所述目的存儲(chǔ)頁(yè)中的數(shù)據(jù)備份到對(duì)應(yīng)的備份頁(yè)中;
[0032]步驟S15:所述java卡虛擬機(jī)在當(dāng)前標(biāo)記頁(yè)中的備份頁(yè)號(hào)數(shù)組中寫(xiě)入所述目的存儲(chǔ)頁(yè)頁(yè)號(hào),更新當(dāng)前標(biāo)記頁(yè)信息;
[0033]步驟S16:所述java卡虛擬機(jī)判斷備份區(qū)剩余的備份頁(yè)數(shù)是否等于緩存區(qū)剩余的緩存頁(yè)數(shù),如果是,則將所有緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中的數(shù)據(jù)全部備份到備份頁(yè)中,執(zhí)行步驟110,否則所述java卡虛擬機(jī)根據(jù)所述使用次數(shù)最少的緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào),將所述使用次數(shù)最少的一級(jí)緩存頁(yè)中的數(shù)據(jù)寫(xiě)入對(duì)應(yīng)的目的存儲(chǔ)區(qū)中,執(zhí)行步驟S17 ;
[0034]步驟S17:所述java卡虛擬機(jī)將有當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)的二級(jí)緩存頁(yè)中的數(shù)據(jù)寫(xiě)入使用次數(shù)最少的一級(jí)緩存頁(yè)中,執(zhí)行步驟109 ;
[0035]步驟S18:所述java卡虛擬機(jī)查找所述使用次數(shù)最少的二級(jí)緩存頁(yè)的頁(yè)號(hào);
[0036]步驟S19:所述java卡虛擬機(jī)判斷使用次數(shù)最少的一級(jí)緩存頁(yè)的使用次數(shù)是否大于使用次數(shù)最少的二級(jí)緩存頁(yè)的使用次數(shù),如果是,則執(zhí)行步驟S20,否則執(zhí)行步驟S21 ;
[0037]步驟S20:所述java卡虛擬機(jī)將所述使用次數(shù)最少的二級(jí)緩存頁(yè)替換為所述使用次數(shù)最少的一級(jí)緩存頁(yè),將所述使用次數(shù)最少的一級(jí)緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào)設(shè)置為所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào),設(shè)置使用次數(shù);
[0038]步驟S21:所述java卡虛擬機(jī)將當(dāng)前處理的待寫(xiě)數(shù)據(jù)寫(xiě)入所述一級(jí)緩存區(qū)中包含所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)的一級(jí)緩存頁(yè)中;
[0039]所述步驟110具體為:java卡虛擬機(jī)將一級(jí)緩存頁(yè)中的所有數(shù)據(jù)寫(xiě)入到目的存儲(chǔ)區(qū)中,判斷是否能夠?qū)懭氤晒Γ绻?,則將當(dāng)前標(biāo)記頁(yè)中的標(biāo)記置為上電不需要恢復(fù)數(shù)據(jù),否則報(bào)錯(cuò)。
[0040]所述步驟S16中,所述將所有緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中的數(shù)據(jù)全部備份到備份頁(yè)中,具體為:
[0041]步驟A: java卡虛擬機(jī)讀取當(dāng)前標(biāo)記頁(yè)的信息,獲取備份頁(yè)頁(yè)號(hào)數(shù)組、已使用的備份頁(yè)的頁(yè)號(hào)和未使用的備份頁(yè)的頁(yè)號(hào);
[0042]步驟B: java卡虛擬機(jī)判斷緩存區(qū)中的數(shù)據(jù)與所述緩存區(qū)對(duì)應(yīng)的目的存儲(chǔ)區(qū)中的數(shù)據(jù)是否一致,如果是,則執(zhí)行步驟110,否則執(zhí)行步驟C ;
[0043]步驟C: java卡虛擬機(jī)判斷目的存儲(chǔ)區(qū)是否是新申請(qǐng)的數(shù)據(jù)區(qū),如果是,則執(zhí)行步驟G,否則執(zhí)行步驟D ;
[0044]步驟D: java卡虛擬機(jī)判斷當(dāng)前標(biāo)記頁(yè)中的標(biāo)記是否為上電需要恢復(fù),是則執(zhí)行步驟E,否則執(zhí)行步驟F ;
[0045]步驟E: java卡虛擬機(jī)遍歷備份區(qū),查找與所述緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)是否已經(jīng)備份,是則執(zhí)行步驟F,否則將與所述緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中的數(shù)據(jù)寫(xiě)入備份頁(yè)中,執(zhí)行步驟F ;
[0046]步驟F:java卡虛擬機(jī)更新當(dāng)前標(biāo)記頁(yè)信息,將標(biāo)記頁(yè)設(shè)為上電需要恢復(fù)數(shù)據(jù),更新已使用備份頁(yè)頁(yè)號(hào)和未使用備份頁(yè)的起始頁(yè)號(hào),計(jì)算當(dāng)前標(biāo)記頁(yè)的校驗(yàn)碼寫(xiě)入當(dāng)前標(biāo)記頁(yè)中;
[0047]步驟G: java卡虛擬機(jī)將所述緩存區(qū)中的數(shù)據(jù)寫(xiě)入對(duì)應(yīng)的目的存儲(chǔ)區(qū)中,更新使用次數(shù)。
[0048]所述步驟106、107和108具體為:[0049]步驟S21:所述java卡虛擬機(jī)遍歷所述緩存區(qū)中狀態(tài)為有效的記錄,查找緩存中是否存在包含當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)的記錄,如果是,則執(zhí)行步驟S22,否則執(zhí)行步驟S25 ;
[0050]步驟S22:所述java卡虛擬機(jī)統(tǒng)計(jì)所述緩存區(qū)中的目的存儲(chǔ)頁(yè)頁(yè)號(hào)包含當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)的有效狀態(tài)的所有記錄,遍歷所述統(tǒng)計(jì)的所有記錄,查找是否有包含所述待寫(xiě)數(shù)據(jù)的地址的記錄,如果是,則用當(dāng)前處理的待寫(xiě)數(shù)據(jù)更新所述緩存區(qū)中包含待寫(xiě)數(shù)據(jù)的地址的記錄中的數(shù)據(jù)和數(shù)據(jù)長(zhǎng)度,執(zhí)行步驟109,否則執(zhí)行步驟S23 ;
[0051]步驟S23:所述java卡虛擬機(jī)統(tǒng)計(jì)所述緩存區(qū)中與當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)相同的目的存儲(chǔ)頁(yè)頁(yè)號(hào)、且與所述待寫(xiě)數(shù)據(jù)的地址相交的有效記錄偏移;
[0052]步驟S24:所述java卡虛擬機(jī)將所述當(dāng)前處理的待寫(xiě)數(shù)據(jù)的長(zhǎng)度與所有緩存中相交的有效記錄中的數(shù)據(jù)長(zhǎng)度合并,得到數(shù)據(jù)塊的長(zhǎng)度;
[0053]步驟S25:所述java卡虛擬機(jī)判斷是否滿足緩存中有效緩存頁(yè)的總數(shù)等于備份頁(yè)中剩余的頁(yè)數(shù),或者緩存中的最后一條記錄是有效的條件,如果是,則執(zhí)行步驟S29,否則執(zhí)行步驟S26 ;
[0054]步驟S26:所述java卡虛擬機(jī)判斷最后一條無(wú)效的記錄中的數(shù)據(jù)長(zhǎng)度是否小于合并后的數(shù)據(jù)塊的長(zhǎng)度,如果是,則執(zhí)行步驟S29,否則執(zhí)行步驟S27 ;
[0055]步驟S27:所述java卡虛擬機(jī)將所述緩存中與所述待寫(xiě)數(shù)據(jù)的地址相交的有效記錄中的數(shù)據(jù)和所述待寫(xiě)數(shù)據(jù)合并,作為新修改數(shù)據(jù),將所述緩存中與所述待寫(xiě)數(shù)據(jù)的地址相交的有效記錄設(shè)置為無(wú)效;
[0056]步驟S28:所述java卡虛擬機(jī)在最后一條無(wú)效記錄中分配空間作為所述新修改數(shù)據(jù)的記錄,更新所述緩存中最后一條記錄的信息,執(zhí)行步驟109 ;
[0057]步驟S29:所述java卡虛擬機(jī)遍歷所述緩存中的狀態(tài),查找所述緩存中狀態(tài)為有效的一條緩存記錄作為當(dāng)前緩存記錄;
[0058]步驟S30:所述java卡虛擬機(jī)獲取與所述當(dāng)前緩存記錄對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào);
[0059]步驟S31:所述java卡虛擬機(jī)遍歷所述緩存區(qū)中所有有效記錄的目的存儲(chǔ)頁(yè)頁(yè)號(hào),獲取緩存區(qū)中所有與所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)對(duì)應(yīng)的緩存記錄;
[0060]步驟S32:所述java卡虛擬機(jī)獲取所有與所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)對(duì)應(yīng)的緩存記錄中,所記錄的目的存儲(chǔ)區(qū)中的偏移,根據(jù)所述記錄的目的存儲(chǔ)區(qū)中的偏移將所有與當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)對(duì)應(yīng)的緩存記錄寫(xiě)入對(duì)應(yīng)的目的存儲(chǔ)區(qū)中,并將所有與當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)對(duì)應(yīng)的緩存記錄中的狀態(tài)均記為無(wú)效狀態(tài);
[0061]步驟S33:所述java卡虛擬機(jī)判斷所述緩存區(qū)中是否還有狀態(tài)為有效的緩存記錄,如果是,則返回執(zhí)行步驟S29,否則執(zhí)行步驟S34 ;
[0062]步驟S34:所述java卡虛擬機(jī)向所述緩存區(qū)的起始位置分配一條記錄,將當(dāng)前處理的待寫(xiě)數(shù)據(jù)寫(xiě)入,并在其后創(chuàng)建一條記錄,作為最后一條記錄,執(zhí)行步驟109。
[0063]本發(fā)明取得的有益效果是:采用本發(fā)明的技術(shù)方案,能夠?qū)崿F(xiàn)在未知情況下發(fā)生掉電時(shí),能夠?qū)⒛康拇鎯?chǔ)區(qū)中的數(shù)據(jù)還原,保證了原有數(shù)據(jù)的安全性。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0064]為了更清楚的說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單的介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0065]圖1是本發(fā)明實(shí)施例1提供的一種防掉電的數(shù)據(jù)保護(hù)方法流程圖;
[0066]圖2是本發(fā)明實(shí)施例2提供的一種防掉電的數(shù)據(jù)保護(hù)方法流程圖;
[0067]圖3和圖4是本發(fā)明實(shí)施例3提供的一種防掉電的數(shù)據(jù)保護(hù)方法流程圖;
[0068]圖5和圖6是本發(fā)明實(shí)施例4提供的一種防掉電的數(shù)據(jù)保護(hù)方法流程圖。
【具體實(shí)施方式】
[0069]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0070]本方法的實(shí)施例中,目的存儲(chǔ)區(qū)(非易失性存儲(chǔ)區(qū),包括E2PR0M、FLASH等)中包含一個(gè)或多個(gè)目的存儲(chǔ)頁(yè),標(biāo)記區(qū)中包含一個(gè)或多個(gè)標(biāo)記頁(yè),備份區(qū)中包含一個(gè)或多個(gè)備份頁(yè),緩存區(qū)中包含一個(gè)或多個(gè)緩存頁(yè);
[0071]實(shí)施例1
[0072]本發(fā)明實(shí)施例1提供了一種防掉電的數(shù)據(jù)保護(hù)方法,如圖1所示,包括:java卡虛擬機(jī)預(yù)先設(shè)置標(biāo)記頁(yè)、備份頁(yè)和緩存頁(yè),本實(shí)施例以緩存中只有一頁(yè)為例;
[0073]步驟101: java卡虛擬機(jī)上電,進(jìn)行初始化;
[0074]步驟102:所述java卡虛擬機(jī)獲取當(dāng)前標(biāo)記頁(yè),根據(jù)當(dāng)前標(biāo)記頁(yè)中的標(biāo)記判斷是否需要上電恢復(fù)數(shù)據(jù),如果是,則執(zhí)行步驟103,否則執(zhí)行步驟104 ;
[0075]步驟103:所述java卡虛擬機(jī)根據(jù)當(dāng)前標(biāo)記頁(yè)中包含的備份頁(yè)的信息,將備份頁(yè)中的數(shù)據(jù)寫(xiě)入目的存儲(chǔ)區(qū)中,將當(dāng)前標(biāo)記頁(yè)的下一標(biāo)記頁(yè)作為當(dāng)前標(biāo)記頁(yè),更新當(dāng)前標(biāo)記頁(yè)的信息,執(zhí)行步驟104;
[0076]步驟104:當(dāng)檢測(cè)到向目的存儲(chǔ)區(qū)中寫(xiě)數(shù)據(jù)的觸發(fā)操作時(shí),所述java卡虛擬機(jī)獲取待寫(xiě)數(shù)據(jù)的地址、待寫(xiě)數(shù)據(jù)和待寫(xiě)數(shù)據(jù)的長(zhǎng)度;
[0077]步驟105:所述java卡虛擬機(jī)根據(jù)所述待寫(xiě)數(shù)據(jù)的地址,計(jì)算與所述待寫(xiě)數(shù)據(jù)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào)及所述待寫(xiě)數(shù)據(jù)在目的存儲(chǔ)區(qū)中的偏移,將所述與待寫(xiě)數(shù)據(jù)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào)作為當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào);
[0078]步驟106:所述java卡虛擬機(jī)判斷所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)是否在緩存區(qū)中,如果是,則執(zhí)行步驟108,否則從所述目的存儲(chǔ)區(qū)中獲取與所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中的數(shù)據(jù),將所述目的存儲(chǔ)頁(yè)中的數(shù)據(jù)保存在對(duì)應(yīng)的備份頁(yè)中,執(zhí)行步驟107 ;
[0079]步驟107:所述java卡虛擬機(jī)將當(dāng)前標(biāo)記頁(yè)中的標(biāo)記設(shè)置為上電需要恢復(fù)數(shù)據(jù),將緩存區(qū)中的數(shù)據(jù)寫(xiě)入目的存儲(chǔ)區(qū)與其對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中,判斷是否寫(xiě)入成功,是則執(zhí)行步驟108,否則報(bào)錯(cuò);
[0080]步驟108:所述java卡虛擬機(jī)將所述目的存儲(chǔ)頁(yè)中的數(shù)據(jù)寫(xiě)入緩存區(qū)中,用當(dāng)前處理的待寫(xiě)數(shù)據(jù)修改所述緩存區(qū)中的數(shù)據(jù);
[0081]步驟109:所述java卡虛擬機(jī)更新待寫(xiě)數(shù)據(jù)的長(zhǎng)度和當(dāng)前處理的待寫(xiě)數(shù)據(jù),根據(jù)待寫(xiě)數(shù)據(jù)長(zhǎng)度判斷所有的待寫(xiě)數(shù)據(jù)是否已處理完成,是則執(zhí)行步驟110,否則根據(jù)所述待寫(xiě)數(shù)據(jù)在目的存儲(chǔ)區(qū)中的偏移,更新當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào),返回執(zhí)行步驟106 ;
[0082]優(yōu)選的,所述根據(jù)更新后的待寫(xiě)數(shù)據(jù)長(zhǎng)度判斷待寫(xiě)數(shù)據(jù)是否已處理完成,具體為:判斷更新后的待寫(xiě)數(shù)據(jù)長(zhǎng)度是否為0,是則處理完成,否則未處理完成;
[0083]步驟110:所述java卡虛擬機(jī)將所述緩存區(qū)中的全部數(shù)據(jù)寫(xiě)入當(dāng)前目的存儲(chǔ)區(qū)中,判斷是否能夠?qū)懭氤晒?,是則將當(dāng)前標(biāo)記頁(yè)中的標(biāo)記置為上電不需要恢復(fù)數(shù)據(jù),否則報(bào)錯(cuò)。
[0084]實(shí)施例2
[0085]本發(fā)明實(shí)施例2提供了一種防掉電的數(shù)據(jù)保護(hù)方法,具體的,以8個(gè)標(biāo)記頁(yè)、24個(gè)備份頁(yè)、3個(gè)緩存頁(yè),且每頁(yè)為64個(gè)字節(jié)為例來(lái)說(shuō)明,如圖2所示,該方法包括:
[0086]標(biāo)記頁(yè)結(jié)構(gòu)如表1所示:備份頁(yè)頁(yè)號(hào)的數(shù)組占48字節(jié)、計(jì)數(shù)值占4字節(jié)、標(biāo)記占2字節(jié)、已使用的備份頁(yè)的號(hào)占I字節(jié)、未使用的備份頁(yè)的起始頁(yè)號(hào)占I字節(jié)、校驗(yàn)碼占2字節(jié),其余6字節(jié)為填充值;備份頁(yè)與緩存頁(yè)的結(jié)構(gòu)是由目的存儲(chǔ)頁(yè)的結(jié)構(gòu)決定的;
[0087]表1[0088]
【權(quán)利要求】
1.一種防掉電的數(shù)據(jù)保護(hù)方法,其特征在于,包括: 步驟101: java卡虛擬機(jī)上電,進(jìn)行初始化; 步驟102:所述java卡虛擬機(jī)獲取當(dāng)前標(biāo)記頁(yè),根據(jù)當(dāng)前標(biāo)記頁(yè)中的標(biāo)記判斷是否需要上電恢復(fù)數(shù)據(jù),如果是,則執(zhí)行步驟103,否則執(zhí)行步驟104 ; 步驟103:所述java卡虛擬機(jī)根據(jù)當(dāng)前標(biāo)記頁(yè)中包含的備份頁(yè)的信息,將備份頁(yè)中的數(shù)據(jù)寫(xiě)入目的存儲(chǔ)區(qū)中,將當(dāng)前標(biāo)記頁(yè)的下一標(biāo)記頁(yè)作為當(dāng)前標(biāo)記頁(yè),更新當(dāng)前標(biāo)記頁(yè)的信息,執(zhí)行步驟104 ; 步驟104:當(dāng)檢測(cè)到向目的存儲(chǔ)區(qū)中寫(xiě)數(shù)據(jù)的觸發(fā)操作時(shí),所述java卡虛擬機(jī)獲取待寫(xiě)數(shù)據(jù)的地址、待寫(xiě)數(shù)據(jù)和待寫(xiě)數(shù)據(jù)的長(zhǎng)度; 步驟105:所述java卡虛擬機(jī)根據(jù)所述待寫(xiě)數(shù)據(jù)的地址,計(jì)算與所述待寫(xiě)數(shù)據(jù)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào)及所述待寫(xiě)數(shù)據(jù)在目的存儲(chǔ)區(qū)中的偏移,將所述與待寫(xiě)數(shù)據(jù)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào)作為當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào); 步驟106:所述java卡虛擬機(jī)判斷所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)是否在緩存區(qū)中,如果是,則執(zhí)行步驟108,否則從所述目的存儲(chǔ)區(qū)中獲取與所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中的數(shù)據(jù),將所述目的存儲(chǔ)頁(yè)中的數(shù)據(jù)保存在對(duì)應(yīng)的備份頁(yè)中,執(zhí)行步驟107 ; 步驟107:所述java卡虛擬機(jī)將當(dāng)前標(biāo)記頁(yè)中的標(biāo)記設(shè)置為上電需要恢復(fù)數(shù)據(jù),將緩存區(qū)中的數(shù)據(jù)寫(xiě)入目的存儲(chǔ)區(qū)與其對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中,判斷是否寫(xiě)入成功,是則將所述目的存儲(chǔ)頁(yè)中的數(shù)據(jù)寫(xiě)入緩存區(qū)中,執(zhí)行步驟108,否則報(bào)錯(cuò); 步驟108:所述java 卡虛擬機(jī)用當(dāng)前處理的待寫(xiě)數(shù)據(jù)修改所述緩存區(qū)中的數(shù)據(jù); 步驟109:所述java卡虛擬機(jī)更新待寫(xiě)數(shù)據(jù)的長(zhǎng)度和當(dāng)前處理的待寫(xiě)數(shù)據(jù),根據(jù)待寫(xiě)數(shù)據(jù)長(zhǎng)度判斷所有的待寫(xiě)數(shù)據(jù)是否已處理完成,是則執(zhí)行步驟110,否則根據(jù)所述待寫(xiě)數(shù)據(jù)在目的存儲(chǔ)區(qū)中的偏移,更新當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào),返回執(zhí)行步驟106 ; 步驟110:所述java卡虛擬機(jī)將所述緩存區(qū)中的全部數(shù)據(jù)寫(xiě)入當(dāng)前目的存儲(chǔ)區(qū)中,判斷是否能夠?qū)懭氤晒?,是則將當(dāng)前標(biāo)記頁(yè)中的標(biāo)記置為上電不需要恢復(fù)數(shù)據(jù),否則報(bào)錯(cuò)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟101中,所述java卡虛擬機(jī)進(jìn)行初始化,具體為: 步驟A:所述java卡虛擬機(jī)遍歷標(biāo)記頁(yè),判斷是否存在校驗(yàn)碼正確的標(biāo)記頁(yè),如果是,則執(zhí)行步驟B,否則執(zhí)行步驟C ; 步驟B:所述java卡虛擬機(jī)從校驗(yàn)碼正確的所有標(biāo)記頁(yè)中獲取計(jì)數(shù)值最大的標(biāo)記頁(yè),將所述計(jì)數(shù)值最大的標(biāo)記頁(yè)作為當(dāng)前標(biāo)記頁(yè),執(zhí)行步驟102 ; 步驟C:所述java卡虛擬機(jī)對(duì)備份區(qū)和標(biāo)記區(qū)進(jìn)行初始化,將第一頁(yè)標(biāo)記頁(yè)作為當(dāng)前標(biāo)記頁(yè),執(zhí)行步驟102。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟103中,所述根據(jù)當(dāng)前標(biāo)記頁(yè)中包含的備份頁(yè)的信息,將備份頁(yè)中的數(shù)據(jù)寫(xiě)入目的存儲(chǔ)區(qū)中,具體為:獲取當(dāng)前標(biāo)記頁(yè)中的備份頁(yè)頁(yè)號(hào)數(shù)組,根據(jù)當(dāng)前標(biāo)記頁(yè)中的備份頁(yè)頁(yè)號(hào)獲取對(duì)應(yīng)備份頁(yè)中的數(shù)據(jù),并將獲取到的數(shù)據(jù)寫(xiě)入目的存儲(chǔ)區(qū)中。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述步驟103中,所述更新當(dāng)前標(biāo)記頁(yè)信息,具體為:將當(dāng)前標(biāo)記頁(yè)中的備份頁(yè)頁(yè)號(hào)數(shù)組設(shè)置為第一數(shù)值,將計(jì)數(shù)值加第二數(shù)值,將當(dāng)前標(biāo)記頁(yè)中的標(biāo)記設(shè)置為上電不需要恢復(fù)數(shù)據(jù),將已使用備份頁(yè)的頁(yè)號(hào)設(shè)置為第一數(shù)值,計(jì)算校驗(yàn)碼寫(xiě)入當(dāng)前標(biāo)記頁(yè)中。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟106、107和108具體為: 步驟S1:所述java卡虛擬機(jī)遍歷所述緩存區(qū),判斷所述緩存區(qū)中是否有所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào),如果是,則用當(dāng)前處理的待寫(xiě)數(shù)據(jù)修改所述緩存頁(yè)中的數(shù)據(jù),更新使用次數(shù),執(zhí)行步驟109,否則執(zhí)行步驟S2 ; 步驟S2:所述java卡虛擬機(jī)判斷備份區(qū)剩余的備份頁(yè)數(shù)是否等于緩存區(qū)剩余的緩存頁(yè)數(shù),如果是,則將所有緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中的數(shù)據(jù)全部備份到備份頁(yè)中,執(zhí)行步驟.110,否則查找并獲取緩存區(qū)中使用次數(shù)最少的緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào),從目的存儲(chǔ)區(qū)中找到對(duì)應(yīng)的目的存儲(chǔ)頁(yè),將所述目的存儲(chǔ)頁(yè)中的數(shù)據(jù)備份到備份頁(yè)中,執(zhí)行步驟S3 ;步驟S3:所述java卡虛擬機(jī)在當(dāng)前標(biāo)記頁(yè)中的備份頁(yè)號(hào)數(shù)組中寫(xiě)入所述目的存儲(chǔ)頁(yè)頁(yè)號(hào),更新當(dāng)前標(biāo)記頁(yè)信息,將當(dāng)前標(biāo)記頁(yè)的下一標(biāo)記頁(yè)作為當(dāng)前標(biāo)記頁(yè); 步驟S4:所述java卡虛擬機(jī)將使用次數(shù)最少的緩存頁(yè)中的數(shù)據(jù)寫(xiě)入對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中; 步驟S5:所述java卡虛擬機(jī)將所述對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中的數(shù)據(jù)寫(xiě)入使用次數(shù)最少的緩存頁(yè)中,并用當(dāng)前處理的待寫(xiě)數(shù)據(jù)修改使用次數(shù)最少的緩存頁(yè)中的數(shù)據(jù),并更新使用次數(shù),執(zhí)行步驟109。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟106、107和108具體為: 步驟Sll:所述java卡虛擬機(jī)遍歷一級(jí)緩存區(qū),判斷一級(jí)緩存區(qū)中是否包含當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào),如果是,則將當(dāng)前處理的待寫(xiě)數(shù)據(jù)寫(xiě)入包含當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)的一級(jí)緩存頁(yè)中,執(zhí)行步驟109,否則執(zhí)行步驟S12 ; 步驟S12:所述java卡虛擬機(jī)查找一級(jí)緩存區(qū)中使用次數(shù)最少的一級(jí)緩存頁(yè)的頁(yè)號(hào);步驟S13:所述java卡虛擬機(jī)遍歷二級(jí)緩存區(qū),判斷二級(jí)緩存頁(yè)中是否有當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào),如果是,則執(zhí)行步驟S14,否則執(zhí)行步驟S18 ; 步驟S14:所述java卡虛擬機(jī)獲取一級(jí)緩存區(qū)中使用次數(shù)最少的一級(jí)緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào),從所述目的存儲(chǔ)區(qū)中找到對(duì)應(yīng)的目的存儲(chǔ)頁(yè),將所述目的存儲(chǔ)頁(yè)中的數(shù)據(jù)備份到對(duì)應(yīng)的備份頁(yè)中; 步驟S15:所述java卡虛擬機(jī)在當(dāng)前標(biāo)記頁(yè)中的備份頁(yè)號(hào)數(shù)組中寫(xiě)入所述目的存儲(chǔ)頁(yè)頁(yè)號(hào),更新當(dāng)前標(biāo)記頁(yè)信息; 步驟S16:所述java卡虛擬機(jī)判斷備份區(qū)剩余的備份頁(yè)數(shù)是否等于緩存區(qū)剩余的緩存頁(yè)數(shù),如果是, 則將所有緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中的數(shù)據(jù)全部備份到備份頁(yè)中,執(zhí)行步驟.110,否則所述java卡虛擬機(jī)根據(jù)所述使用次數(shù)最少的緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào),將所述使用次數(shù)最少的一級(jí)緩存頁(yè)中的數(shù)據(jù)寫(xiě)入對(duì)應(yīng)的目的存儲(chǔ)區(qū)中,執(zhí)行步驟S17 ; 步驟S17:所述java卡虛擬機(jī)將有當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)的二級(jí)緩存頁(yè)中的數(shù)據(jù)寫(xiě)入使用次數(shù)最少的一級(jí)緩存頁(yè)中,執(zhí)行步驟109 ; 步驟S18:所述java卡虛擬機(jī)查找所述使用次數(shù)最少的二級(jí)緩存頁(yè)的頁(yè)號(hào); 步驟S19:所述java卡虛擬機(jī)判斷使用次數(shù)最少的一級(jí)緩存頁(yè)的使用次數(shù)是否大于使用次數(shù)最少的二級(jí)緩存頁(yè)的使用次數(shù),如果是,則執(zhí)行步驟S20,否則執(zhí)行步驟S21 ;步驟S20:所述java卡虛擬機(jī)將所述使用次數(shù)最少的二級(jí)緩存頁(yè)替換為所述使用次數(shù)最少的一級(jí)緩存頁(yè),將所述使用次數(shù)最少的一級(jí)緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào)設(shè)置為所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào),設(shè)置使用次數(shù); 步驟S21:所述java卡虛擬機(jī)將當(dāng)前處理的待寫(xiě)數(shù)據(jù)寫(xiě)入所述一級(jí)緩存區(qū)中包含所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)的一級(jí)緩存頁(yè)中; 所述步驟110具體為:java卡虛擬機(jī)將一級(jí)緩存頁(yè)中的所有數(shù)據(jù)寫(xiě)入到目的存儲(chǔ)區(qū)中,判斷是否能夠?qū)懭氤晒?,如果是,則將當(dāng)前標(biāo)記頁(yè)中的標(biāo)記置為上電不需要恢復(fù)數(shù)據(jù),否則報(bào)錯(cuò)。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述步驟S16中,所述將所有緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中的數(shù)據(jù)全部備份到備份頁(yè)中,具體為: 步驟A: java卡虛擬機(jī)讀取當(dāng)前標(biāo)記頁(yè)的信息,獲取備份頁(yè)頁(yè)號(hào)數(shù)組、已使用的備份頁(yè)的頁(yè)號(hào)和未使用的備份頁(yè)的頁(yè)號(hào); 步驟B: java卡虛擬機(jī)判斷緩存區(qū)中的數(shù)據(jù)與所述緩存區(qū)對(duì)應(yīng)的目的存儲(chǔ)區(qū)中的數(shù)據(jù)是否一致,如果是,則執(zhí)行步驟110,否則執(zhí)行步驟C ; 步驟C: java卡虛擬機(jī)判斷目的存儲(chǔ)區(qū)是否是新申請(qǐng)的數(shù)據(jù)區(qū),如果是,則執(zhí)行步驟G,否則執(zhí)行步驟D ; 步驟D: .java卡虛擬機(jī)判斷當(dāng)前標(biāo)記頁(yè)中的標(biāo)記是否為上電需要恢復(fù),是則執(zhí)行步驟E,否則執(zhí)行步驟F ; 步驟E: java卡虛擬機(jī)遍歷備份區(qū),查找與所述緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)是否已經(jīng)備份,是則執(zhí)行步驟F,否則將與所述緩存頁(yè)對(duì)應(yīng)的目的存儲(chǔ)頁(yè)中的數(shù)據(jù)寫(xiě)入備份頁(yè)中,執(zhí)行步驟F ; 步驟F: java卡虛擬機(jī)更新當(dāng)前標(biāo)記頁(yè)信息,將標(biāo)記頁(yè)設(shè)為上電需要恢復(fù)數(shù)據(jù),更新已使用備份頁(yè)頁(yè)號(hào)和未使用備份頁(yè)的起始頁(yè)號(hào),計(jì)算當(dāng)前標(biāo)記頁(yè)的校驗(yàn)碼寫(xiě)入當(dāng)前標(biāo)記頁(yè)中; 步驟G: java卡虛擬機(jī)將所述緩存區(qū)中的數(shù)據(jù)寫(xiě)入對(duì)應(yīng)的目的存儲(chǔ)區(qū)中,更新使用次數(shù)。
8.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟106、107和108具體為: 步驟S21:所述java卡虛擬機(jī)遍歷所述緩存區(qū)中狀態(tài)為有效的記錄,查找緩存中是否存在包含當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)的記錄,如果是,則執(zhí)行步驟S22,否則執(zhí)行步驟S25 ; 步驟S22:所述java卡虛擬機(jī)統(tǒng)計(jì)所述緩存區(qū)中的目的存儲(chǔ)頁(yè)頁(yè)號(hào)包含當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)的有效狀態(tài)的所有記錄,遍歷所述統(tǒng)計(jì)的所有記錄,查找是否有包含所述待寫(xiě)數(shù)據(jù)的地址的記錄,如果是,則用當(dāng)前處理的待寫(xiě)數(shù)據(jù)更新所述緩存區(qū)中包含待寫(xiě)數(shù)據(jù)的地址的記錄中的數(shù)據(jù)和數(shù)據(jù)長(zhǎng)度,執(zhí)行步驟109,否則執(zhí)行步驟S23 ; 步驟S23:所述java卡虛擬機(jī)統(tǒng)計(jì)所述緩存區(qū)中與當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)相同的目的存儲(chǔ)頁(yè)頁(yè)號(hào)、且與所述待寫(xiě)數(shù)據(jù)的地址相交的有效記錄偏移; 步驟S24:所述java卡虛擬機(jī)將所述當(dāng)前處理的待寫(xiě)數(shù)據(jù)的長(zhǎng)度與所有緩存中相交的有效記錄中的數(shù)據(jù)長(zhǎng)度合并,得到數(shù)據(jù)塊的長(zhǎng)度; 步驟S25:所述java卡虛擬機(jī)判斷是否滿足緩存中有效緩存頁(yè)的總數(shù)等于備份頁(yè)中剩余的頁(yè)數(shù),或者緩存中的最后一條記錄是有效的條件,如果是,則執(zhí)行步驟S29,否則執(zhí)行步驟 S26 ; 步驟S26:所述java卡虛擬機(jī)判斷最后一條無(wú)效的記錄中的數(shù)據(jù)長(zhǎng)度是否小于合并后的數(shù)據(jù)塊的長(zhǎng)度,如果是,則執(zhí)行步驟S29,否則執(zhí)行步驟S27 ; 步驟S27:所述java卡虛擬機(jī)將所述緩存中與所述待寫(xiě)數(shù)據(jù)的地址相交的有效記錄中的數(shù)據(jù)和所述待寫(xiě)數(shù)據(jù)合并,作為新修改數(shù)據(jù),將所述緩存中與所述待寫(xiě)數(shù)據(jù)的地址相交的有效記錄設(shè)置為無(wú)效; 步驟S28:所述java卡虛擬機(jī)在最后一條無(wú)效記錄中分配空間作為所述新修改數(shù)據(jù)的記錄,更新所述緩存中最后一條記錄的信息,執(zhí)行步驟109 ; 步驟S29:所述java卡虛擬機(jī)遍歷所述緩存中的狀態(tài),查找所述緩存中狀態(tài)為有效的一條緩存記錄作為當(dāng)前緩存記錄; 步驟S30:所述java卡虛擬機(jī)獲取與所述當(dāng)前緩存記錄對(duì)應(yīng)的目的存儲(chǔ)頁(yè)頁(yè)號(hào); 步驟S31:所述java卡虛擬機(jī)遍歷所述緩存區(qū)中所有有效記錄的目的存儲(chǔ)頁(yè)頁(yè)號(hào),獲取緩存區(qū)中所有與所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)對(duì)應(yīng)的緩存記錄; 步驟S32:所述java卡虛擬機(jī)獲取所有與所述當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)對(duì)應(yīng)的緩存記錄中,所記錄的目的存儲(chǔ)區(qū)中的偏移,根據(jù)所述記錄的目的存儲(chǔ)區(qū)中的偏移將所有與當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)對(duì)應(yīng)的緩存記錄寫(xiě)入對(duì)應(yīng)的目的存儲(chǔ)區(qū)中,并將所有與當(dāng)前目的存儲(chǔ)頁(yè)頁(yè)號(hào)對(duì)應(yīng)的緩存記錄中的狀態(tài)均記為無(wú)效狀態(tài); 步驟S33:所述java卡虛擬機(jī)判斷所述緩存區(qū)中是否還有狀態(tài)為有效的緩存記錄,如果是,則返回執(zhí)行步驟S29,否則執(zhí)行步驟S34 ; 步驟S34:所述java卡虛擬機(jī)向所述緩存區(qū)的起始位置分配一條記錄,將當(dāng)前處理的待寫(xiě)數(shù)據(jù)寫(xiě)入,并在其后創(chuàng)建一條記錄,作為最后一條記錄,執(zhí)行步驟109。
【文檔編號(hào)】G06F12/16GK103793337SQ201310561659
【公開(kāi)日】2014年5月14日 申請(qǐng)日期:2013年11月12日 優(yōu)先權(quán)日:2013年11月12日
【發(fā)明者】陸舟, 于華章 申請(qǐng)人:飛天誠(chéng)信科技股份有限公司