国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于sector訪問的flash存儲器的存儲管理的制作方法

      文檔序號:6573544閱讀:245來源:國知局
      專利名稱:基于sector訪問的flash存儲器的存儲管理的制作方法
      所屬領域本發(fā)明屬于存儲管理技術領域,涉及以flash存儲器設備為介質(zhì)的存儲管理系統(tǒng),尤其涉及基于sector訪問的flash存儲器的組織方法和管理方法以及數(shù)據(jù)訪問方法,使得flash存儲器設備能象磁盤一樣的運作,即實現(xiàn)固態(tài)內(nèi)存磁盤。
      背景技術
      現(xiàn)有技術的Flash存儲器是一種類似于EEPROM的非易失存儲器設備,目前廣泛的用于嵌入式設備中。Flash存儲器有如下特性1.Flash的寫操作可以把flash存儲器上任意bit的數(shù)據(jù)的從1變成0。但是對任一bit,寫操作都不能把它從0變成1。
      2.Flash的擦除操作只能把flash存儲器上每個bit的數(shù)據(jù)從0變成1。而且相對于寫操作,擦除操作需要更多的執(zhí)行時間。無論是NAND flash還是NOR flash,擦除都是一個很耗時的操作。
      3.Flash最小可擦除區(qū)域的大小和最小可寫區(qū)域的大小是不一樣的,而且相差很大。Flash的最小可擦除區(qū)域稱為塊(block),對NOR flash,塊的大小通常是8KB或者64KB或者128KB等。對NAND flash,塊的大小通常是16KB、128KB或者256KB等(不計備用區(qū))。而最小可寫區(qū)域的大小比塊的大小要小很多。對NOR flash存儲器,塊直接由一系列連續(xù)的字節(jié)組成,最小可寫區(qū)域為單字節(jié)或者雙字節(jié)。對NAND flash存儲器,塊由一系列大小相等的頁(page)組成,最小可寫區(qū)域是頁或者頁的一小部分,頁的大小通常是512B或者2KB等(不計備用區(qū)),但是在兩次連續(xù)的擦除操作之間,每個頁的寫入次數(shù)是有限制的,通常是3-10次,超過這個次數(shù),該頁上的數(shù)據(jù)就會變得不可靠。
      4.Flash存儲器設備由一系列塊組成,每個塊的可擦除次數(shù)是有限的,超過這個最大可擦除次數(shù)的限制后,該塊的工作穩(wěn)定性就沒有保證。
      5.對于一些大容量NAND flash,比如SAMSUNG的NAND flashK9K8G08U0A,塊內(nèi)的各個頁必須被順序?qū)懭?,不能以隨機的順序?qū)K內(nèi)的各個頁寫入數(shù)據(jù)。
      因此每次在修改flash存儲器中已有的數(shù)據(jù)前,需要把對應塊中的全部內(nèi)容先讀到RAM中,在RAM中對相應的數(shù)據(jù)進行修改,然后擦除包含原始數(shù)據(jù)的flash塊,最后把RAM中的數(shù)據(jù)寫回到原來的塊中。這種flash存儲管理方法存在下列缺陷1)寫數(shù)據(jù)時容易導致數(shù)據(jù)丟失。在擦除塊之后但是在把數(shù)據(jù)寫回塊之前,發(fā)生任何原因的系統(tǒng)掉電,都會造成該塊的全部數(shù)據(jù)包括不要求修改的數(shù)據(jù)的丟失。
      2)存儲器寫操作速度慢效率低。每次數(shù)據(jù)修改即使是一個Bit的修改都要求先擦除對應的塊,增加了寫操作的時間。
      3)頻繁的修改一個特定塊中的數(shù)據(jù),會導致該塊被頻繁的擦除,該塊就會比其他塊更快的達到最大可擦除次數(shù),因此影響整個系統(tǒng)的使用壽命。
      許多現(xiàn)有的操作系統(tǒng)(OS)都帶有管理數(shù)據(jù)的文件系統(tǒng),那些文件系統(tǒng)通常以磁盤作為管理的對象,而磁盤是以扇區(qū)(sector)為單位讀寫的,扇區(qū)的大小通常是512字節(jié)。文件系統(tǒng)會對磁盤上的任意扇區(qū)進行反復的數(shù)據(jù)讀和寫操作。Flash存儲器的上述特性使得它無法直接用于現(xiàn)存的文件系統(tǒng)。為了讓現(xiàn)存的文件系統(tǒng)可以不經(jīng)修改的用于flash存儲器設備,需要提供一種方法來分配和管理flash存儲器,使文件系統(tǒng)可以用它的地址來尋址相應的扇區(qū),并可以反復的讀寫,而且其讀寫可以以磁盤扇區(qū)的大小為單位。
      美國專利6381176提出的flash管理方法,提高了寫的效率和系統(tǒng)的健壯性,但是該技術方案需要在flash存儲器的每個塊內(nèi)預留一些區(qū)域,用于數(shù)據(jù)更新,這影響了flash存儲器的空間利用率,同時,因為預留更新區(qū)和原始數(shù)據(jù)區(qū)在同一塊(block)內(nèi)的兩個不同區(qū)域,該技術方案無法適用于某些要求對塊內(nèi)的頁順序?qū)懭氲腘AND flash。另外該方案把一段地址相鄰的虛擬扇區(qū)映射到一個塊中,在文件數(shù)據(jù)更新時,幾個相鄰的虛擬扇區(qū)中的數(shù)據(jù)可能被同時更新,因此會很快用光預留的更新區(qū)域,導致頻繁的擦除該塊,影響flash的使用壽命以及寫的速度。
      中國專利公開號CN 1805049提出的flash的管理方法,提高了寫的效率和系統(tǒng)的健壯性,但是該技術方案在跟蹤狀態(tài)變化時,需要對flash同一個區(qū)域進行多次的寫,以記錄各個過程。因為NAND flash對同一個頁有前面描述的寫次數(shù)的限制,所以該方案不能用于NAND flash。而且,因為NAND flash寫整個頁和寫頁的一小部分消耗的時間相差不多,因此該技術方案即使能減少寫的次數(shù),對NAND flash依然有寫效率的問題,因此需要有一個優(yōu)化的方法,并且該方法還能適用于NOR flash和NAND flash。

      發(fā)明內(nèi)容
      為了克服現(xiàn)有技術的上述缺陷,本發(fā)明提供了flash存儲器的一種組織方法、管理方法以及數(shù)據(jù)讀寫方法,以提高flash用于數(shù)據(jù)存儲時的健壯性,提高在flash上寫數(shù)據(jù)時的寫效率,提高每個flash塊的使用均衡性,并使flash存儲器能模擬出和內(nèi)存磁盤一樣的基于sector的數(shù)據(jù)訪問接口,使得現(xiàn)存的文件系統(tǒng)不用修改就能把flash存儲器用作文件數(shù)據(jù)存儲設備。雖然這些方法以NOR flash和NAND flash為例子來描述,但是這些方法也可以用于其他的有類似讀寫特性的存儲設備。
      本發(fā)明的目的是通過以下的技術方案來實現(xiàn)基于sector訪問的flash存儲器,其方法包括下列步驟(1)定義Flash存儲器的物理空間。根據(jù)flash存儲器的物理結(jié)構,將其存儲器劃分為一個以上的塊,稱之為物理塊,各物理塊的大小相同,按照物理塊起始地址從小到大的順序給每個物理塊指定一個編號(物理塊號PBN)。然后把每個物理塊劃分為一個以上的頁,稱之為物理頁,各物理頁的大小相同。物理塊中的每個物理頁按照它在物理塊內(nèi)起始偏移地址從小到大的順序給每個物理頁指定一個在該物理塊內(nèi)唯一的編號(物理頁號PPN)。把物理塊組成的空間稱為物理空間。
      (2)定義一個邏輯存儲區(qū),并將其劃分為一個以上的塊,稱之為邏輯塊,各邏輯塊的大小相同,并且邏輯塊的大小和物理塊的大小相同,每個邏輯塊都有一個邏輯地址,把邏輯塊組成的空間稱為邏輯空間。按照邏輯塊在邏輯空間中的起始地址從小到大的順序給每個邏輯塊指定一個編號(邏輯塊號LBN)。然后把邏輯塊劃分為一個以上的頁,稱之為邏輯頁,各邏輯頁的大小相同,并且邏輯頁的大小和物理頁的大小相同。邏輯塊中的每個邏輯頁按照它在邏輯塊內(nèi)起始偏移地址從小到大的順序給每個邏輯頁指定一個在該邏輯塊內(nèi)唯一的編號(邏輯頁號LPN)。
      (3)建立邏輯空間和物理空間的映射。每個邏輯塊都會映射到唯一的一個物理塊,但不是每個物理塊都會映射到一個邏輯塊,有一些至少一個物理塊被保留以作為壞塊的替換或傳輸塊或存儲配置管理數(shù)據(jù),這些被保留的物理塊沒有映射到邏輯塊,每個物理塊至多被映射到一個邏輯塊中。因此邏輯空間中的邏輯塊數(shù)和物理空間中的物理塊數(shù)不必是相同的。當物理塊映射有邏輯塊時,把對應的邏輯塊號保存在物理塊中,此時該物理塊除了有一個根據(jù)其起始地址賦予的物理塊號PBN外,另外還有一個邏輯塊號LBN。然后把邏輯塊中的邏輯頁映射到所對應物理塊中的物理頁。當物理頁映射有邏輯頁時,把對應的邏輯頁號(LPN)保存在物理頁中,此時該物理頁除了有一個根據(jù)其在物理塊內(nèi)起始偏移地址賦予的物理頁號PPN外,另外還有一個邏輯頁號LPN。當物理塊(頁)沒有和邏輯塊(頁)映射時,物理塊(頁)中就不保存邏輯塊(頁)號。
      (4)根據(jù)物理塊中的邏輯塊號和物理頁中的邏輯頁號,在RAM中建立兩級反向的映射表。第一級映射表把邏輯空間中的每個邏輯塊映射到唯一的一個物理塊上去,第一級映射表的第一項屬于邏輯塊0,用于保存邏輯塊0對應的物理塊號,第二項屬于邏輯塊1,用于保存邏輯塊1對應的物理塊號,依此類推。然后為每個邏輯塊建立一張第二級映射表,把在這個邏輯塊中的邏輯頁映射到對應物理塊中的物理頁上去。第二級映射表的第一項屬于邏輯頁0,用于保存邏輯頁0對應的物理頁號,第二項屬于邏輯頁1,用于保存邏輯頁1對應的物理頁號,依此類推。一個邏輯塊中的所有邏輯頁都映射到同一個物理塊中。
      (5)定義一個虛擬磁盤,其由一個以上的扇區(qū)(sector)組成,稱之為虛擬扇區(qū)。各虛擬扇區(qū)的大小相同,并且虛擬扇區(qū)的大小和現(xiàn)實磁盤的扇區(qū)的大小相同,通常是512字節(jié)。把所有虛擬扇區(qū)組成的空間稱為虛擬空間。按照虛擬扇區(qū)在虛擬空間中的起始地址從小到大的順序給每個虛擬扇區(qū)指定一個編號(虛擬扇區(qū)號VSN)。計算機程序(比如文件系統(tǒng))在讀寫flash存儲器上的內(nèi)容時提供的地址被解釋成虛擬扇區(qū)號。
      (6)建立虛擬空間到邏輯空間的映射,把虛擬空間中的每個虛擬扇區(qū)映射到唯一的一個邏輯頁上去。該映射方法是把最前面的M個虛擬扇區(qū)(編號為0~(M-1))映射到第一個邏輯塊中的第一個邏輯頁,把緊接著的后M個虛擬扇區(qū)(編號為M~(2M-1))映射到第二個邏輯塊中的第一個邏輯頁,依次類推,一直到最后一個邏輯塊中的第一個邏輯頁;然后再回到第一個邏輯塊,把后續(xù)緊接著的M個虛擬扇區(qū)映射到第一個邏輯塊中的第二個邏輯頁,一直到最后一個邏輯塊中的第二個邏輯頁,依此類推,一直到最后一個邏輯塊中的最后一個邏輯頁。這里的M就是每個邏輯頁(也即每個物理頁)包含的虛擬扇區(qū)的個數(shù),即M就是邏輯頁的大小除以虛擬扇區(qū)的大小的商。虛擬空間的大小和邏輯空間的大小是相同的。虛擬地址到邏輯地址映射方法的計算公式是offset=(VSN mod M),LBN=(((VSN-offset)÷M)mod N),LPN=(((VSN-offset)÷M)-LBN)÷N,mod是模運算,也就是相除取余數(shù)的運算。
      VSN是虛擬扇區(qū)的虛擬扇區(qū)號。
      LBN是邏輯地址中的邏輯塊號。
      LPN是邏輯地址中的邏輯頁號。
      offset是邏輯頁的頁內(nèi)偏移(即邏輯頁內(nèi)第幾個虛擬扇區(qū))。
      M是每個邏輯頁(也即每個物理頁)包含的虛擬扇區(qū)的個數(shù),即邏輯頁大小是虛擬扇區(qū)大小的M倍。
      N是邏輯空間中邏輯塊的塊數(shù)。
      在讀flash存儲器上的數(shù)據(jù)時,計算機程序(比如文件系統(tǒng))提供的地址被解釋成虛擬扇區(qū)號,先根據(jù)前述第(6)步中的方法計算出虛擬扇區(qū)號對應的邏輯塊號和邏輯頁號,以及頁內(nèi)的偏移,再根據(jù)前述第(4)步中的兩級映射表把邏輯塊號和邏輯頁號轉(zhuǎn)換為對應的物理塊號和物理頁號,然后在對應物理塊的物理頁中從頁內(nèi)偏移開始讀取數(shù)據(jù)。
      在寫數(shù)據(jù)時,計算機程序(比如文件系統(tǒng))提供的地址也被解釋成虛擬扇區(qū)號,先根據(jù)前述第(6)步中的方法計算出虛擬扇區(qū)號對應的邏輯塊號和邏輯頁號,以及頁內(nèi)的偏移,再根據(jù)前述第(4)步中的兩級映射表把邏輯塊號和邏輯頁號轉(zhuǎn)換為對應的物理塊號和物理頁號。如果邏輯塊沒有對應的物理塊,則分配一個新的物理塊映射到該邏輯塊。如果邏輯塊有對應的物理塊,但是邏輯頁沒有對應的物理頁,則在該物理塊中找第一個未曾寫數(shù)據(jù)的物理頁(第一個空閑的物理頁)以保存請求寫入的數(shù)據(jù)。如果邏輯頁有對應物理頁,即邏輯頁對應的物理頁已經(jīng)寫有數(shù)據(jù),則不能在該頁上直接寫,應先把整個物理頁讀到RAM中,并根據(jù)頁內(nèi)偏移量在該RAM中更新數(shù)據(jù)。然后在該物理塊中找第一個空閑的物理頁,把在RAM中更新后的整頁數(shù)據(jù)寫入到該空閑物理頁。最后更新該邏輯塊的第二級映射表,使得邏輯塊中的邏輯頁映射到對應物理塊中的寫有新數(shù)據(jù)的物理頁上。原來的那個物理頁包含舊的數(shù)據(jù),成為臟頁,臟頁不能用于數(shù)據(jù)寫入,直到包含它的物理塊被擦除。如果前述的那個空閑物理頁無法在該物理塊中找到,根據(jù)第(6)步的映射方法,只有整個虛擬空間都用完了,才會發(fā)生整個邏輯空間都用完的情況,也即邏輯塊中所有邏輯頁都映射到了物理頁。如果虛擬空間沒有用完而對應的物理塊中已經(jīng)沒有空閑的物理頁了,則該物理塊必然包含臟頁。這時先回收該物理塊,以釋放該物理塊中被舊數(shù)據(jù)占用的物理頁?;厥胀瓿珊?,該物理塊中必然可以找到一個空閑物理頁來保存更新后的整頁數(shù)據(jù),同時更新該邏輯塊的第二級映射表,使邏輯頁映射到這個新的物理頁上。原來的物理頁包含舊的數(shù)據(jù),成為臟頁,將在下次回收該物理塊時釋放。在物理塊內(nèi)找空閑的物理頁時,總是優(yōu)先使用物理頁號最小的空閑物理頁。
      本發(fā)明方法保留了一些至少一個物理塊,這些保留的物理塊用于1)替換flash存儲器在使用過程中形成的壞塊,使得和邏輯塊映射的物理塊數(shù)保持不變。2)存儲本技術方案的實現(xiàn)系統(tǒng)的管理數(shù)據(jù),比如所有壞塊的索引表等。3)回收處理時的數(shù)據(jù)轉(zhuǎn)存(稱為傳輸塊)。回收操作先選擇一個包含臟物理頁的物理塊(回收物理塊),然后把該物理塊上的包含有效數(shù)據(jù)的物理頁上的內(nèi)容拷貝到一個保留的物理塊中,最后擦除回收物理塊,該回收物理塊就變成為一個保留的空閑物理塊,隨后的回收操作可以用該塊來轉(zhuǎn)存數(shù)據(jù)。
      NAND flash的硬件自身提供了物理頁劃分的方法,物理塊由一系列至少一個物理頁組成。每個物理頁包含用于保存文件數(shù)據(jù)的區(qū)域(后續(xù)稱之為數(shù)據(jù)區(qū)),以及一小段用于保存物理塊和物理頁的管理信息的區(qū)域(后續(xù)稱之為備用區(qū))。NOR flash的硬件沒有提供這種物理頁的劃分方法,本發(fā)明提供了一個劃分方法,把一組物理地址連續(xù)的定長區(qū)域組成一個物理頁,每個物理頁包括用于保存文件數(shù)據(jù)的區(qū)域(數(shù)據(jù)區(qū)),以及一小段用于保存物理頁的管理信息的區(qū)域(備用區(qū))。物理頁數(shù)據(jù)區(qū)的大小設定為512B,備用區(qū)的大小是2B~16B,根據(jù)物理頁的管理信息的多少決定。對NORflash,每個物理塊有一小部分至少6B被保留用于保存物理塊的管理信息,比如物理塊對應的邏輯塊號,物理塊的擦除次數(shù),物理塊的狀態(tài)等。
      為了減少對RAM的需求,本發(fā)明方法的一個改進是省略每個邏輯塊的第二級映射表,在完成了邏輯塊號到物理塊號的轉(zhuǎn)換后,通過掃描對應物理塊中的物理頁的方法來完成邏輯頁號到物理頁號的轉(zhuǎn)換,即通過在物理塊中查找包含該邏輯頁號的最新物理頁的方法,實現(xiàn)邏輯塊第二級映射表的功能。
      本發(fā)明方法所使用的放在RAM中的兩級映射表可以在系統(tǒng)啟動的時候進行重構。系統(tǒng)啟動時,掃描每個物理塊,如果物理塊有對應的邏輯塊號,則把物理塊號寫到該邏輯塊號對應的表項中。如果有兩個物理塊對應到同一個邏輯塊號,則是在回收物理塊時發(fā)生了掉電,掃描兩個物理塊,然后選擇映射有較多有效邏輯頁的物理塊和該邏輯塊號對應,另外一個物理塊被擦除。如果兩個物理塊包含的有效物理頁數(shù)相同,則任選一個和該邏輯塊號對應,另外一個物理塊被擦除。當所有的物理塊都被掃描后,第一級映射表重構成功。如果系統(tǒng)需要在RAM中構建第二級映射表,則從邏輯塊0開始檢查,如果有物理塊和邏輯塊對應,掃描和該邏輯塊對應的物理塊上的每個物理頁,如果物理頁有對應的邏輯頁號,則把物理頁號寫到該邏輯頁號對應的表項中。如果有兩個物理頁對應到同一個邏輯頁號,則選擇物理頁號大的物理頁和該邏輯頁號對應。
      本發(fā)明具有以下實質(zhì)性效果1)本發(fā)明實現(xiàn)系統(tǒng)更改文件數(shù)據(jù)時,在成功保存新數(shù)據(jù)到flash存儲器前,不會破壞文件的原始數(shù)據(jù),因此任何時候系統(tǒng)掉電,或者可以保證數(shù)據(jù)已經(jīng)寫入,或者可以恢復原始的文件數(shù)據(jù),提高了數(shù)據(jù)的可靠性和系統(tǒng)的健壯性。
      2)寫數(shù)據(jù)到flash存儲器上時,不必每次寫操作都要先擦除flash塊,大大減少了flash塊的擦除次數(shù),延長了flash的使用壽命以及提高了寫的速度。
      3)本發(fā)明采用的虛擬扇區(qū)到邏輯塊邏輯頁的映射方法和邏輯塊邏輯頁到物理塊物理頁的映射方法,(即虛擬地址到邏輯地址的轉(zhuǎn)換方法和邏輯地址到物理地址的轉(zhuǎn)換方法),使得文件系統(tǒng)的靜態(tài)數(shù)據(jù)(很少修改的數(shù)據(jù),比如程序代碼等)能盡最大可能的分布在不同的物理塊中,因此在最大程度上消除了靜態(tài)區(qū)域的形成(靜態(tài)區(qū)指全部空間用于靜態(tài)數(shù)據(jù)存儲的物理塊),提高了各個flash物理塊的使用均衡性,延長了flash的使用壽命。同時這些映射方法的使用,使得在整個地址空間用完之前,物理塊內(nèi)總會有未用的物理頁,物理塊內(nèi)目前未用的物理頁可以臨時作為更新區(qū)域使用,因此不必在每個物理塊內(nèi)預留固定數(shù)量的更新區(qū)域。提高了flash存儲器的空間利用率。
      4)本發(fā)明的空閑物理頁的分配方法,保證了每個物理塊內(nèi)的物理頁是以順序的方式寫入的。因此本發(fā)明的技術方案可以適用于各種NAND flash型號。通過對NOR flash的物理塊進行頁劃分,本發(fā)明的技術方案同時可用于NOR flash。
      5)提供基于扇區(qū)的訪問接口以及flash存儲器的分配和管理方法,使flash存儲器能和磁盤兼容,最大程度的重用了現(xiàn)存的OS程序(文件系統(tǒng)),讓現(xiàn)存的文件系統(tǒng)不經(jīng)修改可以用于flash存儲器設備,方便了整個應用系統(tǒng)的構建以及提高了通用性。本發(fā)明方法適用于各型flash存儲器,并具有良好的存儲管理性能,展示了廣闊的應用領域,經(jīng)濟效益十分顯著。


      圖1是根據(jù)本發(fā)明實現(xiàn)的一個系統(tǒng)的各功能部件的示意圖。
      圖2是根據(jù)本發(fā)明的NAND flash存儲器的組織方法的應用例的示意圖。
      圖3是根據(jù)本發(fā)明的NAND flash物理頁備用區(qū)中的管理數(shù)據(jù)的應用例的示意圖。
      圖4是根據(jù)本發(fā)明的NOR flash存儲器的組織方法的應用例的示意圖。
      圖5a是根據(jù)本發(fā)明的NOR flash塊頭部中的管理數(shù)據(jù)的實施例的示意圖。
      圖5b是根據(jù)本發(fā)明的NOR flash物理頁備用區(qū)中的管理數(shù)據(jù)的實施例的示意圖。
      圖6是根據(jù)本發(fā)明的虛擬地址到邏輯地址的映射方法的實施例的示意圖。
      圖7是根據(jù)本發(fā)明的邏輯地址到物理地址的映射方法的實施例的示意圖。
      圖8是圖7所示實施例的物理塊的各物理頁的狀態(tài)示意圖。
      圖8中Valid-有效頁、Dirty-臟頁、Free-空閑頁。
      圖9是本發(fā)明實施例的虛擬扇區(qū)讀流程框圖。
      圖10是本發(fā)明實施例的NOR flash的虛擬扇區(qū)寫流程框圖。
      圖11是本發(fā)明實施例的NAND flash的虛擬扇區(qū)寫流程框圖。
      圖12是本發(fā)明實施例的物理塊上臟頁的回收處理流程框圖。
      圖13a是本發(fā)明實施例的一個物理塊在回收操作執(zhí)行前的物理塊的狀態(tài)。
      圖13b是本發(fā)明實施例的一個物理塊在回收操作執(zhí)行后的物理塊的狀態(tài)。
      圖14是本發(fā)明實施例的NOR flash的虛擬扇區(qū)刪除流程框圖。
      圖15是本發(fā)明實施例的NAND flash的虛擬扇區(qū)刪除流程框圖。
      圖16是本發(fā)明實施例的邏輯塊號(LBN)到物理塊號(PBN)的映射表的建立流程框圖。
      圖17是本發(fā)明實施例用于NOR flash時邏輯塊中的邏輯頁號(LPN)到物理頁號(PPN)的映射表的建立流程框圖。
      圖18是本發(fā)明實施例用于NAND flash時邏輯塊中的邏輯頁號(LPN)到物理頁號(PPN)的映射表的建立流程框圖。
      具體實現(xiàn)方式通過具體實施例,并結(jié)合附圖,對本發(fā)明技術發(fā)方案作進一步的詳細說明,使本發(fā)明的優(yōu)點和特點能更加清楚地呈現(xiàn)。但是本發(fā)明的方法不受下述實施例的限制,可用各種類似的方式來實現(xiàn)。
      根據(jù)本發(fā)明實現(xiàn)的典型系統(tǒng)的各功能部件如圖1所示。它由微處理器10、ROM 12、RAM 14、Flash Memory控制器16和Flash存儲器18構成。通過使用本發(fā)明提供的方法,F(xiàn)lash Memory控制器16提供了一個基于扇區(qū)訪問的虛擬地址空間,F(xiàn)lash存儲器18被模擬成了一個可以多次讀寫的非易失存儲設備,微處理器10以及相應的OS程序如同訪問磁盤一樣發(fā)出讀寫命令,用虛擬地址空間中的虛擬扇區(qū)號在flash存儲器18中讀寫數(shù)據(jù)。
      NAND flash存儲器的組織方法應用例如圖2所示,在本發(fā)明的具體實施例中,NAND flash存儲器設備包括一個單獨的flash分區(qū)20。Flash分區(qū)20被劃分成一系列的物理塊21。每個物理塊21再被劃分成一系列的物理頁22。每個物理頁22由兩部分組成,數(shù)據(jù)區(qū)24和備用區(qū)26。數(shù)據(jù)區(qū)24用于存儲文件數(shù)據(jù),備用區(qū)26用于存儲管理物理塊和物理頁的管理數(shù)據(jù)。對于NAND flash存儲器,物理塊和物理頁的劃分,以及物理頁內(nèi)部的劃分由NAND flash的硬件特性決定。NAND flash物理頁備用區(qū)26中的管理數(shù)據(jù)的數(shù)據(jù)結(jié)構如圖3所示,數(shù)據(jù)結(jié)構中包含的信息有物理頁中的每個扇區(qū)的狀態(tài)(Sector狀態(tài)32、Sector狀態(tài)33)、本物理頁對應的邏輯頁的頁號LPN 34、本物理頁所在物理塊的擦除計數(shù)35、本物理頁所在物理塊對應的邏輯塊的塊號LBN 36、本物理頁所在物理塊的塊狀態(tài)37和本物理頁中存儲的數(shù)據(jù)的糾錯碼ECC 38。物理塊的狀態(tài)有Bad(壞塊),Valid(有效塊)。物理頁中的每個扇區(qū)在備用區(qū)26中都有一個對應狀態(tài)指示域,用于說明該物理頁中的每個扇區(qū)的狀態(tài),扇區(qū)的狀態(tài)有Free(扇區(qū)是空閑的),Valid(扇區(qū)包含有效數(shù)據(jù)),Deleted(扇區(qū)中的數(shù)據(jù)被刪除)。NAND flash實施例中每個物理頁數(shù)據(jù)區(qū)包含兩個扇區(qū)只是為了舉例說明,依據(jù)本發(fā)明的構思,物理頁數(shù)據(jù)區(qū)的大小可以是任意整數(shù)個扇區(qū)的大小。
      如果物理頁中每個扇區(qū)都是Free狀態(tài),那就稱該物理頁是Free狀態(tài)。如果物理頁中每個扇區(qū)都是Deleted狀態(tài),那就稱該物理頁是Deleted狀態(tài)。如果物理頁中某個扇區(qū)的狀態(tài)是Valid,那就稱該物理頁是Valid狀態(tài)。物理頁的狀態(tài)是free,說明該物理頁沒有被寫入數(shù)據(jù),該物理頁是一個空閑頁,物理頁的狀態(tài)是valid,說明該物理頁包含有效的數(shù)據(jù),但是該頁中的數(shù)據(jù)不一定是最新的數(shù)據(jù),同一個物理塊中可能有多于1個的物理頁對應到同一個邏輯頁,并且狀態(tài)都是Valid,僅僅物理頁號最大的物理頁包含著最新的數(shù)據(jù),其他物理頁包含的是被替換的數(shù)據(jù)。物理頁的狀態(tài)是Deleted,表示與該物理頁映射的邏輯頁在邏輯空間中被釋放,也即同一物理塊中在該物理頁之前所有映射到該邏輯頁的物理頁也都同時被刪除。NAND flash的物理塊的狀態(tài)是valid,說明該塊可以用于數(shù)據(jù)的存儲。物理塊的狀態(tài)是bad,說明該塊是壞塊,不能再用于數(shù)據(jù)存儲。
      NOR flash存儲器的組織方法應用例如圖4所示,在本發(fā)明的具體實施例中,NOR Flash存儲器設備包括一個單獨的Flash分區(qū)40。Flash分區(qū)40被劃分成一系列的物理塊42,對NOR flash存儲器,物理塊的劃分由NORflash的硬件特性決定。通過使用本發(fā)明提供的方法,NOR Flash存儲器的每個物理塊42再被劃分成一個塊頭部(Block Header)43,一系列的物理頁44,以及根據(jù)物理塊大小的不同,每個物理塊尾部可能有一個剩余區(qū)45,其大小小于一個物理頁44的大小。每個物理頁44又劃分為備用區(qū)46和數(shù)據(jù)區(qū)47兩部分,數(shù)據(jù)區(qū)47用于存儲文件數(shù)據(jù),備用區(qū)46用于存儲管理物理頁的管理數(shù)據(jù)。塊頭部43用于存儲管理物理塊的管理數(shù)據(jù)。塊頭部43中的管理數(shù)據(jù)的數(shù)據(jù)結(jié)構如圖5a所示,數(shù)據(jù)結(jié)構中包含的信息有本物理塊的擦除計數(shù)51,本物理塊對應的邏輯塊的塊號LBN 52,以及物理塊的狀態(tài)53。物理塊的狀態(tài)有Free(空閑塊)和Valid(有效塊)。物理頁備用區(qū)46中的管理數(shù)據(jù)的數(shù)據(jù)結(jié)構如圖5b所示,數(shù)據(jù)結(jié)構中包含的信息有物理頁中的每個扇區(qū)的狀態(tài)54,以及本物理頁對應的邏輯頁的頁號LPN 55。扇區(qū)狀態(tài)有Free(空閑扇區(qū)),Pending(正在往扇區(qū)寫數(shù)據(jù)),Valid(扇區(qū)中包含有效數(shù)據(jù)),Invalid(扇區(qū)中的數(shù)據(jù)無效)。NOR flash實施例中每個物理頁數(shù)據(jù)區(qū)包含一個扇區(qū)只是為了舉例說明,依據(jù)本發(fā)明的原理,物理頁數(shù)據(jù)區(qū)大小可以是任意整數(shù)個扇區(qū)的大小。對NOR flash,考慮到具體實現(xiàn)的簡便,推薦物理頁數(shù)據(jù)區(qū)的大小是一個扇區(qū)的大小。
      如果物理頁中每個扇區(qū)都是Free狀態(tài),那就稱該物理頁是Free狀態(tài)。如果物理頁中每個扇區(qū)都是Invalid狀態(tài),那就稱該物理頁是Invalid狀態(tài)。如果物理頁中某個扇區(qū)的狀態(tài)是Valid,那就稱該物理頁是Valid狀態(tài)。物理頁的狀態(tài)是free,說明該物理頁沒有被寫入數(shù)據(jù),該物理頁是一個空閑頁;物理頁的狀態(tài)是valid,說明該物理頁包含有效的數(shù)據(jù);物理頁的狀態(tài)是invalid,說明該物理頁包含的數(shù)據(jù)都無效了,該物理頁是一個臟頁。NORflash的物理塊的狀態(tài)是valid,說明該物理塊包含有效的數(shù)據(jù)信息;物理塊的狀態(tài)是free,說明該物理塊目前是空閑的,是保留的物理塊。
      本發(fā)明虛擬地址到邏輯地址的映射方法的實施例如圖6所示。首先邏輯地址空間被劃分為一系列的邏輯塊62,然后邏輯塊62再被劃分為一系列的邏輯頁63。邏輯頁63的大小和物理頁22的大小相同(如果是NOR Flash,則和物理頁44的大小相同)。邏輯塊62的大小和物理塊21的大小相同(如果是NOR Flash,則和物理塊42的大小相同)。虛擬地址空間60被劃分為一系列的虛擬扇區(qū)61。邏輯頁63的大小是虛擬扇區(qū)61大小的兩倍。邏輯頁的大小是虛擬扇區(qū)大小的兩倍只是為了舉例說明,依據(jù)本發(fā)明的構思,邏輯頁大小可以是虛擬扇區(qū)大小的任意整數(shù)倍。虛擬地址到邏輯地址的映射方法是每2個虛擬扇區(qū)61映射到邏輯塊62中的一個邏輯頁63,虛擬扇區(qū)61先依次映射到各邏輯塊62中的第一個邏輯頁63,接著依次映射到各邏輯塊62中的第二個邏輯頁63,依此類推,直到最后2個虛擬扇區(qū)(VSN=2KN-2)和(VSN=2KN-1)映射到最后一個邏輯塊(LBN=N-1)中的最后一個邏輯頁(LPN=K-1)。
      在讀寫flash中的數(shù)據(jù)時,讀寫的地址被解釋成虛擬地址空間中的虛擬扇區(qū)號(VSN)。首先該虛擬扇區(qū)號被轉(zhuǎn)換成邏輯地址,即邏輯塊號(LBN)和邏輯頁號(LPN)以及頁內(nèi)偏移(offset),offset指出是頁內(nèi)第幾個扇區(qū)。轉(zhuǎn)換方法的計算公式是offset=(VSN mod M),LBN=(((VSN-offset)÷M)mod N),LPN=(((VSN-offset)÷M)-LBN)÷N,式中mod是模運算,也就是相除取余數(shù)的運算。
      M是每個邏輯頁(也即每個物理頁)包含的虛擬扇區(qū)的個數(shù),即邏輯頁大小是虛擬扇區(qū)大小的M倍,本實施例以M=2為例,N是邏輯空間中邏輯塊的塊數(shù)。
      然后再把邏輯地址轉(zhuǎn)換為物理地址,如圖7所示。第一級映射表70,也叫塊映射表,它以邏輯塊號LBN為索引,把邏輯塊62的LBN轉(zhuǎn)換成對應物理塊21的PBN,實現(xiàn)邏輯塊到物理塊的映射。邏輯塊的第二級映射表72以邏輯頁號LPN為索引,把邏輯頁63的LPN轉(zhuǎn)換成對應物理頁22的PPN,實現(xiàn)該邏輯塊中的邏輯頁到對應物理塊中的物理頁的映射。首先以邏輯地址中的LBN為索引,從第一級映射表70的表項71中獲得對應物理塊的PBN。再通過該邏輯塊的第二級映射表72,以LPN為索引從對應的表項73中獲得對應物理頁的PPN。物理頁內(nèi)的偏移和邏輯頁內(nèi)的偏移是一樣的,因此邏輯地址中的offset直接作為物理地址中的offset。這樣完成了邏輯地址(LBN:LPN:offset)到物理地址(PBN:PPN:offset)的轉(zhuǎn)換。因為邏輯地址和物理地址中的offset相同,后續(xù)在描述邏輯地址到物理地址轉(zhuǎn)換時,只描述(LBN:LPN)到(PBN:PPN)的轉(zhuǎn)換。本例中,LBN為2的邏輯塊映射到PBN為100的物理塊,且該邏輯塊中LPN=1的邏輯頁映射到PBN=100物理塊中的PPN=0的物理頁。
      圖8示出了物理塊號PBN=100所指的物理塊上的各物理頁的狀態(tài),以及物理頁-邏輯頁的映射關系,該映射對應于圖7示例的邏輯頁-物理頁映射。圖7中的頁映射表72把邏輯頁映射到物理頁,即邏輯頁0(LPN=0)映射到物理頁2(PPN=2),邏輯頁1映射到物理頁0,邏輯頁2映射到物理頁5,……。在圖8中,示出了一個反向的映射,物理頁到邏輯頁的映射,即物理頁0映射到邏輯頁1,物理頁1映射到邏輯頁3,物理頁2映射到邏輯頁0,物理頁5映射到邏輯頁2,……。
      圖9示出了讀操作的流程。在一個讀操作中,相應的地址被解釋成虛擬扇區(qū)號,該虛擬扇區(qū)號先被轉(zhuǎn)換成邏輯塊號和邏輯頁號以及頁內(nèi)偏移,然后通過第一級映射表70,邏輯塊號轉(zhuǎn)換成相應的物理塊號,通過該邏輯塊的第二級映射表72,邏輯頁號轉(zhuǎn)換成相應的物理頁號,最后從該物理頁內(nèi)指定的頁內(nèi)偏移處開始讀取所需的數(shù)據(jù)。具體流程為S900把虛擬扇區(qū)號(VSN)轉(zhuǎn)換成邏輯地址(LBN:LPN:offset);S902通過第一級映射表70,把邏輯塊號LBN轉(zhuǎn)換成相應的物理塊號PBN;S904然后通過該邏輯塊的第二級映射表72,把邏輯頁號LPN轉(zhuǎn)換成對應的物理頁號PPN;S906然后從(PBN:PPN)所指物理頁的offset偏移處開始讀取相應的數(shù)據(jù)。
      在一個寫操作中,相應的地址被解釋成虛擬扇區(qū)號,該虛擬扇區(qū)號先被換成邏輯塊號和邏輯頁號以及頁內(nèi)偏移。如果該邏輯塊號沒有對應的有效物理塊號,則分配一個空閑的物理塊和該邏輯塊對應,然后更新第一級映射表使邏輯塊和物理塊對應,然后在該物理塊中按照物理偏移從小到大的順序(也即物理頁號從小到大的順序)分配一個空閑的物理頁(即第一個空閑的物理頁),把數(shù)據(jù)寫入到該物理頁,最后更新該邏輯塊的第二級映射表。如果該邏輯塊號有對應的有效物理塊號,通過該邏輯塊的第二級映射表,查看該邏輯頁對應的物理頁,如果沒有對應的物理頁,則在該物理塊中,按照物理頁號從小到大的順序分配一個空閑的物理頁(即第一個空閑的物理頁),把數(shù)據(jù)寫入該物理頁,最后更新該邏輯塊的第二級映射表。如果邏輯塊有對應的物理塊,且邏輯頁有對應的物理頁,則先把該物理頁的內(nèi)容讀到RAM中,根據(jù)頁內(nèi)偏移,修改相關數(shù)據(jù),然后在該物理塊中找第一個空閑的物理頁,把修改后的數(shù)據(jù)寫到該空閑物理頁,最后更新該邏輯塊的第二級映射表。
      參見圖10,實施例的NOR flash的虛擬扇區(qū)寫操作流程,該流程圖示出了NOR flash的寫操作方法S1000把虛擬扇區(qū)號(VSN)轉(zhuǎn)換成邏輯地址(LBN:LPN:offset);S1010如果LBN沒有對應的有效物理塊號(PBN),則轉(zhuǎn)S1020;如果LBN有對應的有效物理塊號(PBN),轉(zhuǎn)S1030;S1020分配一個空閑的物理塊,然后更新第一級映射表70使邏輯塊和物理塊對應,最后轉(zhuǎn)S1030;S1030通過該邏輯塊的第二級映射表72,查看LPN是否對應有有效的PPN,即查看邏輯頁是否有對應的物理頁;如果有對應的物理頁,轉(zhuǎn)S1040;如果沒有對應的物理頁,轉(zhuǎn)S1050;S1040把對應物理頁的內(nèi)容讀取到RAM中,并根據(jù)頁內(nèi)偏移(offset),修改更新相應部分的數(shù)據(jù),然后轉(zhuǎn)S1050;S1050檢查該物理塊內(nèi)是否有空閑的物理頁;如果沒有空閑的物理頁,轉(zhuǎn)S1060;如果有空閑的物理頁,轉(zhuǎn)S1070;S1060回收該物理塊,以使該物理塊中的臟頁能重新用于存儲數(shù)據(jù);S1070在該物理塊中找第一個空閑的物理頁(即頁號小的空閑物理頁優(yōu)先分配),把最新的數(shù)據(jù)寫入該物理頁;S1080如果該邏輯頁原來有對應的物理頁,則把原來對應的物理頁中的各個扇區(qū)的的狀態(tài)設置為invalid;S1090更新該邏輯塊的第二級映射表,使LPN映射到新分配的物理頁的PPN。
      NAND flash的寫操作流程參見圖11。先把虛擬地址VSN轉(zhuǎn)換成邏輯地址(LBN,LPN,offset)(S1100)。如果LBN沒有對應的有效PBN(S1110),則分配一個空閑的物理塊和該邏輯塊對應,然后更新第一級映射表70使邏輯塊和物理塊對應(S1120),通過該邏輯塊的第二級映射表72,查看是否邏輯頁(LPN)有對應的物理頁(S1130),如果有對應的物理頁,先把對應物理頁的內(nèi)容讀取到RAM中,根據(jù)頁內(nèi)偏移,修改相應部分的數(shù)據(jù)(S1140),然后,不管邏輯頁是否有對應的物理頁,在該物理塊中找第一個空閑的物理頁(即頁號小的空閑物理頁優(yōu)先分配),把最新的數(shù)據(jù)寫入該物理頁(S1170),最后更新該邏輯塊的第二級映射表,使LPN映射到新分配的物理頁的PPN(S1180)。如果該物理塊中沒有空閑的物理頁(S1150),則該物理塊需要先做回收處理(S1160)。對NAND flash,沒有把邏輯頁原來對應的物理頁中的各個扇區(qū)的狀態(tài)設置為invalid,以使本發(fā)明可以用于對物理塊中的物理頁有順序?qū)懭胍蟮腘AND flash,同時也可以減少對NAND flash的物理頁的寫入次數(shù)。同一份數(shù)據(jù)的新舊,可根據(jù)包含數(shù)據(jù)的物理頁的頁號大小來判斷,頁號大的物理頁包含新的數(shù)據(jù)。
      在圖10和圖11的寫流程中,如果物理塊中無法找到空閑的物理頁,則該物理塊需要做回收處理,以釋放該物理塊中包含舊數(shù)據(jù)或者無效數(shù)據(jù)的物理頁(臟頁),使這些物理頁能用于存儲更新的數(shù)據(jù)。如前所述,使用本發(fā)明實現(xiàn)的系統(tǒng)在物理空間中保留著一些空閑物理塊,用作回收處理中的傳輸塊。
      參見圖12,該圖示出了本發(fā)明實施例的物理塊上臟頁的回收處理流程。先選擇一個空閑的物理塊作為傳輸物理塊(S1200)。然后掃描被回收物理塊對應的邏輯塊的第二級映射表72的每個表項73,從LPN 0對應的表項開始(S1210),如果LPN對應的物理頁號(PPN)有效(S1220),則把該物理頁號所指的物理頁的內(nèi)容先讀出再寫到傳輸塊的第一個空閑物理頁中(S1230),即在傳輸物理塊中優(yōu)先寫頁號小的空閑物理頁,拷貝時每個物理頁中只有處于valid狀態(tài)的扇區(qū)的內(nèi)容被拷貝,然后更新第二級映射表,把LPN映射到傳輸塊中該物理頁的PPN(S1240),然后對下一個邏輯頁號執(zhí)行同樣的處理過程(S1250);如果邏輯頁號LPN對應的物理塊號無效(S1220),則直接對下一個邏輯頁號執(zhí)行前述的處理過程(S1250)。以上過程一直執(zhí)行到邏輯頁號LPN到達最大邏輯頁號為止(S1260)。最后把被回收的物理塊擦除,把它作為一個保留的空閑塊,又可以作為新的傳輸塊,同時更新第一級映射表映射LBN到原來的傳輸塊的PBN(S1270)。為了降低寫操作過程中執(zhí)行物理塊回收操作的機率,盡可能的使寫操作能在物理塊中找到空閑的物理頁,本發(fā)明提出周期性的回收物理塊的構思,即圖12所示的物理塊回收流程會周期性的被執(zhí)行。
      參見圖13a和圖13b,,它示出了回收前和回收后物理塊的狀態(tài)。被回收的物理塊(對應于邏輯塊號LBN=2)上包含有效數(shù)據(jù)的物理頁按順序拷貝到傳輸物理塊上,然后將被回收的物理塊(對應于邏輯塊2)擦除,成為一個空閑物理塊,不再對應到邏輯塊2,而拷貝有有效數(shù)據(jù)的原傳輸物理塊對應到了邏輯塊2。
      通過這種新舊物理頁替換的方法,OS程序(比如文件系統(tǒng))所用的存儲空間就有了多次讀寫的能力。由于不是每次寫操作都需要先執(zhí)行擦除,從而延長了flash存儲器設備的使用壽命,也提高了系統(tǒng)的寫性能。另外,在新數(shù)據(jù)成功寫入前,不會先丟掉舊的數(shù)據(jù),即使在寫新數(shù)據(jù)的過程中有掉電的情況發(fā)生,原來的數(shù)據(jù)也不會丟失,提高了系統(tǒng)的健壯性。而且本發(fā)明每次分配空閑物理頁時,按照PPN從小到大的順序分配,因此也滿足了大容量NAND flash存儲器設備對物理塊中的物理頁需要順序?qū)懙囊?。OS程序(比如文件系統(tǒng))在存儲數(shù)據(jù)時,總是盡可能的使用連續(xù)的虛擬扇區(qū)段,而且也盡量的用虛擬扇區(qū)號小的扇區(qū)(從低地址開始分配),根據(jù)前述的虛擬地址到邏輯地址的轉(zhuǎn)換方法,連續(xù)的虛擬扇區(qū)均勻的分散在各個邏輯塊中,也即均勻的分散在各個物理塊中,這使得靜態(tài)數(shù)據(jù)最大可能的分散在不同的物理塊,也就最大可能的消除了靜態(tài)區(qū)域的形成,使每個物理塊能被平均的使用,延長了整個flash設備的使用壽命。而且因為連續(xù)的虛擬扇區(qū)均勻的分散在各個邏輯塊,所以除非邏輯塊中的所有邏輯頁都被分配出去了(也即所有的虛擬扇區(qū)都分配出去了,系統(tǒng)的虛擬空間已經(jīng)用完了),否則對應的物理塊中物理頁的數(shù)量總是多于該邏輯塊中已經(jīng)被分配出去的邏輯頁的數(shù)量,這樣在更新該邏輯塊的邏輯頁中的內(nèi)容時,這些數(shù)量上多出來的物理頁可以作為更新區(qū)使用,因此每個物理塊中就不用預留物理頁專做更新區(qū),提高了flash的利用效率。
      當OS程序(比如文件系統(tǒng))刪除文件時,屬于該文件的虛擬扇區(qū)的內(nèi)容就無效了,這時需要刪除虛擬扇區(qū)對應物理頁中的對應的扇區(qū)以在flash設備上釋放該部分空間,這樣可以減少包含相關物理頁的物理塊在回收處理中需要拷貝的扇區(qū)數(shù),因此節(jié)省了回收處理的時間,而且及時的釋放出物理頁,可以有更多的物理頁用作更新區(qū),減少了物理塊的擦除次數(shù),延長了flash的使用壽命。
      圖14是本發(fā)明用于NOR flash的實施例的虛擬扇區(qū)刪除流程,當收到一個刪除命令來刪除某個虛擬扇區(qū)時,先把虛擬扇區(qū)號VSN轉(zhuǎn)換成邏輯地址(LBN:LPN:offset)(S1401),如果邏輯塊沒有對應的物理塊(S1402),結(jié)束刪除操作。如果有對應的物理塊(S1402),但是邏輯頁沒有對應的物理頁(S1403),結(jié)束刪除操作。如果有對應物理頁(S1403)且偏移offset對應的扇區(qū)的狀態(tài)不是valid(S1404),結(jié)束刪除操作。如果偏移offset對應的扇區(qū)的狀態(tài)是valid(S1404),則把該扇區(qū)的狀態(tài)變成invalid(S1405),如果這時該物理頁不再包含任何valid狀態(tài)的扇區(qū)(S1406),則更新LPN到PPN的映射,該LPN映射到無效的PPN值(S1407),即該LPN不映射到任何PPN。
      圖15是本發(fā)明用于NAND flash的實施例的虛擬扇區(qū)刪除流程,前面部分S1501~S1504的處理過程和NOR flash一樣。如果偏移offset對應的扇區(qū)的狀態(tài)是valid(S1504),并且該物理塊中有空閑的物理頁(S1505),把整個物理頁的內(nèi)容讀取到RAM中,在RAM中更改offset對應的扇區(qū)的狀態(tài)為deleted(S1506),然后在該物理塊中找出第一個空閑的物理頁,把更改后的數(shù)據(jù)寫入該物理頁,這樣該扇區(qū)對應的狀態(tài)就是deleted(S1506)。如果該物理頁中不再包含任何valid狀態(tài)的扇區(qū)(S1508),則更新LPN到PPN的映射,該LPN就不映射到任何PPN,也即該LPN映射到無效的PPN值(S1509)。如果該物理塊中沒有空閑的物理塊(S1505),則回收該物理塊,并在回收過程中,不拷貝該物理頁中offset對應的扇區(qū)中的數(shù)據(jù)(S1507),由此釋放該扇區(qū)的空間。
      參見圖16,該圖示出了本發(fā)明實施例的邏輯塊號(LBN)到物理塊號(PBN)的映射表的建立流程。在系統(tǒng)啟動時,為了建立第一級映射表,從第一個物理塊(PBN=0)開始掃描flash分區(qū)的每個物理塊(S1601)。獲取該物理塊對應的邏輯塊號LBN和塊狀態(tài)(S1602);對NAND flash,物理塊的LBN和塊狀態(tài)保存在屬于該物理塊的物理頁的備用區(qū);對NOR flash,物理塊的LBN和塊狀態(tài)保存在物理塊的頭部;對NAND flash若塊狀態(tài)指示是壞塊,則直接略過該塊。如果塊狀態(tài)不是valid,或者獲取的LBN無效(即大于系統(tǒng)的最大邏輯塊數(shù))(S1603),則該物理塊被當作是空閑的物理塊(S1604)。如果塊狀態(tài)是valid且獲取的LBN有效(S1603),則掃描該物理塊,建立該物理塊中PPN和LPN之間的映射表,也即該邏輯塊的第二級映射表(S1605)。第二級映射表的建立流程如圖17和圖18描述。如果第一級映射表中該LBN還沒有對應的PBN(S1606),則把LBN映射到當前的PBN(S1607)。如果在映射表中,LBN已經(jīng)和有效的PBN映射,則說明在物理塊的回收處理過程中發(fā)生了意外掉電,映射到同一個LBN的兩個物理塊中有一個是原始物理塊。比較這兩個物理塊中映射到邏輯頁的物理頁數(shù)目(也即處于valid狀態(tài)的扇區(qū)的數(shù)目)(S1608),選擇映射有更多邏輯頁的物理塊作為原始物理塊,并把LBN映射到該物理塊的PBN(S1609),擦除另外一個物理塊,使他成為一個空閑的物理塊(S1610)。如果兩個物理塊中的物理頁映射有一樣多的邏輯頁,則任選一個物理塊的PBN和LBN映射,然后擦除另外一個物理塊使它成為一個空閑物理塊。接著處理下一個物理塊(S1611),當所有的物理塊都被掃描后(S1612),第一級映射表就建立起來了,同時每個邏輯塊的第二級映射表也建立起來了。
      參見圖17,該流程圖示出了NOR flash物理塊對應的邏輯塊的第二級映射表的建立過程。從第一個物理頁(PPN=0)開始,掃描整個物理塊(S1701),獲取當前物理頁對應的邏輯頁號LPN,以及該物理塊內(nèi)所有扇區(qū)的狀態(tài)(S1702)。如果物理頁內(nèi)的每個扇區(qū)都是Free狀態(tài)(即物理頁是空閑的)(S1703),根據(jù)前述的物理頁分配方法,該物理塊內(nèi)后續(xù)的物理頁也都是空閑的,因此該邏輯塊的第二級映射表建立完成。如果物理頁內(nèi)有扇區(qū)是valid狀態(tài)(S1704),則把該LPN和當前的PPN建立映射(S1705)。如果物理頁內(nèi)沒有valid狀態(tài)的扇區(qū),則LPN不和當前PPN建立映射。接著用上述的同樣方法處理下一個物理頁(S1706),如果物理塊中的所有物理頁都掃描了(S1707),該物理塊對應的邏輯塊的第二級映射表建立完成。
      參見圖18,該流程圖示出了NAND flash物理塊對應的邏輯塊的第二級映射表的建立過程。從第一個物理頁(PPN=0)開始,掃描整個物理塊的物理頁(S1801),獲取該物理頁對應的邏輯頁號LPN,以及該物理塊內(nèi)所有扇區(qū)的的狀態(tài)(S1802)。如果物理頁內(nèi)的每個扇區(qū)都是Free狀態(tài)(即物理頁是空閑的)(S1803),根據(jù)前述的物理頁分配方法,該物理塊內(nèi)后續(xù)的物理頁也都是空閑的,因此該邏輯塊的第二級映射表建立完成。如果物理頁內(nèi)的每個扇區(qū)都是Deleted狀態(tài)(S1804),則該LPN映射到無效的PPN(S1805),如果物理頁有扇區(qū)是valid狀態(tài),則把該LPN和當前的PPN建立映射(S1806)。接著用上述的同樣方法處理下一個物理頁(S1807)。如果物理塊中的所有物理頁都掃描了(S1808),該物理塊對應的邏輯塊的第二級映射表建立完成。
      為了節(jié)省對RAM的需求量,本發(fā)明的一個優(yōu)化方法是簡化邏輯地址到物理地址轉(zhuǎn)換所用的映射表,只建立邏輯塊到物理塊的映射表(即第一級映射表),而不對每個邏輯塊建立邏輯頁到物理頁的映射表(即第二級映射表)。為完成LPN到PPN的映射,按照物理頁號PPN從大到小的順序掃描邏輯塊對應的物理塊中的各物理頁,從物理頁的備用區(qū)中查找對應的LPN,第一個找到的包含該LPN的物理頁就是該LPN邏輯頁所映射的物理頁,如果無法找到包含該LPN的物理頁,則認為該LPN映射到無效的PPN,這樣就完成了LPN到PPN的映射。由此本發(fā)明只需建立第一級映射表,即LBN到PBN的映射表,節(jié)省了大量的RAM需求。
      雖然本發(fā)明的具體實現(xiàn)是以NOR flash和NAND flash為例來描述的,但是本發(fā)明存儲管理的基本技術方案也可用于其他和flash有類似操作特性的設備上,比如AND flash等。在具體實現(xiàn)時,用本方法作一點適應性的修改。
      權利要求
      1.基于sector訪問的flash存儲器的存儲管理,其存儲管理方法包括下列步驟(1)定義Flash存儲器的物理空間a.首先根據(jù)flash存儲器的物理結(jié)構,將其存儲器劃分為一個以上的塊,稱之為物理塊,各物理塊的大小相同,按照物理塊起始地址從小到大的順序給每個物理塊指定一個編號PBN(物理塊號);b.然后把每個物理塊劃分為一個以上的頁,稱之為物理頁,各物理頁的大小相同;物理塊中的每個物理頁按照它在物理塊內(nèi)起始偏移地址從小到大的順序給每個物理頁指定一個在該物理塊內(nèi)唯一的編號PPN(物理頁號);c.把由所有物理塊組成的空間稱為物理空間;(2)定義一個邏輯存儲區(qū)a.將其劃分為一個以上的塊,稱之為邏輯塊,各邏輯塊的大小相同,并且邏輯塊的大小和物理塊的大小相同,每個邏輯塊都有一個邏輯地址,按照邏輯塊在邏輯空間中的起始地址從小到大的順序給每個邏輯塊指定一個編號LBN(邏輯塊號);b.然后把每個邏輯塊劃分為一個以上的頁,稱之為邏輯頁,各邏輯頁的大小相同,并且邏輯頁的大小和物理頁的大小相同;邏輯塊中的每個邏輯頁按照它在邏輯塊內(nèi)起始偏移地址從小到大的順序給每個邏輯頁指定一個在該邏輯塊內(nèi)唯一的編號LPN(邏輯頁號);c.把由所有邏輯塊組成的空間稱為邏輯空間;(3)建立邏輯空間和物理空間的映射a.每個邏輯塊都會映射到唯一的一個物理塊,但不是每個物理塊都會映射到一個邏輯塊,每個物理塊至多被映射到一個邏輯塊中;物理空間被保留一些至少一個物理塊以作為壞塊的替換或傳輸塊或存儲配置管理數(shù)據(jù),這些被保留的物理塊沒有映射到任何邏輯塊,因此邏輯空間中的邏輯塊數(shù)和物理空間中的物理塊數(shù)不必是相同的;b.當物理塊映射有邏輯塊時,把對應的邏輯塊號保存在物理塊中,此時該物理塊除了有一個根據(jù)其起始地址賦予的物理塊號PBN外,另外還對應有一個邏輯塊號LBN;c.然后把邏輯塊中的邏輯頁映射到所對應物理塊中的物理頁;當物理頁映射有邏輯頁時,把對應的邏輯頁號LPN保存在物理頁中,此時該物理頁除了有一個根據(jù)其在物理塊內(nèi)起始偏移地址賦予的物理頁號PPN外,另外還對應有一個邏輯頁號LPN;當物理塊或頁沒有和邏輯塊或頁映射時,物理塊或頁中就不保存邏輯塊號或頁號;(4)根據(jù)物理塊中的邏輯塊號和物理頁中的邏輯頁號,在RAM中建立兩級反向的映射表a.先建立第一級映射表,把邏輯空間中的每個邏輯塊映射到唯一的一個物理塊上去第一級映射表的第一項屬于邏輯塊0,用于保存邏輯塊0對應的物理塊號,第二項屬于邏輯塊1,用于保存邏輯塊1對應的物理塊號;依此類推,第一級映射表的最后一項屬于最后一個邏輯塊,用于保存最后一個邏輯塊對應的物理塊號;b.然后為每個邏輯塊建立一張第二級映射表,把在這個邏輯塊中的邏輯頁映射到對應物理塊中的物理頁上去第二級映射表的第一項屬于邏輯頁0,用于保存邏輯頁0對應的物理頁號,第二項屬于邏輯頁1,用于保存邏輯頁1對應的物理頁號,依此類推,一個邏輯塊中的所有邏輯頁都映射到在同一個物理塊內(nèi)的各物理頁上;(5)定義一個虛擬磁盤a.它由一個以上的扇區(qū)組成,稱之為虛擬扇區(qū);各虛擬扇區(qū)的大小相同,并且虛擬扇區(qū)的大小和現(xiàn)實磁盤中的扇區(qū)的大小相同,通常是512字節(jié);b.把由所有虛擬扇區(qū)組成的空間稱為虛擬空間;按照虛擬扇區(qū)在虛擬空間中的起始地址從小到大的順序給每個虛擬扇區(qū)指定一個編號VSN(虛擬扇區(qū)號);c.計算機的程序(比如文件系統(tǒng))在讀寫flash存儲器上的內(nèi)容時,提供的地址被解釋成虛擬扇區(qū)號;(6)建立虛擬空間到邏輯空間的映射,把虛擬空間中的每個虛擬扇區(qū)映射到唯一的一個邏輯頁上去;該映射方法是a.先把最前面編號為0~(M-1)的M個虛擬扇區(qū)映射到第一個邏輯塊中的第一個邏輯頁,再把后面緊接著編號為M~(2M-1)的M個虛擬扇區(qū)映射到第二個邏輯塊中的第一個邏輯頁,依次類推,一直到把后面緊接著的M個虛擬扇區(qū)映射到最后一個邏輯塊中的第一個邏輯頁;b.然后,繼續(xù)在第一個邏輯塊中建立映射,把后續(xù)緊接著的M個虛擬扇區(qū)映射到第一個邏輯塊中的第二個邏輯頁,一直到把后面緊接著的M個虛擬扇區(qū)映射到最后一個邏輯塊中的第二個邏輯頁;依此類推,一直到把后面緊接著的M個虛擬扇區(qū)映射到最后一個邏輯塊中的最后一個邏輯頁;M是每個邏輯頁包含的虛擬扇區(qū)的個數(shù),即M值為邏輯頁的大小除以虛擬扇區(qū)的大小的商,虛擬空間的大小和邏輯空間的大小是相同的;c.虛擬地址到邏輯地址映射方法的計算公式是offset=(VSN mod M);LBN=((VSN-offset)÷M)mod N);LPN=(((VSN-offset)÷M)-LBN)÷N;式中mod是模運算(相除取余數(shù));VSN是虛擬扇區(qū)的虛擬扇區(qū)號;LBN是邏輯地址中的邏輯塊號;LPN是邏輯地址中的邏輯頁號;offset是邏輯頁的頁內(nèi)偏移,即邏輯頁內(nèi)第幾個虛擬扇區(qū);M是每個邏輯頁(也是每個物理頁)包含的虛擬扇區(qū)的個數(shù),即邏輯頁大小是虛擬扇區(qū)大小的M倍;N是邏輯空間中邏輯塊的塊數(shù)。
      2.根據(jù)權利要求1所述的方法,其特征在于所述的步驟(5)的計算機程序(比如文件系統(tǒng))在讀flash存儲器上的數(shù)據(jù)時,提供的地址被解釋成虛擬扇區(qū)號,讀操作包括a.先計算出虛擬扇區(qū)號對應的邏輯塊號和邏輯頁號,以及頁內(nèi)的偏移;b.再根據(jù)兩級映射表把邏輯塊號和邏輯頁號轉(zhuǎn)換為對應的物理塊號和物理頁號;c.然后在對應物理塊的物理頁中從頁內(nèi)偏移開始讀取數(shù)據(jù)。
      3.根據(jù)權利要求1所述的方法,其特征在于所述的步驟(5)的計算機程序(比如文件系統(tǒng))在寫數(shù)據(jù)到flash存儲器時,提供的地址也被解釋成虛擬扇區(qū)號,寫操作包括a.先計算出虛擬扇區(qū)號對應的邏輯塊號和邏輯頁號,以及頁內(nèi)的偏移;b.再根據(jù)兩級映射表把邏輯塊號和邏輯頁號轉(zhuǎn)換為對應的物理塊號和物理頁號;c.把該物理塊號和物理頁號所尋址的物理頁的數(shù)據(jù)讀到RAM中,并根據(jù)頁內(nèi)偏移量在該RAM中更新數(shù)據(jù);然后在該物理塊中按物理頁號從小到大的順序找第一個未曾寫數(shù)據(jù)的物理頁(第一個空閑的物理頁),把在RAM中更新后的整頁數(shù)據(jù)寫入到該空閑物理頁;d.更新該邏輯塊的第二級映射表,使得邏輯塊中的邏輯頁映射到對應物理塊中的寫有新數(shù)據(jù)的物理頁上。
      4.根據(jù)權利要求1或3所述的方法,其特征在于所述的步驟(5)的計算機程序(比如文件系統(tǒng))在寫數(shù)據(jù)到flash存儲器時,提供的地址也被解釋成虛擬扇區(qū)號,寫操作包括a.先計算出虛擬扇區(qū)號對應的邏輯塊號和邏輯頁號,以及頁內(nèi)的偏移;b.如果根據(jù)第一級映射表邏輯塊沒有對應的物理塊,則分配一個新的物理塊映射到該邏輯塊,然后在該新物理塊中找第一個空閑的物理頁,在該空閑物理頁中從頁內(nèi)偏移開始寫入數(shù)據(jù);c.如果根據(jù)第一級映射表邏輯塊有對應的物理塊,但是根據(jù)該邏輯塊的第二級映射表邏輯頁沒有對應的物理頁,則在對應物理塊中找第一個空閑的物理頁,然后在該空閑物理頁中從頁內(nèi)偏移開始寫入數(shù)據(jù);d.更新該邏輯塊的第二級映射表,使得邏輯塊中的邏輯頁映射到對應物理塊中的寫有新數(shù)據(jù)的物理頁上;
      5.根據(jù)權利要求3所述的方法,其特征在于寫操作進一步包括a.如果在對應的物理塊中找不到一個空閑物理頁,則先回收該物理塊,以釋放該物理塊中被舊數(shù)據(jù)占用的物理頁;b.回收完成后,在該物理塊中找到第一個空閑物理頁來保存更新后的整頁數(shù)據(jù);c.更新該邏輯塊的第二級映射表,使邏輯頁映射到這個新的物理頁上。
      6.根據(jù)權利要求4所述的方法,其特征在于寫操作進一步包括a.如果在對應的物理塊中找不到一個空閑物理頁,則先回收該物理塊,以釋放該物理塊中被舊數(shù)據(jù)占用的物理頁;b.回收完成后,在該物理塊中找到第一個空閑物理頁來保存更新后的整頁數(shù)據(jù);c.更新該邏輯塊的第二級映射表,使邏輯頁映射到這個新的物理頁上。
      7.根據(jù)權利要求5所述的方法,其特征在于回收操作包括a.保留一些至少一個物理塊,作為傳輸物理塊,用于回收處理時的數(shù)據(jù)轉(zhuǎn)存;b.把被回收物理塊上的所有包含有效數(shù)據(jù)的物理頁上的數(shù)據(jù)拷貝到一個傳輸物理塊中,同時更新該物理塊對應的邏輯塊的第二級映射表;c.最后擦除被回收物理塊,該被回收物理塊就變成為一個空閑的物理塊,隨后的回收操作可以用該塊來轉(zhuǎn)存數(shù)據(jù)。
      8.根據(jù)權利要求1所述的基于sector訪問的flash存儲器的存儲管理,其特征在于存儲管理方法進一步包括(1)對NOR flash提供了一個劃分方法,把一組物理地址連續(xù)的定長區(qū)域組成一個物理頁,每個物理頁包括用于保存文件數(shù)據(jù)的區(qū)域,稱之為數(shù)據(jù)區(qū),以及一小段用于保存物理頁的管理信息的區(qū)域,稱之為備用區(qū);物理頁數(shù)據(jù)區(qū)的大小設定為512B,備用區(qū)的大小是2B~16B,根據(jù)物理頁的管理信息的多少決定;(2)對NOR flash,每個物理塊有一小部分至少6B被保留用于保存物理塊的管理信息;管理信息有物理塊對應的邏輯塊號,物理塊的擦除次數(shù),物理塊的狀態(tài)等。
      9.根據(jù)權利要求1所述的基于sector訪問的flash存儲器的存儲管理,其特征在于存儲管理方法進一步包括為了減少對RAM的需求,省略每個邏輯塊的第二級映射表,在完成了邏輯塊號到物理塊號的轉(zhuǎn)換后,通過掃描對應物理塊中的物理頁的方法來完成邏輯頁號到物理頁號的轉(zhuǎn)換,即通過在物理塊中查找包含該邏輯頁號的最新物理頁的方法,實現(xiàn)邏輯塊第二級映射表的功能。
      10.根據(jù)權利要求1所述的基于sector訪問的flash存儲器的存儲管理,其特征在于存儲管理方法進一步包括本發(fā)明所使用的建在RAM中的兩級映射表可以在系統(tǒng)啟動的時候進行重構,重構方法包括(1)第一級級映射表重構方法包括a.系統(tǒng)啟動時,掃描每個物理塊;b.如果物理塊有對應的邏輯塊號,則把物理塊號寫到該邏輯塊號對應的表項中;c.如果有兩個物理塊對應到同一個邏輯塊號,掃描兩個物理塊,則選擇映射有較多有效邏輯頁的物理塊和該邏輯塊號對應,另外一個物理塊被擦除;如果兩個物理塊包含的有效物理頁數(shù)相同,則任選一個和該邏輯塊號對應,另外一個物理塊被擦除;d.當所有的物理塊都被掃描后,完成第一級映射表重構;(2)第二級級映射表重構方法包括a.如果系統(tǒng)需要在RAM中構建第二級映射表,則從邏輯塊0開始檢查;b.如果有物理塊和邏輯塊對應,掃描和該邏輯塊對應的物理塊上的每個物理頁;c.如果物理頁有對應的邏輯頁號,則把物理頁號寫到該邏輯頁號對應的表項中;d.如果有兩個物理頁對應到同一個邏輯頁號,則選擇物理頁號大的物理頁和該邏輯頁號對應;e.當該邏輯塊對應的物理塊上所有的物理頁都被掃描后,完成該邏輯塊的第二級映射表重構。f.當所有邏輯塊都被掃描后,完成所有邏輯塊的第二級映射表重構。
      全文摘要
      本發(fā)明提供基于sector訪問的flash存儲器的存儲管理方法,把連續(xù)的虛擬扇區(qū)均勻地分散映射到各個邏輯塊中,建立邏輯塊和物理塊的映射,并且建立該邏輯塊內(nèi)邏輯頁和對應物理塊內(nèi)物理頁的映射,使得虛擬扇區(qū)分散地映射到了各個物理塊中,實現(xiàn)了各物理塊的均衡使用和滿足了對物理塊內(nèi)物理頁的順序?qū)懸?,提供了虛擬地址空間的多次讀寫能力。同時flash存儲器的訪問接口和磁盤兼容,使整個應用系統(tǒng)的構建簡便、通用性好。本發(fā)明實現(xiàn)系統(tǒng)對flash上數(shù)據(jù)更改的可靠性高,flash空間利用率高,能有效延長flash使用壽命,適用于各型flash以及其他與flash有類似操作特性的設備。
      文檔編號G06F12/08GK101075211SQ20071006925
      公開日2007年11月21日 申請日期2007年6月8日 優(yōu)先權日2007年6月8日
      發(fā)明者馬彩艷 申請人:馬彩艷
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1