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

一種固態(tài)存儲(chǔ)的損耗均衡方法及系統(tǒng)與流程

文檔序號(hào):12176267閱讀:477來源:國知局
一種固態(tài)存儲(chǔ)的損耗均衡方法及系統(tǒng)與流程

本發(fā)明涉及計(jì)算機(jī)存儲(chǔ)技術(shù)領(lǐng)域,更具體地說,涉及一種固態(tài)存儲(chǔ)的損耗均衡方法及系統(tǒng)。



背景技術(shù):

固態(tài)存儲(chǔ)的壽命是有限的,其壽命的長短是由擦寫塊的最大可擦除次數(shù)決定的,固態(tài)存儲(chǔ)介質(zhì)的最大可擦除次數(shù)大約為萬次左右。所以為了延長固態(tài)存儲(chǔ)的使用壽命,避免由于某個(gè)擦寫塊被過度擦寫而影響數(shù)據(jù)安全性和存儲(chǔ)設(shè)備的使用,應(yīng)該在盡量小的性能影響下使擦寫操作均勻的分布在每個(gè)擦寫塊上,這個(gè)過程就叫做損耗均衡。損耗均衡算法其中一種方式是通過垃圾回收來實(shí)現(xiàn),在垃圾回收的過程中兼顧損耗均衡的效果。固態(tài)存儲(chǔ)作為一種閃存設(shè)備,其與一般磁盤設(shè)備最大的不同就是它不采用“覆寫”一的形式進(jìn)行更新,而是采用“out-of-place”的更新方式。這種方式需要先將要更新的數(shù)據(jù)寫入其他的空閑空間,并將原來的數(shù)據(jù)標(biāo)記為臟數(shù)據(jù),在適當(dāng)?shù)臅r(shí)候?qū)@些無效的臟數(shù)據(jù)進(jìn)行擦除回收,這個(gè)過程就叫做垃圾回收,同時(shí)臟數(shù)據(jù)的擦除時(shí)以整塊為單位的,一個(gè)擦除快中包含多個(gè)數(shù)據(jù)頁。

垃圾回收的消耗主要包括兩個(gè)方面當(dāng)擦除塊內(nèi)的頁面不是全部為臟數(shù)據(jù),即含有有效數(shù)據(jù)時(shí),需要拷貝回收塊中的有效頁面,當(dāng)把擦除塊中的有效頁面回收完后再對(duì)擦除塊進(jìn)行擦除操作。由于閃存的擦除操作的消耗遠(yuǎn)遠(yuǎn)大于拷貝有效頁的消耗,所以從垃圾回收的角度看,垃圾回收應(yīng)該盡可能釋放多的可用空間,減少擦除次數(shù)。同時(shí)文件中經(jīng)常會(huì)存儲(chǔ)一些只需要讀而很少更新的數(shù)據(jù),這類數(shù)據(jù)成為靜態(tài)數(shù)據(jù)。由于靜態(tài)數(shù)據(jù)幾乎不更新導(dǎo)致其所在的數(shù)據(jù)塊很少會(huì)被擦除,而存儲(chǔ)經(jīng)常更新的動(dòng)態(tài)數(shù)據(jù)的數(shù)據(jù)塊則會(huì)經(jīng)常被擦除,造成了數(shù)據(jù)塊之間的不平衡。

因此,如何提高垃圾回收的效率,實(shí)現(xiàn)固態(tài)存儲(chǔ)的損耗均衡,延長固態(tài)存儲(chǔ)整體的使用壽命,是本領(lǐng)域技術(shù)人員需要解決的問題。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的在于提供一種固態(tài)存儲(chǔ)的損耗均衡方法及系統(tǒng),以實(shí)現(xiàn)提高垃圾回收的效率,實(shí)現(xiàn)固態(tài)存儲(chǔ)的損耗均衡,延長固態(tài)存儲(chǔ)整體的使用壽命。

為實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例提供了如下技術(shù)方案:

一種固態(tài)存儲(chǔ)的損耗均衡方法,包括:

