一種智能卡寫(xiě)保護(hù)機(jī)制的實(shí)現(xiàn)
加入鏡像讀寫(xiě)機(jī)制后,對(duì)存儲(chǔ)區(qū)的讀寫(xiě)流程如下:
本文引用地址:http://cafeforensic.com/article/266050.htm 卡片的一般寫(xiě)入流程如圖1所示,圖2為業(yè)務(wù)向文件中寫(xiě)重要數(shù)據(jù)時(shí)的寫(xiě)入流程。
業(yè)務(wù)應(yīng)用中會(huì)有一些文件的寫(xiě)操作,其中有一些數(shù)據(jù)比較重要,需要確保數(shù)據(jù)寫(xiě)入的安全可靠。此時(shí)應(yīng)用應(yīng)該采用以下操作:
(1)設(shè)置鏡像寫(xiě)保護(hù)標(biāo)志位,此標(biāo)志為全局變量。
(2)業(yè)務(wù)數(shù)據(jù)的寫(xiě)入,這些業(yè)務(wù)可能分若干次寫(xiě)入不同的文件。
(3)完成鏡像保護(hù)。該操作由三個(gè)過(guò)程組成,首先清除寫(xiě)保護(hù)標(biāo)志位,然后設(shè)置鏡像數(shù)據(jù)恢復(fù)標(biāo)志,最后提交鏡像區(qū)數(shù)據(jù)將數(shù)據(jù)寫(xiě)入實(shí)際物理地址并清除鏡像數(shù)據(jù)恢復(fù)標(biāo)志。
應(yīng)用在寫(xiě)操作1、寫(xiě)操作2和寫(xiě)操作3過(guò)程中隨時(shí)可以放棄此次寫(xiě)操作,已經(jīng)完成的寫(xiě)操作不會(huì)對(duì)系統(tǒng)產(chǎn)生任何影響。這種寫(xiě)操作的處理方法為系統(tǒng)實(shí)現(xiàn)事務(wù)回滾提供了基礎(chǔ)。
卡片在上電后會(huì)檢查鏡像數(shù)據(jù)恢復(fù)標(biāo)志,決定是否回寫(xiě)鏡像區(qū)數(shù)據(jù)。
現(xiàn)分析卡片斷電對(duì)系統(tǒng)的影響。
假設(shè)斷電發(fā)生在寫(xiě)操作1和寫(xiě)操作2之間,重新上電檢查鏡像數(shù)據(jù)恢復(fù)標(biāo)志后,沒(méi)有數(shù)據(jù)需要恢復(fù),系統(tǒng)對(duì)鏡像區(qū)初始化后正常工作。雖然數(shù)據(jù)寫(xiě)入失敗但是保證了業(yè)務(wù)數(shù)據(jù)的不會(huì)混亂。
如果斷電發(fā)生在數(shù)據(jù)提交階段,此時(shí)鏡像數(shù)據(jù)恢復(fù)標(biāo)志已經(jīng)置位,重新上電后系統(tǒng)會(huì)重新提交,成功后清除標(biāo)志并初始化鏡像區(qū)。這樣保證數(shù)據(jù)在斷電情況下寫(xiě)入成功。
以上描述了鏡像寫(xiě)及掉電后數(shù)據(jù)恢復(fù)的過(guò)程??紤]這種情況,在業(yè)務(wù)進(jìn)行中,如果數(shù)據(jù)寫(xiě)了兩次,還沒(méi)有從鏡像區(qū)提交到實(shí)際地址區(qū),此時(shí)如果應(yīng)用需要讀取文件內(nèi)容,該內(nèi)容如果恰好在鏡像區(qū)尚未提交,直接從對(duì)應(yīng)物理地址讀數(shù)則會(huì)產(chǎn)生錯(cuò)誤。所以鏡像機(jī)制還需要提供鏡像讀功能。
對(duì)于鏡像讀,根據(jù)目標(biāo)數(shù)據(jù)的地址在數(shù)據(jù)讀取分三種情況處理:
(1)數(shù)據(jù)全部都在實(shí)際地址,直接從目標(biāo)地址讀取數(shù)據(jù)。
(2)數(shù)據(jù)全部在鏡像區(qū),在鏡像區(qū)讀取數(shù)據(jù)。
(3)數(shù)據(jù)部分在鏡像區(qū),部分在實(shí)際地址。分別在不同位置讀取數(shù)據(jù)。
為了分辨數(shù)據(jù)所處位置,需要遍歷表2中所定義的寫(xiě)保護(hù)管理表。
以上討論了鏡像讀寫(xiě)的實(shí)現(xiàn)機(jī)制。下面說(shuō)明加入該機(jī)制對(duì)系統(tǒng)性能的影響。
評(píng)論