欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種Flash的回收方法和裝置的制作方法

文檔序號:6334479閱讀:196來源:國知局
專利名稱:一種Flash的回收方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)存儲技術(shù)領(lǐng)域,尤其涉及一種Flash的回收方法和裝置。
背景技術(shù)
閃存Flash在沒有電流供應(yīng)的條件下也能夠長久地保存數(shù)據(jù),其存儲特性相當(dāng)于 硬盤,這項特性使得Flash成為各類便攜型數(shù)字設(shè)備使用的存儲介質(zhì)。閃存Flash通常情況下被劃分為多個扇區(qū),多個字節(jié)為一頁,因此每個扇區(qū)包括 多個頁。對Flash進(jìn)行讀寫時,以頁為單位進(jìn)行操作。在要寫入數(shù)據(jù)的頁為不可用狀態(tài)如 被其它文件數(shù)據(jù)占用時,對該頁執(zhí)行擦除操作。在Flash中無空閑頁時,以扇區(qū)為單位執(zhí)行 擦除操作,因此是以扇區(qū)為單位的回收機(jī)制。通常情況下便攜型數(shù)字設(shè)備使用的Flash容量比較小,因此扇區(qū)也比較小。如智 能卡芯片內(nèi)部的Flash大小一般在256k以內(nèi),其扇區(qū)均在512字節(jié)以內(nèi),有64字節(jié)/128 字節(jié)/256字節(jié)/512字節(jié)四種。對于這種小容量Flash的操作方式都是直接對其物理地址 進(jìn)行操作,具體為在執(zhí)行寫操作時,根據(jù)維護(hù)的頁信息表,獲取要寫入數(shù)據(jù)的頁是否為可用狀態(tài),其 中要寫入數(shù)據(jù)的頁是由操作系統(tǒng)根據(jù)特定規(guī)則確定的;在要寫入數(shù)據(jù)的頁為可用狀態(tài)時,根據(jù)該頁物理地址將要寫入的數(shù)據(jù)寫入;在要 寫入數(shù)據(jù)的頁為不可用狀態(tài)時,將該頁進(jìn)行擦除。在Flash中無空閑頁時,以扇區(qū)為單位執(zhí) 行擦除操作實現(xiàn)回收。對Flash采用直接對其物理地址進(jìn)行操作的方式,在Flash容量比較小時,執(zhí)行上 述頁擦除及扇區(qū)擦除的頻率都比較高,但因為扇區(qū)小,擦寫速度快,所以即使一條指令有幾 次對Flash的寫操作都需要進(jìn)行擦除也可以滿足產(chǎn)品的性能要求。但是目前越來越多的便攜型數(shù)字設(shè)備使用大容量的Flash如NANDFlash, NANDFlash最大的優(yōu)點在于容量可以做得很大,超過512MB容量的NAND產(chǎn)品相當(dāng)普遍,如采 用較多為IM容量,扇區(qū)大小為4k的Flash。對于這些大容量大扇區(qū)的片內(nèi)Flash,操作系 統(tǒng)可用的用戶區(qū)比較小,如為64K。這樣對于扇區(qū)劃分較大,用戶區(qū)較小的片內(nèi)Flash,如果 采用上述直接對物理地址操作的方式進(jìn)行讀寫,由于用戶區(qū)比較小也會比較頻繁地出現(xiàn)頁 擦除及扇區(qū)擦除操作。而扇區(qū)擦除操作中,由于扇區(qū)比較大因此擦除操作占用的時間長,在 實際應(yīng)用中速度太慢無法被用戶接受,而且每操作一個扇區(qū)內(nèi)的數(shù)據(jù)時都要將全部4K數(shù) 據(jù)擦除對Flash的壽命也是一個很大的影響。目前對于管理扇區(qū)較大的NANDFlash,有的采用文件系統(tǒng)下一層的文件分配表 FAT管理機(jī)制如FAT16、FAT32等。文件分配表FAT管理機(jī)制功能強(qiáng)大,適于管理存儲空間 比較大、文件管理復(fù)雜的場景,多應(yīng)用于計算機(jī)。但是在智能卡應(yīng)用中,對于扇區(qū)劃分較大, 用戶區(qū)較小的片內(nèi)Flash來說,采用FAT管理機(jī)制復(fù)雜有余,又不能物盡其用。

發(fā)明內(nèi)容
本發(fā)明實施例提供一種Flash的回收方法及裝置,用以優(yōu)化現(xiàn)有Flash回收機(jī)制, 減少回收次數(shù)和提高操作Flash的速度。本發(fā)明提供一種Flash的回收方法,包括確定滿足設(shè)定回收條件時,從映射區(qū)中選取預(yù)回收扇區(qū),所述映射區(qū)包括由Flash 中用戶區(qū)和設(shè)定輔助區(qū);將預(yù)回收扇區(qū)中有效頁的數(shù)據(jù),重寫到映射區(qū)中除預(yù)回收扇區(qū)外的空閑頁,所述 有效頁為已寫入數(shù)據(jù)且在映射表中作為映射頁的頁,所述映射表用于建立邏輯頁與映射頁 的映射關(guān)系;將所述預(yù)回收扇區(qū)中的有效頁在映射表中的映射頁,修改為重寫該有效頁數(shù)據(jù)的 頁,并對預(yù)回收扇區(qū)執(zhí)行回收操作。本發(fā)明還提供一種操作Flash的回收裝置,包括 預(yù)回收扇區(qū)選取單元,用于確定滿足設(shè)定回收條件時,從映射區(qū)中選取預(yù)回收扇 區(qū),所述映射區(qū)由Flash中用戶區(qū)和設(shè)定輔助區(qū)組成;重寫單元,用于將預(yù)回收扇區(qū)中的有效頁的數(shù)據(jù),重寫到映射區(qū)中除預(yù)回收扇區(qū) 外的空閑頁,所述有效頁為已寫入數(shù)據(jù)且在映射表中作為映射頁的頁,所述映射表用于建 立邏輯頁與映射頁的映射關(guān)系;第一映射關(guān)系修改單元,用于將所述預(yù)回收扇區(qū)中的有效頁在映射表中的映射 頁,修改為重寫該有效頁數(shù)據(jù)的頁;第一回收單元,用于在將有效頁的數(shù)據(jù)重寫到映射區(qū)中除預(yù)回收扇區(qū)外的空閑頁 后,對預(yù)回收扇區(qū)執(zhí)行回收操作。利用本發(fā)明的Flash的回收方法及裝置,具有以下有益效果在將操作Flash的空 間擴(kuò)展到映射區(qū)的情況下,減少了 Flash的回收時間間隔,因此不會影響操作Flash的數(shù)據(jù) 讀寫速度,且提高了 Flash的壽命。