S1、檢測空閑塊鏈表中的數(shù)據(jù)塊數(shù)量是否小于第一閾值,若是,則執(zhí)行S2;其中,所述空閑塊鏈表中的數(shù)據(jù)塊均為空閑數(shù)據(jù)塊;

S2、從臟塊鏈表中選取無效頁面最多的數(shù)據(jù)塊進(jìn)行回收,將回收的數(shù)據(jù)塊插入所述空閑塊鏈表;其中,臟塊鏈表中的數(shù)據(jù)塊為不全是有效數(shù)據(jù)的數(shù)據(jù)塊;

S3、判斷所述空閑塊鏈表中的數(shù)據(jù)塊數(shù)量是否大于第二閾值;若是,則執(zhí)行S4;若否,則繼續(xù)執(zhí)行S2;

S4、從所述臟塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊進(jìn)行回收,并將回收后的數(shù)據(jù)塊插入所述空閑塊鏈表;

S5、判斷所述空閑塊鏈表中的數(shù)據(jù)塊數(shù)量是否大于第三閾值;

若是,則停止執(zhí)行回收操作;若否,則繼續(xù)執(zhí)行S4。

其中,所述S2包括:

從臟塊鏈表中選取無效頁面最多的數(shù)據(jù)塊作為第一數(shù)據(jù)塊;

判斷所述第一數(shù)據(jù)塊是否存在有效數(shù)據(jù);

若存在,從所述空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊,將所述第一數(shù)據(jù)塊中的有效數(shù)據(jù)拷貝到所述當(dāng)前數(shù)據(jù)塊,并擦除所述第一數(shù)據(jù)塊;若不存在,則將所述第一數(shù)據(jù)塊直接擦除;

將擦除后的第一數(shù)據(jù)塊插入所述空閑塊鏈表。

其中,所述S4包括:

從所述空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊,從臟塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為第二數(shù)據(jù)塊;

將所述第二數(shù)據(jù)塊中的有效數(shù)據(jù)拷貝到當(dāng)前數(shù)據(jù)塊中,并擦除所述第二數(shù)據(jù)塊,將擦除后的第二數(shù)據(jù)塊插入所述空閑塊鏈表。

其中,還包括:

檢測到壞數(shù)據(jù)塊后,判斷壞數(shù)據(jù)塊是否存在有效數(shù)據(jù);

若存在,則從所述空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊,將所述壞數(shù)據(jù)塊中的有效數(shù)據(jù)拷貝到所述當(dāng)前數(shù)據(jù)塊,并將所述壞數(shù)據(jù)塊插入壞塊鏈表;若不存在,則直接將所述壞數(shù)據(jù)塊插入壞塊鏈表。

其中,還包括:

接收到數(shù)據(jù)寫指令時(shí),從所述空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊,將所述數(shù)據(jù)寫指令攜帶的新數(shù)據(jù)順序?qū)懭氘?dāng)前數(shù)據(jù)塊的每個(gè)頁面;

當(dāng)前數(shù)據(jù)塊的所有頁面均被寫完后,檢測所述當(dāng)前數(shù)據(jù)塊是否存在無效數(shù)據(jù);若存在,則將所述當(dāng)前數(shù)據(jù)塊插入所述臟塊鏈表;若不存在,則將所述當(dāng)前數(shù)據(jù)塊存入干凈塊鏈表。

其中,還包括:

判斷干凈塊鏈表中擦除次數(shù)最大的數(shù)據(jù)塊與擦除次數(shù)最小的數(shù)據(jù)塊的擦除次數(shù)之差是否大于第四閾值;

若是,則將擦除次數(shù)最大的數(shù)據(jù)塊作為第三數(shù)據(jù)塊,將擦除次數(shù)最小的數(shù)據(jù)塊作為第四數(shù)據(jù)塊;

從所述空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊,并將所述第三數(shù)據(jù)塊中的數(shù)據(jù)拷貝到所述當(dāng)前數(shù)據(jù)塊,并擦除所述第三數(shù)據(jù)塊;

將所述第四數(shù)據(jù)塊中的數(shù)據(jù)拷貝到所述第三數(shù)據(jù)塊中,并將所述第四數(shù)據(jù)塊插入所述空閑塊鏈表。

