專(zhuān)利名稱(chēng):一種Flash的回收方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種Flash的回收方法和裝置。
背景技術(shù):
閃存Flash在沒(méi)有電流供應(yīng)的條件下也能夠長(zhǎng)久地保存數(shù)據(jù),其存儲(chǔ)特性相當(dāng)于 硬盤(pán),這項(xiàng)特性使得Flash成為各類(lèi)便攜型數(shù)字設(shè)備使用的存儲(chǔ)介質(zhì)。閃存Flash通常情況下被劃分為多個(gè)扇區(qū),多個(gè)字節(jié)為一頁(yè),因此每個(gè)扇區(qū)包括 多個(gè)頁(yè)。對(duì)Flash進(jìn)行讀寫(xiě)時(shí),以頁(yè)為單位進(jìn)行操作。在要寫(xiě)入數(shù)據(jù)的頁(yè)為不可用狀態(tài)如 被其它文件數(shù)據(jù)占用時(shí),對(duì)該頁(yè)執(zhí)行擦除操作。在Flash中無(wú)空閑頁(yè)時(shí),以扇區(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é)四種。對(duì)于這種小容量Flash的操作方式都是直接對(duì)其物理地址 進(jìn)行操作,具體為在執(zhí)行寫(xiě)操作時(shí),根據(jù)維護(hù)的頁(yè)信息表,獲取要寫(xiě)入數(shù)據(jù)的頁(yè)是否為可用狀態(tài),其 中要寫(xiě)入數(shù)據(jù)的頁(yè)是由操作系統(tǒng)根據(jù)特定規(guī)則確定的;在要寫(xiě)入數(shù)據(jù)的頁(yè)為可用狀態(tài)時(shí),根據(jù)該頁(yè)物理地址將要寫(xiě)入的數(shù)據(jù)寫(xiě)入;在要 寫(xiě)入數(shù)據(jù)的頁(yè)為不可用狀態(tài)時(shí),將該頁(yè)進(jìn)行擦除。在Flash中無(wú)空閑頁(yè)時(shí),以扇區(qū)為單位執(zhí) 行擦除操作實(shí)現(xiàn)回收。對(duì)Flash采用直接對(duì)其物理地址進(jìn)行操作的方式,在Flash容量比較小時(shí),執(zhí)行上 述頁(yè)擦除及扇區(qū)擦除的頻率都比較高,但因?yàn)樯葏^(qū)小,擦寫(xiě)速度快,所以即使一條指令有幾 次對(duì)Flash的寫(xiě)操作都需要進(jìn)行擦除也可以滿足產(chǎn)品的性能要求。但是目前越來(lái)越多的便攜型數(shù)字設(shè)備使用大容量的Flash如NANDFlash, NANDFlash最大的優(yōu)點(diǎn)在于容量可以做得很大,超過(guò)512MB容量的NAND產(chǎn)品相當(dāng)普遍,如采 用較多為IM容量,扇區(qū)大小為4k的Flash。對(duì)于這些大容量大扇區(qū)的片內(nèi)Flash,操作系 統(tǒng)可用的用戶區(qū)比較小,如為64K。這樣對(duì)于扇區(qū)劃分較大,用戶區(qū)較小的片內(nèi)Flash,如果 采用上述直接對(duì)物理地址操作的方式進(jìn)行讀寫(xiě),由于用戶區(qū)比較小也會(huì)比較頻繁地出現(xiàn)頁(yè) 擦除及扇區(qū)擦除操作。而扇區(qū)擦除操作中,由于扇區(qū)比較大因此擦除操作占用的時(shí)間長(zhǎng),在 實(shí)際應(yīng)用中速度太慢無(wú)法被用戶接受,而且每操作一個(gè)扇區(qū)內(nèi)的數(shù)據(jù)時(shí)都要將全部4K數(shù) 據(jù)擦除對(duì)Flash的壽命也是一個(gè)很大的影響。目前對(duì)于管理扇區(qū)較大的NANDFlash,有的采用文件系統(tǒng)下一層的文件分配表 FAT管理機(jī)制如FAT16、FAT32等。文件分配表FAT管理機(jī)制功能強(qiáng)大,適于管理存儲(chǔ)空間 比較大、文件管理復(fù)雜的場(chǎng)景,多應(yīng)用于計(jì)算機(jī)。但是在智能卡應(yīng)用中,對(duì)于扇區(qū)劃分較大, 用戶區(qū)較小的片內(nèi)Flash來(lái)說(shuō),采用FAT管理機(jī)制復(fù)雜有余,又不能物盡其用。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種Flash的回收方法及裝置,用以優(yōu)化現(xiàn)有Flash回收機(jī)制, 減少回收次數(shù)和提高操作Flash的速度。本發(fā)明提供一種Flash的回收方法,包括確定滿足設(shè)定回收條件時(shí),從映射區(qū)中選取預(yù)回收扇區(qū),所述映射區(qū)包括由Flash 中用戶區(qū)和設(shè)定輔助區(qū);將預(yù)回收扇區(qū)中有效頁(yè)的數(shù)據(jù),重寫(xiě)到映射區(qū)中除預(yù)回收扇區(qū)外的空閑頁(yè),所述 有效頁(yè)為已寫(xiě)入數(shù)據(jù)且在映射表中作為映射頁(yè)的頁(yè),所述映射表用于建立邏輯頁(yè)與映射頁(yè) 的映射關(guān)系;將所述預(yù)回收扇區(qū)中的有效頁(yè)在映射表中的映射頁(yè),修改為重寫(xiě)該有效頁(yè)數(shù)據(jù)的 頁(yè),并對(duì)預(yù)回收扇區(qū)執(zhí)行回收操作。本發(fā)明還提供一種操作Flash的回收裝置,包括 預(yù)回收扇區(qū)選取單元,用于確定滿足設(shè)定回收條件時(shí),從映射區(qū)中選取預(yù)回收扇 區(qū),所述映射區(qū)由Flash中用戶區(qū)和設(shè)定輔助區(qū)組成;重寫(xiě)單元,用于將預(yù)回收扇區(qū)中的有效頁(yè)的數(shù)據(jù),重寫(xiě)到映射區(qū)中除預(yù)回收扇區(qū) 外的空閑頁(yè),所述有效頁(yè)為已寫(xiě)入數(shù)據(jù)且在映射表中作為映射頁(yè)的頁(yè),所述映射表用于建 立邏輯頁(yè)與映射頁(yè)的映射關(guān)系;第一映射關(guān)系修改單元,用于將所述預(yù)回收扇區(qū)中的有效頁(yè)在映射表中的映射 頁(yè),修改為重寫(xiě)該有效頁(yè)數(shù)據(jù)的頁(yè);第一回收單元,用于在將有效頁(yè)的數(shù)據(jù)重寫(xiě)到映射區(qū)中除預(yù)回收扇區(qū)外的空閑頁(yè) 后,對(duì)預(yù)回收扇區(qū)執(zhí)行回收操作。利用本發(fā)明的Flash的回收方法及裝置,具有以下有益效果在將操作Flash的空 間擴(kuò)展到映射區(qū)的情況下,減少了 Flash的回收時(shí)間間隔,因此不會(huì)影響操作Flash的數(shù)據(jù) 讀寫(xiě)速度,且提高了 Flash的壽命。
圖1為本發(fā)明提供的Flash的回收方法流程圖;圖2為依照本發(fā)明實(shí)施例中示例的對(duì)Flash劃分后的物理結(jié)構(gòu);圖3為依照本發(fā)明實(shí)施例中采用動(dòng)態(tài)建立映射方式時(shí)對(duì)應(yīng)的Flash的回收方法流 程圖;圖4為依照本發(fā)明實(shí)施例中Flash的回收方法中實(shí)現(xiàn)刪除操作的流程圖;圖5為依照本發(fā)明實(shí)施例中Flash的回收方法中實(shí)現(xiàn)讀取操作的流程圖;圖6A、圖6B為依照本發(fā)明實(shí)施例中Flash的回收方法的詳細(xì)過(guò)程流程圖;圖7為依照本發(fā)明實(shí)施例中Flash的回收裝置的結(jié)構(gòu)圖。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明提出的Flash的回收方法和裝置進(jìn)行更詳細(xì)地 說(shuō)明。本發(fā)明能夠避免現(xiàn)有智能卡操作系統(tǒng)運(yùn)行時(shí),使用復(fù)雜的Flash管理模式實(shí)現(xiàn)其操作的同時(shí),又能夠快速地進(jìn)行Flash的操作,并保證Flash的損耗在一定程度上均衡。對(duì)于智能卡操作Flash時(shí),雖然Flash的容量非常大,例如有1M,但是對(duì)于智能卡 操作系統(tǒng)來(lái)說(shuō),能夠進(jìn)行操作的區(qū)域即用戶區(qū)是有限,如用戶區(qū)為64K,因此進(jìn)行Flash操 作時(shí),是針對(duì)這64K可見(jiàn)的用戶區(qū)進(jìn)行數(shù)據(jù)讀寫(xiě)。本發(fā)明將對(duì)Flash中用戶區(qū)劃分得到的 頁(yè)作為邏輯頁(yè),操作Flash時(shí)只面向這些邏輯頁(yè)進(jìn)行Flash操作。
本發(fā)明提供的Flash的回收方法包括確定滿足設(shè)定回收條件時(shí),從映射區(qū)中選 取預(yù)回收扇區(qū),所述映射區(qū)由Flash中用戶區(qū)和設(shè)定輔助區(qū)組成;將預(yù)回收扇區(qū)中有效頁(yè) 的數(shù)據(jù),重寫(xiě)到映射區(qū)中除預(yù)回收扇區(qū)外的空閑頁(yè),所述有效頁(yè)為已寫(xiě)入數(shù)據(jù)且在映射表 中作為映射頁(yè)的頁(yè),所述映射表用于建立反映所有邏輯頁(yè)的與映射頁(yè)的映射關(guān)系,即反映 所有邏輯頁(yè)的映射頁(yè);將所述預(yù)回收扇區(qū)中的有效頁(yè)在映射表中的映射頁(yè),即所述映射表 中是所述預(yù)回收扇區(qū)中有效頁(yè)的邏輯頁(yè)的映射頁(yè),修改為重寫(xiě)該有效頁(yè)數(shù)據(jù)的頁(yè),并對(duì)預(yù) 回收扇區(qū)執(zhí)行回收操作。本發(fā)明在映射區(qū)中空閑頁(yè)不夠時(shí)再進(jìn)行上述回收操作,大大延遲 了回收的時(shí)間間隔,保證運(yùn)行速度的同時(shí),又能夠不失時(shí)機(jī)地回收足夠頁(yè)作為映射頁(yè)來(lái)滿 足寫(xiě)操作的需要;由于回收機(jī)制中將有效頁(yè)的數(shù)據(jù)首先讀取到其它扇區(qū)空閑頁(yè)中且會(huì)更新 映射關(guān)系,因此不會(huì)寫(xiě)操作的正常運(yùn)行。依照本發(fā)明的實(shí)施例中,提供一種Flash的回收方法,如圖1所示,該方法包括步驟S101,接收到寫(xiě)操作指令時(shí)確定寫(xiě)操作指向的邏輯頁(yè),所述邏輯頁(yè)為對(duì) Flash中用戶區(qū)劃分得到的頁(yè);寫(xiě)操作指令中對(duì)數(shù)據(jù)的寫(xiě)操作是以頁(yè)為單位的,每次寫(xiě)操作都會(huì)指向一個(gè)要寫(xiě)入 數(shù)據(jù)的邏輯頁(yè)。步驟S102,查找所確定的邏輯頁(yè)在映射表中的第一映射頁(yè),該映射表用于反映所 有邏輯頁(yè)的映射頁(yè),初始化時(shí)所有邏輯頁(yè)映射到空閑頁(yè)中的同一指定頁(yè);在映射表中建立所有邏輯頁(yè)的映射頁(yè),這樣,實(shí)際進(jìn)行寫(xiě)操作時(shí)指向的頁(yè)為其映 射頁(yè),本發(fā)明在初始化時(shí),將所有邏輯頁(yè)映射到同一個(gè)指定空閑頁(yè)。步驟S103,根據(jù)查找到的第一映射頁(yè)中數(shù)據(jù)及寫(xiě)操作指令組織要寫(xiě)入的數(shù)據(jù);由于寫(xiě)操作中既包含向一個(gè)空閑頁(yè)中寫(xiě)入數(shù)據(jù)的操作,也包括對(duì)之前寫(xiě)入的某頁(yè) 數(shù)據(jù)進(jìn)行修改的操作。因此,在查找到的第一映射頁(yè)為空閑頁(yè)時(shí),說(shuō)明操作系統(tǒng)還未向此次 寫(xiě)操作指向的邏輯頁(yè)寫(xiě)入數(shù)據(jù),組織數(shù)據(jù)具體為將要寫(xiě)入的數(shù)據(jù)作為寫(xiě)入數(shù)據(jù);在查找到 第一映射頁(yè)中有數(shù)據(jù)時(shí),說(shuō)明操作系統(tǒng)之前針對(duì)此次寫(xiě)操作指向的邏輯頁(yè)寫(xiě)入過(guò)數(shù)據(jù),對(duì) 應(yīng)地要修改這些數(shù)據(jù),因此組織數(shù)據(jù)為對(duì)寫(xiě)操作指向的邏輯頁(yè)的第一映射頁(yè)中數(shù)據(jù)根據(jù)寫(xiě) 操作指令進(jìn)行修改。步驟S104,確定寫(xiě)入組織好的數(shù)據(jù)所需的空閑頁(yè)數(shù)目,及對(duì)映射區(qū)劃分得到的頁(yè) 中剩余空閑頁(yè)數(shù)目,映射區(qū)由用戶區(qū)和Flash中除用戶區(qū)外的設(shè)定輔助區(qū)組成;步驟S105,根據(jù)所需的空閑頁(yè)數(shù)目和剩余空閑頁(yè)數(shù)目,確定是否滿足設(shè)定回收條 件,若不滿足,執(zhí)行步驟S106,否則執(zhí)行步驟S108 ;步驟S106,說(shuō)明當(dāng)前空閑頁(yè)夠用,從對(duì)所述映射區(qū)劃分得到的頁(yè)中,選取除指定頁(yè) 外的空閑頁(yè)作為第二映射頁(yè);組織好數(shù)據(jù)要寫(xiě)入時(shí),應(yīng)將組織好的數(shù)據(jù)寫(xiě)入到空閑頁(yè)中。如果映射頁(yè)是指定頁(yè), 說(shuō)明是針對(duì)該邏輯頁(yè)第一次寫(xiě)入數(shù)據(jù),將數(shù)據(jù)寫(xiě)入到除指定頁(yè)外的空閑頁(yè)中。優(yōu)選地,如果寫(xiě)操作指向的邏輯頁(yè)是空閑頁(yè)時(shí),可以將該邏輯頁(yè)本身作為其映射頁(yè)。如果映射頁(yè)是除指 定頁(yè)外的頁(yè),說(shuō)明是針對(duì)該邏輯頁(yè)進(jìn)行數(shù)據(jù)修改,修改后將修改好的數(shù)據(jù)寫(xiě)入到選取的空 閑頁(yè)中。步驟S107,在第二映射頁(yè)上寫(xiě)入組織好的數(shù)據(jù),并將映射表中寫(xiě)操作指向的邏輯 頁(yè)的第一映射頁(yè),修改為所述第二映射頁(yè),執(zhí)行完該寫(xiě)操作指令。因此,更新了邏輯頁(yè)和映射頁(yè)之間的映射關(guān)系。下次對(duì)該邏輯頁(yè)中數(shù)據(jù)進(jìn)行操作 時(shí),可以根據(jù)映射關(guān)系找到上次寫(xiě)入的數(shù)據(jù)。本發(fā)明映射表中一個(gè)邏輯頁(yè)對(duì)應(yīng)一個(gè)映射頁(yè),上述第一映射頁(yè)指未進(jìn)行任何操作 前查找到的映射頁(yè),第二映射頁(yè)為進(jìn)行相關(guān)操作后修改后的映射頁(yè)。步驟S108,確定滿足設(shè)定回收條件時(shí),從所述映射區(qū)中選取預(yù)回收扇區(qū);步驟S109,將預(yù)回收扇區(qū)中有效頁(yè)的數(shù)據(jù),重寫(xiě)到映射區(qū)中除預(yù)回收扇區(qū)外的扇 區(qū)中空閑頁(yè);步驟S110,將所述預(yù)回收扇區(qū)中的有效頁(yè)在映射表中的映射頁(yè),修改為重寫(xiě)該有 效頁(yè)數(shù)據(jù)的頁(yè),對(duì)預(yù)回收扇區(qū)執(zhí)行回收操作。如果預(yù)回收扇區(qū)中的某頁(yè)寫(xiě)入數(shù)據(jù)且是映射表中的映射頁(yè),不能直接將該頁(yè)數(shù)據(jù) 擦除,否則下次通過(guò)映射表會(huì)找不到該頁(yè)數(shù)據(jù),因此需要將這些頁(yè)內(nèi)的內(nèi)容讀取到其他扇 區(qū)的空閑頁(yè)中,并建立寫(xiě)入數(shù)據(jù)的頁(yè)與之前邏輯頁(yè)的映射關(guān)系,則下次對(duì)之前邏輯頁(yè)進(jìn)行 操作時(shí),還可以根據(jù)新的映射關(guān)系找到這些數(shù)據(jù)。本發(fā)明提供的上述Flash的回收方法中,基于對(duì)Flash的寫(xiě)操作中將寫(xiě)操作實(shí)際 可用的空間擴(kuò)展到為映射區(qū),映射區(qū)要大于用戶區(qū),因此對(duì)于大扇區(qū)的Flash,用戶區(qū)較小 的智能卡來(lái)說(shuō),充分了 Flash中空閑空間;在映射區(qū)中空閑頁(yè)不夠時(shí)再進(jìn)行上述回收操作, 大大延遲了回收的時(shí)間間隔,保證運(yùn)行速度的同時(shí),又能夠不失時(shí)機(jī)地回收足夠頁(yè)作為映 射頁(yè)來(lái)滿足寫(xiě)操作的需要;由于回收機(jī)制中將有效頁(yè)的數(shù)據(jù)首先讀取到其它扇區(qū)空閑頁(yè)中 且會(huì)更新映射關(guān)系,因此不會(huì)寫(xiě)操作的正常運(yùn)行?;谏鲜龌厥諜C(jī)制中的寫(xiě)操作,在寫(xiě)操作寫(xiě)入修改好的數(shù)據(jù)時(shí),不用再像以前一 樣先將所在的頁(yè)擦除再寫(xiě),這樣就大大提高了寫(xiě)Flash的速度;由于Flash應(yīng)用中多數(shù)操作 都是針對(duì)用戶區(qū)前部分,不需要每次寫(xiě)都擦就意味著大大增強(qiáng)了 Flash的使用壽命,使損 耗均衡和整個(gè)區(qū)域的使用效率得到了保證。優(yōu)選地,該方法中,在步驟SllO完成對(duì)預(yù)回收扇區(qū)的回收操作后,返回步驟S106, 在空閑頁(yè)足夠用的情況下執(zhí)行完寫(xiě)操作指令。優(yōu)選地,本實(shí)施例中所需的空閑頁(yè)數(shù)目與設(shè)定閾值的和不大于所述剩余空閑頁(yè)數(shù) 目時(shí),確定不滿足設(shè)定回收條件。所需的空閑頁(yè)數(shù)目與設(shè)定閾值的和大于所述剩余空閑頁(yè) 數(shù)目時(shí),確定滿足設(shè)定回收條件。設(shè)置設(shè)定閾值的目的是為了防止剩余空閑頁(yè)不夠?qū)懭腩A(yù) 回收扇區(qū)中的有效頁(yè)數(shù)據(jù)。另外,預(yù)回收扇區(qū)的選取原則是有效頁(yè)越少越好,而無(wú)效頁(yè)越多越好,其中無(wú)效頁(yè) 為已寫(xiě)入數(shù)據(jù)且未在映射表中被作為映射頁(yè)的頁(yè),即操作系統(tǒng)不再使用而又不是空閑頁(yè)的 頁(yè)。因此所選取的預(yù)回收扇區(qū)中至少有一個(gè)無(wú)效頁(yè),本實(shí)施例中設(shè)定閾值等于所述映射區(qū) 中組成一個(gè)扇區(qū)的頁(yè)數(shù)減一??梢员WC有足夠的空閑頁(yè)存放有效頁(yè)數(shù)據(jù)。本實(shí)施例中設(shè)定輔助區(qū)采用與所述用戶區(qū)相同的空間劃分方式,所述設(shè)定輔助區(qū)的區(qū)域由Flash中除用戶區(qū)外的閑置空間確定;所述映射表存放在映射表區(qū),所述映射表 區(qū)的區(qū)域由Flash中除映射區(qū)外的閑置空間確定。仍以IM容量,用戶區(qū)為64K的Flash為例,如圖2所示,設(shè)定輔助區(qū)采用與用戶區(qū) 相同的空間劃分方式,具體為4K為一個(gè)扇區(qū)(sector),256字節(jié)為一個(gè)頁(yè)(page),用戶區(qū)內(nèi) 有16個(gè)sector,每個(gè)sector內(nèi)是16個(gè)page。設(shè)定輔助區(qū)包括3個(gè)sector,用來(lái)擴(kuò)展用戶 區(qū)的映射關(guān)系,設(shè)定輔助區(qū)的區(qū)域的設(shè)計(jì)在Flash總空間充足的情況下可以任意分配其數(shù) 量。映射表區(qū)包括2個(gè)sector,以頁(yè)為單位進(jìn)行映射,建立邏輯頁(yè)對(duì)應(yīng)的映射頁(yè)。從上面邏輯頁(yè)的映射過(guò)程可以看出,寫(xiě)操作會(huì)使實(shí)際被使用的頁(yè)作為映射頁(yè)被記 錄在映射表中,因此,初始化應(yīng)將所有邏輯頁(yè)映射到同一空閑的指定頁(yè),代表所有的其它所 有頁(yè)都可以使用。優(yōu)選地,初始化時(shí)所有邏輯頁(yè)映射的同一指定頁(yè)為對(duì)Flash中用戶區(qū)劃 分得到的第一個(gè)扇區(qū)的第一頁(yè),當(dāng)然,也可以是其它空閑頁(yè)。建立映射表的目的是反映邏輯頁(yè)對(duì)應(yīng)的映射頁(yè),下面給出依照本發(fā)明實(shí)施例的一 種優(yōu)選的映射表反映邏輯頁(yè)的映射頁(yè)方式,本實(shí)施例中映射表包括與所有邏輯頁(yè)總數(shù)相等 數(shù)量個(gè)映射項(xiàng),每個(gè)映射項(xiàng)反映一個(gè)邏輯頁(yè)的一個(gè)映射頁(yè),如有256個(gè)邏輯頁(yè)時(shí),對(duì)應(yīng)256 個(gè)映射項(xiàng);每個(gè)映射項(xiàng)由扇區(qū)號(hào)(sector號(hào))和頁(yè)號(hào)(page號(hào))組成,且所有映射項(xiàng)中扇區(qū) 號(hào)占用的字節(jié)數(shù)相等及頁(yè)號(hào)占用的字節(jié)數(shù)相等,每個(gè)映射項(xiàng)反映的邏輯頁(yè)由該映射項(xiàng)在映 射表中的偏移確定,反映的映射頁(yè)由該映射項(xiàng)中的扇區(qū)號(hào)和頁(yè)號(hào)確定。每個(gè)頁(yè)的物理地址可以由其在Flash中所在sector及在sector內(nèi)的page號(hào)確 定,因此通過(guò)上述映射項(xiàng)的內(nèi)容(扇區(qū)號(hào)和頁(yè)號(hào))可以唯一索引到映射頁(yè)的物理地址。由于 每個(gè)映射項(xiàng)占用的字節(jié)數(shù)是相同的,因此可以通過(guò)映射項(xiàng)的偏移確定其反映的邏輯頁(yè)。具 體地,映射項(xiàng)中扇區(qū)號(hào)占用的字節(jié)數(shù),由對(duì)映射區(qū)劃分得到的頁(yè)組成的扇區(qū)個(gè)數(shù)總數(shù)確定, 映射項(xiàng)中頁(yè)號(hào)占用的字節(jié)數(shù)由組成一個(gè)扇區(qū)的頁(yè)數(shù)確定。優(yōu)選地,本實(shí)施例中映射表還包括第一字段(本實(shí)施例稱(chēng)Tl字段)和第二字段 (本實(shí)施例稱(chēng)T2字段),Tl字段用于標(biāo)識(shí)無(wú)效或有效,T2字段用于標(biāo)識(shí)映射表的流水號(hào),寫(xiě) 操作時(shí)使用的映射表即查找邏輯頁(yè)的第一映射頁(yè)的映射表,具體為T(mén)l字段標(biāo)識(shí)為有效的 映射表,如圖3所示,依照本發(fā)明另一實(shí)施例的Flash的回收方法,包括步驟S301,接收到寫(xiě)操作指令時(shí)確定寫(xiě)操作指向的邏輯頁(yè);步驟S302,查找所確定的邏輯頁(yè)在映射表中的第一映射頁(yè),該映射表具體為T(mén)l字 段標(biāo)識(shí)為有效的映射表,初始化時(shí)建立的映射表中Tl字段標(biāo)識(shí)為有效;步驟S303,根據(jù)查找到的第一映射頁(yè)中數(shù)據(jù)及寫(xiě)操作指令組織要寫(xiě)入的數(shù)據(jù);步驟S304,確定寫(xiě)入組織好的數(shù)據(jù)所需的空閑頁(yè)數(shù)目,及對(duì)映射區(qū)劃分得到的頁(yè) 中剩余空閑頁(yè)數(shù)目;步驟S305,根據(jù)所需的空閑頁(yè)數(shù)目和剩余空閑頁(yè)數(shù)目,確定是否滿足設(shè)定回收條 件,若不滿足,執(zhí)行步驟S306,否則執(zhí)行步驟S310 ;步驟S306,說(shuō)明當(dāng)前空閑頁(yè)夠用,從對(duì)所述映射區(qū)劃分得到的頁(yè)中,選取除指定頁(yè) 外的空閑頁(yè)作為第二映射頁(yè),在第二映射頁(yè)上寫(xiě)入組織好的數(shù)據(jù);步驟S307,新建一映射表,將Tl字段標(biāo)識(shí)為有效的映射表中除Tl字段以外內(nèi)容復(fù) 制到新建映射表中,并將新建映射表中T2字段加一;步驟S308,在所述第二映射頁(yè)上寫(xiě)入組織好的數(shù)據(jù)之后,將新建映射表中寫(xiě)操作
10指向的邏輯頁(yè)的第一映射頁(yè),修改為所述第二映射頁(yè);步驟S309,在新建映射表中寫(xiě)入標(biāo)識(shí)為有效的Tl字段,依據(jù)流水號(hào)將前一映射表 中的Tl字段標(biāo)識(shí)修改為無(wú)效,執(zhí)行完該寫(xiě)操作指令。步驟S310,確定滿足設(shè)定回收條件時(shí),從所述映射區(qū)中選取預(yù)回收扇區(qū);步驟S311,將預(yù)回收扇區(qū)中有效頁(yè)的數(shù)據(jù),重寫(xiě)到映射區(qū)中除預(yù)回收扇區(qū)外的扇 區(qū)中空閑頁(yè);步驟S312,新建一映射表,將Tl字段標(biāo)識(shí)為有效的映射表中除Tl字段以外內(nèi)容復(fù) 制到新建映射表中,并將新建映射表中T2字段加一;步驟S313,將預(yù)回收扇區(qū)中有效頁(yè)的數(shù)據(jù),重寫(xiě)到映射區(qū)中除預(yù)回收扇區(qū)外的扇 區(qū)中空閑頁(yè)之后,將所述預(yù)回收扇區(qū)中有效頁(yè)在新建映射表中的映射頁(yè),修改為重寫(xiě)該有 效頁(yè)數(shù)據(jù)的頁(yè);步驟S314,在新建映射表中寫(xiě)入標(biāo)識(shí)為有效的Tl字段,依據(jù)流水號(hào)將前一映射表 中的Tl字段標(biāo)識(shí)修改為無(wú)效,并執(zhí)行扇區(qū)回收操作,并返回步驟S306。上述Tl字段和T2字段用來(lái)在創(chuàng)建新映射表完成后和去使能前一個(gè)映射表之前斷 電后再次上電時(shí)判斷使用,操作過(guò)程保證了在寫(xiě)映射表斷電時(shí),再次上電時(shí)保證了數(shù)據(jù)不 會(huì)因斷電被找錯(cuò)。由于在映射表區(qū)中每執(zhí)行一次寫(xiě)操作指令,會(huì)涉及到映射表的新建,因此需要提 供一種對(duì)映射表區(qū)的回收機(jī)制,本實(shí)施例提供的Flash回收方法中,映射表存放在映射表 區(qū)時(shí),映射表區(qū)的區(qū)域包括至少兩個(gè)扇區(qū),每次新建映射表時(shí),還包括確定映射表區(qū)中僅有一個(gè)扇區(qū)未寫(xiě)滿,且當(dāng)前新建的映射表在該未寫(xiě)滿的扇區(qū)內(nèi) 不是第一個(gè)映射表,且確定此次寫(xiě)操作指令執(zhí)行過(guò)程中未對(duì)映射區(qū)中扇區(qū)執(zhí)行過(guò)回收操作 時(shí),對(duì)映射表區(qū)中寫(xiě)滿映射表的扇區(qū)執(zhí)行回收操作。這里不以最后一個(gè)未寫(xiě)滿的扇區(qū)的第一次被寫(xiě)為映射表區(qū)回收判斷條件,是為了 防止斷電后找不到前一個(gè)流水號(hào)的映射表引起數(shù)據(jù)混亂。優(yōu)選地,還包括確定映射表區(qū)中僅有一個(gè)扇區(qū)未寫(xiě)滿,且當(dāng)前新建的映射表在該 未寫(xiě)滿的扇區(qū)內(nèi)不是第一個(gè)映射表,且確定此次寫(xiě)操作指令執(zhí)行過(guò)程中對(duì)映射區(qū)中扇區(qū)執(zhí) 行過(guò)回收操作,在當(dāng)前新建映射后映射表區(qū)所有扇區(qū)已寫(xiě)滿時(shí),對(duì)映射表區(qū)中之前寫(xiě)滿映 射表的扇區(qū)執(zhí)行回收操作。上述方法從很大程度上避免了一起回收,如果到最后都沒(méi)有機(jī) 會(huì)回收映射表區(qū)域,那么強(qiáng)制一起回收,這種事件發(fā)生概率極小,對(duì)性能影響不會(huì)很大。本發(fā)明實(shí)施例一方面保證了 FLASH在執(zhí)行過(guò)程中不會(huì)因?yàn)樾枰厥斩档蛨?zhí)行 指令的速度,另一方面保證了在異常情況發(fā)生的時(shí)候能夠有效的恢復(fù)原數(shù)據(jù),在沒(méi)有特殊 額外斷電保護(hù)的情況下實(shí)現(xiàn)了斷電保護(hù)的效果。動(dòng)態(tài)回收空間的機(jī)制也使得FLASH的回收 效率更高。本實(shí)施例中確定空閑頁(yè)所依據(jù)的信息除了映射表中的映射頁(yè)以外,還利用了頁(yè)信 息表,頁(yè)信息表用于標(biāo)識(shí)頁(yè)的使用信息,所標(biāo)識(shí)的頁(yè)的使用信息通過(guò)上電時(shí)遍歷映射區(qū)獲 得,隨著頁(yè)的使用和回收及而更新,如在上述選取了空閑頁(yè)寫(xiě)入數(shù)據(jù)后,頁(yè)信息表中相應(yīng)地 將這些空閑頁(yè)標(biāo)識(shí)為已寫(xiě)入數(shù)據(jù)。優(yōu)選地,本實(shí)施例中確定映射區(qū)中空閑頁(yè)具體包括將映 射區(qū)中在頁(yè)信息表中標(biāo)識(shí)為空閑頁(yè)且未在映射表中作為映射頁(yè)的頁(yè),確空為映射區(qū)中的空 閑頁(yè)。
本實(shí)施例中在斷電再次上電后接收到寫(xiě)操作指令時(shí),確定寫(xiě)操作中查找邏輯頁(yè)的 第一映射頁(yè)使用的映射表,即確定有效映射表的步驟,具體包括依據(jù)流水號(hào)查找兩個(gè)最新建立的映射表;在這兩個(gè)映射表中1)較老的映射表中Tl字段標(biāo)識(shí)為無(wú)效,且較新的映射表中Tl字段標(biāo)識(shí)為有效時(shí), 確定較新的映射表為寫(xiě)操作使用的映射表;說(shuō)明上次寫(xiě)操作及修改映射表的步驟已完成,因此使用最新的映射表。2)兩個(gè)映射表中Tl字段均標(biāo)識(shí)為有效,確定較新的映射表為寫(xiě)操作使用的映射 表,并將較老的映射表Tl字段修改為無(wú)效;說(shuō)明上次寫(xiě)操作及修改映射表的步驟已完成但未將較老映射表修改為無(wú)效時(shí)發(fā) 生斷電,因此可以使用最新的映射表。3)較老的映射表中Tl字段標(biāo)識(shí)為有效,且較新的映射表中Tl字段未填寫(xiě)時(shí),確定 較老的映射表為寫(xiě)操作使用的映射表。這種情況下,斷電有可能是在數(shù)據(jù)寫(xiě)入未完成或在數(shù)據(jù)寫(xiě)入完成而映射關(guān)系未修 改時(shí)斷電,也可能是在映射關(guān)系修改完后斷電的,因?yàn)椴淮_定斷電時(shí)機(jī),因而采用較老的映 射表查找數(shù)據(jù)。優(yōu)選地,本實(shí)施例中上述映射表還包括校驗(yàn)字段X0R,所述校驗(yàn)字段XOR的取值由 所述映射表中除Tl字段外的內(nèi)容累加和確定,這樣,在上述確定寫(xiě)操作中使用的映射表的 步驟中,還包括對(duì)上述兩個(gè)最新的映射表,根據(jù)映射表中校驗(yàn)字段XOR進(jìn)行校驗(yàn)的步驟,如 對(duì)于3)這種情況,如果最新的映射表中的校驗(yàn)字段XOR與較老的映射表校驗(yàn)字段XOR不 同,說(shuō)明已完映射關(guān)系修改而填入新的校驗(yàn)字段,因此可以確定最新的映射表為有效的映 射表。這種操作過(guò)程保證了在寫(xiě)映射表斷電時(shí),再次上電,可以根據(jù)有效的映射表,及其信 息項(xiàng)中的校驗(yàn)值來(lái)判斷當(dāng)前最新的映射表是否正確,若不正確,采用流水號(hào)較老的用,保證 了數(shù)據(jù)不會(huì)因斷電被找錯(cuò)。在文件系統(tǒng)的操作中,對(duì)Flash的操作一般為讀操作、寫(xiě)操作和擦除操作。在上述 實(shí)施例給出的寫(xiě)操作的基礎(chǔ)上,優(yōu)選地,本實(shí)施例中映射表還包括V字段,所述V字段用于 記錄初始化時(shí)所有邏輯頁(yè)映射到的同一指定頁(yè),如圖4所示,還包括步驟S401,接收到刪除操作指令時(shí),確定刪除操作指向的邏輯頁(yè);步驟S402,查找刪除操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè);在采用上述動(dòng)態(tài)建立映射表的方式時(shí),這里使用的映射表為當(dāng)前Tl字段標(biāo)識(shí)有 效的映射表。步驟S403,在查找到的第一映射頁(yè)中寫(xiě)入使該第一映射頁(yè)視為空閑頁(yè)的數(shù)據(jù);現(xiàn)有Flash初始化時(shí)被格式化為全FF,因此數(shù)據(jù)為全FF的頁(yè)為被視為空閑頁(yè)。這 樣,本實(shí)施例中可以將要?jiǎng)h除的文件實(shí)際占用的頁(yè)執(zhí)行一次數(shù)據(jù)寫(xiě)入操作,即將該頁(yè)數(shù)據(jù) 修改為全FF。由于將該頁(yè)更新為空閑頁(yè),頁(yè)信息表該頁(yè)的使用信息由已寫(xiě)入數(shù)據(jù)更新為空 閑頁(yè)。步驟S404,將映射表中刪除操作指向的邏輯頁(yè)的第一映射頁(yè),修改為所述映射表 中V字段記錄的指定頁(yè)。這樣下次對(duì)該邏輯頁(yè)進(jìn)行寫(xiě)操作時(shí),發(fā)現(xiàn)當(dāng)前映射頁(yè)為空閑頁(yè)且之前的映射頁(yè)已 不在映射表中,說(shuō)明還未被使用而可以列入空閑頁(yè)中。
本發(fā)明實(shí)施例中擦除實(shí)事上只是一個(gè)虛擬操作,不會(huì)真正擦除。跟寫(xiě)的過(guò)程類(lèi)似, 只是將寫(xiě)的數(shù)據(jù)寫(xiě)為全FF,在寫(xiě)到整頁(yè)都為FF的時(shí)候,將該邏輯頁(yè)映射在指定頁(yè)上即可。 這樣即節(jié)約了擦的時(shí)間,又能夠極大地節(jié)約flash的存儲(chǔ)空間,提高了 FLASH的存儲(chǔ)效率, 并且能夠延長(zhǎng)Flash的回收時(shí)間,從性能、效率、和延長(zhǎng)使用壽命上都起到了作用。
本實(shí)施例中基于上述實(shí)施例中給出的操作Flash方法中的寫(xiě)操作,如圖5所示,還 包括步驟S501,接收到讀操作指令時(shí)確定讀操作指向的邏輯頁(yè);步驟S502,查找讀操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè);在采用上述動(dòng)態(tài)建立映射表的方式時(shí),這里使用的映射表為當(dāng)前Tl字段標(biāo)識(shí)有 效的映射表步驟S503,根據(jù)所述讀操作指令在所述第一映射頁(yè)的相應(yīng)位置讀取數(shù)據(jù)。因此實(shí) 現(xiàn)了 Flash的讀操作。下面仍以IM容量,用戶區(qū)為64K的Flash為例,說(shuō)明本發(fā)明實(shí)施例中上述映射表 的結(jié)構(gòu),如表1所示,該映射表中包括256個(gè)映射項(xiàng),由于每個(gè)扇區(qū)有16頁(yè),所以采用4bit 的頁(yè)號(hào);由于用戶區(qū)有16個(gè)扇區(qū),設(shè)定輔助區(qū)有3個(gè)扇區(qū),因此最少要5bit扇區(qū)號(hào),為了方 便表示,本實(shí)施例中扇區(qū)號(hào)采用一個(gè)字節(jié)。這樣每個(gè)映射項(xiàng)占用1.5個(gè)字節(jié),其中扇區(qū)號(hào)占 用前一個(gè)字節(jié),頁(yè)號(hào)占用后半個(gè)字節(jié)。每個(gè)映射項(xiàng)在映射表中的偏移除以1.5字節(jié),就是其 所代表的邏輯頁(yè),這樣映射項(xiàng)的前一個(gè)字節(jié)表示該邏輯頁(yè)的映射頁(yè)所在的sector,后半個(gè) 字節(jié)代表該邏輯頁(yè)的映射頁(yè)所在sector內(nèi)的page號(hào)。在初始化后的狀態(tài)下,由于Flash 全部區(qū)域?yàn)镕F狀態(tài),映射表的每一映射項(xiàng)的映射頁(yè)都指向第一個(gè)全FF的page。表1映射表的結(jié)構(gòu)
權(quán)利要求
1.一種Flash的回收方法,其特征在于,包括確定滿足設(shè)定回收條件時(shí),從映射區(qū)中選取預(yù)回收扇區(qū),所述映射區(qū)包括由Flash中 用戶區(qū)和設(shè)定輔助區(qū);將預(yù)回收扇區(qū)中有效頁(yè)的數(shù)據(jù),重寫(xiě)到映射區(qū)中除預(yù)回收扇區(qū)外的空閑頁(yè),所述有效 頁(yè)為已寫(xiě)入數(shù)據(jù)且在映射表中作為映射頁(yè)的頁(yè),所述映射表用于建立邏輯頁(yè)與映射頁(yè)的映 射關(guān)系;將所述預(yù)回收扇區(qū)中的有效頁(yè)在映射表中的映射頁(yè),修改為重寫(xiě)該有效頁(yè)數(shù)據(jù)的頁(yè), 并對(duì)預(yù)回收扇區(qū)執(zhí)行回收操作。
2.如權(quán)利要求1所述的方法,其特征在于,確定滿足設(shè)定回收條件之前,還包括接收到寫(xiě)操作指令時(shí)確定寫(xiě)操作指向的邏輯頁(yè),并查找所述寫(xiě)操作指向的邏輯頁(yè)在映 射表中的第一映射頁(yè);根據(jù)寫(xiě)操作指令及所述第一映射頁(yè)中數(shù)據(jù)組織要寫(xiě)入的數(shù)據(jù); 確定寫(xiě)入組織好的數(shù)據(jù)所需的空閑頁(yè)數(shù)目根據(jù)所需的空閑頁(yè)數(shù)目和映射區(qū)中的剩余 空閑頁(yè)數(shù)目,確定是否滿足設(shè)定回收條件; 對(duì)預(yù)回收扇區(qū)執(zhí)行回收操作之后,還包括從映射區(qū)中選取除指定頁(yè)外的空閑頁(yè)作為第二映射頁(yè),所述指定頁(yè)為在映射區(qū)中指定 的一個(gè)空閑頁(yè),初始化時(shí)用戶區(qū)的所有邏輯頁(yè)映射到同一指定頁(yè);在所述第二映射頁(yè)上寫(xiě)入組織好的數(shù)據(jù),并將映射表中寫(xiě)操作指向的邏輯頁(yè)的第一映 射頁(yè),修改為所述第二映射頁(yè)。
3.如權(quán)利要求2所述的方法,其特征在于,根據(jù)所需的空閑頁(yè)數(shù)目和剩余空閑頁(yè)數(shù)目, 確定是否滿足設(shè)定回收條件,具體包括所需的空閑頁(yè)數(shù)目與設(shè)定閾值的和不大于所述剩余空閑頁(yè)數(shù)目時(shí),確定不滿足設(shè)定回 收條件;所需的空閑頁(yè)數(shù)目與設(shè)定閾值的和大于所述剩余空閑頁(yè)數(shù)目時(shí),確定滿足設(shè)定回收條件。
4.如權(quán)利要求3所述的方法,其特征在于,所述設(shè)定閾值等于所述映射區(qū)中組成一個(gè) 扇區(qū)的頁(yè)數(shù)減一。
5.如權(quán)利要求1所述的方法,其特征在于,所述從映射區(qū)中選取預(yù)回收扇區(qū),具體包括獲取所述映射區(qū)中每個(gè)扇區(qū)中的無(wú)效頁(yè)個(gè)數(shù),所述無(wú)效頁(yè)為已寫(xiě)入數(shù)據(jù)且未在映射表 中被作為映射頁(yè)的頁(yè);選取映射區(qū)中無(wú)效頁(yè)最多的扇區(qū)為預(yù)回收扇區(qū)。
6.如權(quán)利要求2所述的方法,其特征在于,所述映射表還包括第一字段和第二字段,所 述第一字段用于標(biāo)識(shí)無(wú)效或有效,所述第二字段用于標(biāo)識(shí)映射表的流水號(hào),寫(xiě)操作時(shí)使用 的映射表為第一字段標(biāo)識(shí)為有效的映射表,在所述第二映射頁(yè)上寫(xiě)入組織好的數(shù)據(jù)時(shí),還 包括新建一映射表,將第一字段標(biāo)識(shí)為有效的映射表中除第一字段以外內(nèi)容復(fù)制到新建映 射表中,并將新建映射表中的第二字段加一;將映射表中寫(xiě)操作指向的邏輯頁(yè)的第一映射頁(yè),修改為第二映射頁(yè),包括在所述第二映射頁(yè)上寫(xiě)入組織好的數(shù)據(jù)之后,將新建映射表中寫(xiě)操作指向的邏輯頁(yè)的 第一映射頁(yè),修改為所述第二映射頁(yè);在新建映射表中寫(xiě)入標(biāo)識(shí)為有效的第一字段,依據(jù)流水號(hào)將前一映射表中的第一字段 標(biāo)識(shí)修改為無(wú)效。
7.如權(quán)利要求6所述的方法,其特征在于,將預(yù)回收扇區(qū)中的有效頁(yè)的數(shù)據(jù),重寫(xiě)到映 射區(qū)中除預(yù)回收扇區(qū)外的空閑頁(yè)時(shí),還包括 新建一映射表,將第一字段標(biāo)識(shí)為有效的映射表中除第一字段以外內(nèi)容復(fù)制到新建映 射表中,并將新建映射表中的第二字段加一;將所述預(yù)回收扇區(qū)中的有效頁(yè)在映射表中的映射頁(yè),修改為重寫(xiě)該有效頁(yè)數(shù)據(jù)的頁(yè), 具體包括將預(yù)回收扇區(qū)中的有效頁(yè)的數(shù)據(jù),重寫(xiě)到映射區(qū)中除預(yù)回收扇區(qū)外的扇區(qū)中空閑頁(yè)之 后,將所述預(yù)回收扇區(qū)中的有效頁(yè)在新建映射表中的映射頁(yè),修改為重寫(xiě)該有效頁(yè)數(shù)據(jù)的 頁(yè);在新建映射表中寫(xiě)入標(biāo)識(shí)為有效的第一字段,依據(jù)流水號(hào)將前一映射表中的第一字段 標(biāo)識(shí)修改為無(wú)效。
8.如權(quán)利要求6或7所述的方法,其特征在于,所述映射表存放在映射表區(qū)時(shí),所述映 射表區(qū)的區(qū)域包括至少兩個(gè)扇區(qū),每次新建映射表時(shí),還包括確定映射表區(qū)中僅有一個(gè)扇區(qū)未寫(xiě)滿,且當(dāng)前新建的映射表在該未寫(xiě)滿的扇區(qū)內(nèi)不是 第一個(gè)映射表,且確定此次寫(xiě)操作指令執(zhí)行過(guò)程中未對(duì)映射區(qū)中扇區(qū)執(zhí)行過(guò)回收操作或執(zhí) 行過(guò)回收操作但新建映射表會(huì)使映射表區(qū)寫(xiě)滿時(shí),對(duì)映射表區(qū)中寫(xiě)滿映射表的扇區(qū)執(zhí)行回 收操作。
9.一種操作Flash的回收裝置,其特征在于,包括預(yù)回收扇區(qū)選取單元,用于確定滿足設(shè)定回收條件時(shí),從映射區(qū)中選取預(yù)回收扇區(qū),所 述映射區(qū)由Flash中用戶區(qū)和設(shè)定輔助區(qū)組成;重寫(xiě)單元,用于將預(yù)回收扇區(qū)中的有效頁(yè)的數(shù)據(jù),重寫(xiě)到映射區(qū)中除預(yù)回收扇區(qū)外的 空閑頁(yè),所述有效頁(yè)為已寫(xiě)入數(shù)據(jù)且在映射表中作為映射頁(yè)的頁(yè),所述映射表用于建立邏 輯頁(yè)與映射頁(yè)的映射關(guān)系;第一映射關(guān)系修改單元,用于將所述預(yù)回收扇區(qū)中的有效頁(yè)在映射表中的映射頁(yè),修 改為重寫(xiě)該有效頁(yè)數(shù)據(jù)的頁(yè);第一回收單元,用于在將有效頁(yè)的數(shù)據(jù)重寫(xiě)到映射區(qū)中除預(yù)回收扇區(qū)外的空閑頁(yè)后, 對(duì)預(yù)回收扇區(qū)執(zhí)行回收操作。
10.如權(quán)利要求9所述的裝置,其特征在于,還包括第一映射頁(yè)選取單元,用于接收到寫(xiě)操作指令時(shí)確定寫(xiě)操作指向的邏輯頁(yè),并查找所 述寫(xiě)操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè);組織數(shù)據(jù)單元,用于根據(jù)寫(xiě)操作指令及查找到的第一映射頁(yè)中數(shù)據(jù)組織要寫(xiě)入的數(shù)據(jù);頁(yè)數(shù)確定單元,用于確定寫(xiě)入組織好的數(shù)據(jù)所需的空閑頁(yè)數(shù)目,及映射區(qū)中剩余空閑 頁(yè)數(shù)目,并觸發(fā)確定是否滿足設(shè)定回收條件;所述預(yù)回收扇區(qū)選取單元具體用于根據(jù)所需的空閑頁(yè)數(shù)目和剩余空閑頁(yè)數(shù)目,確定是否滿足設(shè)定回收條件;該裝置還包括第二映射頁(yè)選取單元,用于對(duì)預(yù)回收扇區(qū)執(zhí)行回收操作后,從映射區(qū)中選取除指定頁(yè) 外的空閑頁(yè)作為第二映射頁(yè),所述指定頁(yè)為在映射區(qū)中指定的一個(gè)空閑頁(yè),初始化時(shí)用戶 區(qū)的所有邏輯頁(yè)映射到同一指定頁(yè);第二映射關(guān)系修改單元,用于對(duì)預(yù)回收扇區(qū)執(zhí)行回收操作后,在選取的第二映射頁(yè)上 寫(xiě)入組織好的數(shù)據(jù),并將映射表中寫(xiě)操作指向的邏輯頁(yè)的第一映射頁(yè),修改為所述第二映 射頁(yè)。
11.如權(quán)利要求10所述的裝置,其特征在于,所述預(yù)回收扇區(qū)選取單元,具體用于在確 定所需的空閑頁(yè)數(shù)目與設(shè)定閾值的和不大于所述剩余空閑頁(yè)數(shù)目時(shí),確定不滿足設(shè)定回收 條件;確定所需的空閑頁(yè)數(shù)目與設(shè)定閾值的和大于所述剩余空閑頁(yè)數(shù)目時(shí),確定滿足設(shè)定 回收條件。
12.如權(quán)利要求9所述的裝置,其特征在于,所述預(yù)回收扇區(qū)選取單元,具體包括無(wú)效頁(yè)確定單元,用于獲取所述映射區(qū)中每個(gè)扇區(qū)中的無(wú)效頁(yè)個(gè)數(shù),所述無(wú)效頁(yè)為已 寫(xiě)入數(shù)據(jù)且未在映射表中被作為映射頁(yè)的頁(yè);預(yù)回收扇區(qū)確定單元,選取映射區(qū)中無(wú)效頁(yè)最多的扇區(qū)為預(yù)回收扇區(qū)。
13.如權(quán)利要求10所述的裝置,其特征在于,所述映射表還包括第一字段和第二字段, 所述第一字段用于標(biāo)識(shí)無(wú)效或有效,第二字段用于標(biāo)識(shí)映射表的流水號(hào),寫(xiě)操作時(shí)使用的 映射表為第一字段標(biāo)識(shí)為有效的映射表,還包括第一新建映射表單元,用于在所述第二映射頁(yè)上寫(xiě)入組織好的數(shù)據(jù)時(shí),新建一映射表, 將第一字段標(biāo)識(shí)為有效的映射表中除第一字段以外內(nèi)容復(fù)制到新建映射表中,并將新建映 射表中的第二字段加一;第一映射關(guān)系修改單元,具體包括第一修改單元,用于在所述第二映射頁(yè)上寫(xiě)入組織好的數(shù)據(jù)之后,將新建映射表中寫(xiě) 操作指向的邏輯頁(yè)的第一映射頁(yè),修改為所述第二映射頁(yè);第二修改單元,用于在新建映射表中寫(xiě)入標(biāo)識(shí)為有效的第一字段,依據(jù)流水號(hào)將前一 映射表中的第一字段標(biāo)識(shí)修改為無(wú)效。
14.如權(quán)利要求13所述的裝置,其特征在于,還包括第二新建映射表單元,用于將預(yù)回收扇區(qū)中的有效頁(yè)的數(shù)據(jù),重寫(xiě)到映射區(qū)中除預(yù)回 收扇區(qū)外的空閑頁(yè)時(shí),新建一映射表,將第一字段標(biāo)識(shí)為有效的映射表中除第一字段以外 內(nèi)容復(fù)制到新建映射表中,并將新建映射表中第二字段加一;第二映射關(guān)系修改單元,具體包括第三修改單元,用于在將預(yù)回收扇區(qū)中的有效頁(yè)的數(shù)據(jù),重寫(xiě)到映射區(qū)中除預(yù)回收扇 區(qū)外的空閑頁(yè)之后,將所述預(yù)回收扇區(qū)中的有效頁(yè)在新建映射表的映射頁(yè),修改為重寫(xiě)該 有效頁(yè)數(shù)據(jù)的頁(yè);第四修改單元,用于在新建映射表中寫(xiě)入標(biāo)識(shí)為有效的第一字段,依據(jù)流水號(hào)將前一 映射表中的第一字段標(biāo)識(shí)修改為無(wú)效。
15.如權(quán)利要求13或14所述的裝置,其特征在于,所述映射表存放在映射表區(qū)時(shí),所述 映射表區(qū)的區(qū)域包括至少兩個(gè)扇區(qū),還包括第二回收單元,用于每次新建映射表時(shí),確定映射表區(qū)中僅有一個(gè)扇區(qū)未寫(xiě)滿,且當(dāng)前新建的映射表在該未寫(xiě)滿的扇區(qū)內(nèi)不是第一個(gè)映射表,且確定此次寫(xiě)操作指令執(zhí)行過(guò)程中 未對(duì)映射區(qū)中扇區(qū)執(zhí)行過(guò)回收操作或執(zhí)行過(guò)回收操作但新建映射表會(huì)使映射表區(qū)寫(xiě)滿時(shí), 對(duì)映射表區(qū)中寫(xiě)滿映射表的扇區(qū)執(zhí)行回收操作。
全文摘要
本發(fā)明涉及一種Flash的回收方法和裝置,該方法中通過(guò)映射表中邏輯頁(yè)的映射頁(yè),將可操作的空間擴(kuò)展為由用戶區(qū)和設(shè)定輔助區(qū)組成的映射區(qū),確定滿足設(shè)定回收條件時(shí),從映射區(qū)中選取預(yù)回收扇區(qū);將預(yù)回收扇區(qū)中的有效頁(yè)的數(shù)據(jù),重寫(xiě)到映射區(qū)中其它扇區(qū)中空閑頁(yè),有效頁(yè)為已寫(xiě)入數(shù)據(jù)且在映射表作為映射頁(yè)的頁(yè);將預(yù)回收扇區(qū)中的有效頁(yè)在映射表中的映射頁(yè),修改為重寫(xiě)該有效頁(yè)數(shù)據(jù)的頁(yè),并對(duì)預(yù)回收扇區(qū)執(zhí)行回收操作。本發(fā)明優(yōu)化了現(xiàn)有Flash回收方法,提高了Flash的運(yùn)行速度。
文檔編號(hào)G06F12/02GK102004697SQ20101052077
公開(kāi)日2011年4月6日 申請(qǐng)日期2010年10月21日 優(yōu)先權(quán)日2010年10月21日
發(fā)明者孫婉麗, 藏宏偉 申請(qǐng)人:北京握奇數(shù)據(jù)系統(tǒng)有限公司