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