其中,每個(gè)數(shù)據(jù)塊中均包括本數(shù)據(jù)塊的數(shù)據(jù)結(jié)構(gòu);

所述數(shù)據(jù)結(jié)構(gòu)包括:數(shù)據(jù)塊的地址、該數(shù)據(jù)塊的擦除次數(shù)、數(shù)據(jù)塊的有效頁數(shù)目、數(shù)據(jù)塊的無效頁數(shù)目和數(shù)據(jù)塊的空閑頁數(shù)目。

一種固態(tài)存儲(chǔ)的損耗均衡系統(tǒng),包括:

檢測模塊,用于檢測到空閑塊鏈表中的數(shù)據(jù)塊數(shù)量小于第一閾值時(shí),觸發(fā)第一回收模塊;其中,所述空閑塊鏈表中的數(shù)據(jù)塊均為空閑數(shù)據(jù)塊;

所述第一回收模塊,用于從臟塊鏈表中選取無效頁面最多的數(shù)據(jù)塊進(jìn)行回收,將回收的數(shù)據(jù)塊插入所述空閑塊鏈表;其中,臟塊鏈表中的數(shù)據(jù)塊為不全是有效數(shù)據(jù)的數(shù)據(jù)塊;

第一判斷模塊,用于判斷所述空閑塊鏈表中的數(shù)據(jù)塊數(shù)量是否大于第二閾值;若是,則觸發(fā)第二回收模塊;若否,則觸發(fā)所述第一回收模塊;

所述第二回收模塊,用于從所述臟塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊進(jìn)行回收,并將回收后的數(shù)據(jù)塊插入所述空閑塊鏈表;

第二判斷模塊,用于判斷所述空閑塊鏈表中的數(shù)據(jù)塊數(shù)量是否大于第三閾值;若是,則停止執(zhí)行回收操作;若否,則觸發(fā)所述第二回收模塊。

其中,還包括:

第三判斷模塊,用于檢測到壞數(shù)據(jù)塊后,判斷壞數(shù)據(jù)塊是否存在有效數(shù)據(jù);若存在,則觸發(fā)第三回收模塊;若不存在,則直接將所述壞數(shù)據(jù)塊插入壞塊鏈表;

所述第三回收模塊,用于從所述空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊;將所述壞數(shù)據(jù)塊中的有效數(shù)據(jù)拷貝到所述當(dāng)前數(shù)據(jù)塊,并將所述壞數(shù)據(jù)塊插入壞塊鏈表。

其中,還包括:

第四判斷模塊,用于判斷干凈塊鏈表中擦除次數(shù)最大的數(shù)據(jù)塊與擦除次數(shù)最小的數(shù)據(jù)塊的擦除次數(shù)之差是否大于第四閾值;若是,則觸發(fā)數(shù)據(jù)遷移模塊;

所述數(shù)據(jù)遷移模塊,用于將擦除次數(shù)最大的數(shù)據(jù)塊作為第三數(shù)據(jù)塊,將擦除次數(shù)最小的數(shù)據(jù)塊作為第四數(shù)據(jù)塊,從所述空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊;將所述第三數(shù)據(jù)塊中的數(shù)據(jù)拷貝到所述當(dāng)前數(shù)據(jù)塊,擦除所述第三數(shù)據(jù)塊;將所述第四數(shù)據(jù)塊中的數(shù)據(jù)拷貝到所述第三數(shù)據(jù)塊中,并將所述第四數(shù)據(jù)塊插入所述空閑塊鏈表。

