專利名稱:寫入數(shù)據(jù)的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)存儲(chǔ)領(lǐng)域,尤其涉及一種寫入數(shù)據(jù)的方法及裝置。
背景技術(shù):
閃存屬于存儲(chǔ)器類型的一種,因?yàn)槠渚哂锌梢苿?dòng)性、及保存在閃存上的數(shù)
據(jù)即便是在斷電情況下仍不會(huì)丟失的優(yōu)點(diǎn)而得到迅速的發(fā)展。在閃存中,寫Flash 操作只能把Flash中數(shù)據(jù)從T變到"0" (Bit);擦除操作可以把"0"變?yōu)?1", 但是擦除操作只能針對(duì)整個(gè)"存儲(chǔ)塊"為單位進(jìn)行的。例如 一個(gè)存儲(chǔ)塊的大 小一般為256字節(jié)到1024字節(jié)。
用戶在需要修改存儲(chǔ)器中某個(gè)存儲(chǔ)塊的數(shù)據(jù)時(shí), 一般是在空存儲(chǔ)塊中寫入 需要修改的數(shù)據(jù)。在現(xiàn)有技術(shù)中,通常采用按照一定的順序在一些空存儲(chǔ)塊中 找出 一個(gè)空存儲(chǔ)塊的方法,然后再將修改后的數(shù)據(jù)寫入到該空存儲(chǔ)塊中并擦除 修改前的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)。但是每一個(gè)存儲(chǔ)塊可以被寫入和擦除的次數(shù)都 是有限的,特別是當(dāng)用戶頻繁的修改某些數(shù)據(jù)或者當(dāng)空存儲(chǔ)塊個(gè)數(shù)不多時(shí),很 容易出現(xiàn)對(duì)序號(hào)排在順序較前的空存儲(chǔ)塊頻繁地執(zhí)行寫入或者擦除操作的情 況,久而久之就會(huì)使這些空存儲(chǔ)塊的受損程度增加,使用壽命降低,甚至可能 因此無法再次使用該存儲(chǔ)塊,導(dǎo)致整個(gè)存儲(chǔ)器的失效。
發(fā)明內(nèi)容
本發(fā)明的實(shí)施例提供一種寫入數(shù)據(jù)的方法及裝置。以便提高該存儲(chǔ)器中存 儲(chǔ)塊能夠使用的次數(shù)。
為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案 一種寫入^t據(jù)的方法,包括 接收到寫入新數(shù)據(jù)的指令; 定位需要修改的數(shù)據(jù)所在的數(shù)據(jù)存儲(chǔ)塊; 從所有的空存儲(chǔ)塊中隨機(jī)選出 一個(gè)空存儲(chǔ)塊;
將所述需要修改的數(shù)據(jù)與新數(shù)據(jù)結(jié)合生成更新數(shù)據(jù),將所述更新數(shù)據(jù)寫入所述隨機(jī)選出的空存儲(chǔ)塊中; 將定位到的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊。 一種寫入數(shù)據(jù)的裝置,包括 接收模塊,用于接收寫入新數(shù)據(jù)的指令; 定位模塊,用于定位需要修改的數(shù)據(jù)所在的數(shù)據(jù)存儲(chǔ)塊; 選出模塊,用于從所有的空存儲(chǔ)塊中隨機(jī)選出一個(gè)空存儲(chǔ)塊; 寫入模塊,用于將所述需要修改的數(shù)據(jù)與新數(shù)椐結(jié)合生成更新數(shù)據(jù),將所 述更新數(shù)據(jù)寫入所述隨機(jī)選出的空存儲(chǔ)塊中; 擦除模塊,用于將定位到的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊。 本發(fā)明提供的寫入數(shù)據(jù)的方法及裝置具有如下有點(diǎn)或有益效果通過采用 在空存儲(chǔ)塊中隨機(jī)選擇空存儲(chǔ)塊的技術(shù)方案,解決了現(xiàn)有技術(shù)中因?yàn)槭前错樞?進(jìn)行選擇空存儲(chǔ)塊所造成的容易出現(xiàn)對(duì)序號(hào)排在順序較前的空存儲(chǔ)塊頻繁地執(zhí) 行寫入或者擦除操作的技術(shù)問題,進(jìn)而取得了平衡存儲(chǔ)器中各個(gè)存儲(chǔ)塊受損程 度,增加存儲(chǔ)塊使用次數(shù)的有益效果。
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施 例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述 中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付
出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。 圖1為本發(fā)明實(shí)施例1寫入數(shù)據(jù)的方法的流程圖2為本發(fā)明實(shí)施例2寫入數(shù)據(jù)的裝置的框圖3為本發(fā)明實(shí)施例3寫入數(shù)據(jù)的方法的流程圖4為本發(fā)明實(shí)施例4寫入數(shù)據(jù)的方法的框圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清 楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是 全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造 性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
實(shí)施例1
本實(shí)施例公開一種寫入數(shù)據(jù)的方法,如圖1所示,該方法包括如下步驟 101,接收到上層(如計(jì)算機(jī)操作系統(tǒng))發(fā)來的向存儲(chǔ)塊中寫入新數(shù)據(jù)的指令。
102,在存儲(chǔ)器的所有數(shù)據(jù)存儲(chǔ)塊中查找出需要修改的數(shù)據(jù)所在的數(shù)據(jù)存儲(chǔ)塊。
103,在存儲(chǔ)器所有的空存儲(chǔ)塊中隨機(jī)的選出一個(gè)空存儲(chǔ)塊,并將該空存儲(chǔ) 塊作為選出的空存儲(chǔ)塊。
104, 將數(shù)據(jù)中需要修改部分進(jìn)行修改,并將修改后的新數(shù)據(jù)與數(shù)據(jù)相結(jié)合 成為更新數(shù)據(jù),并將該更新數(shù)據(jù)寫入上述選出的空存儲(chǔ)塊中。
105, 將101步驟中定位到的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)擦除,使該數(shù)據(jù)存儲(chǔ)塊成 為一個(gè)空存儲(chǔ)塊。。
本實(shí)施例提供的寫入數(shù)據(jù)的方法,通過采用將要寫入的數(shù)據(jù)寫入在隨機(jī)選 出的空存儲(chǔ)塊中的技術(shù)方案,取得了可實(shí)現(xiàn)均勻的對(duì)各個(gè)存儲(chǔ)塊執(zhí)行寫入操作 的有益效果。進(jìn)一步的,又因?yàn)槊總€(gè)存儲(chǔ)塊被執(zhí)行的寫入操作的次數(shù)可是均勻 的數(shù)值,所以克服了某些個(gè)別的存儲(chǔ)塊因?yàn)楸粓?zhí)行的寫入操作的次數(shù)過多,導(dǎo) 致的受損程度較嚴(yán)重,甚至無法再次使用的技術(shù)問題,同時(shí)也提高了存儲(chǔ)塊可 以使用的次數(shù)。
實(shí)施例2
本實(shí)施例公開一種寫入數(shù)據(jù)的裝置,如圖2所示,該裝置包括接收模塊 21,定位模塊22,選出模塊23,寫入模塊24,擦除模塊25。
接收模塊21用于接收寫入新數(shù)據(jù)的指令;定位模塊22用于定位需要修改 的數(shù)據(jù)所在的數(shù)據(jù)存儲(chǔ)塊;選出模塊23用于從所有的空存儲(chǔ)塊中隨機(jī)選出一個(gè)空存儲(chǔ)塊;寫入模塊24用于將所述數(shù)據(jù)與新數(shù)據(jù)結(jié)合后為更新數(shù)據(jù),并將所述 更新數(shù)據(jù)寫入所述隨機(jī)選出的空存儲(chǔ)塊中;擦除模塊25用于將定位到的數(shù)據(jù)存 儲(chǔ)塊擦除為空存儲(chǔ)塊。
本實(shí)施例提供的寫入數(shù)據(jù)的裝置便于寫入數(shù)據(jù)的方法的實(shí)現(xiàn),同時(shí)也可提 高例如閃存等,存儲(chǔ)塊容易受損的存儲(chǔ)器的使用壽命。
實(shí)施例3
本實(shí)施例結(jié)合對(duì)存儲(chǔ)塊中的數(shù)據(jù)進(jìn)行修改時(shí)的場(chǎng)景,具體描述寫入數(shù)據(jù)的 方法,如圖3所示,該方法包括如下步驟
為了闡述方^f更,假i殳在本實(shí)施例中閃存存儲(chǔ)區(qū)的物理地址為從0x0000000 到0x00007800,設(shè)每個(gè)存儲(chǔ)塊為0x100個(gè)字節(jié),則共有0x78個(gè)存儲(chǔ)塊。相應(yīng)地, 各存儲(chǔ)塊的物理塊號(hào)為0x00到0x77。在每個(gè)存儲(chǔ)塊的首字節(jié)用來標(biāo)記該存儲(chǔ)塊 邏輯塊號(hào),文件可以看做是多個(gè)存儲(chǔ)塊的集合并且文件中的存儲(chǔ)塊是根據(jù)各個(gè) 存儲(chǔ)塊的邏輯塊號(hào)聯(lián)結(jié)起來的。
根據(jù)存儲(chǔ)塊邏輯塊號(hào)的不同,在本實(shí)施例中存儲(chǔ)塊分為了兩種類型
空存儲(chǔ)塊,指邏輯塊號(hào)是0xFF的存儲(chǔ)塊??諗?shù)據(jù)區(qū)指空存儲(chǔ)塊中首字節(jié)(即 邏輯塊號(hào))以外的字節(jié)所組成的區(qū)域,則如果空數(shù)據(jù)區(qū)的所有字節(jié)都是OxFF, 該空存儲(chǔ)塊隨時(shí)可以寫入數(shù)據(jù);否則,該空存儲(chǔ)塊為不能直接寫入數(shù)據(jù)的空存 儲(chǔ)塊,需對(duì)該空存儲(chǔ)塊進(jìn)行擦除操作,即使該空存儲(chǔ)塊所有字節(jié)變?yōu)?xFF, 則空存儲(chǔ)塊就成為隨時(shí)可以寫入數(shù)據(jù)的空存儲(chǔ)塊。特別地,把不能直接寫入數(shù) 據(jù)的空存儲(chǔ)塊稱為"有記錄的空存儲(chǔ)塊"。
數(shù)據(jù)存儲(chǔ)塊,指邏輯塊號(hào)在0x01到0x78范圍內(nèi)的存儲(chǔ)塊。數(shù)據(jù)區(qū)數(shù)據(jù)指 數(shù)據(jù)存儲(chǔ)塊中首字節(jié)(即邏輯塊號(hào))以外的字節(jié)所存儲(chǔ)的數(shù)據(jù)。數(shù)據(jù)區(qū)數(shù)據(jù)被 認(rèn)為是有效的文件數(shù)據(jù)。
301,在存儲(chǔ)器通電后,統(tǒng)計(jì)存儲(chǔ)器中空存儲(chǔ)塊的總數(shù),并生成一個(gè)不大于該總數(shù)的隨機(jī)數(shù)。
在本實(shí)施例中具體為在內(nèi)存開辟一個(gè)變量N-O,設(shè)置指針P指向閃存存 儲(chǔ)區(qū)物理首地址,即P二0x00000000,指針P從0x00000000開始,到0x00007800 結(jié)束,P的步長(zhǎng)是0x100,即P-P+0x100,則P總是指向存儲(chǔ)塊邏輯塊號(hào)。判斷 P所指向的存儲(chǔ)塊邏輯塊號(hào)是否為OxFF。如果是OxFF,使N=N+1,當(dāng) P=0x00007800時(shí),N的值就是空存儲(chǔ)塊的總數(shù)。根據(jù)得到的空存儲(chǔ)塊的總數(shù)N 生成一個(gè)隨機(jī)數(shù)M。隨積Jt的M的范圍是K-lVK-N。 M可以是通過相關(guān)的一 個(gè)函數(shù)f(M)產(chǎn)生的,也可以單純的選出K-NK-N之間的整數(shù)。這兩種方法 都可以用于生成本實(shí)施例中的隨^L數(shù)。
302,判斷空存儲(chǔ)塊的總數(shù)是否與生成的隨機(jī)數(shù)相同,如果空存儲(chǔ)塊的總數(shù) 與生成的隨機(jī)數(shù)相同,則執(zhí)行步驟303;如果空存儲(chǔ)塊的總數(shù)與生成的隨機(jī)數(shù)不 同,則執(zhí)行步驟308。
在本實(shí)施例中具體為判斷M是否等于N,如果M等于N則執(zhí)行步驟303; 如果M不等于N則執(zhí)行步驟308。
當(dāng)存儲(chǔ)器中空存儲(chǔ)塊的個(gè)數(shù)很少時(shí),根據(jù)空存儲(chǔ)塊總數(shù)生成的隨機(jī)數(shù),與 空存儲(chǔ)塊總數(shù)相等的可能性就會(huì)變大。在本實(shí)施例中,利用該可能性,通過采 用判斷空存儲(chǔ)塊的總數(shù)是否與隨機(jī)數(shù)相等的方案,取得了可了解到空存儲(chǔ)塊目 前總數(shù)狀況的技術(shù)效果。而且在本實(shí)施例的此過程中,計(jì)算機(jī)生成的隨機(jī)數(shù)就 相當(dāng)于用戶設(shè)置的一個(gè)預(yù)設(shè)數(shù)值,該預(yù)設(shè)數(shù)值相當(dāng)于一個(gè)門限,可了解到當(dāng)前 空存儲(chǔ)塊總數(shù)是否處于很少的狀況,以便釆取相應(yīng)的措施。
303,統(tǒng)計(jì)存儲(chǔ)器中數(shù)據(jù)存儲(chǔ)塊的總數(shù)并隨機(jī)生成一個(gè)不大于該數(shù)據(jù)存儲(chǔ)塊 總數(shù)的隨機(jī)數(shù);同時(shí)根據(jù)301步驟中統(tǒng)計(jì)出的空存儲(chǔ)塊的總數(shù),隨機(jī)生成一個(gè) 不大于該空存儲(chǔ)塊總數(shù)的隨機(jī)數(shù)。
在本實(shí)施例中具體為申請(qǐng)兩個(gè)內(nèi)存變量A和B。用A記錄在存儲(chǔ)器中查 找到的數(shù)據(jù)存儲(chǔ)塊的總數(shù),用B記錄在存儲(chǔ)器中查找到的空存儲(chǔ)塊的總數(shù)(在 本實(shí)施例中使B=N既可),并根據(jù)A的值生成一個(gè)隨機(jī)數(shù)a, a的范圍是1<= a<=A;根據(jù)B的值生成一個(gè)隨機(jī)數(shù)b, b的范圍是1<= b<=B。
304,根據(jù)數(shù)據(jù)存儲(chǔ)塊總數(shù)生成的隨機(jī)數(shù)在數(shù)據(jù)存儲(chǔ)塊中選出 一個(gè)數(shù)據(jù)存儲(chǔ)塊;同時(shí)根據(jù)空存儲(chǔ)塊總數(shù)生成的隨機(jī)數(shù)在空存儲(chǔ)塊中選出一個(gè)目標(biāo)空存儲(chǔ)塊。 在本實(shí)施例中具體為在內(nèi)存開辟一個(gè)局部變量N4 = 0,設(shè)置指針T指向 閃存存儲(chǔ)區(qū)物理首地址,即T二0x00000000,指4十T從0x00000000開始,到 0x00007800結(jié)束,指針T的步長(zhǎng)是0x100,即T:T+0x100,則指針T總是指向 存儲(chǔ)塊邏輯塊號(hào)。判斷指針T當(dāng)前所指向的存儲(chǔ)塊邏輯塊號(hào)是否在0x01至0x78 范圍內(nèi)。如果是,則N4-N4+1。當(dāng)N4-a的時(shí)候,指針T當(dāng)前所指向的數(shù)據(jù)存 儲(chǔ)塊即為根據(jù)隨機(jī)數(shù)a所選出的數(shù)據(jù)存儲(chǔ)塊n4,并選定該數(shù)據(jù)存儲(chǔ)塊n4。
同時(shí),在內(nèi)存開辟一個(gè)局部變量N3 = 0,設(shè)置指針S指向閃存存儲(chǔ)區(qū)物理 首地址,即S-Ox00000000,指針S從0x00000000開始,到0x00007800結(jié)束, 指針S的步長(zhǎng)是0x100,即S-S+0x100,則指針S總是指向存儲(chǔ)塊邏輯塊號(hào)。 判斷指針S當(dāng)前所指向的存儲(chǔ)塊邏輯塊號(hào)是否為OxFF。如果是OxFF,則 N3=N3+1。當(dāng)N3-b的時(shí)候,指針S所對(duì)應(yīng)的空存儲(chǔ)塊即為根據(jù)隨機(jī)數(shù)b所選 出的空存儲(chǔ)塊n3,并選定該空存儲(chǔ)塊n3,即為目標(biāo)空存儲(chǔ)塊n3。
本實(shí)施例303, 304步驟中關(guān)于隨機(jī)選出的空存儲(chǔ)塊n3的過程也可以釆用 下述方法實(shí)現(xiàn)
本方法主要通過建立空存儲(chǔ)塊列表來實(shí)現(xiàn)隨機(jī)查找一個(gè)空存儲(chǔ)塊的目的。 3031,遍歷存儲(chǔ)器中所有的存儲(chǔ)塊,查找到目前存儲(chǔ)器中所有空存儲(chǔ)塊。 3041,建立一個(gè)包含有查找到的所有空存儲(chǔ)塊的地址列表或所有空存儲(chǔ)塊
的物理塊號(hào)列表,從所述列表中隨機(jī)選出一個(gè)空存儲(chǔ)塊。
在本實(shí)施例中,具體方法可為設(shè)置指針P指向閃存存儲(chǔ)器中物理地址最
小的存儲(chǔ)塊的首地址。那么P-P+i"0xl00)就表示指向第i+l個(gè)存儲(chǔ)塊的首地址 (因?yàn)槊總€(gè)存儲(chǔ)塊的長(zhǎng)度為0x100字節(jié),所以指針P總是指向每個(gè)存儲(chǔ)塊首地
址)。i的值從0到0x77,共0x78個(gè)存儲(chǔ)塊,則可以通過i的值來找到一個(gè)存儲(chǔ)
塊的首地址。
在內(nèi)存中開辟一個(gè)數(shù)組freeblock[78]用來記錄空存儲(chǔ)塊的i的值。讓i的值 從0遍歷到0x77,判斷i值所對(duì)應(yīng)的存儲(chǔ)塊是否為空存儲(chǔ)塊,如果是空存儲(chǔ)塊, 則將i的值記錄到freeblock中。比如當(dāng)前時(shí)刻,空存儲(chǔ)塊的個(gè)數(shù)為5個(gè),對(duì)應(yīng) 的i值分別是0x2, 0x12, 0x33, 0x40, 0x59,那么freeblock
=0x2, freeblock[l]=0x12, freeblock[2]= 0x33, freeblock[3]= Ox 40, freeblock[4]= Ox 59,產(chǎn)生一個(gè)1 5 之間的隨機(jī)數(shù)。比如這個(gè)隨機(jī)數(shù)是2,那么就可以通過找freeblock數(shù)組第2個(gè) 值或者第5-2個(gè)值(即找freeblock[2-l]或者找freeblock[5-2],5是空存儲(chǔ)塊的個(gè) 數(shù)),從而得到一個(gè)空存儲(chǔ)塊的i值。也可以根據(jù)i值,i"xlOO就是這個(gè)空存儲(chǔ) 塊的首地址。所以可以在數(shù)組freeblock中直接記錄空存儲(chǔ)塊的首地址,然后從 中隨機(jī)選出一個(gè)空存儲(chǔ)塊。
305, 判斷所述隨機(jī)選出的空存儲(chǔ)塊是否為有記錄的空存儲(chǔ)塊,如果判斷的 結(jié)果為是,則執(zhí)行步驟306;否則,直接執(zhí)行步驟307。
在本實(shí)施例中具體為判斷空存儲(chǔ)塊n3是否為有記錄的空存儲(chǔ)塊。
306, 擦除該有記錄的空存儲(chǔ)塊中存儲(chǔ)的數(shù)據(jù),使該有記錄的空存儲(chǔ)塊為空 存儲(chǔ)塊。
307,將選出的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)寫入到選出的空存儲(chǔ)塊中,然后擦除選 出的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)。
在本實(shí)施例中具體為將數(shù)據(jù)存儲(chǔ)塊n4中存儲(chǔ)的數(shù)據(jù)全部讀入到內(nèi)存中, 然后將邏輯塊號(hào)(即首字節(jié))以外的數(shù)據(jù)寫入到通過305步驟隨機(jī)選出的空存 儲(chǔ)塊n3中,當(dāng)該數(shù)據(jù)全部寫完后,再將數(shù)據(jù)存儲(chǔ)塊n4的邏輯塊號(hào)寫入空存儲(chǔ) 塊n3中,同時(shí)擦除數(shù)據(jù)存儲(chǔ)塊n4中存儲(chǔ)的數(shù)據(jù)。即將空存儲(chǔ)塊n3變成數(shù)據(jù)存 儲(chǔ)塊n3,將數(shù)椐存儲(chǔ)塊n4變成空存儲(chǔ)塊n4。
本實(shí)施例提供的方案因?yàn)榭紤]到了有些數(shù)據(jù)存儲(chǔ)塊可能一旦被寫入了長(zhǎng)期 有效的數(shù)據(jù),就很少被執(zhí)行寫入操作的情況,所以在存儲(chǔ)器通電后,采用了可 以將隨機(jī)選擇的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)轉(zhuǎn)移到隨機(jī)選擇的空存儲(chǔ)塊中的技術(shù)方 案,那么即便是數(shù)據(jù)存儲(chǔ)塊被寫入長(zhǎng)期有效的數(shù)據(jù),仍舊可以將該數(shù)據(jù)存儲(chǔ)塊 變成空存儲(chǔ)塊,使其參與到可被執(zhí)行寫入數(shù)據(jù)操作的場(chǎng)景中,取得了可以使存 儲(chǔ)塊被執(zhí)行寫入操作的次數(shù)得到均衡的有益效果。
308,設(shè)置計(jì)數(shù)器并使該計(jì)數(shù)器的初始計(jì)數(shù)值為零,同時(shí)等待上層(如計(jì) 算機(jī)操作系統(tǒng))發(fā)出寫入新數(shù)據(jù)的指令。
在本實(shí)施例中具體為在內(nèi)存中申請(qǐng)一個(gè)變量J,用來記錄修改存儲(chǔ)器的次 數(shù),并設(shè)置J的初始值為O,然后等待上層發(fā)出的需要修改數(shù)據(jù)的指令。每當(dāng)對(duì)存儲(chǔ)器中的存儲(chǔ)塊執(zhí)行一次寫入操作時(shí),計(jì)數(shù)器則在初始值上累計(jì) 加一,以便記錄存儲(chǔ)器被執(zhí)行過的寫入操作的次數(shù)。
309, 接收到上層發(fā)來的寫入新數(shù)據(jù)的指令并查找到需要修改的數(shù)據(jù)所在的 數(shù)椐存儲(chǔ)塊。
在本實(shí)施例中具體為若需要修改的數(shù)據(jù)所在的數(shù)據(jù)存儲(chǔ)塊x邏輯塊號(hào)為 X,設(shè)置指針P指向閃存存儲(chǔ)區(qū)物理首地址,即P-0x00000000,指針P從 0x00000000開始,到0x00007800結(jié)束,P的步長(zhǎng)是0x100,即P-P+0x100,則 P總是指向存儲(chǔ)塊邏輯塊號(hào)。判斷P當(dāng)前所指向的存儲(chǔ)塊邏輯塊號(hào)是否為x。如 果是,則該數(shù)據(jù)存儲(chǔ)塊為需要修改的數(shù)據(jù)所在的數(shù)據(jù)存儲(chǔ)塊x。如果不是,則 P-P+0x100繼續(xù)查找。
在本實(shí)施例中,也可以通過物理塊號(hào)來查找到需要修改的數(shù)據(jù)所在的數(shù)據(jù) 存儲(chǔ)塊,假如該需要修改得數(shù)據(jù)存儲(chǔ)塊的物理塊號(hào)為Y,則令一個(gè)指針P從 0x00000000開始,到0x00007800結(jié)束,P的步長(zhǎng)是0x100,即使P-Y^x100, P所對(duì)應(yīng)的存儲(chǔ)塊即為需要修改得數(shù)據(jù)存儲(chǔ)塊。
310, 統(tǒng)計(jì)存儲(chǔ)器中空存儲(chǔ)塊的總數(shù),并生成一個(gè)不大于該空存儲(chǔ)塊總數(shù)范 圍內(nèi)的隨才幾#:。
在本實(shí)施例中具體為在內(nèi)存開辟一個(gè)變量N 2= 0,設(shè)置指針P指向閃存存 卡者區(qū)物理首地址,即P-0xOO0O0O00,指針P從0x00000000開始,到0x00007800 結(jié)束,P的步長(zhǎng)是0x100,即P-P+0x100,則P總是指向存儲(chǔ)塊邏輯塊號(hào)。判斷 P所指向的存儲(chǔ)塊邏輯塊號(hào)是否為0xFF,如果是0xFF,則使N2-N2+l。當(dāng) P=0x00007800時(shí),N2的值就是空存儲(chǔ)塊的總數(shù)。根據(jù)得到的空存儲(chǔ)塊的總數(shù) N2生成一個(gè)隨機(jī)數(shù)w。隨機(jī)數(shù)w的范圍是1<= w<=N2。 w可以是通過相關(guān)的一 個(gè)函數(shù)f(w)產(chǎn)生的,也可以單純的選出K-w〈二N2之間的整數(shù)。這兩種方法 都可以用于生成本實(shí)施例中的隨才幾數(shù)。
311,在存儲(chǔ)器中查找空存儲(chǔ)塊,對(duì)查找到的每一個(gè)空存儲(chǔ)塊進(jìn)行計(jì)數(shù),當(dāng) 計(jì)數(shù)的值與隨機(jī)數(shù)相等時(shí),選定當(dāng)前查找到的空存儲(chǔ)塊,并將該空存儲(chǔ)塊作為 隨機(jī)選出的空存儲(chǔ)塊。
在本實(shí)施例中具體為在內(nèi)存開辟一個(gè)局部變量N5二0,設(shè)置指針Y指向閃存存儲(chǔ)區(qū)物理首地址,即Y二0x00000000,指針Y從0x00000000開始,到 0x00007800結(jié)束,指針Y的步長(zhǎng)是0x100,即Y=Y+0xl00,則指針S總是指向 存儲(chǔ)塊邏輯塊號(hào)。判斷指針Y當(dāng)前所指向的存儲(chǔ)塊邏輯塊號(hào)是否為0xFF。如果 是OxFF ,則N5=N5+1 。當(dāng)N5 = w的時(shí)候,指針Y所對(duì)應(yīng)的空存儲(chǔ)塊即為根據(jù) 隨機(jī)數(shù)w所選出的空存儲(chǔ)塊n5,并選定該空存儲(chǔ)塊n5。
本實(shí)施例310, 311步驟中關(guān)于隨機(jī)選出的空存儲(chǔ)塊n5的過程也可以采用 通過建立空存儲(chǔ)塊列表來實(shí)現(xiàn)隨機(jī)查找一個(gè)空存儲(chǔ)塊的方法。具體的操作方法 與步驟3031和3041的方法相同,在這里不在進(jìn)行贅述。
312, 判斷隨機(jī)選出的空存儲(chǔ)塊是否為有記錄的空存儲(chǔ)塊,如果是,則執(zhí)行 步驟313;如果否,則直接執(zhí)行步驟314。
313, 擦除該有記錄的空存儲(chǔ)塊中存儲(chǔ)的數(shù)據(jù),使該有記錄的空存儲(chǔ)塊成為 空存儲(chǔ)塊。
314, 將309步驟中查找到的數(shù)據(jù)存儲(chǔ)塊中存儲(chǔ)的數(shù)據(jù)讀入內(nèi)存中,保持邏 輯塊號(hào)不變,同時(shí)在內(nèi)存中將數(shù)據(jù)區(qū)中需要修改的數(shù)據(jù)修改完,然后先將該修 改完數(shù)據(jù)與數(shù)據(jù)區(qū)數(shù)據(jù)相結(jié)合生成的更新數(shù)據(jù)(不含邏輯塊號(hào))寫入通過312 步驟隨機(jī)選出的空存儲(chǔ)塊中,再將邏輯塊號(hào)寫入到該空存儲(chǔ)塊中。
在本實(shí)施例中,采用了先將更新數(shù)據(jù)寫入所述空存儲(chǔ)塊,后將邏輯塊號(hào)寫 入所述空存儲(chǔ)塊的技術(shù)方案,取得了避免在寫入過程中,因?yàn)榘l(fā)生掉電所導(dǎo)致 寫入數(shù)據(jù)不全,使該空存儲(chǔ)塊處于"有記錄的空存儲(chǔ)塊"狀態(tài)的有益效果,同 時(shí)也使該有記錄的空存儲(chǔ)塊不會(huì)錯(cuò)誤的成為數(shù)據(jù)存儲(chǔ)塊。
315, 擦除309步驟中查找到的數(shù)據(jù)存儲(chǔ)塊中存儲(chǔ)的數(shù)據(jù),使該數(shù)據(jù)存儲(chǔ)塊 成為空存儲(chǔ)塊。
314和315步驟在本實(shí)施例中具體為將數(shù)據(jù)存儲(chǔ)塊x的數(shù)據(jù)讀入內(nèi)存中, 保持邏輯塊號(hào)不變的同時(shí),在內(nèi)存中將數(shù)據(jù)區(qū)中需要修改的數(shù)據(jù)修改完,先將
修改后數(shù)據(jù)與數(shù)據(jù)區(qū)數(shù)椐結(jié)合生成的更新數(shù)據(jù)全部寫入到通過步驟311查找到 的空存儲(chǔ)塊n5中,再將數(shù)據(jù)存儲(chǔ)塊x邏輯塊號(hào)寫入到該空存儲(chǔ)塊n5中(即把 空存儲(chǔ)塊n5變成數(shù)據(jù)存儲(chǔ)塊n5 ),同時(shí)擦除數(shù)據(jù)存儲(chǔ)塊x中存儲(chǔ)的數(shù)據(jù),使數(shù) 據(jù)存儲(chǔ)塊x成為空存儲(chǔ)塊(即使該數(shù)據(jù)存儲(chǔ)塊的所有字節(jié)變?yōu)镺xFF)。316,對(duì)所設(shè)置的計(jì)數(shù)器的計(jì)數(shù)值上加一。 在本實(shí)施例中具體為使J-J+1。
317,判斷計(jì)數(shù)器的計(jì)數(shù)值是否達(dá)到預(yù)定次數(shù),如果判斷的結(jié)果為達(dá)到預(yù)定 次數(shù),則執(zhí)行步驟318;如果判斷的結(jié)果為未達(dá)到預(yù)定次數(shù),則本次操作結(jié)束。
在本實(shí)施例中具體為設(shè)置預(yù)設(shè)次數(shù)為30,判斷J值是否等于30,如果J 值等于30,則執(zhí)行步驟318;否則,執(zhí)行步驟324。
318,統(tǒng)計(jì)存儲(chǔ)器中數(shù)椐存儲(chǔ)塊的總數(shù)并隨機(jī)生成一個(gè)不大于該數(shù)據(jù)存儲(chǔ)塊 總數(shù)的隨機(jī)數(shù);同時(shí)統(tǒng)計(jì)存儲(chǔ)器中空存儲(chǔ)塊的總數(shù)并隨機(jī)生成一個(gè)不大于該空 存儲(chǔ)塊總數(shù)的隨機(jī)數(shù)。
在本實(shí)施例中具體方法與303步驟中的具體實(shí)施方式
相同。
319,根據(jù)數(shù)據(jù)存儲(chǔ)塊總數(shù)生成的隨機(jī)數(shù)在數(shù)據(jù)存儲(chǔ)塊中選出一個(gè)數(shù)據(jù)存儲(chǔ) 塊;同時(shí)根據(jù)空存儲(chǔ)塊總數(shù)生成的隨機(jī)數(shù)在空存儲(chǔ)塊中選出一個(gè)目標(biāo)空存儲(chǔ)塊。
在本實(shí)施例中具體方法與304步驟中的具體實(shí)施方式
相同。
320,判斷該隨機(jī)選出的空存儲(chǔ)塊是否為有記錄的空存儲(chǔ)塊,如果是,則執(zhí) 行步驟321;如杲否,則直接執(zhí)行步驟322。
在本實(shí)施例中具體方法與305步驟中的具體實(shí)施方式
相同。
321, 擦除該有記錄的空存儲(chǔ)塊中存儲(chǔ)的數(shù)據(jù),使該有記錄的空存儲(chǔ)塊為空 存儲(chǔ)塊。
在本實(shí)施例中具體方法與306步驟中的具體實(shí)施方式
相同。
322, 將選出的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)寫入到選出的空存儲(chǔ)塊中,然后擦除選 出的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù),使該數(shù)據(jù)存儲(chǔ)塊成為空存儲(chǔ)塊。
在本實(shí)施例中具體方法與307步驟中的具體實(shí)施方式
相同。 當(dāng)計(jì)數(shù)器的值到達(dá)預(yù)定次數(shù)時(shí),說明存儲(chǔ)器被執(zhí)行的寫入操作的次數(shù)已經(jīng) 達(dá)到了預(yù)設(shè)的次數(shù),此時(shí)就代表了目前存儲(chǔ)器中存在的空儲(chǔ)塊因被執(zhí)行了預(yù)定 次數(shù)的寫入操作而受到了 一定程度上的損傷。為了降低目前存在的空存儲(chǔ)塊受 損程度,本實(shí)施例采用將隨機(jī)選出的數(shù)據(jù)存儲(chǔ)塊中的數(shù)據(jù)轉(zhuǎn)移到隨機(jī)選出的空 存儲(chǔ)塊中的技術(shù)方案,在降低了目前空存儲(chǔ)塊受損程度的同時(shí)也取得了可均衡 各個(gè)存儲(chǔ)塊被執(zhí)行寫入操作次數(shù)的有益效果。323,將計(jì)數(shù)器的計(jì)數(shù)值清零。 在本實(shí)施例中具體為使J-0。 324,結(jié)束流程。
本實(shí)施例提供的方案,通過采用將需要修改的數(shù)據(jù)寫入隨機(jī)選出的空存儲(chǔ) 塊的技術(shù)方案,克服了現(xiàn)有技術(shù)中,因?yàn)槭前错樞蜻x出空存儲(chǔ)塊而導(dǎo)致的容易 出現(xiàn)對(duì)序號(hào)排在順序較前的空存儲(chǔ)塊頻繁地執(zhí)行寫入操作的情況,取得了可使 對(duì)存儲(chǔ)器中各個(gè)存儲(chǔ)塊均衡的執(zhí)行寫入操作的技術(shù)效果,提高了存儲(chǔ)塊可使用 的次數(shù),也相當(dāng)于延長(zhǎng)存儲(chǔ)器可使用的壽命。而且在寫入數(shù)據(jù)的過程中先寫數(shù) 據(jù)后寫入邏輯塊號(hào),因而具有良好的防掉電功能。
實(shí)施例4
本實(shí)施例具體描述了一種寫入數(shù)據(jù)的裝置,如圖4所示,該裝置包括第 二判斷模塊401,第二隨機(jī)交換模塊402,接收模塊403,定位模塊404,選出 模塊405,第一判斷模塊408,第一清除模塊409,寫入模塊406,擦除模塊407, 累計(jì)模塊410,第三判斷模塊411,第三隨機(jī)交換模塊412。
第二判斷模塊401用于在存儲(chǔ)器通電后,判斷當(dāng)前空存儲(chǔ)塊總數(shù)是否小于 預(yù)設(shè)數(shù)值;第二隨機(jī)交換模塊402用于當(dāng)前空存儲(chǔ)塊總數(shù)小于預(yù)設(shè)數(shù)值時(shí),將 隨機(jī)選出的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)寫入隨機(jī)選出的目標(biāo)空存儲(chǔ)塊中,并將所述隨 機(jī)選出的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊;接收模塊403用于接收寫入新數(shù)據(jù)的指 令;定位模塊404用于定位需要修改的數(shù)據(jù)所在的數(shù)據(jù)存儲(chǔ)塊;選出模塊405 用于從所有的空存儲(chǔ)塊中隨機(jī)選出一個(gè)空存儲(chǔ)塊;第一判斷模塊408用于判斷 所述隨機(jī)選出的數(shù)據(jù)存儲(chǔ)塊是否為有記錄的空存儲(chǔ)塊;第一清除模塊409用于 當(dāng)判斷模塊判斷是時(shí),將所述有記錄的空存儲(chǔ)塊擦除為空存儲(chǔ)塊;寫入模塊406 用于將所述數(shù)據(jù)與新數(shù)據(jù)結(jié)合為更新數(shù)據(jù),將所述更新l史據(jù)寫入所述隨機(jī)選出 的空存儲(chǔ)塊中;擦除模塊407用于擦除定位到的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù);累計(jì)模 塊410用于將每次對(duì)存儲(chǔ)塊執(zhí)行的寫入操作的次數(shù)累計(jì)到寫入操作的總次數(shù)中; 第三判斷模塊411用于判斷所述寫入操作的總次數(shù)是否大于預(yù)設(shè)次數(shù);第三隨 機(jī)交換模塊412用于當(dāng)寫入操作的總次數(shù)大于預(yù)設(shè)次數(shù)時(shí),將隨機(jī)選出的數(shù)據(jù)
存儲(chǔ)塊里的數(shù)據(jù)寫入隨機(jī)選出的目標(biāo)空存儲(chǔ)塊中,并將所述隨機(jī)選出的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊,同時(shí)將寫入操作的總次數(shù)歸零。
在本實(shí)施例中,第二隨機(jī)交換模塊402包括第一選出單元4021,第二選 出單元4022,第二判斷單元4025,第二清除單元4026,第二寫入單元4023, 第二擦除單元4024。
第一選出單元4021用于從所有的數(shù)據(jù)存儲(chǔ)塊中隨機(jī)選出 一個(gè)數(shù)據(jù)存儲(chǔ)塊; 第二選出單元4022用于從所有的空存儲(chǔ)塊中隨機(jī)選出 一個(gè)目標(biāo)空存儲(chǔ)塊;笫二 判斷單元4025用于判斷所述目標(biāo)空存儲(chǔ)塊是否為有記錄的空存儲(chǔ)塊;第二清除 單元4026用于當(dāng)?shù)诙袛鄦卧袛嗍菚r(shí),將有記錄的空存儲(chǔ)塊擦除為空存儲(chǔ)塊; 第二寫入單元4023用于將所述數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)寫入所述目標(biāo)空存儲(chǔ)塊中; 第二擦除單元4024用于將隨機(jī)選出的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊。
其中,第一選出單元4021包括第一統(tǒng)計(jì)子單元40210,第一生成子單元 40211,第一定位子單元40212。
第一統(tǒng)計(jì)子單元40210用于統(tǒng)計(jì)數(shù)據(jù)存儲(chǔ)塊的個(gè)數(shù);第一生成子單元40211 用于生成一個(gè)不大于所有數(shù)據(jù)存儲(chǔ)塊總數(shù)的隨機(jī)數(shù);第一定位子單元40212,用 于利用所述隨機(jī)數(shù)定位一個(gè)數(shù)據(jù)存儲(chǔ)塊。
特別的,本實(shí)施例的裝置中第 一選出單元4021可由第二查找子單元來替換; 相應(yīng)地,第二選出單元4022可由第二建立子單元;相應(yīng)地,第二寫入單元4023 可由第二選出子單元來替換。
第二查找子單元用于遍歷所有的存儲(chǔ)塊查找所有空存儲(chǔ)塊;第二建立子單 元用于建立一個(gè)包含有查找到的所有空存儲(chǔ)塊的地址列表或所有空存儲(chǔ)塊的物 理塊號(hào)列表;第二選出子單元用于從所述列表中隨機(jī)選出一個(gè)目標(biāo)空存儲(chǔ)塊。
在本實(shí)施例中,該第二選出單元4022包括第二統(tǒng)計(jì)子單元40221,第二 生成子單元40222,第二定位子單元40223。
第二統(tǒng)計(jì)子單元40221用于統(tǒng)計(jì)空存儲(chǔ)塊的個(gè)數(shù);第二生成子單元40222 用于生成一個(gè)不大于所有空存儲(chǔ)塊總數(shù)的隨機(jī)數(shù);第二定位子單元40223用于 利用所述隨機(jī)數(shù)定位一個(gè)目標(biāo)空存儲(chǔ)塊。
在本實(shí)施例中,選出模塊405包括統(tǒng)計(jì)單元4051,生成單元4052,定位 單元4053。統(tǒng)計(jì)單元4051用于統(tǒng)計(jì)空存儲(chǔ)塊的個(gè)數(shù);生成單元4052用于生成一個(gè)不 大于所有空存儲(chǔ)塊總數(shù)的隨機(jī)數(shù);定位單元4053用于利用所述隨機(jī)數(shù)定位一個(gè) 空存儲(chǔ)塊。
特別的,本實(shí)施例裝置中的選出模塊405的統(tǒng)計(jì)單元4051,生成單元4052, 定位單元4053還可以用查找單元,建立單元和選出單元來代替。其中,查找單 元用于遍歷所有的存儲(chǔ)塊查找到所有空存儲(chǔ)塊;建立單元用于建立一個(gè)包含有 查找到的所有空存儲(chǔ)塊的地址列表或所有空存儲(chǔ)塊的物理塊號(hào)列表;選出單元 用于從所述列表中隨機(jī)選出一個(gè)空存儲(chǔ)塊。
另外本實(shí)施例裝置中的定位模塊404定位的數(shù)據(jù)存儲(chǔ)塊由邏輯塊號(hào)和數(shù)據(jù) 區(qū)數(shù)據(jù)組成,則所述需要修改的數(shù)據(jù)為數(shù)據(jù)區(qū)數(shù)據(jù)。那么相應(yīng)的,寫入模塊406 先將數(shù)據(jù)區(qū)數(shù)據(jù)與新數(shù)據(jù)結(jié)合寫入所述隨機(jī)選出的空存儲(chǔ)塊中,再將所述邏輯 塊號(hào)寫入所述隨才幾選出的空存儲(chǔ)塊中。
在本實(shí)施例中的寫入沖莫塊406包括讀取單元4061,結(jié)合單元4062,寫入 單元4063。
讀取單元4061用于將所述數(shù)據(jù)讀入到內(nèi)存中;結(jié)合單元4062用于在內(nèi)存 中將所述數(shù)據(jù)區(qū)數(shù)據(jù)與新數(shù)據(jù)結(jié)合后生成更新數(shù)據(jù);寫入單元4063用于將所述 更新數(shù)據(jù)與邏輯塊號(hào)寫入所述隨機(jī)選出的空存儲(chǔ)塊中。
本實(shí)施例中的第三隨機(jī)交換模塊412包括第三選出單元4120,第四選出 單元4121,第三判斷單元4125,第三清除單元4126,第三寫入單元4122,第 三擦除單元4123,第三歸零單元4124。
第三選出單元4120用于從所有的數(shù)據(jù)存儲(chǔ)塊中隨機(jī)選出 一個(gè)數(shù)據(jù)存儲(chǔ)塊; 第四選出單元4121用于從所有的空存儲(chǔ)塊中隨機(jī)選出一個(gè)目標(biāo)空存儲(chǔ)塊;第三 判斷單元4125用于判斷所述目標(biāo)空存儲(chǔ)塊是否為有記錄的空存儲(chǔ)塊;第三清除 單元4126用于當(dāng)?shù)诙袛鄦卧袛嗍菚r(shí),將有記錄的空存儲(chǔ)塊擦除為空存儲(chǔ)塊; 第三寫入單元4122用于將所述數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)寫入所述目標(biāo)空存儲(chǔ)塊中; 第三擦除單元4123用于將所述隨機(jī)選出的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊;第三歸 零單元4124用于將寫入操作的總次數(shù)歸零。
本實(shí)施例裝置中的第三選出單元4120包括第三統(tǒng)計(jì)子單元41200用于統(tǒng)計(jì)數(shù)據(jù)存儲(chǔ)塊的個(gè)數(shù);第三生成子單元41201用于生成一個(gè)不大于所有數(shù)據(jù)存 儲(chǔ)塊總數(shù)的隨機(jī)數(shù);第三定位子單元41202用于利用所述隨機(jī)數(shù)定位一個(gè)數(shù)據(jù) 存儲(chǔ)塊。
本實(shí)施例裝置中的第四選出單元4121包括第四統(tǒng)計(jì)子單元41210,第四 生成子單元41211,第四定位子單元41212。
第四統(tǒng)計(jì)子單元41210,用于統(tǒng)計(jì)空存儲(chǔ)塊的個(gè)數(shù);第四生成子單元412H, 用于生成一個(gè)不大于所有空存儲(chǔ)塊總數(shù)的隨機(jī)數(shù);第四定位子單元41212,用于 利用所述隨機(jī)數(shù)定位一個(gè)目標(biāo)空存儲(chǔ)塊。
特別的,本實(shí)施例裝置中的第四選出單元4121還可以由第四查找子單元、 第四建立子單元、第四選出子單元組成,其中第四查找子單元,用于遍歷所有 的存儲(chǔ)塊查找所有空存儲(chǔ)塊;第四建立子單元,用于建立一個(gè)包含有查找到的 所有空存儲(chǔ)塊的地址列表或所有空存儲(chǔ)塊的物理塊號(hào)列表;第四選出子單元, 用于從所述列表中隨機(jī)選出一個(gè)目標(biāo)空存儲(chǔ)塊。
本發(fā)明實(shí)施例主要應(yīng)用在各種存儲(chǔ)器中,例如閃存等以便實(shí)現(xiàn)提高存儲(chǔ)
塊可以使用的次數(shù),同時(shí)也可以延長(zhǎng)存儲(chǔ)器的使用壽命。
通過以上的實(shí)施方式的描述,所屬領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā) 明可借助軟件加必需的通用硬件的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多 情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或 者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟 件產(chǎn)品存儲(chǔ)在可讀取的存儲(chǔ)介質(zhì)中,如計(jì)算機(jī)的軟盤,硬盤或光盤等,包括若 干指令用以使得一 臺(tái)含有存儲(chǔ)器的終端執(zhí)行本發(fā)明各個(gè)實(shí)施例的方法。
以上所述,僅為本發(fā)明的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于 此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到 的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍 應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1、一種寫入數(shù)據(jù)的方法,其特征在于,包括接收到寫入新數(shù)據(jù)的指令;定位需要修改的數(shù)據(jù)所在的數(shù)據(jù)存儲(chǔ)塊;從所有的空存儲(chǔ)塊中隨機(jī)選出一個(gè)空存儲(chǔ)塊;將所述需要修改的數(shù)據(jù)與新數(shù)據(jù)結(jié)合為更新數(shù)據(jù),將所述更新數(shù)據(jù)寫入所述隨機(jī)選出的空存儲(chǔ)塊中;將定位到的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊。
2、 根據(jù)權(quán)利要求1所述的寫入數(shù)據(jù)的方法,其特征在于,該方法還包括 在存儲(chǔ)器通電后,判斷當(dāng)前空存儲(chǔ)塊總數(shù)是否小于預(yù)設(shè)數(shù)值;如果是,則將隨機(jī)選出的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)寫入隨機(jī)選出的目標(biāo)空存儲(chǔ) 塊中;將所述隨機(jī)選出的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊;等待接收寫入新數(shù)據(jù)的 指令;如果否,則等待接收寫入新數(shù)據(jù)的指令。
3、 根據(jù)權(quán)利要求l所述的寫入數(shù)據(jù)的方法,其特征在于,所述數(shù)據(jù)存儲(chǔ)塊 的數(shù)據(jù)由邏輯塊號(hào)和數(shù)據(jù)區(qū)數(shù)據(jù)組成,則所述將所述需要修改的數(shù)據(jù)與新數(shù)據(jù) 結(jié)合為更新數(shù)據(jù),將所述更新數(shù)據(jù)寫入所述隨機(jī)選出的空存儲(chǔ)塊中包括將所述數(shù)據(jù)存儲(chǔ)塊的數(shù)據(jù)讀入內(nèi)存中;在內(nèi)存中將所述數(shù)據(jù)中的數(shù)據(jù)區(qū)數(shù)據(jù)與新數(shù)據(jù)結(jié)合為更新數(shù)據(jù); 將所述更新數(shù)據(jù)與邏輯塊號(hào)寫入空存儲(chǔ)塊中。
4、 根據(jù)權(quán)利要求3所述的寫入數(shù)據(jù)的方法,其特征在于,所述將所述更新 數(shù)據(jù)與邏輯塊號(hào)寫入空存儲(chǔ)塊中為先將更新數(shù)據(jù)寫入空存儲(chǔ)塊中,再將邏輯 塊號(hào)寫入空存儲(chǔ)塊中。
5、 根據(jù)權(quán)利要求3所述的寫入數(shù)據(jù)的方法,其特征在于,所述從所有的空 存儲(chǔ)塊中隨機(jī)選出 一個(gè)空存儲(chǔ)塊包括生成一個(gè)不大于所有空存儲(chǔ)塊總數(shù)的隨機(jī)數(shù);利用所述隨機(jī)數(shù)選出一個(gè)空 存儲(chǔ)塊;或者遍歷所有的存儲(chǔ)塊查找到所有空存儲(chǔ)塊;建立一個(gè)包含有查找到的所有空存儲(chǔ)塊的地址列表或所有空存儲(chǔ)塊的物理塊號(hào)列表;從所述列表中選出一個(gè)空 存儲(chǔ)塊。
6、 根據(jù)權(quán)利要求5所述的寫入數(shù)據(jù)的方法,其特征在于,在將所述更新數(shù) 據(jù)寫入所述隨機(jī)選出的空存儲(chǔ)塊中之前,該方法還包括判斷所述隨機(jī)選出的空存儲(chǔ)塊是否為有記錄的空存儲(chǔ)塊; 如果是,則將所述有記錄的空存儲(chǔ)塊擦除為空存儲(chǔ)塊; 如果否,則直接利用所述隨機(jī)選出的空存儲(chǔ)塊。
7、 根據(jù)權(quán)利要求1所述的寫入數(shù)據(jù)的方法,其特征在于,在將所述更新數(shù) 據(jù)寫入所述隨機(jī)選出的空存儲(chǔ)塊中之前,該方法還包括判斷所述隨機(jī)選出的空數(shù)據(jù)存儲(chǔ)塊是否為有記錄的空存儲(chǔ)塊;如果是,則將所述有記錄的空存儲(chǔ)塊擦除為空存儲(chǔ)塊;如果否,則直接執(zhí)行將所述需要修改的數(shù)據(jù)與新數(shù)據(jù)結(jié)合為更新數(shù)據(jù),將所述更新數(shù)據(jù)寫入所述隨機(jī)選出的空存儲(chǔ)塊中。
8、 根據(jù)權(quán)利要求1所述的寫入數(shù)據(jù)的方法,其特征在于,將定位到的數(shù)據(jù) 存儲(chǔ)塊擦除為空存儲(chǔ)塊之后,該方法還包括 將每次對(duì)存儲(chǔ)塊執(zhí)行的寫入操作的次數(shù)累計(jì)到寫入操作的總次數(shù)中;判斷所述寫入操作的總次數(shù)是否大于預(yù)設(shè)次數(shù);如果是,則將隨機(jī)選出的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)寫入隨機(jī)選出的目標(biāo)空存儲(chǔ) 塊中;將所述隨機(jī)選出的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊;將寫入操作的總次數(shù)歸 零;如果否,則結(jié)束本次操作。
9、 根據(jù)權(quán)利要求2或8所述的寫入數(shù)據(jù)的方法,其特征在于,所述將隨機(jī) 選出的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)寫入隨機(jī)選出的目標(biāo)空存儲(chǔ)塊中包括從所有的數(shù)據(jù)存儲(chǔ)塊中隨機(jī)選出 一個(gè)數(shù)據(jù)存儲(chǔ)塊; 從所有的空存儲(chǔ)塊中隨機(jī)選出 一個(gè)目標(biāo)空存儲(chǔ)塊; 將所述數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)寫入所述目標(biāo)空存儲(chǔ)塊中。
10、 根據(jù)權(quán)利要求9所述的寫入數(shù)據(jù)的方法,其特征在于,所述從所有的 數(shù)據(jù)存儲(chǔ)塊中隨機(jī)選出 一個(gè)數(shù)據(jù)存儲(chǔ)塊包括生成一個(gè)不大于所有數(shù)據(jù)存儲(chǔ)塊總數(shù)的隨機(jī)數(shù),利用所述隨機(jī)數(shù)定位一個(gè) 數(shù)據(jù)存儲(chǔ)塊。
11、 根據(jù)權(quán)利要求9所述的寫入數(shù)據(jù)的方法,其特征在于,所述從所有的 空存儲(chǔ)塊中隨機(jī)選出 一個(gè)目標(biāo)空存儲(chǔ)塊包括生成一個(gè)不大于所有空存儲(chǔ)塊總數(shù)的隨機(jī)數(shù),利用所述隨機(jī)數(shù)選出一個(gè)目 標(biāo)空存儲(chǔ)塊;或者遍歷所有的存儲(chǔ)塊查找所有空存儲(chǔ)塊,建立一個(gè)包含有查找到的所有空存 儲(chǔ)塊的地址列表或所有空存儲(chǔ)塊的物理塊號(hào)列表,從列表中隨機(jī)選出一個(gè)目標(biāo) 空存儲(chǔ)塊。
12、 根據(jù)權(quán)利要求11所述的寫入數(shù)據(jù)的方法,其特征在于,在將所述更新 數(shù)據(jù)寫入所述隨機(jī)選出的空存儲(chǔ)塊中之前,該方法還包括判斷所述隨機(jī)選出的目標(biāo)空存儲(chǔ)塊是否為有記錄的空存儲(chǔ)塊; 如果是,則將所述有記錄的空存儲(chǔ)塊擦除為空存儲(chǔ)塊; 如果否,則直接利用所述隨機(jī)選出的目標(biāo)空存儲(chǔ)塊。
13、 一種寫入數(shù)據(jù)的裝置,其特征在于,包括 接收模塊,用于接收寫入新數(shù)據(jù)的指令;定位模塊,用于定位需要修改的數(shù)據(jù)所在的數(shù)據(jù)存儲(chǔ)塊;選出模塊,用于從所有的空存儲(chǔ)塊中隨機(jī)選出一個(gè)空存儲(chǔ)塊;寫入模塊,用于將所述需要修改的數(shù)據(jù)與新數(shù)據(jù)結(jié)合為更新數(shù)據(jù),將所述 更新數(shù)據(jù)寫入所述隨機(jī)選出的空存儲(chǔ)塊中;擦除模塊,用于將定位到的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊。
14、 根據(jù)權(quán)利要求13所述的寫入數(shù)據(jù)的裝置,其特征在于,所述定位模塊 定位的數(shù)據(jù)存儲(chǔ)塊由邏輯塊號(hào)和數(shù)據(jù)區(qū)數(shù)據(jù)組成,則所述寫入模塊先將數(shù)據(jù)區(qū) 數(shù)椐與新數(shù)據(jù)結(jié)合為更新數(shù)據(jù),將所述更新數(shù)據(jù)與邏輯塊號(hào)寫入所迷隨機(jī)選出 的空存儲(chǔ)塊中。
15、 4艮據(jù)權(quán)利要求14所述的寫入數(shù)據(jù)的裝置,其特征在于,所述寫入模塊 包括讀取單元,用于將所述數(shù)據(jù)讀入到內(nèi)存中;結(jié)合單元,用于在內(nèi)存中將所述數(shù)據(jù)區(qū)數(shù)據(jù)與新數(shù)據(jù)結(jié)合后生成更新數(shù)據(jù); 寫入單元,用于將所述更新數(shù)據(jù)與邏輯塊號(hào)寫入所述隨機(jī)選出的空存儲(chǔ)塊中。所述寫入單元先將更新數(shù)據(jù)寫入空存儲(chǔ)塊中,再將邏輯塊號(hào)寫入空存儲(chǔ)塊中。
16、 根據(jù)權(quán)利要求14所述的寫入數(shù)據(jù)的裝置,其特征在于,該裝置還包括 第二判斷模塊,用于在存儲(chǔ)器通電后,判斷當(dāng)前空存儲(chǔ)塊總數(shù)是否小于預(yù)設(shè)數(shù)值;第二隨機(jī)交換模塊,用于當(dāng)前空存儲(chǔ)塊總數(shù)小于預(yù)設(shè)數(shù)值時(shí),將隨機(jī)選出 的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)寫入隨機(jī)選出的目標(biāo)空存儲(chǔ)塊中,將所述隨機(jī)選出的數(shù) 據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊。
17、 根據(jù)權(quán)利要求16所述的寫入數(shù)據(jù)的裝置,其特征在于,所述第二隨機(jī) 交換模塊包括第 一選出單元,用于從所有的數(shù)據(jù)存儲(chǔ)塊中隨機(jī)選出 一個(gè)數(shù)據(jù)存儲(chǔ)塊; 第二選出單元,用于從所有的空存儲(chǔ)塊中隨機(jī)選出 一個(gè)目標(biāo)空存儲(chǔ)塊; 第二判斷單元,用于判斷所述目標(biāo)空存儲(chǔ)塊是否為有記錄的空存儲(chǔ)塊; 第二清除單元,用于當(dāng)?shù)诙袛鄦卧袛嗍菚r(shí),將有記錄的空存儲(chǔ)塊擦除 為空存儲(chǔ)塊;第二寫入單元,用于將所述數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)寫入所述目標(biāo)空存儲(chǔ)塊中; 第二擦除單元,用于將隨機(jī)選出的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊。
18、 根據(jù)權(quán)利要求17所述的寫入數(shù)據(jù)的裝置,其特征在于,所述第一選出 單元包括第一生成子單元,用于生成一個(gè)不大于所有數(shù)據(jù)存儲(chǔ)塊總數(shù)的隨機(jī)數(shù); 第一定位子單元,用于利用所述隨機(jī)數(shù)定位一個(gè)數(shù)據(jù)存儲(chǔ)塊。
19、 根據(jù)權(quán)利要求17所述的寫入數(shù)據(jù)的裝置,其特征在于,所述第二選出 單元包括第二生成子單元,用于生成一個(gè)不大于所有空存儲(chǔ)塊總數(shù)的隨機(jī)數(shù); 第二定位子單元,用于利用所述隨機(jī)數(shù)選出一個(gè)目標(biāo)空存儲(chǔ)塊;或者第二查找子單元,用于遍歷所有的存儲(chǔ)塊查找所有空存儲(chǔ)塊; 第二建立子單元,用于建立一個(gè)包含有查找到的所有空存儲(chǔ)塊的地址列表 或所有空存儲(chǔ)塊的物理塊號(hào)列表;第二選出子單元,用于從所述列表中隨機(jī)選出 一個(gè)目標(biāo)空存儲(chǔ)塊。
20、 根據(jù)權(quán)利要求14所述的寫入數(shù)據(jù)的裝置,其特征在于,所述選出模塊 包括生成單元,用于生成一個(gè)不大于所有空存儲(chǔ)塊總數(shù)的隨機(jī)數(shù); 定位單元,用于利用所述隨機(jī)數(shù)定位一個(gè)空存儲(chǔ)塊;或者 查找單元,用于遍歷所有的存儲(chǔ)塊查找到所有空存儲(chǔ)塊; 建立單元,用于建立一個(gè)包含有查找到的所有空存儲(chǔ)塊的地址列表或所有 空存儲(chǔ)塊的物理塊號(hào)列表;選出單元,用于從所述列表中隨機(jī)選出一個(gè)空存儲(chǔ)塊。
21、 根據(jù)權(quán)利要求13所述的寫入數(shù)據(jù)的裝置,其特征在于,該裝置還包括 第一判斷模塊,用于判斷所述隨機(jī)選出的空數(shù)據(jù)存儲(chǔ)塊是否為有記錄的空存儲(chǔ)塊;第一清除模塊,用于當(dāng)判斷模塊判斷是時(shí),將所述有記錄的空存儲(chǔ)塊擦除 為空存儲(chǔ)塊。
22、 根椐權(quán)利要求14所述的寫入數(shù)據(jù)的裝置,其特征在于,該裝置還包括 累計(jì)模塊,用于將每次對(duì)存儲(chǔ)塊執(zhí)行的寫入操作的次數(shù)累計(jì)到寫入操作的總次數(shù)中;第三判斷模塊,用于判斷所述寫入操作的總次數(shù)是否大于預(yù)設(shè)次數(shù); 第三隨機(jī)交換模塊,用于當(dāng)寫入操作的總次數(shù)大于預(yù)設(shè)次數(shù)時(shí),將隨機(jī)選 出的數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)寫入隨機(jī)選出的目標(biāo)空存儲(chǔ)塊中,并將所述隨機(jī)選出 的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊,同時(shí)將寫入操作的總次數(shù)歸零。
23、 根據(jù)權(quán)利要求22所述的寫入數(shù)據(jù)的裝置,其特征在于,所述第三隨機(jī) 交換模塊包括第三選出單元,用于從所有的數(shù)據(jù)存儲(chǔ)塊中隨機(jī)選出 一個(gè)數(shù)據(jù)存儲(chǔ)塊; 第四選出單元,用于從所有的空存儲(chǔ)塊中隨機(jī)選出 一個(gè)目標(biāo)空存儲(chǔ)塊;第三判斷單元,用于判斷所述目標(biāo)空存儲(chǔ)塊是否為有記錄的空存儲(chǔ)塊; 第三清除單元,用于當(dāng)?shù)诙袛鄦卧袛嗍菚r(shí),將有記錄的空存儲(chǔ)塊擦除 為空存儲(chǔ)塊;第三寫入單元,用于將所述數(shù)據(jù)存儲(chǔ)塊里的數(shù)據(jù)寫入所述目標(biāo)空存儲(chǔ)塊中; 第三擦除單元,用于將所述隨機(jī)選出的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊; 第三歸零單元,用于將寫入操作的總次數(shù)歸零。
24、 根據(jù)權(quán)利要求23所述的寫入數(shù)據(jù)的裝置,其特征在于,所述第三選出 單元包括第三生成子單元,用于生成一個(gè)不大于所有數(shù)據(jù)存儲(chǔ)塊總數(shù)的隨機(jī)數(shù); 第三定位子單元,用于利用所述隨機(jī)數(shù)定位一個(gè)數(shù)據(jù)存儲(chǔ)塊。
25、 根據(jù)權(quán)利要求23所述的寫入數(shù)據(jù)的裝置,其特征在于,所述第四選出 單元包括第四生成子單元,用于生成一個(gè)不大于所有空存儲(chǔ)塊總數(shù)的隨機(jī)數(shù); 第四定位子單元,用于利用所述隨機(jī)數(shù)選出一個(gè)目標(biāo)空存儲(chǔ)塊;或者 第四查找子單元,用于遍歷所有的存儲(chǔ)塊查找所有空存^ft塊; 第四建立子單元,用于建立一個(gè)包含有查找到的所有空存儲(chǔ)塊的地址列表 或所有空存儲(chǔ)塊的物理塊號(hào)列表;第四選出子單元,用于從所述列表中隨機(jī)選出一個(gè)目標(biāo)空存儲(chǔ)塊。
全文摘要
本發(fā)明實(shí)施例公開了一種寫入數(shù)據(jù)方法及裝置,涉及數(shù)據(jù)存儲(chǔ)領(lǐng)域,解決了現(xiàn)有技術(shù)中存儲(chǔ)器中某些存儲(chǔ)塊容易出現(xiàn)受損較嚴(yán)重的問題。在本發(fā)明中接收到寫入新數(shù)據(jù)的指令;定位需要修改的數(shù)據(jù)所在的數(shù)據(jù)存儲(chǔ)塊;從所有的空存儲(chǔ)塊中隨機(jī)選出一個(gè)空存儲(chǔ)塊;將所述需要修改的數(shù)據(jù)與新數(shù)據(jù)結(jié)合為更新數(shù)據(jù),將所述更新數(shù)據(jù)寫入所述隨機(jī)選出的空存儲(chǔ)塊中;將定位到的數(shù)據(jù)存儲(chǔ)塊擦除為空存儲(chǔ)塊。本發(fā)明的實(shí)施例主要應(yīng)用在向存儲(chǔ)器執(zhí)行各種操作時(shí)的場(chǎng)景。
文檔編號(hào)G06F12/02GK101526920SQ20081024705
公開日2009年9月9日 申請(qǐng)日期2008年12月31日 優(yōu)先權(quán)日2008年12月31日
發(fā)明者于華章, 舟 陸 申請(qǐng)人:北京飛天誠(chéng)信科技有限公司