圖1為本發(fā)明提供的Flash的回收方法流程圖;圖2為依照本發(fā)明實施例中示例的對Flash劃分后的物理結(jié)構(gòu);圖3為依照本發(fā)明實施例中采用動態(tài)建立映射方式時對應(yīng)的Flash的回收方法流 程圖;圖4為依照本發(fā)明實施例中Flash的回收方法中實現(xiàn)刪除操作的流程圖;圖5為依照本發(fā)明實施例中Flash的回收方法中實現(xiàn)讀取操作的流程圖;圖6A、圖6B為依照本發(fā)明實施例中Flash的回收方法的詳細(xì)過程流程圖;圖7為依照本發(fā)明實施例中Flash的回收裝置的結(jié)構(gòu)圖。
具體實施例方式下面結(jié)合附圖和實施例對本發(fā)明提出的Flash的回收方法和裝置進(jìn)行更詳細(xì)地 說明。本發(fā)明能夠避免現(xiàn)有智能卡操作系統(tǒng)運行時,使用復(fù)雜的Flash管理模式實現(xiàn)其操作的同時,又能夠快速地進(jìn)行Flash的操作,并保證Flash的損耗在一定程度上均衡。對于智能卡操作Flash時,雖然Flash的容量非常大,例如有1M,但是對于智能卡 操作系統(tǒng)來說,能夠進(jìn)行操作的區(qū)域即用戶區(qū)是有限,如用戶區(qū)為64K,因此進(jìn)行Flash操 作時,是針對這64K可見的用戶區(qū)進(jìn)行數(shù)據(jù)讀寫。本發(fā)明將對Flash中用戶區(qū)劃分得到的 頁作為邏輯頁,操作Flash時只面向這些邏輯頁進(jìn)行Flash操作。
本發(fā)明提供的Flash的回收方法包括確定滿足設(shè)定回收條件時,從映射區(qū)中選 取預(yù)回收扇區(qū),所述映射區(qū)由Flash中用戶區(qū)和設(shè)定輔助區(qū)組成;將預(yù)回收扇區(qū)中有效頁 的數(shù)據(jù),重寫到映射區(qū)中除預(yù)回收扇區(qū)外的空閑頁,所述有效頁為已寫入數(shù)據(jù)且在映射表 中作為映射頁的頁,所述映射表用于建立反映所有邏輯頁的與映射頁的映射關(guān)系,即反映 所有邏輯頁的映射頁;將所述預(yù)回收扇區(qū)中的有效頁在映射表中的映射頁,即所述映射表 中是所述預(yù)回收扇區(qū)中有效頁的邏輯頁的映射頁,修改為重寫該有效頁數(shù)據(jù)的頁,并對預(yù) 回收扇區(qū)執(zhí)行回收操作。本發(fā)明在映射區(qū)中空閑頁不夠時再進(jìn)行上述回收操作,大大延遲 了回收的時間間隔,保證運行速度的同時,又能夠不失時機(jī)地回收足夠頁作為映射頁來滿 足寫操作的需要;由于回收機(jī)制中將有效頁的數(shù)據(jù)首先讀取到其它扇區(qū)空閑頁中且會更新 映射關(guān)系,因此不會寫操作的正常運行。依照本發(fā)明的實施例中,提供一種Flash的回收方法,如圖1所示,該方法包括步驟S101,接收到寫操作指令時確定寫操作指向的邏輯頁,所述邏輯頁為對 Flash中用戶區(qū)劃分得到的頁;寫操作指令中對數(shù)據(jù)的寫操作是以頁為單位的,每次寫操作都會指向一個要寫入 數(shù)據(jù)的邏輯頁。步驟S102,查找所確定的邏輯頁在映射表中的第一映射頁,該映射表用于反映所 有邏輯頁的映射頁,初始化時所有邏輯頁映射到空閑頁中的同一指定頁;在映射表中建立所有邏輯頁的映射頁,這樣,實際進(jìn)行寫操作時指向的頁為其映 射頁,本發(fā)明在初始化時,將所有邏輯頁映射到同一個指定空閑頁。步驟S103,根據(jù)查找到的第一映射頁中數(shù)據(jù)及寫操作指令組織要寫入的數(shù)據(jù);由于寫操作中既包含向一個空閑頁中寫入數(shù)據(jù)的操作,也包括對之前寫入的某頁 數(shù)據(jù)進(jìn)行修改的操作。因此,在查找到的第一映射頁為空閑頁時,說明操作系統(tǒng)還未向此次 寫操作指向的邏輯頁寫入數(shù)據(jù),組織數(shù)據(jù)具體為將要寫入的數(shù)據(jù)作為寫入數(shù)據(jù);在查找到 第一映射頁中有數(shù)據(jù)時,說明操作系統(tǒng)之前針對此次寫操作指向的邏輯頁寫入過數(shù)據(jù),對 應(yīng)地要修改這些數(shù)據(jù),因此組織數(shù)據(jù)為對寫操作指向的邏輯頁的第一映射頁中數(shù)據(jù)根據(jù)寫 操作指令進(jìn)行修改。步驟S104,確定寫入組織好的數(shù)據(jù)所需的空閑頁數(shù)目,及對映射區(qū)劃分得到的頁 中剩余空閑頁數(shù)目,映射區(qū)由用戶區(qū)和Flash中除用戶區(qū)外的設(shè)定輔助區(qū)組成;步驟S105,根據(jù)所需的空閑頁數(shù)目和剩余空閑頁數(shù)目,確定是否滿足設(shè)定回收條 件,若不滿足,執(zhí)行步驟S106,否則執(zhí)行步驟S108 ;步驟S106,說明當(dāng)前空閑頁夠用,從對所述映射區(qū)劃分得到的頁中,選取除指定頁 外的空閑頁作為第二映射頁;組織好數(shù)據(jù)要寫入時,應(yīng)將組織好的數(shù)據(jù)寫入到空閑頁中。如果映射頁是指定頁, 說明是針對該邏輯頁第一次寫入數(shù)據(jù),將數(shù)據(jù)寫入到除指定頁外的空閑頁中。優(yōu)選地,如果寫操作指向的邏輯頁是空閑頁時,可以將該邏輯頁本身作為其映射頁。如果映射頁是除指 定頁外的頁,說明是針對該邏輯頁進(jìn)行數(shù)據(jù)修改,修改后將修改好的數(shù)據(jù)寫入到選取的空 閑頁中。步驟S107,在第二映射頁上寫入組織好的數(shù)據(jù),并將映射表中寫操作指向的邏輯 頁的第一映射頁,修改為所述第二映射頁,執(zhí)行完該寫操作指令。因此,更新了邏輯頁和映射頁之間的映射關(guān)系。下次對該邏輯頁中數(shù)據(jù)進(jìn)行操作 時,可以根據(jù)映射關(guān)系找到上次寫入的數(shù)據(jù)。本發(fā)明映射表中一個邏輯頁對應(yīng)一個映射頁,上述第一映射頁指未進(jìn)行任何操作 前查找到的映射頁,第二映射頁為進(jìn)行相關(guān)操作后修改后的映射頁。步驟S108,確定滿足設(shè)定回收條件時,從所述映射區(qū)中選取預(yù)回收扇區(qū);步驟S109,將預(yù)回收扇區(qū)中有效頁的數(shù)據(jù),重寫到映射區(qū)中除預(yù)回收扇區(qū)外的扇 區(qū)中空閑頁;步驟S110,將所述預(yù)回收扇區(qū)中的有效頁在映射表中的映射頁,修改為重寫該有 效頁數(shù)據(jù)的頁,對預(yù)回收扇區(qū)執(zhí)行回收操作。如果預(yù)回收扇區(qū)中的某頁寫入數(shù)據(jù)且是映射表中的映射頁,不能直接將該頁數(shù)據(jù) 擦除,否則下次通過映射表會找不到該頁數(shù)據(jù),因此需要將這些頁內(nèi)的內(nèi)容讀取到其他扇 區(qū)的空閑頁中,并建立寫入數(shù)據(jù)的頁與之前邏輯頁的映射關(guān)系,則下次對之前邏輯頁進(jìn)行 操作時,還可以根據(jù)新的映射關(guān)系找到這些數(shù)據(jù)。本發(fā)明提供的上述Flash的回收方法中,基于對Flash的寫操作中將寫操作實際 可用的空間擴(kuò)展到為映射區(qū),映射區(qū)要大于用戶區(qū),因此對于大扇區(qū)的Flash,用戶區(qū)較小 的智能卡來說,充分了 Flash中空閑空間;在映射區(qū)中空閑頁不夠時再進(jìn)行上述回收操作, 大大延遲了回收的時間間隔,保證運行速度的同時,又能夠不失時機(jī)地回收足夠頁作為映 射頁來滿足寫操作的需要;由于回收機(jī)制中將有效頁的數(shù)據(jù)首先讀取到其它扇區(qū)空閑頁中 且會更新映射關(guān)系,因此不會寫操作的正常運行?;谏鲜龌厥諜C(jī)制中的寫操作,在寫操作寫入修改好的數(shù)據(jù)時,不用再像以前一 樣先將所在的頁擦除再寫,這樣就大大提高了寫Flash的速度;由于Flash應(yīng)用中多數(shù)操作 都是針對用戶區(qū)前部分,不需要每次寫都擦就意味著大大增強(qiáng)了 Flash的使用壽命,使損 耗均衡和整個區(qū)域的使用效率得到了保證。優(yōu)選地,該方法中,在步驟SllO完成對預(yù)回收扇區(qū)的回收操作后,返回步驟S106, 在空閑頁足夠用的情況下執(zhí)行完寫操作指令。優(yōu)選地,本實施例中所需的空閑頁數(shù)目與設(shè)定閾值的和不大于所述剩余空閑頁數(shù) 目時,確定不滿足設(shè)定回收條件。所需的空閑頁數(shù)目與設(shè)定閾值的和大于所述剩余空閑頁 數(shù)目時,確定滿足設(shè)定回收條件。設(shè)置設(shè)定閾值的目的是為了防止剩余空閑頁不夠?qū)懭腩A(yù) 回收扇區(qū)中的有效頁數(shù)據(jù)。另外,預(yù)回收扇區(qū)的選取原則是有效頁越少越好,而無效頁越多越好,其中無效頁 為已寫入數(shù)據(jù)且未在映射表中被作為映射頁的頁,即操作系統(tǒng)不再使用而又不是空閑頁的 頁。因此所選取的預(yù)回收扇區(qū)中至少有一個無效頁,本實施例中設(shè)定閾值等于所述映射區(qū) 中組成一個扇區(qū)的頁數(shù)減一??梢员WC有足夠的空閑頁存放有效頁數(shù)據(jù)。本實施例中設(shè)定輔助區(qū)采用與所述用戶區(qū)相同的空間劃分方式,所述設(shè)定輔助區(qū)的區(qū)域由Flash中除用戶區(qū)外的閑置空間確定;所述映射表存放在映射表區(qū),所述映射表 區(qū)的區(qū)域由Flash中除映射區(qū)外的閑置空間確定。仍以IM容量,用戶區(qū)為64K的Flash為例,如圖2所示,設(shè)定輔助區(qū)采用與用戶區(qū) 相同的空間劃分方式,具體為4K為一個扇區(qū)(sector),256字節(jié)為一個頁(page),用戶區(qū)內(nèi) 有16個sector,每個sector內(nèi)是16個page。設(shè)定輔助區(qū)包括3個sector,用來擴(kuò)展用戶 區(qū)的映射關(guān)系,設(shè)定輔助區(qū)的區(qū)域的設(shè)計在Flash總空間充足的情況下可以任意分配其數(shù) 量。映射表區(qū)包括2個sector,以頁為單位進(jìn)行映射,建立邏輯頁對應(yīng)的映射頁。從上面邏輯頁的映射過程可以看出,寫操作會使實際被使用的頁作為映射頁被記 錄在映射表中,因此,初始化應(yīng)將所有邏輯頁映射到同一空閑的指定頁,代表所有的其它所 有頁都可以使用。優(yōu)選地,初始化時所有邏輯頁映射的同一指定頁為對Flash中用戶區(qū)劃 分得到的第一個扇區(qū)的第一頁,當(dāng)然,也可以是其它空閑頁。建立映射表的目的是反映邏輯頁對應(yīng)的映射頁,下面給出依照本發(fā)明實施例的一 種優(yōu)選的映射表反映邏輯頁的映射頁方式,本實施例中映射表包括與所有邏輯頁總數(shù)相等 數(shù)量個映射項,每個映射項反映一個邏輯頁的一個映射頁,如有256個邏輯頁時,對應(yīng)256 個映射項;每個映射項由扇區(qū)號(sector號)和頁號(page號)組成,且所有映射項中扇區(qū) 號占用的字節(jié)數(shù)相等及頁號占用的字節(jié)數(shù)相等,每個映射項反映的邏輯頁由該映射項在映 射表中的偏移確定,反映的映射頁由該映射項中的扇區(qū)號和頁號確定。每個頁的物理地址可以由其在Flash中所在sector及在sector內(nèi)的page號確 定,因此通過上述映射項的內(nèi)容(扇區(qū)號和頁號)可以唯一索引到映射頁的物理地址。由于 每個映射項占用的字節(jié)數(shù)是相同的,因此可以通過映射項的偏移確定其反映的邏輯頁。具 體地,映射項中扇區(qū)號占用的字節(jié)數(shù),由對映射區(qū)劃分得到的頁組成的扇區(qū)個數(shù)總數(shù)確定, 映射項中頁號占用的字節(jié)數(shù)由組成一個扇區(qū)的頁數(shù)確定。優(yōu)選地,本實施例中映射表還包括第一字段(本實施例稱Tl字段)和第二字段 (本實施例稱T2字段),Tl字段用于標(biāo)識無效或有效,T2字段用于標(biāo)識映射表的流水號,寫 操作時使用的映射表即查找邏輯頁的第一映射頁的映射表,具體為Tl字段標(biāo)識為有效的 映射表,如圖3所示,依照本發(fā)明另一實施例的Flash的回收方法,包括步驟S301,接收到寫操作指令時確定寫操作指向的邏輯頁;步驟S302,查找所確定的邏輯頁在映射表中的第一映射頁,該映射表具體為Tl字 段標(biāo)識為有效的映射表,初始化時建立的映射表中Tl字段標(biāo)識為有效;步驟S303,根據(jù)查找到的第一映射頁中數(shù)據(jù)及寫操作指令組織要寫入的數(shù)據(jù);步驟S304,確定寫入組織好的數(shù)據(jù)所需的空閑頁數(shù)目,及對映射區(qū)劃分得到的頁 中剩余空閑頁數(shù)目;步驟S305,根據(jù)所需的空閑頁數(shù)目和剩余空閑頁數(shù)目,確定是否滿足設(shè)定回收條 件,若不滿足,執(zhí)行步驟S306,否則執(zhí)行步驟S310 ;步驟S306,說明當(dāng)前空閑頁夠用,從對所述映射區(qū)劃分得到的頁中,選取除指定頁 外的空閑頁作為第二映射頁,在第二映射頁上寫入組織好的數(shù)據(jù);步驟S307,新建一映射表,將Tl字段標(biāo)識為有效的映射表中除Tl字段以外內(nèi)容復(fù) 制到新建映射表中,并將新建映射表中T2字段加一;步驟S308,在所述第二映射頁上寫入組織好的數(shù)據(jù)之后,將新建映射表中寫操作
10指向的邏輯頁的第一映射頁,修改為所述第二映射頁;步驟S309,在新建映射表中寫入標(biāo)識為有效的Tl字段,依據(jù)流水號將前一映射表 中的Tl字段標(biāo)識修改為無效,執(zhí)行完該寫操作指令。步驟S310,確定滿足設(shè)定回收條件時,從所述映射區(qū)中選取預(yù)回收扇區(qū);步驟S311,將預(yù)回收扇區(qū)中有效頁的數(shù)據(jù),重寫到映射區(qū)中除預(yù)回收扇區(qū)外的扇 區(qū)中空閑頁;步驟S312,新建一映射表,將Tl字段標(biāo)識為有效的映射表中除Tl字段以外內(nèi)容復(fù) 制到新建映射表中,并將新建映射表中T2字段加一;步驟S313,將預(yù)回收扇區(qū)中有效頁的數(shù)據(jù),重寫到映射區(qū)中除預(yù)回收扇區(qū)外的扇 區(qū)中空閑頁之后,將所述預(yù)回收扇區(qū)中有效頁在新建映射表中的映射頁,修改為重寫該有 效頁數(shù)據(jù)的頁;步驟S314,在新建映射表中寫入標(biāo)識為有效的Tl字段,依據(jù)流水號將前一映射表 中的Tl字段標(biāo)識修改為無效,并執(zhí)行扇區(qū)回收操作,并返回步驟S306。上述Tl字段和T2字段用來在創(chuàng)建新映射表完成后和去使能前一個映射表之前斷 電后再次上電時判斷使用,操作過程保證了在寫映射表斷電時,再次上電時保證了數(shù)據(jù)不 會因斷電被找錯。由于在映射表區(qū)中每執(zhí)行一次寫操作指令,會涉及到映射表的新建,因此需要提 供一種對映射表區(qū)的回收機(jī)制,本實施例提供的Flash回收方法中,映射表存放在映射表 區(qū)時,映射表區(qū)的區(qū)域包括至少兩個扇區(qū),每次新建映射表時,還包括確定映射表區(qū)中僅有一個扇區(qū)未寫滿,且當(dāng)前新建的映射表在該未寫滿的扇區(qū)內(nèi) 不是第一個映射表,且確定此次寫操作指令執(zhí)行過程中未對映射區(qū)中扇區(qū)執(zhí)行過回收操作 時,對映射表區(qū)中寫滿映射表的扇區(qū)執(zhí)行回收操作。這里不以最后一個未寫滿的扇區(qū)的第一次被寫為映射表區(qū)回收判斷條件,是為了 防止斷電后找不到前一個流水號的映射表引起數(shù)據(jù)混亂。優(yōu)選地,還包括確定映射表區(qū)中僅有一個扇區(qū)未寫滿,且當(dāng)前新建的映射表在該 未寫滿的扇區(qū)內(nèi)不是第一個映射表,且確定此次寫操作指令執(zhí)行過程中對映射區(qū)中扇區(qū)執(zhí) 行過回收操作,在當(dāng)前新建映射后映射表區(qū)所有扇區(qū)已寫滿時,對映射表區(qū)中之前寫滿映 射表的扇區(qū)執(zhí)行回收操作。上述方法從很大程度上避免了一起回收,如果到最后都沒有機(jī) 會回收映射表區(qū)域,那么強(qiáng)制一起回收,這種事件發(fā)生概率極小,對性能影響不會很大。本發(fā)明實施例一方面保證了 FLASH在執(zhí)行過程中不會因為需要回收而降低執(zhí)行 指令的速度,另一方面保證了在異常情況發(fā)生的時候能夠有效的恢復(fù)原數(shù)據(jù),在沒有特殊 額外斷電保護(hù)的情況下實現(xiàn)了斷電保護(hù)的效果。動態(tài)回收空間的機(jī)制也使得FLASH的回收 效率更高。本實施例中確定空閑頁所依據(jù)的信息除了映射表中的映射頁以外,還利用了頁信 息表,頁信息表用于標(biāo)識頁的使用信息,所標(biāo)識的頁的使用信息通過上電時遍歷映射區(qū)獲 得,隨著頁的使用和回收及而更新,如在上述選取了空閑頁寫入數(shù)據(jù)后,頁信息表中相應(yīng)地 將這些空閑頁標(biāo)識為已寫入數(shù)據(jù)。優(yōu)選地,本實施例中確定映射區(qū)中空閑頁具體包括將映 射區(qū)中在頁信息表中標(biāo)識為空閑頁且未在映射表中作為映射頁的頁,確空為映射區(qū)中的空 閑頁。
本實施例中在斷電再次上電后接收到寫操作指令時,確定寫操作中查找邏輯頁的 第一映射頁使用的映射表,即確定有效映射表的步驟,具體包括依據(jù)流水號查找兩個最新建立的映射表;在這兩個映射表中1)較老的映射表中Tl字段標(biāo)識為無效,且較新的映射表中Tl字段標(biāo)識為有效時, 確定較新的映射表為寫操作使用的映射表;說明上次寫操作及修改映射表的步驟已完成,因此使用最新的映射表。2)兩個映射表中Tl字段均標(biāo)識為有效,確定較新的映射表為寫操作使用的映射 表,并將較老的映射表Tl字段修改為無效;說明上次寫操作及修改映射表的步驟已完成但未將較老映射表修改為無效時發(fā) 生斷電,因此可以使用最新的映射表。3)較老的映射表中Tl字段標(biāo)識為有效,且較新的映射表中Tl字段未填寫時,確定 較老的映射表為寫操作使用的映射表。這種情況下,斷電有可能是在數(shù)據(jù)寫入未完成或在數(shù)據(jù)寫入完成而映射關(guān)系未修 改時斷電,也可能是在映射關(guān)系修改完后斷電的,因為不確定斷電時機(jī),因而采用較老的映 射表查找數(shù)據(jù)。優(yōu)選地,本實施例中上述映射表還包括校驗字段X0R,所述校驗字段XOR的取值由 所述映射表中除Tl字段外的內(nèi)容累加和確定,這樣,在上述確定寫操作中使用的映射表的 步驟中,還包括對上述兩個最新的映射表,根據(jù)映射表中校驗字段XOR進(jìn)行校驗的步驟,如 對于3)這種情況,如果最新的映射表中的校驗字段XOR與較老的映射表校驗字段XOR不 同,說明已完映射關(guān)系修改而填入新的校驗字段,因此可以確定最新的映射表為有效的映 射表。這種操作過程保證了在寫映射表斷電時,再次上電,可以根據(jù)有效的映射表,及其信 息項中的校驗值來判斷當(dāng)前最新的映射表是否正確,若不正確,采用流水號較老的用,保證 了數(shù)據(jù)不會因斷電被找錯。在文件系統(tǒng)的操作中,對Flash的操作一般為讀操作、寫操作和擦除操作。在上述 實施例給出的寫操作的基礎(chǔ)上,優(yōu)選地,本實施例中映射表還包括V字段,所述V字段用于 記錄初始化時所有邏輯頁映射到的同一指定頁,如圖4所示,還包括步驟S401,接收到刪除操作指令時,確定刪除操作指向的邏輯頁;步驟S402,查找刪除操作指向的邏輯頁在映射表中的第一映射頁;在采用上述動態(tài)建立映射表的方式時,這里使用的映射表為當(dāng)前Tl字段標(biāo)識有 效的映射表。步驟S403,在查找到的第一映射頁中寫入使該第一映射頁視為空閑頁的數(shù)據(jù);現(xiàn)有Flash初始化時被格式化為全FF,因此數(shù)據(jù)為全FF的頁為被視為空閑頁。這 樣,本實施例中可以將要刪除的文件實際占用的頁執(zhí)行一次數(shù)據(jù)寫入操作,即將該頁數(shù)據(jù) 修改為全FF。由于將該頁更新為空閑頁,頁信息表該頁的使用信息由已寫入數(shù)據(jù)更新為空 閑頁。步驟S404,將映射表中刪除操作指向的邏輯頁的第一映射頁,修改為所述映射表 中V字段記錄的指定頁。這樣下次對該邏輯頁進(jìn)行寫操作時,發(fā)現(xiàn)當(dāng)前映射頁為空閑頁且之前的映射頁已 不在映射表中,說明還未被使用而可以列入空閑頁中。
本發(fā)明實施例中擦除實事上只是一個虛擬操作,不會真正擦除。跟寫的過程類似, 只是將寫的數(shù)據(jù)寫為全FF,在寫到整頁都為FF的時候,將該邏輯頁映射在指定頁上即可。 這樣即節(jié)約了擦的時間,又能夠極大地節(jié)約flash的存儲空間,提高了 FLASH的存儲效率, 并且能夠延長Flash的回收時間,從性能、效率、和延長使用壽命上都起到了作用。
本實施例中基于上述實施例中給出的操作Flash方法中的寫操作,如圖5所示,還 包括步驟S501,接收到讀操作指令時確定讀操作指向的邏輯頁;步驟S502,查找讀操作指向的邏輯頁在映射表中的第一映射頁;在采用上述動態(tài)建立映射表的方式時,這里使用的映射表為當(dāng)前Tl字段標(biāo)識有 效的映射表步驟S503,根據(jù)所述讀操作指令在所述第一映射頁的相應(yīng)位置讀取數(shù)據(jù)。因此實 現(xiàn)了 Flash的讀操作。下面仍以IM容量,用戶區(qū)為64K的Flash為例,說明本發(fā)明實施例中上述映射表 的結(jié)構(gòu),如表1所示,該映射表中包括256個映射項,由于每個扇區(qū)有16頁,所以采用4bit 的頁號;由于用戶區(qū)有16個扇區(qū),設(shè)定輔助區(qū)有3個扇區(qū),因此最少要5bit扇區(qū)號,為了方 便表示,本實施例中扇區(qū)號采用一個字節(jié)。這樣每個映射項占用1.5個字節(jié),其中扇區(qū)號占 用前一個字節(jié),頁號占用后半個字節(jié)。每個映射項在映射表中的偏移除以1.5字節(jié),就是其 所代表的邏輯頁,這樣映射項的前一個字節(jié)表示該邏輯頁的映射頁所在的sector,后半個 字節(jié)代表該邏輯頁的映射頁所在sector內(nèi)的page號。在初始化后的狀態(tài)下,由于Flash 全部區(qū)域為FF狀態(tài),映射表的每一映射項的映射頁都指向第一個全FF的page。表1映射表的結(jié)構(gòu)
權(quán)利要求
1.一種Flash的回收方法,其特征在于,包括確定滿足設(shè)定回收條件時,從映射區(qū)中選取預(yù)回收扇區(qū),所述映射區(qū)包括由Flash中 用戶區(qū)和設(shè)定輔助區(qū);將預(yù)回收扇區(qū)中有效頁的數(shù)據(jù),重寫到映射區(qū)中除預(yù)回收扇區(qū)外的空閑頁,所述有效 頁為已寫入數(shù)據(jù)且在映射表中作為映射頁的頁,所述映射表用于建立邏輯頁與映射頁的映 射關(guān)系;將所述預(yù)回收扇區(qū)中的有效頁在映射表中的映射頁,修改為重寫該有效頁數(shù)據(jù)的頁, 并對預(yù)回收扇區(qū)執(zhí)行回收操作。
2.如權(quán)利要求1所述的方法,其特征在于,確定滿足設(shè)定回收條件之前,還包括接收到寫操作指令時確定寫操作指向的邏輯頁,并查找所述寫操作指向的邏輯頁在映 射表中的第一映射頁;根據(jù)寫操作指令及所述第一映射頁中數(shù)據(jù)組織要寫入的數(shù)據(jù); 確定寫入組織好的數(shù)據(jù)所需的空閑頁數(shù)目根據(jù)所需的空閑頁數(shù)目和映射區(qū)中的剩余 空閑頁數(shù)目,確定是否滿足設(shè)定回收條件; 對預(yù)回收扇區(qū)執(zhí)行回收操作之后,還包括從映射區(qū)中選取除指定頁外的空閑頁作為第二映射頁,所述指定頁為在映射區(qū)中指定 的一個空閑頁,初始化時用戶區(qū)的所有邏輯頁映射到同一指定頁;在所述第二映射頁上寫入組織好的數(shù)據(jù),并將映射表中寫操作指向的邏輯頁的第一映 射頁,修改為所述第二映射頁。
3.如權(quán)利要求2所述的方法,其特征在于,根據(jù)所需的空閑頁數(shù)目和剩余空閑頁數(shù)目, 確定是否滿足設(shè)定回收條件,具體包括所需的空閑頁數(shù)目與設(shè)定閾值的和不大于所述剩余空閑頁數(shù)目時,確定不滿足設(shè)定回 收條件;所需的空閑頁數(shù)目與設(shè)定閾值的和大于所述剩余空閑頁數(shù)目時,確定滿足設(shè)定回收條件。
4.如權(quán)利要求3所述的方法,其特征在于,所述設(shè)定閾值等于所述映射區(qū)中組成一個 扇區(qū)的頁數(shù)減一。
5.如權(quán)利要求1所述的方法,其特征在于,所述從映射區(qū)中選取預(yù)回收扇區(qū),具體包括獲取所述映射區(qū)中每個扇區(qū)中的無效頁個數(shù),所述無效頁為已寫入數(shù)據(jù)且未在映射表 中被作為映射頁的頁;選取映射區(qū)中無效頁最多的扇區(qū)為預(yù)回收扇區(qū)。
6.如權(quán)利要求2所述的方法,其特征在于,所述映射表還包括第一字段和第二字段,所 述第一字段用于標(biāo)識無效或有效,所述第二字段用于標(biāo)識映射表的流水號,寫操作時使用 的映射表為第一字段標(biāo)識為有效的映射表,在所述第二映射頁上寫入組織好的數(shù)據(jù)時,還 包括新建一映射表,將第一字段標(biāo)識為有效的映射表中除第一字段以外內(nèi)容復(fù)制到新建映 射表中,并將新建映射表中的第二字段加一;將映射表中寫操作指向的邏輯頁的第一映射頁,修改為第二映射頁,包括在所述第二映射頁上寫入組織好的數(shù)據(jù)之后,將新建映射表中寫操作指向的邏輯頁的 第一映射頁,修改為所述第二映射頁;在新建映射表中寫入標(biāo)識為有效的第一字段,依據(jù)流水號將前一映射表中的第一字段 標(biāo)識修改為無效。
7.如權(quán)利要求6所述的方法,其特征在于,將預(yù)回收扇區(qū)中的有效頁的數(shù)據(jù),重寫到映 射區(qū)中除預(yù)回收扇區(qū)外的空閑頁時,還包括 新建一映射表,將第一字段標(biāo)識為有效的映射表中除第一字段以外內(nèi)容復(fù)制到新建映 射表中,并將新建映射表中的第二字段加一;將所述預(yù)回收扇區(qū)中的有效頁在映射表中的映射頁,修改為重寫該有效頁數(shù)據(jù)的頁, 具體包括將預(yù)回收扇區(qū)中的有效頁的數(shù)據(jù),重寫到映射區(qū)中除預(yù)回收扇區(qū)外的扇區(qū)中空閑頁之 后,將所述預(yù)回收扇區(qū)中的有效頁在新建映射表中的映射頁,修改為重寫該有效頁數(shù)據(jù)的 頁;在新建映射表中寫入標(biāo)識為有效的第一字段,依據(jù)流水號將前一映射表中的第一字段 標(biāo)識修改為無效。
8.如權(quán)利要求6或7所述的方法,其特征在于,所述映射表存放在映射表區(qū)時,所述映 射表區(qū)的區(qū)域包括至少兩個扇區(qū),每次新建映射表時,還包括確定映射表區(qū)中僅有一個扇區(qū)未寫滿,且當(dāng)前新建的映射表在該未寫滿的扇區(qū)內(nèi)不是 第一個映射表,且確定此次寫操作指令執(zhí)行過程中未對映射區(qū)中扇區(qū)執(zhí)行過回收操作或執(zhí) 行過回收操作但新建映射表會使映射表區(qū)寫滿時,對映射表區(qū)中寫滿映射表的扇區(qū)執(zhí)行回 收操作。
9.一種操作Flash的回收裝置,其特征在于,包括預(yù)回收扇區(qū)選取單元,用于確定滿足設(shè)定回收條件時,從映射區(qū)中選取預(yù)回收扇區(qū),所 述映射區(qū)由Flash中用戶區(qū)和設(shè)定輔助區(qū)組成;重寫單元,用于將預(yù)回收扇區(qū)中的有效頁的數(shù)據(jù),重寫到映射區(qū)中除預(yù)回收扇區(qū)外的 空閑頁,所述有效頁為已寫入數(shù)據(jù)且在映射表中作為映射頁的頁,所述映射表用于建立邏 輯頁與映射頁的映射關(guān)系;第一映射關(guān)系修改單元,用于將所述預(yù)回收扇區(qū)中的有效頁在映射表中的映射頁,修 改為重寫該有效頁數(shù)據(jù)的頁;第一回收單元,用于在將有效頁的數(shù)據(jù)重寫到映射區(qū)中除預(yù)回收扇區(qū)外的空閑頁后, 對預(yù)回收扇區(qū)執(zhí)行回收操作。
10.如權(quán)利要求9所述的裝置,其特征在于,還包括第一映射頁選取單元,用于接收到寫操作指令時確定寫操作指向的邏輯頁,并查找所 述寫操作指向的邏輯頁在映射表中的第一映射頁;組織數(shù)據(jù)單元,用于根據(jù)寫操作指令及查找到的第一映射頁中數(shù)據(jù)組織要寫入的數(shù)據(jù);頁數(shù)確定單元,用于確定寫入組織好的數(shù)據(jù)所需的空閑頁數(shù)目,及映射區(qū)中剩余空閑 頁數(shù)目,并觸發(fā)確定是否滿足設(shè)定回收條件;所述預(yù)回收扇區(qū)選取單元具體用于根據(jù)所需的空閑頁數(shù)目和剩余空閑頁數(shù)目,確定是否滿足設(shè)定回收條件;該裝置還包括第二映射頁選取單元,用于對預(yù)回收扇區(qū)執(zhí)行回收操作后,從映射區(qū)中選取除指定頁 外的空閑頁作為第二映射頁,所述指定頁為在映射區(qū)中指定的一個空閑頁,初始化時用戶 區(qū)的所有邏輯頁映射到同一指定頁;第二映射關(guān)系修改單元,用于對預(yù)回收扇區(qū)執(zhí)行回收操作后,在選取的第二映射頁上 寫入組織好的數(shù)據(jù),并將映射表中寫操作指向的邏輯頁的第一映射頁,修改為所述第二映 射頁。
11.如權(quán)利要求10所述的裝置,其特征在于,所述預(yù)回收扇區(qū)選取單元,具體用于在確 定所需的空閑頁數(shù)目與設(shè)定閾值的和不大于所述剩余空閑頁數(shù)目時,確定不滿足設(shè)定回收 條件;確定所需的空閑頁數(shù)目與設(shè)定閾值的和大于所述剩余空閑頁數(shù)目時,確定滿足設(shè)定 回收條件。
12.如權(quán)利要求9所述的裝置,其特征在于,所述預(yù)回收扇區(qū)選取單元,具體包括無效頁確定單元,用于獲取所述映射區(qū)中每個扇區(qū)中的無效頁個數(shù),所述無效頁為已 寫入數(shù)據(jù)且未在映射表中被作為映射頁的頁;預(yù)回收扇區(qū)確定單元,選取映射區(qū)中無效頁最多的扇區(qū)為預(yù)回收扇區(qū)。
13.如權(quán)利要求10所述的裝置,其特征在于,所述映射表還包括第一字段和第二字段, 所述第一字段用于標(biāo)識無效或有效,第二字段用于標(biāo)識映射表的流水號,寫操作時使用的 映射表為第一字段標(biāo)識為有效的映射表,還包括第一新建映射表單元,用于在所述第二映射頁上寫入組織好的數(shù)據(jù)時,新建一映射表, 將第一字段標(biāo)識為有效的映射表中除第一字段以外內(nèi)容復(fù)制到新建映射表中,并將新建映 射表中的第二字段加一;第一映射關(guān)系修改單元,具體包括第一修改單元,用于在所述第二映射頁上寫入組織好的數(shù)據(jù)之后,將新建映射表中寫 操作指向的邏輯頁的第一映射頁,修改為所述第二映射頁;第二修改單元,用于在新建映射表中寫入標(biāo)識為有效的第一字段,依據(jù)流水號將前一 映射表中的第一字段標(biāo)識修改為無效。
14.如權(quán)利要求13所述的裝置,其特征在于,還包括第二新建映射表單元,用于將預(yù)回收扇區(qū)中的有效頁的數(shù)據(jù),重寫到映射區(qū)中除預(yù)回 收扇區(qū)外的空閑頁時,新建一映射表,將第一字段標(biāo)識為有效的映射表中除第一字段以外 內(nèi)容復(fù)制到新建映射表中,并將新建映射表中第二字段加一;第二映射關(guān)系修改單元,具體包括第三修改單元,用于在將預(yù)回收扇區(qū)中的有效頁的數(shù)據(jù),重寫到映射區(qū)中除預(yù)回收扇 區(qū)外的空閑頁之后,將所述預(yù)回收扇區(qū)中的有效頁在新建映射表的映射頁,修改為重寫該 有效頁數(shù)據(jù)的頁;第四修改單元,用于在新建映射表中寫入標(biāo)識為有效的第一字段,依據(jù)流水號將前一 映射表中的第一字段標(biāo)識修改為無效。
15.如權(quán)利要求13或14所述的裝置,其特征在于,所述映射表存放在映射表區(qū)時,所述 映射表區(qū)的區(qū)域包括至少兩個扇區(qū),還包括第二回收單元,用于每次新建映射表時,確定映射表區(qū)中僅有一個扇區(qū)未寫滿,且當(dāng)前新建的映射表在該未寫滿的扇區(qū)內(nèi)不是第一個映射表,且確定此次寫操作指令執(zhí)行過程中 未對映射區(qū)中扇區(qū)執(zhí)行過回收操作或執(zhí)行過回收操作但新建映射表會使映射表區(qū)寫滿時, 對映射表區(qū)中寫滿映射表的扇區(qū)執(zhí)行回收操作。
全文摘要
本發(fā)明涉及一種Flash的回收方法和裝置,該方法中通過映射表中邏輯頁的映射頁,將可操作的空間擴(kuò)展為由用戶區(qū)和設(shè)定輔助區(qū)組成的映射區(qū),確定滿足設(shè)定回收條件時,從映射區(qū)中選取預(yù)回收扇區(qū);將預(yù)回收扇區(qū)中的有效頁的數(shù)據(jù),重寫到映射區(qū)中其它扇區(qū)中空閑頁,有效頁為已寫入數(shù)據(jù)且在映射表作為映射頁的頁;將預(yù)回收扇區(qū)中的有效頁在映射表中的映射頁,修改為重寫該有效頁數(shù)據(jù)的頁,并對預(yù)回收扇區(qū)執(zhí)行回收操作。本發(fā)明優(yōu)化了現(xiàn)有Flash回收方法,提高了Flash的運行速度。
文檔編號G06F12/02GK102004697SQ20101052077
公開日2011年4月6日 申請日期2010年10月21日 優(yōu)先權(quán)日2010年10月21日
發(fā)明者孫婉麗, 藏宏偉 申請人:北京握奇數(shù)據(jù)系統(tǒng)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
错那县| 伊春市| 湖北省| 临漳县| 广西| 贡觉县| 黄石市| 五台县| 富川| 古浪县| 杭锦后旗| 大城县| 天气| 双城市| 迁西县| 文登市| 济阳县| 金华市| 平顺县| 昭通市| 临沭县| 西畴县| 朝阳市| 张家界市| 丁青县| 平顺县| 沁源县| 延安市| 华宁县| 华蓥市| 永仁县| 乌鲁木齐市| 海南省| 恩平市| 霸州市| 灵台县| 高淳县| 濮阳县| 上思县| 贵定县| 永靖县|