高效容多錯的快速恢復(fù)編碼方法及其驗證矩陣生成方法
【專利摘要】本發(fā)明公開了一種高效容多錯的快速恢復(fù)編碼及其驗證矩陣生成方法,該編碼是基于XOR運算的一種編碼。且該編碼是以編碼單元為單位的編碼。在一個編碼單元中存在多個條帶集,每個條帶集之間存在著一定的聯(lián)系。在該種編碼中一個編碼單元的前面Rp行存放著校驗碼,后面的Rp行存放著數(shù)據(jù),Rp行中的數(shù)據(jù)通過一個或幾個條帶集中的一些數(shù)據(jù)塊進行異或得到。同時還提供了一種驗證該編碼的容錯能力的方法,用一個變換矩陣來表示從原始的數(shù)據(jù)塊生成全部數(shù)據(jù)的過程,然后把變換矩陣中與失效塊有關(guān)的行去掉得到一個降級的轉(zhuǎn)換矩陣,通過驗證該降級的變換矩陣的秩可以得出該編碼的容錯度。本發(fā)明能夠解決現(xiàn)有技術(shù)中存在的容錯能力低、降級讀與重構(gòu)的性能差的技術(shù)問題。
【專利說明】高效容多錯的快速恢復(fù)編碼方法及其驗證矩陣生成方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計算機存儲領(lǐng)域,更具體地,涉及一種高效容多錯的快速恢復(fù)編碼方法及其驗證矩陣生成方法。
【背景技術(shù)】
[0002]可靠性與可用性是衡量在線存儲服務(wù)質(zhì)量的重要標準。對于為商業(yè)與工業(yè)應(yīng)用提供在線服務(wù)的系統(tǒng),數(shù)據(jù)丟失以及時常間斷的服務(wù)往往意味著經(jīng)濟損失。磁盤冗余陣列獨立冗余磁盤陣列(Redundant Array of Independent Disk,簡稱RAID)是能夠提供高可靠性與高可用性的主流選擇之一。在早期的RAID規(guī)范中,例如RAID-O到RAID-5,其僅僅提供單盤容錯能力。近年來,具有更高容錯能力的各種RAID系統(tǒng)逐漸開始被采用,因其在兩個或兩個以上磁盤同時失效時仍然能夠恢復(fù)所有丟失的數(shù)據(jù),與此同時還能夠提供不間斷的在線服務(wù)。
[0003]但是現(xiàn)在很多存儲系統(tǒng)中在發(fā)生磁盤失效后重構(gòu)和降級讀的速度都非常的慢。而且由于現(xiàn)在磁盤失效發(fā)生的概率越來越頻繁,因此能夠容一個或兩個磁盤失效的RAIDs已經(jīng)無法提供足夠的安全性了。因此現(xiàn)在急需提出一種具有高容錯性的編碼。
[0004]Reed-Solomon編碼是一種基于伽羅華域的編碼,其主要的優(yōu)勢是能夠容任意多的磁盤失效,但是由于伽羅華域上的運算開銷非常的大,雖然現(xiàn)在Plank等人提出了一種采用Intel公式的SMD指令來加速伽羅華域上的乘法運算的方法,但是其計算開銷相比異或運算來說還是很大。因此最近許多研究都是在基于異或運算的編碼上進行的。
[0005]存儲系統(tǒng)的存儲效率與`糾刪碼的設(shè)計存在很大的關(guān)系。有一類編碼叫做最大距離可分離(Maximum Distance Separable,簡稱MDS)編碼,這種編碼的存儲效率是最高的。但是MDS編碼存在很明顯的缺點:容錯能力差,且I/O開銷和降級讀與重構(gòu)的計算復(fù)雜度很聞。
【發(fā)明內(nèi)容】
[0006]針對現(xiàn)有技術(shù)的以上缺陷或改進需求,本發(fā)明提供了一種高效容多錯的快速恢復(fù)編碼方法及其驗證矩陣生成方法。其目的在于,解決現(xiàn)有技術(shù)中存在的容錯能力低、降級讀與重構(gòu)的性能差的技術(shù)問題。
[0007]為實現(xiàn)上述目的,按照本發(fā)明的一個方面,提供了高效容多錯的快速恢復(fù)編碼方法,包括以下步驟:
[0008](I)獲取用戶輸入的系統(tǒng)參數(shù),包括磁盤的大小S*C、一個條帶中數(shù)據(jù)塊的個數(shù)Rd、一個條帶中校驗快的個數(shù)2個,其中S表示條帶集的數(shù)量,C表示每個條帶集中條帶的數(shù)量;
[0009](2)根據(jù)用戶輸入的系統(tǒng)參數(shù)建立快速恢復(fù)編碼的第一行校驗元素CGV rp0,Cp0) ,C(sp1; rp0, Cp1),…,Cd1, rV C1V1),其中s表示條帶集在編碼單元中的序號,A表示校驗元素在條帶集中的第一行,且^=0,c表示校驗元素在條帶集中的列序號,本步驟具體包括以下子步驟:
[0010](2-1)初始化 sPQ=0,Cp0=O ;
[0011](2-2)判斷是否有心〈(:,若是則轉(zhuǎn)入步驟(2-3),否則轉(zhuǎn)入步驟(2-6);
[0012](2-3)將第G1VDs個條帶集中的第<+2行的元素進行異或運算,以得到校驗元素,并將該校驗元素存放在C (Sptl, r, Cp0)中;
[0013](2-4)將第<SpQ+2>s個條帶集中以C (<SpQ+2>s,2,<CpQ+l>c)為第一個元素,斜率為-1的Rd個元素進行異或,以得到一個數(shù)據(jù),并把該數(shù)據(jù)與步驟(2-3)得到的校驗元素進行異或,以得到最終的校驗數(shù)據(jù),并將該校驗數(shù)據(jù)存放在C (sp0, r, Cp0)中;
[0014](2-5)設(shè)置 cpQ=cpQ+l,并返回步驟(2-2);
[0015](2-6)設(shè)置Spq=S1VLcpq=O,并判斷是否有spQ〈S,若是則返回步驟(2_2),否則步驟
(2)結(jié)束。
[0016](3)根據(jù)用戶輸入的系統(tǒng)參數(shù)建立快速恢復(fù)編碼的第二行校驗元素CGV ,Cp0) ^ C(Sp1, Λ,Cp1),…,CGV1, Λ,C1V1),其中A表示校驗元素在條帶集中的第二行,且ri=o,本步驟具體包括以下子步驟:
[0017](3-1)初始化 SpQ=O, Cp0=O ;
[0018](3-2)判斷是否有?C,若是則轉(zhuǎn)入步驟(3-3),否則轉(zhuǎn)入步驟(3-5);
[0019](3-3)將第〈SpQ-l>s個條帶集中以C (〈SpQ-l>s,2,<cp0-l>c>為第一個元素,斜率為I的Rd個元素進行異或,以得`到一個數(shù)據(jù),該數(shù)據(jù)就是C (sp0, , Cp0)的結(jié)果;
[0020](3-4)設(shè)置 cpQ=cpQ+l,并返回步驟(3-2);
[0021](3-5)設(shè)置^^。+!,(^^,并判斷是否有必吼若是則返回步驟^夂否則過程結(jié)束。
[0022]按照本發(fā)明的另一方面,提供了一種快速恢復(fù)編碼方法的驗證矩陣生成方法,包括以下步驟:
[0023](I)設(shè)置一個變換矩陣m[S*0 (Rd+2), S*C*Rd],初始化該矩陣中全部的元素為O,同時設(shè)置數(shù)據(jù)元素C (sp,rp,cp)在全部數(shù)據(jù)元素中的位置為t= (rp-l)*S*C+ (sp-l)*C+cp,其中s表示條帶集在編碼單元中的序號,r表示數(shù)據(jù)元素在條帶集中的行序號,c表示數(shù)據(jù)元素在條帶集中的列序號;
[0024](2)根據(jù)數(shù)據(jù)元素C (sp, rp, cp)生成驗證矩陣中的前S*C行,具體包括以下子步驟:
[0025](2-1)設(shè)置 sp=0,Cp=O ;
[0026](2-2)判斷是否有c〈C,若是則轉(zhuǎn)入步驟(2-3),否則轉(zhuǎn)入步驟(2-6);
[0027](2-3)對第<sp+l>s個條帶集中的第cp+2行的數(shù)據(jù)元素,計算其在全部數(shù)據(jù)元素中的位置t,同時置m[sp*C+cp, t]為I ;
[0028](2-4)對第<sp+2>s個條帶集中以C (<sp+2>s,2,<cp+l>c)為第一個元素,斜率為-1的Rd個元素,計算其在全部數(shù)據(jù)元素中的位置t,同時置變換矩陣m[sp*C+cp,t]為O ;
[0029](2-5)設(shè)置 cp=cp+l,然后返回步驟(2-2);
[0030](2-6 )設(shè)置sp=sp+l,Cp=O,并判斷是佛有sp〈S,若是則返回步驟(2_2 ),否則步驟(2 )結(jié)束;
[0031](3)根據(jù)數(shù)據(jù)元素C (sp, rp, cp)生成驗證矩陣中的S*C行至2S*C行,具體包括以下子步驟:
[0032](3-1)設(shè)置 sp=0,Cp=O ;
[0033](3-2)判斷是否有cp〈C,若是則轉(zhuǎn)入步驟(3-3),否則轉(zhuǎn)到步驟(3-5);
[0034](3-3)對第<sp-l>s個條帶集中以C (<sp-l>s,2,〈cp-l>c)為第一個元素,斜率為-1的Rd個元素,計算其在全部數(shù)據(jù)元素中的位置t,同時置變換矩陣m[S*C+sp*C+cp, t]為I ;
[0035](3-4)設(shè)置 cp=cp+l,然后返回步驟(3-2);
[0036](3-5)設(shè)置sp=sp+l,cp=0,并判斷是否有s〈S,若是則返回步驟(3_2),否則步驟(3)結(jié)束。
[0037](4)根據(jù)數(shù)據(jù)元素C (sp, rp,cp)生成驗證矩陣中剩下的Rd*S*C行,具體包括以下子步驟:
[0038](4-1)設(shè)置 sp=0,cp=0,rp=0 ;
[0039](4-2)判斷是否有rp〈Rd,如果是則轉(zhuǎn)入步驟(4-3),否則過程結(jié)束;
[0040](4-3)判斷是否有sp〈S,如果是則轉(zhuǎn)入步驟(4-4),否則轉(zhuǎn)入步驟(4-8);
[0041](4-4)判斷是否有cp〈C,若是則轉(zhuǎn)入步驟(4-5),否則轉(zhuǎn)入步驟(4-7);
[0042](4-5)計算數(shù)據(jù)元素C (sp, rp, cp)在全部數(shù)據(jù)元素中的位置t,同時置變換矩陣m[2S*C+sp*C+cp, t]為 I ;
[0043](4-6)設(shè)置 cp=cp+l,然后返回步驟(4-4);
[0044](4-7)設(shè)置 sp=sp+l, cp=0,然后返回步驟(4-3);
[0045](4-8)設(shè)置 rp=rp+l, sp=0,然后返回步驟(4-2)。
[0046]總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:
[0047]1、本發(fā)明容錯能力高:因為該編碼結(jié)構(gòu)使其能夠容3錯以上,因此其容錯能力高。
[0048]2、本發(fā)明能夠提升降級讀與重構(gòu)的性能:因為該編碼全部采用的最簡單的異或運算,所以能夠提升降級讀與重構(gòu)的性能。
【專利附圖】
【附圖說明】
[0049]圖1是本發(fā)明高效容多錯的快速恢復(fù)編碼方法的流程圖。
[0050]圖2示出本發(fā)明高效容多錯的快速恢復(fù)編碼方法的實例。
[0051]圖3是本發(fā)明高效容多錯的快速恢復(fù)編碼方法的驗證矩陣生成方法的流程圖。
【具體實施方式】
[0052]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
[0053]以下首先就本發(fā)明的技術(shù)術(shù)語進行解釋和說明:
[0054]元素(Element):元素是該編碼中的基本單元,其大小可以從bit到許多連續(xù)的扇區(qū)。在該編碼中有兩種元素,即數(shù)據(jù)元素(data element)和校驗元素(parity element)。
[0055]條帶(Strip):—個條帶是編碼單元(Stripe)中一個盤上的連續(xù)元素集合。[0056]條帶集(Strip-set):—個條帶集是連續(xù)幾個編碼單元的集合。每個條帶集是一個R*C個元素的陣列。
[0057]編碼單元(Stripe): —個編碼單元是該糾刪碼中能夠容錯的獨立單元,由連續(xù)的幾個條帶集組成。
[0058]校驗鏈(Parity Chain):—個校驗鏈包含校驗元素和所有參與生成該校驗元素的元素。
[0059]校驗鏈的長度(Length of Parity Chain):校驗鏈中的元素個數(shù)。
[0060]C (sp, rp,cp):編碼中一個元素的位置,表示該元素處于第Sp個條帶集中,且位于在該條帶集中的第rp行第Cp列。
[0061]<m>p:表示m模P的值,m的取值范圍是O到p_l。
[0062]斜率(slope):斜率同樣也在其余的編碼中用到了。如斜率O就是RAID-4,RDP,EVEN0DD中的水平校驗。斜率I就是RDP,EVEN0DD中的斜向校驗。斜率_1就是X-code,H-code和HDP-code中的反斜向校驗。
[0063]如圖1所示,本發(fā)明高效容多錯的快速恢復(fù)編碼方法包括以下步驟:
[0064](I)獲取用戶輸入的系統(tǒng)參數(shù),包括磁盤的大小S*C、一個條帶中數(shù)據(jù)塊的個數(shù)Rd、一個條帶中校驗快的個數(shù)2個,其中S表示條帶集的數(shù)量,C表示每個條帶集中條帶的數(shù)量;
[0065](2)根據(jù)用戶輸入`的系統(tǒng)參數(shù)建立快速恢復(fù)編碼的第一行校驗元素CGV rp0,Cp0) ,C(sp1; rp0, Cp1),…,Cd1, rV C1V1),其中s表示條帶集在編碼單元中的序號,A表示校驗元素在條帶集中的第一行,且^=0,c表示校驗元素在條帶集中的列序號,本步驟具體包括以下子步驟:
[0066](2-1)初始化 Spci=O, Cp0=O ;
[0067](2-2)判斷是否有?C,若是則轉(zhuǎn)入步驟(2-3),否則轉(zhuǎn)入步驟(2-6);
[0068](2-3)將第G1VDs個條帶集中的第<+2行的元素進行異或運算,以得到校驗元素,并將該校驗元素存放在C (Sptl, r, Cp0)中;
[0069](2-4)將第<SpQ+2>s個條帶集中以C (<SpQ+2>s,2,<CpQ+l>c)為第一個元素,斜率為-1的Rd個元素進行異或,以得到一個數(shù)據(jù),并把該數(shù)據(jù)與步驟(2-3)得到的校驗元素進行異或,以得到最終的校驗數(shù)據(jù),并將該校驗數(shù)據(jù)存放在C (sp0, r, Cp0)中;
[0070](2-5)設(shè)置 cpQ=cpQ+l,并返回步驟(2-2);
[0071](2-6)設(shè)置Spq=S1VLcpq=O,并判斷是否有spQ〈S,若是則返回步驟(2_2),否則步驟
(2)結(jié)束。
[0072](3)根據(jù)用戶輸入的系統(tǒng)參數(shù)建立快速恢復(fù)編碼的第二行校驗元素CGV ,cp0) ^ C(sp1; Λ,Cp1),…,CGV1, Λ,C1V1),其中A表示校驗元素在條帶集中的第二行,且ri=0,本步驟具體包括以下子步驟:
[0073](3-1)初始化 Sp0=O, Cp0=O ;
[0074](3-2)判斷是否有 <〈(:,若是則轉(zhuǎn)入步驟(3-3),否則轉(zhuǎn)入步驟(3-5);
[0075](3-3)將第〈SpQ-l>s個條帶集中以C (〈SpQ-l>s,2,<cp0-l>c>為第一個元素,斜率為I的Rd個元素進行異或,以得到一個數(shù)據(jù),該數(shù)據(jù)就是C (sp0, , Cp0)的結(jié)果;
[0076](3-4)設(shè)置 Cptl=Cpc^l,并返回步驟(3-2);[0077](3-5)設(shè)置Sptl=S1Vl, Cptl=O,并判斷是否有sVS,若是則返回步驟(3-2),否則過程結(jié)束。
[0078]如圖2所示,該圖是本發(fā)明編碼方法的一個實例,該圖是整個存儲系統(tǒng)中的一個編碼單元,整個存儲系統(tǒng)是由許多這樣的編碼單元組成的??梢园l(fā)現(xiàn)該編碼單元有4個條帶集組成,每個條帶集有5個條帶組成。每個條帶包含6個元素,其中2個為校驗元素,其余為數(shù)據(jù)元素。同時我們可以發(fā)現(xiàn)校驗元素在整個編碼單元的前兩行。
[0079]該編碼實際上是一種循環(huán)的編碼,其基本單元是條帶集。并且以4個條帶集為一個循環(huán)。在圖1中條帶集O中斜紋的區(qū)域的塊就是斜率0,條帶集I中斜紋的區(qū)域的塊就是斜率-1,條帶集2中反向斜紋的區(qū)域的塊就是斜率1.對于該編碼單元中的每個數(shù)據(jù),我們用一組數(shù)字(s,r,c)來表示。其中s表示該數(shù)據(jù)在那個條帶集。 表示該數(shù)據(jù)在這個條帶集中的第幾行,c表示第幾列。如圖1所示,行是從-2開始計數(shù)的。要注意的是在圖1中O~3行的數(shù)據(jù)上標的3個數(shù)并不是表示其位置,而是表示其參與了哪幾個校驗碼的生成。如圖1所示,其中校驗塊16和36的位置分別為(3,-2,O)和(3,-1,O)。我們定義Ek(S,O, c)表示把從條帶集s中第O行第c列的數(shù)據(jù)開始的斜率為的k的一組數(shù)據(jù)進行異或運算。如E0 (O, O, O)就是圖1中條帶集O中的斜紋的區(qū)域的塊進行異或運算,Ε^α,Ο,I)就是圖1中條帶集I中斜紋的區(qū)域的塊進行異或運算,E1OJ, 4)就是圖1中條帶集2中反向斜紋的區(qū)域的塊進行異或運算。有了如上定義,可以看到校驗塊16是由EtlO), 0,O)和1(1,0,I)這兩組數(shù)據(jù)進行異或得到的。校驗塊36是由E1^O, 4)這組數(shù)據(jù)進行異或得到的??梢缘玫揭粋€通用的公式。對于-2行的校驗碼,可以得到如下的公式:
[0080](s, -2,c) =E0 (<s-3>4, O, O) +E_j (<s-2>4, O, <c+l>5) 式 I
[0081]對于-1行的校驗碼,可以得到如下的公式:
[0082](s, -1, c) =E1 (<s-l>4, O, <c-l>5)式 II
[0083]在這兩個公式中的s都是模4的,c都是模5的。在式I中的加號表示異或運算。
[0084]通過這兩個公式就可以對一個編碼單元中的數(shù)據(jù)塊生成其校驗元素。
[0085]以下描述本發(fā)明高效容多錯的快速恢復(fù)編碼方法的驗證矩陣生成方法,其整體思路在于,使用矩陣來模擬該編碼方法出錯的過程,對于一個編碼單元中的數(shù)據(jù)塊我們可以把其按順序?qū)懗梢粋€長度為S*C*Rd的列向量。然后根據(jù)上面給出的生成校驗元素的公式可以得到一個變換矩陣,該矩陣是S*C* (Rd+2)行S*C*Rd列的矩陣,該變換矩陣乘以數(shù)據(jù)元素就可以得到該編碼單元中的數(shù)據(jù)塊和校驗塊了。該變換矩陣用O和I來表示每一個元素是否參與了校驗。并且在該模擬中我們只考慮數(shù)據(jù)元素的位置,并不具體的考慮其中的數(shù)據(jù)。因為我們最后要驗證的只是變換矩陣的秩。相應(yīng)于失效時的情況,就是把失效元素位置的數(shù)據(jù)置為0,然后根據(jù)上面的矩陣變換解出失效元素的數(shù)據(jù)。為了驗證其是否能夠解出來失效元素數(shù)據(jù)??梢酝ㄟ^把失效元素對應(yīng)的行重變換矩陣中去除,得到一個降級的變換矩陣,然后驗證該變換矩陣是否是滿秩的,如果是滿秩的就表示可以恢復(fù)失效的數(shù)據(jù)。
[0086]如圖3所示,本發(fā)明高效容多錯的快速恢復(fù)編碼方法的驗證矩陣生成方法包括以下步驟:
[0087](I)設(shè)置一個變換矩陣m[S*0 (Rd+2), S*C*Rd],初始化該矩陣中全部的元素為O,同時設(shè)置數(shù)據(jù)元素C (sp,rp,cp)在全部數(shù)據(jù)元素中的位置為t= (rp-l)*S*C+ (sp-l)*C+cp,其中s表示條帶集在編碼單元中的序號,r表示數(shù)據(jù)元素在條帶集中的行序號,c表示數(shù)據(jù)元素在條帶集中的列序號;
[0088](2)根據(jù)數(shù)據(jù)元素C (sp, rp, cp)生成驗證矩陣中的前S*C行,具體包括以下子步驟:
[0089](2-1)設(shè)置 sp=0,Cp=O ;
[0090](2-2)判斷是否有c〈C,若是則轉(zhuǎn)入步驟(2-3),否則轉(zhuǎn)入步驟(2-6);
[0091](2-3)對第<sp+l>s個條帶集中的第cp+2行的數(shù)據(jù)元素,計算其在全部數(shù)據(jù)元素中的位置t,同時置m[sp*C+cp, t]為I ;
[0092](2-4)對第<sp+2>s個條帶集中以C (<sp+2>s,2,<cp+l>c)為第一個元素,斜率為-1的Rd個元素,計算其在全部數(shù)據(jù)元素中的位置t,同時置變換矩陣m[sp*C+cp,t]為O ;
[0093](2-5)設(shè)置 cp=cp+l,然后返回步驟(2-2);
[0094](2-6 )設(shè)置sp=sp+l,Cp=O,并判斷是佛有sp〈S,若是則返回步驟(2_2 ),否則步驟(2 )結(jié)束;
[0095](3)根據(jù)數(shù)據(jù)元素C (sp, rp, cp)生成驗證矩陣中的S*C行至2S*C行,具體包括以下子步驟:
[0096](3-1)設(shè)置 sp=0,Cp=O ;
[0097](3-2)判斷是否有cp〈C,若是則轉(zhuǎn)入步驟(3-3),否則轉(zhuǎn)到步驟(3-5);
[0098](3-3)對第<sp-l>s個條帶集中以C (<sp-l>s,2,〈cp-l>c)為第一個元素,斜率為-1的Rd個元素,計算其在全部數(shù)據(jù)元素中的位置t,同時置變換矩陣m[S*C+sp*C+cp, t]為I ;
[0099](3-4)設(shè)置 cp=cp+l,然后返回步驟(3-2);
[0100](3-5 )設(shè)置sp=sp+l,Cp=O,并判斷是否有s〈S,若是則返回步驟(3_2 ),否則步驟(3 )結(jié)束。
[0101](4)根據(jù)數(shù)據(jù)元素C (sp, rp,cp)生成驗證矩陣中剩下的Rd*S*C行,具體包括以下子步驟:
[0102](4-1)設(shè)置 sp=0,cp=0,rp=0;
[0103](4-2 )判斷是否有rp〈Rd,如果是則轉(zhuǎn)入步驟(4_3 ),否則過程結(jié)束;
[0104](4-3)判斷是否有sp〈S,如果是則轉(zhuǎn)入步驟(4-4),否則轉(zhuǎn)入步驟(4-8);
[0105](4-4)判斷是否有cp〈C,若是則轉(zhuǎn)入步驟(4-5),否則轉(zhuǎn)入步驟(4-7);
[0106](4-5)計算數(shù)據(jù)元素C (sp, rp, cp)在全部數(shù)據(jù)元素中的位置t,同時置變換矩陣m[2S*C+sp*C+cp, t]為 I ;
[0107](4-6)設(shè)置 cp=cp+l,然后返回步驟(4-4);
[0108](4-7)設(shè)置 sp=sp+l, cp=0,然后返回步驟(4-3);
[0109](4-8)設(shè)置 rp=rp+l, sp=0,然后返回步驟(4-2)。
[0110]為了驗證該編碼的可靠性,需要驗證所有的失效情況下是否能恢復(fù),由于失效的情況太多,我們需要對其進行分類。由于該條帶存在對稱性,因此很多種情況是重復(fù)的,我們只需要找出其中非重復(fù)的情況進行驗證。對于圖1中給出的編碼我們可以發(fā)現(xiàn)其每個條帶集中失效條帶的數(shù)量存在3中情況,情況I是3個失效條帶在同一個條帶集中,情況2是2個失效條帶在同一個條帶集中,剩下的一個失效條帶在另一個條帶集中,最后一種情況3是每個失效條帶只在一個條帶集中。對于情況1,由于條帶集的對稱性,因此3個失效條帶在那個條帶集都是一樣的,我們可以取其在第一個條帶集的情況。在該條帶集中取3個失效條帶可以用排列組合的方法窮舉,其有Cl種情況。對于情況2,由于對稱性其中存在2個
失效條帶的條帶集和存在I個失效條帶的條帶集只存在相鄰和中間隔著一個條帶集這兩種情況。對于存在一個失效條帶的條帶集,由于對稱性,只存在一種情況。對于存在2個失效條帶的條帶集同樣可以用排列組合的方法窮舉。對于情況3可以發(fā)現(xiàn)只存在一種情況。通過如上的分析,就可以減少要驗證的情況了。下面我們給出驗證k從3~7時情況的分
類:
[0111]
【權(quán)利要求】
1.一種高效容多錯的快速恢復(fù)編碼方法,其特征在于,包括以下步驟: (1)獲取用戶輸入的系統(tǒng)參數(shù),包括磁盤的大小S*c、一個條帶中數(shù)據(jù)塊的個數(shù)Rd、一個條帶中校驗快的個數(shù)2個,其中S表示條帶集的數(shù)量,C表示每個條帶集中條帶的數(shù)量; (2)根據(jù)用戶輸入的系統(tǒng)參數(shù)建立快速恢復(fù)編碼的第一行校驗元素CGVrp0, cp0),C(sp1; rp0, Cp1),…,Cd1, rp0, C1V1),其中s表示條帶集在編碼單元中的序號,r0表示校驗元素在條帶集中的第一行,且4=0,c表示校驗元素在條帶集中的列序號,本步驟具體包括以下子步驟:
(2-1)初始化 Sp0=O, Cp0=O ; (2-2)判斷是否有?C,若是則轉(zhuǎn)入步驟(2-3),否則轉(zhuǎn)入步驟(2-6); (2-3)將第Gpc^Ds個條帶集中的第<+2行的元素進行異或運算,以得到校驗元素,并將該校驗元素存放在C (Sptl, r, Cp0)中; (2-4)將第<SpQ+2>s個條帶集中以C (〈SpQ+2>s,2,〈CpQ+l>c)為第一個元素,斜率為-1的Rd個元素進行異或,以得到一個數(shù)據(jù),并把該數(shù)據(jù)與步驟(2-3)得到的校驗元素進行異或,以得到最終的校驗數(shù)據(jù),并將該校驗數(shù)據(jù)存放在C (sp0, r, Cp0)中; (2-5)設(shè)置cpQ=cpQ+l,并返回步驟(2-2);
(2-6)設(shè)置Sptl=S1Vl, Cptl=O,并判斷是否有sVS,若是則返回步驟(2-2),否則步驟(2)結(jié)束。 (3)根據(jù)用戶輸入的系統(tǒng)參數(shù)建立快速恢復(fù)編碼的第二行校驗元素CGVrp1; Cp0),C(sp1; Λ,Cp1),…,Cd1, Λ,C1V1),其中A表示校驗元素在條帶集中的第二行,且6=0,本步驟具體包括以下子步驟:
(3-1)初始化 Sp0=O, Cp0=O ; (3-2)判斷是否有?C,若是則轉(zhuǎn)入步驟(3-3),否則轉(zhuǎn)入步驟(3-5); (3-3)將第〈SpQ-l>s個條帶集中以C (〈SpQ-l>s,2,〈CpQ-l>c)為第一個元素,斜率為I的Rd個元素進行異或,以得到一個數(shù)據(jù),該數(shù)據(jù)就是C (sp0, , Cp0)的結(jié)果; (3-4)設(shè)置cpQ=cpQ+l,并返回步驟(3-2); (3-5)設(shè)置Sptl=S1Vl, <=0,并判斷是否有sVS,若是則返回步驟(3-2),否則過程結(jié)束。
2.一種如權(quán)利要求1所述快速恢復(fù)編碼方法的驗證矩陣生成方法,其特征在于,包括以下步驟: (1)設(shè)置一個變換矩陣m[S*C*(Rd+2), S*C*Rd],初始化該矩陣中全部的元素為0,同時設(shè)置數(shù)據(jù)元素C (sp,rp,cp)在全部數(shù)據(jù)元素中的位置為t= (rp-l) *S*C+ (sp_l) *C+cp,其中s表示條帶集在編碼單元中的序號,r表示數(shù)據(jù)元素在條帶集中的行序號,c表示數(shù)據(jù)元素在條帶集中的列序號; (2)根據(jù)數(shù)據(jù)元素C(sp, rp, cp)生成驗證矩陣中的前S*C行,具體包括以下子步驟: (2-1)設(shè)置 sp=0, Cp=O ; (2-2)判斷是否有c〈C,若是則轉(zhuǎn)入步驟(2-3),否則轉(zhuǎn)入步驟(2-6); (2-3)對第<sp+l>s個條帶集中的第cp+2行的數(shù)據(jù)元素,計算其在全部數(shù)據(jù)元素中的位置 t,同時置 m[sp*C+cp, t]為 I ; (2-4)對第<sp+2>s個條帶集中以C (<sp+2>s,2, <cp+l>c)為第一個元素,斜率為-1的Rd個元素,計算其在全部數(shù)據(jù)元素中的位置t,同時置變換矩陣m[sp*C+cp,t]為O ;(2-5)設(shè)置cp=cp+l,然后返回步驟(2-2); (2-6)設(shè)置sp=sp+l,cp=0,并判斷是佛有sp〈S,若是則返回步驟(2-2),否則步驟(2)結(jié)束; (3)根據(jù)數(shù)據(jù)元素C(sp, rp, cp)生成驗證矩陣中的S*C行至2S*C行,具體包括以下子步驟:
(3-1)設(shè)置 sp=0, Cp=O ; (3-2)判斷是否有cp〈C,若是則轉(zhuǎn)入步驟(3-3),否則轉(zhuǎn)到步驟(3-5); (3-3)對第<sp-l>s個條帶集中以C (<sp-l>s,2, <cp-l>c)為第一個元素,斜率為-1的Rd個元素,計算其在全部數(shù)據(jù)元素中的位置t,同時置變換矩陣m[S*C+sp*C+cp, t]為I ;(3-4)設(shè)置cp=cp+l,然后返回步驟(3-2); (3-5)設(shè)置sp=sp+l,cp=0,并判斷是否有s〈S,若是則返回步驟(3-2),否則步驟(3)結(jié)束。(4)根據(jù)數(shù)據(jù)元素C(sp, rp, cp)生成驗證矩陣中剩下的Rd*S*C行,具體包括以下子步驟:
(4-1)設(shè)置 sp=0, cp=0, rp=0 ; (4-2 )判斷是否有rp〈Rd,如果是則轉(zhuǎn)入步驟(4-3 ),否則過程結(jié)束; (4-3 )判斷是否有sp〈S,如果是則轉(zhuǎn)入步驟(4-4 ),否則轉(zhuǎn)入步驟(4-8 ); (4-4 )判斷是否有cp〈C,若是則轉(zhuǎn)入步驟(4-5 ),否則轉(zhuǎn)入步驟(4-7 ); (4-5)計算數(shù)據(jù)元素C (sp, rp, cp)在全部數(shù)據(jù)元素中的位置t,同時置變換矩陣m[2S*C+sp*C+cp, t]為 I ; (4-6)設(shè)置cp=cp+l,然后返回步驟(4-4); (4-7)設(shè)置sp=sp+l,cp=0,然后返回步驟(4-3); (4-8)設(shè)置rp=rp+l, sp=0,然后返回步驟(4-2)。
【文檔編號】G06F11/20GK103809919SQ201310689402
【公開日】2014年5月21日 申請日期:2013年12月16日 優(yōu)先權(quán)日:2013年12月16日
【發(fā)明者】曹強, 黃建忠, 萬勝剛, 李詩逸, 宋馳, 謝長生 申請人:華中科技大學(xué)