通過以上方案可知,本發(fā)明實(shí)施例提供的一種固態(tài)存儲(chǔ)的損耗均衡方法及系統(tǒng),所述方法包括:S1、檢測空閑塊鏈表中的數(shù)據(jù)塊數(shù)量是否小于第一閾值,若是,則執(zhí)行S2;其中,所述空閑塊鏈表中的數(shù)據(jù)塊均為空閑數(shù)據(jù)塊;S2、從臟塊鏈表中選取無效頁面最多的數(shù)據(jù)塊進(jìn)行回收,將回收的數(shù)據(jù)塊插入所述空閑塊鏈表;其中,臟塊鏈表中的數(shù)據(jù)塊為不全是有效數(shù)據(jù)的數(shù)據(jù)塊;S3、判斷所述空閑塊鏈表中的數(shù)據(jù)塊數(shù)量是否大于第二閾值;若是,則執(zhí)行S4;若否,則繼續(xù)執(zhí)行S2;S4、從所述臟塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊進(jìn)行回收,并將回收后的數(shù)據(jù)塊插入所述空閑塊鏈表;S5、判斷所述空閑塊鏈表中的數(shù)據(jù)塊數(shù)量是否大于第三閾值;若是,則停止執(zhí)行回收操作;若否,則繼續(xù)執(zhí)行S4;

可見,在本方案中,將固態(tài)存儲(chǔ)設(shè)備中的數(shù)據(jù)塊分為不同的狀態(tài),在垃圾回收過程中根據(jù)數(shù)據(jù)塊的擦除次數(shù)選擇進(jìn)行優(yōu)先回收的數(shù)據(jù)塊,不僅提高垃圾回收的效率,而且還使各個(gè)數(shù)據(jù)塊的使用更加均衡,延長固態(tài)存儲(chǔ)整體的使用壽命。

附圖說明

為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1為本發(fā)明實(shí)施例公開的不同鏈表的關(guān)系結(jié)構(gòu)示意圖;

圖2為本發(fā)明實(shí)施例公開的一種固態(tài)存儲(chǔ)的損耗均衡方法流程示意圖;

圖3為本發(fā)明實(shí)施例公開的靜態(tài)數(shù)據(jù)損耗均衡流程示意圖;

圖4為本發(fā)明實(shí)施例公開的一種固態(tài)存儲(chǔ)的損耗均衡系統(tǒng)結(jié)構(gòu)示意圖。

具體實(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ù)的范圍。

可以理解的是,本方案中固態(tài)存儲(chǔ)是指采用FASH介質(zhì)的存儲(chǔ)設(shè)備而有別于采用磁介質(zhì)的機(jī)械硬盤設(shè)備,并且固態(tài)存儲(chǔ)設(shè)備有別于磁介質(zhì)存儲(chǔ)設(shè)備,其寫數(shù)據(jù)的方式需要先擦除后寫,同時(shí)由于介質(zhì)的要求,固態(tài)存儲(chǔ)設(shè)備中每個(gè)存儲(chǔ)單位的擦除次數(shù)是有上限值的,超過這個(gè)上限以后會(huì)更容易丟失數(shù)據(jù)。因此,本發(fā)明實(shí)施例公開了一種固態(tài)存儲(chǔ)的損耗均衡方法及系統(tǒng),以實(shí)現(xiàn)提高垃圾回收的效率,實(shí)現(xiàn)固態(tài)存儲(chǔ)的損耗均衡,延長固態(tài)存儲(chǔ)整體的使用壽命。

在本實(shí)施例中,為存儲(chǔ)設(shè)備中的每個(gè)數(shù)據(jù)塊中均包括本數(shù)據(jù)塊的數(shù)據(jù)結(jié)構(gòu);所述數(shù)據(jù)結(jié)構(gòu)包括:數(shù)據(jù)塊的地址、該數(shù)據(jù)塊的擦除次數(shù)、數(shù)據(jù)塊的有效頁數(shù)目、數(shù)據(jù)塊的無效頁數(shù)目和數(shù)據(jù)塊的空閑頁數(shù)目等信息。

