Was this page helpful?

閃存記憶體工作原理


    參考: http://www.mobile01.com/topicdetail....&last=21797344
            http://esslab.tw/wiki/index.php/A_Tu...agement_Issues

    原創 OSSLab thx
    前言:

    FLASH Memory 不像是DRAM 儲存數據 那樣單純,因為 FLASH memory有壽命限制問題,必需用均衡寫入與讀取算法來存儲數據,必須分析出數據存儲的結搆和組織關系, 如數據里有無規律的ID號、通道交換、塊間交換、頁間交換等情況. 才能得到正確數據.白話點,Dump 出來raw data.不是單存的線性data ,

    Nand flash 工作原理




    nand2.png

     



    Nand Flash Architecture
    閃存架構是很重要的  要清楚瞭解才能正確還原其數據塊


    Pages
    Block
    Plane
    Bank (同於 ,Die )
    Device ( Channel 通道= 幾顆)


    Page (有幾塊pages 數是flash memoery 硬體參數決定.同一model  pages一樣)

    管理塊位置是不定,觀察閃存IC內容時,最重要就是要區隔開管理塊跟數據塊

    至於Pages 有幾Byte  可不一定的 
    比如說 1 Pages= 2048 Bytes的User Data 數據塊 加上  64 Bytes 的Spare Data所構成的  管理塊 
               1  Pages= 4096  KBytes 的User Data 數據塊 加上  128  Bytes 的Spare Data所構成的  管理塊 

    若 1 Pages= 2048 Bytes的User Data 數據塊 加上  64 Bytes的Spare Data所構成的  管理塊  = 2112 Byte

    Pages 組成 不會這樣單純 由主控制IC 跟量產工具所控制

    比如說單頁容量值=單元頭大小+(資料塊個數×資料長度)+資料頭大小+(管理區(SA區)個數×資料尾長度)+單元尾大小。

    表示可如下 0+ (4×512)+0+(4×16)+0=2112。

    Pages 再組成 Blocks  (塊)
    組成方法也不同 64 Pages or 128 Pages= 1  Blocks 等都有
     

    以 1  Pages 2112 byte,  1 block =128 Pages 為例
      2112 * 128 /1024 = 264   故每個Block的容量為264 Kbyte  =135168 byte




    Blocks 再組成 Bank

    Bank為nand flash 層數
    2048 Block =  1 Bank  = 528MB  每顆的Bank 容量

    每個Page的容量該有512 ,2048 ,4096 user data 。

    NAND Flash除了Page Data 有header + SA 與定位非線性外, 每個Pages, block, Bank還有不同交替格式
    以比Raid還要複雜 以下為頁間範例

    頁間交換

    bp.png






    其中,Spare Data主要是用來存放ECC(Error Correcting Code)、Bad Block Information和File System的資料。

    如果你啥都看不懂  沒關係 你只要瞭解 

    同樣FLASH 主控+軔體版本 配上一樣容量  廠牌 型號 Flash memory  .算法才會一樣!!!!

    以下引用自

    A Tutorial on NAND Flash Memory and Its Management Issues

    學生:林燕屏

    指導教授:張立平

     


    Random data input/output

    當對Page的資料做讀寫時,必須將1整頁的所有資料都存在於控制器大配或內建記憶體中,當外部的RAM不夠大時,無法一次存放整個頁的資料,故利用NAND Flash的Internal Page Buffer來存放整個頁的資料,並使用Random Data Input/Output就可以對頁中任意位址的資料做存取。

    對1頁裡的資料做一般的讀寫時,資料都是Sequential的,但若想要隨意存取1頁裡的資料,如想要存取ECC的資料,便可使用Random data input/output跳至User Data的尾端去存取ECC的資料。

     

    NAND-flash Management Issues

     

    Address Translation

    NAND Flash Memory的同1個page不能做重覆寫入的行為。再者,在寫入1個sector資料之前,必須要有抹除1個Block的資料才能做寫入的動作,但抹除 1個Block的動作需要耗費相當多的時間,此舉造成了NAND Flash效能下降的最大原因。為了改善效能,最有效的方法就是減少Erase的次數,因此有了Mapping Table。

    Mapping Table的管理分為Block level、Sector level以及改良的Hybrid level。
     

    Block level的address mapping是指1個Logical Block對應到1個Physical Block,它的mapping table相對於sector-level的mapping table來的小,能夠節省mapping table所占RAM的使用量。但當Logical Block的個數少於Physical Block個數時,會發生Logical Block時常被overwrite的狀況,選定要overwrite的Logical block和它mapping的Physical Block都要將資料更新到新的Physical Block上,且做erase-before-write的動作,而造成效能的下降,此外轉換單位大,每次寫入的單位也大,因此會帶來額外的資料寫入成 本。

    而Sector-Level的address mapping是1個Logical Sector可以對應到任1個Physical Block裡的Sector,雖然這種mapping的方式彈性佳,可以減少因轉換單位大而帶來額外的資料寫入成本,但是mapping table的Size過大,例如1GB的Flash,1個sector的大小為512byte的話,RAM就要維護二百萬筆的sector資訊。
     

     

    Figure 5. 資料區塊,紀錄區塊,以及備用區塊的使用。

    (a)完整的資料區塊(b)資料依序寫入紀錄區塊的可寫頁中(c)區塊鏈的Merge

     

    改良的Hybrid level,擷取Block level和Sector level的優點,採用Block level的方式,再加上有限數量的Block做為Sector level的mapping,除了讓mapping table的size限制住不至於龐大,也減少了erase-before-write的動作。Hybrid level中,將Physical Block取名為資料區塊(Data Block),因為資料不能直接更新於資料區塊裡,我們找了一段可寫的Block來紀錄更新的資料,並將它取名為紀錄區塊(Log Block)。經過一段時間的寫入,一個LBA(Logical Block Address)對應會對應一個資料區塊,而此資料區塊會跟著數個紀錄區塊,整個形成一個區塊鏈(Block Chain),如圖5(b)所示。
     

     

    Figure 6.Hybrid Level mapping table [7]

    Hybrid Level在做write的時候,在寫第1、2筆資料時(sector 4,5),會由block level的mapping table找出Data Block 10,因為對應sector裡內容是空的,因此就直接寫入Data Block 10裡。而寫第3筆資料時(sector 4),由Block level的mapping table找到Data Block 10,但裡面已有寫入的資料,故改由sector level的mapping table找尋空的Log Block,寫入第3筆資料。在寫第4筆資料時(sector 4),因為sector level的mapping table裡已有mapped的Log Block,故將第4筆資料依序寫入對映的Log Block裡。

    而在讀取時,會先由Sector level的mapping table裡,找出最新的資料,而Log Block裡沒有的資料,則由Block Level mapping table裡找到的Data Block裡。

     

    Wear-Leveling

    當在使用Flash時,常會對某個檔案做修改的動作,當此時檔案變動而要用到更多的Page且Flash中仍有空的Block時,會將空的 Block配置給此檔案來使用,若Flash中已經沒有空的Block時,則會執行Garbage Collection來清出空的Block以供使用。在挑選空的Block或執行Garbage Collection清出空的Block時,可能會造成部分的Block時常被挑選,這些Block可能因為被過度使用而造成損毀。為了避免這種情況發 生,會使用Wear-Leveling,讓大部分Block的存取次數平均,而不會常常挑選到某些固定的Block上,造成Block的過度存取而損毀。

    再者,NAND Flash抹除和寫入的reliability有使用的次數(100,000次),使用wear-leveling可以紀錄並平均每個block被使用的次數。

    Wear-Leveling有兩種方式來實現,一種是在FileSystem和NAND Flash中間的FTL(Flash Translation Layer)裡實現的。FTL可以讓上層的OS透過FTL以disk的方式去讀寫下層的NAND Flash,另外也提供了virtual address和physical address的轉換。

     

    Figure 11. Wear Leveling in the FTL [4]

    另一種的實現方法為Wear Leveling直接在FileSystem裡實現,OS直接透過HAL和NAND Flash溝通。

     

    Figure 12.Wear Leveling in the File System [4]

    Was this page helpful?
    標籤 (Edit tags)
    • No tags

    文件 3

    文件大小日期附件上傳者 
     bp.png
    無描述
    34.88 KB17:18, 25 Jul 2010thx動作
     nand1.png
    無描述
    52.07 KB18:47, 25 Jul 2010thx動作
     nand2.png
    無描述
    63.06 KB18:47, 25 Jul 2010thx動作
    您必須 登入 才能發佈評論。
    Powered by MindTouch Core