對於大部分的使用者來說,Flash Disk是種有點像是硬碟的東西。
不像硬碟,有穩定的讀取和寫入速度,
但卻不怕震動,也不需要任何的機械結構,
和硬碟相同的是,它們都可以在失去電源時保存資料。
但卻不怕震動,也不需要任何的機械結構,
和硬碟相同的是,它們都可以在失去電源時保存資料。
然而,Flash Disk和硬碟在存取行為上,
有著一個很大很大的差別...
有著一個很大很大的差別...
今天,你開啟了一份文件,做了修改,然後再回存。
對於硬碟來說,就是從某個地方讀了筆資料,在修改之後,存回硬碟同樣的地方。
但對於Flash Disk來說,卻是從某個A區域讀出資料,在修改後,
把A區域標為"Invalid"(可以想是:標記A區域"死"了),
然後將修改後的資料寫到另一個B區域。
也就是說,並非"回存"於同樣的地方。
這主要是因為,Flash的"寫入",
只能把某個bit由0變1,或是只能把某個bit由1變0。
以某個只能把bit由0變1的Flash為例,
當Flash要寫入資料時,
需要找到一塊全部都是0的區域,
只能把某個bit由0變1,或是只能把某個bit由1變0。
以某個只能把bit由0變1的Flash為例,
當Flash要寫入資料時,
需要找到一塊全部都是0的區域,
再依照要寫入的資料內容,
把某些bits"寫"成1。
把某些bits"寫"成1。
不過如同大家所知的,
Flash不是可以重複寫入嗎?
那些Invalid,"死"掉的區域怎麼辦?
直接把那塊區域清空,在寫回去,不是很簡單嗎?
Flash不是可以重複寫入嗎?
那些Invalid,"死"掉的區域怎麼辦?
直接把那塊區域清空,在寫回去,不是很簡單嗎?
這部分則牽涉到了Flash Disk的結構...
一塊Flash Memory,可以切分成數百個Blocks,
每個Block包含一定數量的Pages。
每個Page可以單獨被直行"寫入"的動作,
並可被標記成"Blank"(空白)、"Valid"或"Invalid"。
"Blank"代表可以被執行"寫入"的Page,
"Valid"代表存有有用資料的Page,
"Invalid"代表因為資料修改或刪除,已經沒用的Page。
每個Block包含一定數量的Pages。
每個Page可以單獨被直行"寫入"的動作,
並可被標記成"Blank"(空白)、"Valid"或"Invalid"。
"Blank"代表可以被執行"寫入"的Page,
"Valid"代表存有有用資料的Page,
"Invalid"代表因為資料修改或刪除,已經沒用的Page。
一個新的隨身碟,所有的Page都是"Blank",
可以快速的不斷寫入。
但隨著長時間的使用,"Blank"的pages會愈來愈少,
"Invalid"的pages愈來愈多,
可以快速的不斷寫入。
但隨著長時間的使用,"Blank"的pages會愈來愈少,
"Invalid"的pages愈來愈多,
到最後根本沒有"Blank"的pages可用。
此時,便需要做Erase的動作。
Erase會把一個Block內所有的pages都做清乾淨,
讓這些pages都變回"Blank"的pages。
但是,要被Erase的Block,
裡面可能包含部分Pages是"Valid"的,
存有有用的資料,如果被清掉就沒了。
所以,一個要被Erase的Block,
必須先把所有包含的"Valid" 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完成在正式執行要做的"寫入"...
也許運氣很好,有很多"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,
都有一些演算法的技巧可以去加強,不過一般來說還是有很大的不穩定性。
Flash Disk的寫入時間,是非常非常不穩定的!
當然,要寫入哪個page,Erase時要選哪個Block,
都有一些演算法的技巧可以去加強,不過一般來說還是有很大的不穩定性。
至於為啥一次一定要Erase一個Block,
而不能只Erase一個page,
這和Flash Memory的整個結構以及控制訊號有關,
便不多作介紹了。
而不能只Erase一個page,
這和Flash Memory的整個結構以及控制訊號有關,
便不多作介紹了。
另外...
Flash的先天限制,不論是多麼新多麼好的技術,
都是適合讀取(有穩定速度)而不適合寫入。
Flash的先天限制,不論是多麼新多麼好的技術,
都是適合讀取(有穩定速度)而不適合寫入。
如果你的資料是要不斷更新的,
像是寫程式,不斷的修改、存檔,
請在硬碟上執行吧~
像是寫程式,不斷的修改、存檔,
請在硬碟上執行吧~
每一次的Erase都是在減少Flash的壽命。
現在的存取壽命,都是以能"正確存取"作為評估。
但在仍能正確存取資料時,
現在的存取壽命,都是以能"正確存取"作為評估。
但在仍能正確存取資料時,
漏電流,每次寫入所需要的電壓和打電壓的次數都會增高,
而和全新的Flash Disk有些效能和耗電量的差異...
(相信有人有些經驗... MP3用久了以後,續航力愈來愈差,
原以為是電池老化,但換了新電池卻沒有太大改善,這就是Flash Gate的"老化")
而和全新的Flash Disk有些效能和耗電量的差異...
(相信有人有些經驗... MP3用久了以後,續航力愈來愈差,
原以為是電池老化,但換了新電池卻沒有太大改善,這就是Flash Gate的"老化")
而組電腦只用SSD也是種極端且不是很正確的做法。
SSD拿來作系統碟,大部分時間在讀取,對效能有正面效果沒錯。
但若因為某些應用程式(Ex: PhotoShop)或是用途,常有大量寫入的動作,
以Flash的特性實在不太合適。
當然,如果因環境因素,有時SSD也是不得已的唯一選擇...
或者... 某日SSD實在太過便宜,可以讓大家豪不皺眉頭的抽換,
那基於SSD的高效能,也是個合理的作法。
SSD拿來作系統碟,大部分時間在讀取,對效能有正面效果沒錯。
但若因為某些應用程式(Ex: PhotoShop)或是用途,常有大量寫入的動作,
以Flash的特性實在不太合適。
當然,如果因環境因素,有時SSD也是不得已的唯一選擇...
或者... 某日SSD實在太過便宜,可以讓大家豪不皺眉頭的抽換,
那基於SSD的高效能,也是個合理的作法。