在本方案中,在初始狀態(tài)下,將存儲(chǔ)設(shè)備中的所有數(shù)據(jù)塊分為四種,分別是空閑塊、干凈塊、臟塊、壞塊??臻e塊表示該塊剛剛進(jìn)行完擦除操作,數(shù)據(jù)塊上所有頁面都是空閑的,可以直接進(jìn)行分配。干凈塊表示該塊上的所有數(shù)據(jù)都是有效的。臟塊表示該塊上的數(shù)據(jù)并不全是有效的,至少有一頁由于數(shù)據(jù)更新或者文件刪除留下的無效數(shù)據(jù)。壞塊表示該塊不能再被使用,包含設(shè)備出廠時(shí)的壞塊和使用過程中產(chǎn)生的壞塊。此外還有一個(gè)當(dāng)前塊,當(dāng)前塊中至少有一個(gè)頁面可以直接寫入新數(shù)據(jù)。

并且,參見圖1,在本方案中為四種塊狀態(tài)建立了四個(gè)鏈表,分別是空閑塊鏈表(free_list)、干凈塊鏈表(clean_list)、臟塊鏈表(dirty_list)和壞塊鏈表(bad_list)。在空閑塊鏈表、干凈塊鏈表和臟塊鏈表中的塊都以塊擦除次數(shù)升序的方式排列。當(dāng)接收到數(shù)據(jù)寫指令時(shí),從空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊,將數(shù)據(jù)寫指令攜帶的新數(shù)據(jù)順序?qū)懭氘?dāng)前數(shù)據(jù)塊的每個(gè)頁面;當(dāng)前數(shù)據(jù)塊的所有頁面均被寫完后,檢測當(dāng)前數(shù)據(jù)塊是否存在無效數(shù)據(jù);若存在,則將當(dāng)前數(shù)據(jù)塊插入所述臟塊鏈表;若不存在,則將當(dāng)前數(shù)據(jù)塊存入干凈塊鏈表。

需要說明的是,存儲(chǔ)設(shè)備在最初被使用時(shí),除了壞塊之外的所有塊均在空閑鏈表中。當(dāng)要寫入新的數(shù)據(jù)時(shí),通過頁面分配操作從空閑鏈表中取擦除次數(shù)最小的塊,即空閑鏈表的第一塊,分配得到的塊即為當(dāng)前塊,然后將新數(shù)據(jù)順序?qū)懭朊總€(gè)頁面。當(dāng)當(dāng)前塊上的所有頁面均被寫完,且所有頁面上的數(shù)據(jù)均為有效數(shù)據(jù)時(shí),則將當(dāng)前塊插入到干凈鏈表中。當(dāng)當(dāng)前塊上的所有頁面均被寫完,但是其中含有無效數(shù)據(jù)時(shí),則將當(dāng)前塊插入到臟塊鏈表中。在將當(dāng)前塊插入到干凈鏈表或者臟鏈表之后,當(dāng)前鏈表為空,當(dāng)下次需要分配頁面時(shí),再從空閑鏈表中取空閑塊轉(zhuǎn)變?yōu)楫?dāng)前塊。

本發(fā)明實(shí)施例提供的一種固態(tài)存儲(chǔ)的損耗均衡方法,包括:

S1、檢測空閑塊鏈表中的數(shù)據(jù)塊數(shù)量是否小于第一閾值,若是,則執(zhí)行S2;其中,所述空閑塊鏈表中的數(shù)據(jù)塊均為空閑數(shù)據(jù)塊;

具體的,存儲(chǔ)設(shè)備在使用過程中,空閑塊鏈表中的空閑塊會(huì)逐漸減少,其他三個(gè)鏈表中的塊會(huì)逐漸增多,當(dāng)空閑鏈表中的擦除塊數(shù)量達(dá)到一定下限時(shí),開始垃圾回收的操作,即執(zhí)行S2。在本實(shí)施例中將該下限設(shè)置為1,即空閑塊鏈表中只有一個(gè)擦除塊時(shí)啟動(dòng)垃圾回收操作。

S2、從臟塊鏈表中選取無效頁面最多的數(shù)據(jù)塊進(jìn)行回收,將回收的數(shù)據(jù)塊插入所述空閑塊鏈表;其中,臟塊鏈表中的數(shù)據(jù)塊為不全是有效數(shù)據(jù)的數(shù)據(jù)塊;

其中,所述S2包括:

從臟塊鏈表中選取無效頁面最多的數(shù)據(jù)塊作為第一數(shù)據(jù)塊;

