NAND和快閃記憶體轉換層(FTL)

我們使用的固態硬碟(SSD),U盤等存儲設備,有別於機械硬碟,其實際存儲顆粒為NAND。而NAND存儲顆粒受其物理特性影響必然存在壞塊,同時也不能直接寫0寫1。

NAND有別於機械硬碟,主要體現在一下幾個方面。

一,如果你想往某個區域存儲一個字節的數據,比如0x55,首先需要確認當前區域是沒有寫入過數據的,也就是必須是全部0xFF的,因為NAND寫入的時候每個bit只能從1變成0,不能從0變成1。如果不是全FF,則需要擦除操作,講該區域全部變成0xFF,才可以寫入你想要的0x55寫進去。

二,NAND還存在另外一個特性是數據容易出錯,寫進去的是0x55,回讀可能是0x5A,這時候需要ECC算法將錯誤的數據糾正過來,ECC算法比較複雜,在此不論述。

三,NAND存儲顆粒的擦寫次數是有限的,一般一個塊也就是3000次左右,不能無線擦寫。

四,NAND存儲顆粒是存在壞塊的,也就是實際物理地址上的某個區域是不能正常存儲數據的。

這些特性都導致電腦不能向機械硬碟一樣直接操作NAND。比如我們的電腦管理了全部文件內容,管理這些文件內容的功能叫文件系統。類似FAT文件系統會在固定的區域存儲所有的文件信息,包括文件名,大小,作者等,例如存儲在地址0里面。而我們需要頻繁的修改文件,那麼地址0存儲的文件信息就需要頻繁的更新,假如存儲地址0對應NAND地址0,那麼這塊控制項將很快達到其擦寫次數壽命,導致損壞,我們的文件信息就會發生錯亂。而且NAND不接受直接寫入,必須先擦除再寫入,還需要記錄NAND中的壞塊在哪里,避免寫入已經壞掉的區域。讀取的時候還需要進行ECC糾錯,防止數據出錯,這都會大大增加系統的負擔,是不會被廠家接受的。大家都懶,誰願意為了你的問題而改變自己呢,除非你給錢。

FTL快閃記憶體轉換增這時候被提出來了,其作用就是文件系統和NAND之間的溝通橋樑。對於文件系統來說,它操作的實際第一對像是FTL,依然向機械硬碟一樣管理所有的數據,不需要變動,什麼都不需要改,除了問題一定是你的,因為我沒改。這樣系統方恨開心。但是管理NAND的髒活累活就得FTL來做了,誰讓SSD等廠家想賣錢呢。

NAND和快閃記憶體轉換層(FTL)

FTL算法,其實就是一種邏輯地址到物理地址的映射。當文件系統發送指令要寫入或者更新一個特定的邏輯頁時,FTL實際上是把數據寫入到一個不同的空閒物理頁並更新映射表(邏輯地址和物理地址的關聯數據),並把這個頁上包含的”舊數據”標記為”無效”(更新後的數據已經寫入新的物理地址,舊地址的數據自然就失效了)。正是因為FTL的存在,作業系統才能把SSD當成機械硬碟那樣操作,因此FTL轉換的性能也就直接影響SSD的性能表現,而且FTL算法也是影響SSD壽命及穩定性的決定因素之一。

FTL還需要管理壞塊,磨損均衡(與NAND壽命直接相關),ECC算法等功能,只有這樣才能偽裝的自己是一個機械硬碟,別人才會用你。

來源:kknewsNAND和快閃記憶體轉換層(FTL)