本文主要講述智能卡系統的斷電保護和數據備份相關知識,主要內容如下圖,包括數據的備份、備份區的設計、均衡磨損技術以及數據恢復的時機等等。
1.數據備份的原因
在數據的一次寫過程中,由於Flash物理特性,需要先擦除要改寫的地址空間所在的頁面,每次擦除的物理頁面大小為512 Byte(假設一頁大小為512Byte)。智能卡由外部供電,如果在寫過程中突然掉電,導致卡內數據的丟失,就有可能導致COS崩潰或者用戶數據寫入不正確。因此,COS必須提供掉電保護機制保證卡內數據的讀寫安全。
數據備份就是COS的掉電保護機制,在寫入數據時,將整個頁面備份后再擦除寫入,防止在改寫過程中出現突然掉電,導致數據丟失。
2.數據備份的作用
備份機制設計的目的是采取一種措施,使COS在進行寫操作時將其作為一個原子操作來完成,不因突然掉電或者惡意拔出而丟失數據,保證卡內數據的一致性和安全性。
掉電保護的軟件措施主要包括兩部分:
一是設計系統的數據備份算法,在系統突然斷電之后,能有效地保存系統在數據更新前的正確運行狀態;
二是在供電復位之后根據備份的運行狀態和數據及時恢復,避免整個COS因關鍵數據丟失而崩潰。
3.數據備份區的位置
為了保證數據備份區的安全性,數據備份區一般選擇通過文件系統不能訪問到的位置。
4.數據備份的時機
數據備份要在寫操作之前進行,這樣無論掉電發生在什么位置,備份區數據或者將要寫入的地址區總有一個位置的數據時正確的。
5.備份的數據
有兩種備份數據的方式:
一是舊數據備份方式,優點如果寫時發生掉電,系統的數據丟失,可以通過備份將系統恢復到沒更新以前的狀態。
二是新數據備份方式,因為備份的是即將寫入的新數據,所以當寫時發生掉電導致系統的數據丟失,不可能將系統的狀態恢復到掉電之前的狀態,只能到更新數據之后的狀態。
6.備份的關鍵
備份的關鍵是保證備份操作的原子性。
7.備份的種類
備份有兩種機制,一種是頁備份,另一種是日志備份(也有其他稱呼,如字節備份),這是兩種完全不同的機制。詳見第八條。
8.備份與恢復的原理
FLASH具有寫入前必須整塊擦除的物理特性,所以在寫之前必須對目標地址和備份區進行擦除。
在改寫文件的數據時會遇到以下兩種情況(如圖):
一是需要寫入的數據剛好在一個擦除塊(假設為512B大小)中,則只需備份一塊數據;
二是需要寫入的數據剛好存儲在兩個擦除塊中,則需要同時備份兩塊的數據,然后逐塊地進行擦除寫入。無論是備份一塊或者兩塊都作為一個原子操作,更新不成功的時候都統一進行舊數據的恢復操作。
8.1 頁備份機制
當寫操作發生在一頁之內時,頁備份機制就可以滿足掉電安全保護的需求。
這里使用備份舊數據的方式,具體過程如下:
1)將要改寫數據段的Flash頁面的所有數據備份到備份區中。
2)數據備份完成后,將備份標志位置為有效,並將有效的標志位和改寫的地址保存到標志區。
3)數據開始更新,依次將數據寫入目標地址。
4)備份標志位復位,表示改寫成功,並將復位的標志寫入到標志區。
安全寫恢復流程:
查看Flash備份標志位是否有效,如果無效表示不需要進行數據安全寫恢復操作,結束流程;如果有效,表示要進行數據安全寫的恢復操作,步驟如下,
1)讀取備份的數據,根據備份的地址,對數據進行恢復操作。
2)所有的數據恢復成功之后,將備份標志位復位,將復位的標志位寫入標志區。
8.2 日志備份機制
智能卡中一次完整的事務流程里,有時會對多個頁面的數據進行改寫,必須要保證這個過程是原子性的,即所有數據要么被全部更新,要么一點也沒有被更新。
當涉及到兩個頁面時,上面所述的掉電保護機制不能保證原子性,運行的事務在非正常狀態下終止,可能會導致數據出現第三態,即部分數據被更新,而另一部分沒有被更新。
日志備份機制可以保證數據的保證數據的一致性、完整性。在一個多次執行改寫操作事務中,對需要處理數據的數據段在日志備份區以日志記錄的方式對舊數據進行數據備份,記錄此次事務下的所有完成的寫操作,存儲在智能卡的日志區。
當系統不正常斷電后重啟時,系統將進行自檢,如若發現日志備份區有有效數據,則對非正常終止的事務進行回滾,自動恢復到斷電前最后一個穩定狀態,使系統恢復到一致狀態。這里采用的是以記錄為單位的日志文件,使用舊數據回寫的方式來恢復數據。
在一個事務的執行過程中,記錄每個事務的開始標記、結束標記,同一事務的每次更新操作均作為一個日志記錄,具體執行流程如下所示:
1)事務的標志位,置為有效。
2)把要改寫的舊數據以TLV格式備份到日志區中(T表示此次事務中第幾次改寫Flash;L表示要改寫數據的長度與舊數據起始地址的長度和;V表示舊數據起始地址和舊數據)。
3)數據備份完成后,將備份標志位置為有效,並將有效的標志位和數據改寫地址保存到指定的位置。
4)數據開始更新,依次將數據寫入目標地址。
5)如果事務未完成,還有其他寫操作,那么轉向步驟2) 繼續執行,同一事務的備份數據應有序保存,以便數據的恢復。
6)事務標志位復位,表示事務執行成功,並將復位的標志寫入到Flash指定的位置。
數據恢復流程:
系統進行自檢,查看事務標志位是否有效,如果無效則不需進行數據一致性寫恢復操作,結束流程;如有效則進行寫恢復操作,步驟如下,
1)讀取最新事務的日志數據,根據備份的有效標志位,對數據進行有序的恢復操作。
2)所有的數據恢復成功之后,將事務標志位復位,將復位的標志位寫入Flash指定的位置。在事務的一次處理過程中,可能涉及到多次的擦寫,這是非常耗時的,也很不安全,采用了日志備份,把事務的處理過程以日志的方式記錄下來,不需要頻繁擦寫;日志區是一個大的緩沖區,不過它也是容量限制的,當達到一定容量或關鍵值時,就需對日志備份區進行清理,這樣就減少寫操作的時間,提高了智能卡的整體性能。
9.數據恢復的時機
一般而言,備份數據的恢復時在上電之后立即進行的。
但是如果使用某種芯片時,備份數據的恢復時間過長,讀卡器會認為連接已經斷掉,這時會主動斷開與卡片的連接,會導致數據恢復之后的第一條指令不能執行成功。這時,就需要把備份數據的恢復操作移動到第一條指令接收完畢之后。
10.其他考量因素
10.1 均衡磨損
因為FLASH的讀寫次數有限,而每次進行數據寫時,不論寫的位置是哪里,都要對備份區寫。也就是說,備份區的寫次數遠遠大於其他位置。
所以備份區的寫次數至關重要,決定着卡片的壽命,是一個十分重要的考量因素。
我們要將對備份區的寫操作次數降至最低。相關方案見下節,備份方案的設計。
10.2 性能
性能也是智能卡的一個重要的指標,而影響性能的主要因素就是Flash的寫操作。
這也是我們想法設法減少備份區寫操作的重要原因之一。
11.備份方案設計
備份方案設計是重中之重,設計得當,能保證掉電后卡數據的完整性,並能保證卡片的性能。
下面我們先來討論一下頁備份和日志備份的方案,再來着重討論一下備份方案的改進。
1.一般的備份方案
頁備份的流程,如下圖。
日志備份的流程如下圖:
上述方案雖然能保證掉電后數據的一致性,但是備份區寫太過頻繁,哪怕只寫一個字節也會對備份區全部寫一次。
2.備份方案的改進