判斷所述第一數(shù)據(jù)塊是否存在有效數(shù)據(jù);

若存在,從所述空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊,將所述第一數(shù)據(jù)塊中的有效數(shù)據(jù)拷貝到所述當(dāng)前數(shù)據(jù)塊,并擦除所述第一數(shù)據(jù)塊;若不存在,則將所述第一數(shù)據(jù)塊直接擦除;

將擦除后的第一數(shù)據(jù)塊插入所述空閑塊鏈表。

具體的,在本實(shí)施例中設(shè)置一個(gè)空閑鏈表中最小塊數(shù)的數(shù)量第二閾值,free_min_num,在啟動(dòng)垃圾回收之后,在空閑鏈表中的塊數(shù)小于free_min_num時(shí),垃圾回收操作在臟塊鏈表中查找包含無效頁面最多的塊進(jìn)行回收。

具體的,當(dāng)空閑塊鏈表中的塊數(shù)目為1時(shí),從臟塊鏈表中查找無效頁數(shù)最多的塊,進(jìn)行擦除操作,如果該塊中不含有有效頁則將該塊直接擦除,如果該塊中含有有效塊,則將空閑鏈表中的空閑塊取下轉(zhuǎn)變?yōu)楫?dāng)前塊,將剛才找到的臟塊中的有效數(shù)據(jù)拷貝到當(dāng)前塊中,擦除臟塊,并將擦除后的塊插入到空閑鏈表。當(dāng)前塊寫滿之后,將當(dāng)前塊插入干凈塊,并從空閑鏈表中取新的塊作為當(dāng)前塊。

S3、判斷所述空閑塊鏈表中的數(shù)據(jù)塊數(shù)量是否大于第二閾值;若是,則執(zhí)行S4;若否,則繼續(xù)執(zhí)行S2;

具體的,在空閑塊鏈表中的塊數(shù)大于free_min_num時(shí),垃圾回收操作取臟塊鏈表中擦除次數(shù)最小的塊進(jìn)行回收。

S4、從所述臟塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊進(jìn)行回收,并將回收后的數(shù)據(jù)塊插入所述空閑塊鏈表;

其中,所述S4包括:

從所述空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊,從臟塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為第二數(shù)據(jù)塊;

將所述第二數(shù)據(jù)塊中的有效數(shù)據(jù)拷貝到當(dāng)前數(shù)據(jù)塊中,并擦除所述第二數(shù)據(jù)塊,將擦除后的第二數(shù)據(jù)塊插入所述空閑塊鏈表。

S5、判斷所述空閑塊鏈表中的數(shù)據(jù)塊數(shù)量是否大于第三閾值;

若是,則停止執(zhí)行回收操作;若否,則繼續(xù)執(zhí)行S4。

具體的,在本方案中設(shè)置一個(gè)第三閾值free_th1_num,在空閑塊鏈表中的塊數(shù)目大于該值之后,停止垃圾回收操作。參見圖2,為本實(shí)施例提供的固態(tài)存儲(chǔ)的損耗均衡方法流程示意圖。

需要說明的是,在該流程的所有操作中,涉及到塊擦除操作的,均會(huì)修改該塊對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)中的塊擦除次數(shù),在數(shù)據(jù)讀寫及垃圾回收過程中也會(huì)修改該數(shù)據(jù)結(jié)構(gòu)中的有效頁數(shù)、無效頁數(shù)、空閑頁數(shù)等屬性。

具體的,對(duì)保存靜態(tài)數(shù)據(jù)的塊幾乎沒有擦除操作,而保存動(dòng)態(tài)數(shù)據(jù)的塊擦除操作過于頻繁的問題,本實(shí)施例提供了一種損耗均衡操作。在啟動(dòng)垃圾回收操作的同時(shí)也會(huì)啟動(dòng)該損耗均衡操作。本方案中設(shè)定了一個(gè)第四閾值era_th1。在損耗均衡操作啟動(dòng)之后,讀取干凈塊鏈表中所有擦除塊的附加區(qū)字段中的擦除次數(shù)字段,從中找出擦除次數(shù)最多的擦除塊和擦除次數(shù)最少的塊,得到兩者的擦除次數(shù)差值,如果差值大于第四閾值era_th1時(shí),認(rèn)為擦除次數(shù)最小的擦除上存儲(chǔ)的是靜態(tài)數(shù)據(jù),其更新的頻率非常低,需要對(duì)其進(jìn)行遷移操作,具體流程如下:

