2010年9月23日

隨身碟Flash運作的方式

對於大部分的使用者來說,Flash Disk是種有點像是硬碟的東西。

不像硬碟,有穩定的讀取和寫入速度,
但卻不怕震動,也不需要任何的機械結構,
和硬碟相同的是,它們都可以在失去電源時保存資料。

然而,Flash Disk和硬碟在存取行為上,
有著一個很大很大的差別...
今天,你開啟了一份文件,做了修改,然後再回存。
對於硬碟來說,就是從某個地方讀了筆資料,在修改之後,存回硬碟同樣的地方。
但對於Flash Disk來說,卻是從某個A區域讀出資料,在修改後,
把A區域標為"Invalid"(可以想是:標記A區域"死"了),
然後將修改後的資料寫到另一個B區域。
也就是說,並非"回存"於同樣的地方。

這主要是因為,Flash的"寫入",
只能把某個bit由0變1,或是只能把某個bit由1變0。
以某個只能把bit由0變1的Flash為例,
當Flash要寫入資料時,
需要找到一塊全部都是0的區域,

再依照要寫入的資料內容,
把某些bits"寫"成1。

不過如同大家所知的,
Flash不是可以重複寫入嗎?
那些Invalid,"死"掉的區域怎麼辦?
直接把那塊區域清空,在寫回去,不是很簡單嗎?

這部分則牽涉到了Flash Disk的結構...

一塊Flash Memory,可以切分成數百個Blocks,
每個Block包含一定數量的Pages。
每個Page可以單獨被直行"寫入"的動作,
並可被標記成"Blank"(空白)、"Valid"或"Invalid"。
"Blank"代表可以被執行"寫入"的Page,
"Valid"代表存有有用資料的Page,
"Invalid"代表因為資料修改或刪除,已經沒用的Page。

一個新的隨身碟,所有的Page都是"Blank",
可以快速的不斷寫入。
但隨著長時間的使用,"Blank"的pages會愈來愈少,
"Invalid"的pages愈來愈多,

到最後根本沒有"Blank"的pages可用。

此時,便需要做Erase的動作。
Erase會把一個Block內所有的pages都做清乾淨,
讓這些pages都變回"Blank"的pages。
但是,要被Erase的Block,
裡面可能包含部分Pages是"Valid"的,
存有有用的資料,如果被清掉就沒了。
所以,一個要被Erase的Block,
必須先把所有包含的"Valid" pages寫到其他地方去,
才能做Erase。

想想看寫入時可能會發生的情形吧~
也許運氣很好,有很多"Blank"的Pages可寫,則可快速寫入...
也許所剩的"Blank" pages不夠,要做Block Erase,
如果恰巧有個Block包含的pages全部都是"Invalid"的,
那也很簡單,把該Block直接Erase,
然後得到一整個Block的"Blank" pages,來作寫入用;
不過如果運氣不太好,
要被Erase的Block有不少"Valid" pages,
則還要做pages搬移,也就是一連串的寫入動作,
才能開始Erase,Erase完成在正式執行要做的"寫入"...


從上面可發現...
Flash Disk的寫入時間,是非常非常不穩定的!
當然,要寫入哪個page,Erase時要選哪個Block,
都有一些演算法的技巧可以去加強,不過一般來說還是有很大的不穩定性。
至於為啥一次一定要Erase一個Block,
而不能只Erase一個page,
這和Flash Memory的整個結構以及控制訊號有關,
便不多作介紹了。
另外...
Flash的先天限制,不論是多麼新多麼好的技術,
都是適合讀取(有穩定速度)而不適合寫入。
如果你的資料是要不斷更新的,
像是寫程式,不斷的修改、存檔,
請在硬碟上執行吧~
每一次的Erase都是在減少Flash的壽命。
現在的存取壽命,都是以能"正確存取"作為評估。
但在仍能正確存取資料時,
漏電流,每次寫入所需要的電壓和打電壓的次數都會增高,
而和全新的Flash Disk有些效能和耗電量的差異...
(相信有人有些經驗... MP3用久了以後,續航力愈來愈差,
原以為是電池老化,但換了新電池卻沒有太大改善,這就是Flash Gate的"老化")
而組電腦只用SSD也是種極端且不是很正確的做法。
SSD拿來作系統碟,大部分時間在讀取,對效能有正面效果沒錯。
但若因為某些應用程式(Ex: PhotoShop)或是用途,常有大量寫入的動作,
以Flash的特性實在不太合適。
當然,如果因環境因素,有時SSD也是不得已的唯一選擇...
或者... 某日SSD實在太過便宜,可以讓大家豪不皺眉頭的抽換,
那基於SSD的高效能,也是個合理的作法。

轉載自:http://seekemlab.pixnet.net/blog/post/21648028

by necos.s(99/9/23)

沒有留言:

張貼留言