TrueFFS原理
TrueFFS原理
引用TrueFFS原理及其在CF卡上的實現的部分內容
“1、Wear-Leveling
閃速存儲器不能無限次重復使用。它的每個扇區的擦除次數雖然很大,但卻有限;因此,隨著使用次數的加長,它最終會變成只讀狀態,所以應該盡最大可能延長它的壽命。行之有效的方法就是平衡使用所有的存儲單元,而不讓某一單元過度使用。這種技術被稱之為損耗均衡。TrueFFS使用一種基于一張動態維護表的存儲器——塊映射的翻譯系統來實現損耗均衡技術。當塊數據被修改、移動或碎片回收后,這張維護表會自動調整。然而,如果存儲在Flash上的一些數據本質上是靜態的,就會產生靜態文件鎖定問題。存儲這些靜態數據的區域根據不會被輪循使用,其它區域就會被更頻繁地使用,這將降低Flash期望的生命值。TrueFFS通過強制轉移靜態區域的方法成功克服了靜態文件鎖定問題。因為映射表是動態的,TrueFFS能夠以對文件系統不可見的方式轉移這些靜態數據區域。由于絕對強制損耗均衡方式會對性能產生一些負面影響,所以TrueFFS采取了一種非絕對損耗均衡算法。它保證了所有空間的使用近似平等而不影響性
能。
2 碎片回收
塊數據的修改使得Flash的一些塊區域中的數據不再有效,并且這些區域在擦除之前變得不可寫。如果沒有機制來回收這些區域,Flash很快就會變成只讀的狀態了。不幸的是由于這些塊不可能單獨擦除,回收這些塊就有些復雜了。單次擦除被限制在一個叫作擦除單元的較大范圍內,如對于AMD的Am29LV065D芯片來說是64KB。TrueFFS使用一種被稱為碎片回收的機制來回收那些不再包含有效數據的塊。該機制從一個預擦除單元內復制所有的有效數據塊到另一個新的被稱為轉移單元的擦除單元。然后,TrueFFS更新映射表,再擦除這個廢舊的預擦除單元。這樣,原來的塊出現在外界時仍然包含了原來的數據,雖然這些數據現在已經存放在Flash存儲器的其它空間。
碎片回收算法會找到并回收與下面標準最吻合的擦除單元:
①廢塊最多;
②擦除次數最少;
③最靜態的區域。
3 塊分配和關聯數據集結
為了提高數據的讀取效率,TrueFFS使用一種靈活的空間分配策略:將關聯的數據(如由同一個文件的內容組成的多個塊)集結到同一個單獨擦除單元內的一段連續的區域中。為此,TrueFFS盡量在同一個擦除單元內維持一個由多個物理上連續的自由塊組成的存儲池。如果這樣連續的存儲池無法實現,TrueFFS分盡量保證池中的所有塊是在同一個擦除單元內。如果連這樣的情況也不可能的話,TrueFFS會盡量把塊池分
配到一個擁有最多可用空間的擦除單元內。這種集結關聯數據的途徑有幾個好處。首先,如果TrueFFS必須從一個小的存儲窗口來訪問Flash,那么這樣集結了的關聯數據可以減少調用映射物理塊到該窗口的次數,加快了文件繼續訪問速度。其次,這種策略可以減少碎片的產生。這是因為刪除一個文件可以釋放掉更容易回收的完整塊,意味著碎片回收會變得更快。另外,它可以使屬于靜態文件的多個塊存放在同一地址,這樣當損耗均稀算法決定移動靜態區域時,轉移這些塊就變得更加容易了。
4 Power Failure Management
向Flash寫數據有時可能會出錯,比如在響應文件系統寫請求時、碎片回收期間甚至在TrueFFS格式化或擦除Flash時。在這些情況下,TrueFFS能夠從錯誤中恢復過來;但在新數據第一次寫入Flash時如果出錯就會丟失這些數據。然而,TrueFFS非常仔細地保證所有已經存放在Flash上的數據是可恢復的,甚至能夠避免用戶由于不耐煩或好奇而猛地拔出Flash卡而可能造成的災難性后果。
TrueFFS algorithms based on “erase after write” instead of"erase before write"健壯的關鍵是它使用了一種“先寫后擦”的策略。當更新Flash一個扇區的數
據時,只有在更新操作完成并且新存儲的數據校驗成功后,先前的數據才會被允許擦掉。這樣的結果是數據扇區不能處于部分寫狀態。操作成功的話新扇區的數據有效,否則老扇區的數據有效。很明顯,這樣有利于用戶已經寫到Flash上的數據的穩定性”
?????? 看到這里,想起以前編程序使用的 ISD5116, 當時也是考慮到使用的頻率問題,做的是絕對均衡,不過看看這篇文章,深有同感。 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 买的国债凭证丢了怎么办?到期怎么兑付
- 下一篇: 招行信用卡账单分期最低还款额是什么意思