S11、判斷干凈塊鏈表中擦除次數(shù)最大的數(shù)據(jù)塊與擦除次數(shù)最小的數(shù)據(jù)塊的擦除次數(shù)之差是否大于第四閾值;若是,則執(zhí)行S12;

S12、將擦除次數(shù)最大的數(shù)據(jù)塊作為第三數(shù)據(jù)塊,將擦除次數(shù)最小的數(shù)據(jù)塊作為第四數(shù)據(jù)塊;

S13、從所述空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊,并將所述第三數(shù)據(jù)塊中的數(shù)據(jù)拷貝到所述當(dāng)前數(shù)據(jù)塊,并擦除所述第三數(shù)據(jù)塊;

S14、將所述第四數(shù)據(jù)塊中的數(shù)據(jù)拷貝到所述第三數(shù)據(jù)塊中,并將所述第四數(shù)據(jù)塊插入所述空閑塊鏈表。

具體的,參見圖3,為了方便理解,舉例如下:

步驟S101:遍歷干凈塊列表,查找擦除次數(shù)最大的塊BlockA和擦除次數(shù)最小的塊BlockB,其擦除次數(shù)分別為EraseA和EraseB。

步驟S102:如果EraseA同EraseB的差值大于era_th1,對(duì)BlockA進(jìn)行遷移操作。從空閑鏈表中取空閑塊FreeBlockC,將BlockA上的數(shù)據(jù)復(fù)制到FreeBlockC中,擦除BlockA,修改BlockA和FreeBlockC的擦除次數(shù)及有效頁、空閑頁等標(biāo)記。將FreeBlockC插入到干凈鏈表中

步驟S103:將BlockB中的數(shù)據(jù)復(fù)制到BlockA中,修改BlockB和BlockA的擦除次數(shù)及有效頁、空閑頁等標(biāo)記

步驟S104:將BlockB插入到臟塊鏈表中

步驟S105:重復(fù)步驟S101-S104,直到所有滿足條件的靜態(tài)數(shù)據(jù)遷移成功。

基于上述技術(shù)方案,檢測到壞數(shù)據(jù)塊后,需要判斷壞數(shù)據(jù)塊是否存在有效數(shù)據(jù);若存在,則從所述空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊,將所述壞數(shù)據(jù)塊中的有效數(shù)據(jù)拷貝到所述當(dāng)前數(shù)據(jù)塊,并將所述壞數(shù)據(jù)塊插入壞塊鏈表;若不存在,則直接將所述壞數(shù)據(jù)塊插入壞塊鏈表。

具體的,在垃圾塊回收和數(shù)據(jù)寫入過程中產(chǎn)生的壞塊,由于這些塊中可能包含有效數(shù)據(jù),所以需要首先將有效的數(shù)據(jù)拷貝到好的塊中,然后將壞塊插入壞塊鏈表中。

下面對(duì)本發(fā)明實(shí)施例提供的損耗均衡系統(tǒng)進(jìn)行介紹,下文描述的損耗均衡系統(tǒng)與上文描述的損耗均衡方法可以相互參照。

參見圖4,本發(fā)明實(shí)施例提供的一種固態(tài)存儲(chǔ)的損耗均衡系統(tǒng),包括:

檢測模塊100,用于檢測到空閑塊鏈表中的數(shù)據(jù)塊數(shù)量小于第一閾值時(shí),觸發(fā)第一回收模塊200;其中,所述空閑塊鏈表中的數(shù)據(jù)塊均為空閑數(shù)據(jù)塊;

所述第一回收模塊200,用于從臟塊鏈表中選取無效頁面最多的數(shù)據(jù)塊進(jìn)行回收,將回收的數(shù)據(jù)塊插入所述空閑塊鏈表;其中,臟塊鏈表中的數(shù)據(jù)塊為不全是有效數(shù)據(jù)的數(shù)據(jù)塊;

第一判斷模塊300,用于判斷所述空閑塊鏈表中的數(shù)據(jù)塊數(shù)量是否大于第二閾值;若是,則觸發(fā)第二回收模塊400;若否,則觸發(fā)所述第一回收模塊200;

所述第二回收模塊400,用于從所述臟塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊進(jìn)行回收,并將回收后的數(shù)據(jù)塊插入所述空閑塊鏈表;

第二判斷模塊500,用于判斷所述空閑塊鏈表中的數(shù)據(jù)塊數(shù)量是否大于第三閾值;若是,則停止執(zhí)行回收操作;若否,則觸發(fā)所述第二回收模塊400。

基于上述技術(shù)方案,本方案還包括:

第三判斷模塊,用于檢測到壞數(shù)據(jù)塊后,判斷壞數(shù)據(jù)塊是否存在有效數(shù)據(jù);若存在,則觸發(fā)第三回收模塊;若不存在,則直接將所述壞數(shù)據(jù)塊插入壞塊鏈表;

所述第三回收模塊,用于從所述空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊;將所述壞數(shù)據(jù)塊中的有效數(shù)據(jù)拷貝到所述當(dāng)前數(shù)據(jù)塊,并將所述壞數(shù)據(jù)塊插入壞塊鏈表。

基于上述技術(shù)方案,本方案還包括:

第四判斷模塊,用于判斷干凈塊鏈表中擦除次數(shù)最大的數(shù)據(jù)塊與擦除次數(shù)最小的數(shù)據(jù)塊的擦除次數(shù)之差是否大于第四閾值;若是,則觸發(fā)數(shù)據(jù)遷移模塊;

所述數(shù)據(jù)遷移模塊,用于將擦除次數(shù)最大的數(shù)據(jù)塊作為第三數(shù)據(jù)塊,將擦除次數(shù)最小的數(shù)據(jù)塊作為第四數(shù)據(jù)塊,從所述空閑塊鏈表中選取擦除次數(shù)最小的數(shù)據(jù)塊作為當(dāng)前數(shù)據(jù)塊;將所述第三數(shù)據(jù)塊中的數(shù)據(jù)拷貝到所述當(dāng)前數(shù)據(jù)塊,擦除所述第三數(shù)據(jù)塊;將所述第四數(shù)據(jù)塊中的數(shù)據(jù)拷貝到所述第三數(shù)據(jù)塊中,并將所述第四數(shù)據(jù)塊插入所述空閑塊鏈表。

綜上可見,本方案提供的對(duì)固態(tài)存儲(chǔ)損耗均衡的改進(jìn)方法,將固態(tài)存儲(chǔ)設(shè)備中的數(shù)據(jù)塊分為不同的狀態(tài),在垃圾回收過程中根據(jù)空閑塊數(shù)目和擦除次數(shù)選擇進(jìn)行回收的數(shù)據(jù)塊,提高垃圾回收的效率。同時(shí)對(duì)不經(jīng)常更新的靜態(tài)數(shù)據(jù)定時(shí)遷移到擦除次數(shù)較多的數(shù)據(jù)塊中,使得各個(gè)數(shù)據(jù)塊的使用更加均衡,延長固態(tài)存儲(chǔ)整體的使用壽命。

本說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。

對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
绥德县| 监利县| 温宿县| 静乐县| 岑溪市| 蓬安县| 隆回县| 河东区| 盐亭县| 定边县| 慈溪市| 阿克陶县| 都兰县| 乐平市| 湛江市| 多伦县| 章丘市| 景德镇市| 东宁县| 六安市| 清远市| 龙海市| 抚远县| 大足县| 惠州市| 手游| 垫江县| 满城县| 上林县| 灌阳县| 通山县| 大邑县| 荣成市| 苗栗县| 东光县| 定襄县| 庆云县| 林甸县| 嘉黎县| 乳山市| 阳西县|