JP2018198358A - 誤り訂正プログラム、及び、誤り訂正装置 - Google Patents
誤り訂正プログラム、及び、誤り訂正装置 Download PDFInfo
- Publication number
- JP2018198358A JP2018198358A JP2017101669A JP2017101669A JP2018198358A JP 2018198358 A JP2018198358 A JP 2018198358A JP 2017101669 A JP2017101669 A JP 2017101669A JP 2017101669 A JP2017101669 A JP 2017101669A JP 2018198358 A JP2018198358 A JP 2018198358A
- Authority
- JP
- Japan
- Prior art keywords
- data
- damaged
- exclusive
- bit string
- integer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Error Detection And Correction (AREA)
Abstract
【課題】データの誤り訂正において、処理負荷を抑制する。【解決手段】誤り訂正プログラムは、N個のAデータ(n)から冗長化データを生成すると共に、冗長化データからAデータ(n)を生成する。ここで、Aデータ(n)が示すビット列を、A(n)とし、A(n)の各々に対応する整数をS(n)とし、A(n)に対応するビット列をB(n)とし、B(n)は、S(n)を指数として2を累乗した値と、A(n)が示す値とを乗算した値を示す。また、全てのA(n)の排他的論理和を示すデータを、P1データとし、全てのB(n)の排他的論理和を示すデータを、P2データとする。誤り訂正プログラムは、Aデータ(n)に基づきP1データ及びP2データを生成し、これらのデータと、これらのデータの各々について生成された、当該データの誤りを検出するための付加データを、冗長化データとする。【選択図】図3
Description
本開示は、誤り訂正プログラム等に関する。
データの記憶媒体への書き込み及び読み出しを行ったり、データの送受信を行ったりする場合、物理的なノイズや機器の障害等によって、データが破損するリスクが存在する。該リスクに対応するため、書き込みや送信の際にデータを冗長化し、データの一部に破損が生じた場合であっても該破損がある一定の範囲内であればデータを復元できる、種々の技術が開発されている。
特許文献1には、このようなデータを復元できる技術として、データをある一定のサイズに分割してデータブロックを生成し、このデータブロックを用いてガロア体の積演算に基づくパリティを含む2種類のパリティを生成し、データブロックとこれらのパリティとを冗長化されたデータとして用いる、という技術が開示されている。
しかしながら、特許文献1に開示されている技術(以下、従来技術)では、ガロア体の積演算に基づいてパリティを生成するため、処理負荷が大きいという問題があった。
本開示は、データの誤り訂正において、処理負荷を抑制することを目的とする。
本開示は、データの誤り訂正において、処理負荷を抑制することを目的とする。
上記課題に鑑みてなされた本発明の一側面に係る誤り訂正プログラムは、ビット長がlであるN個(Nは2以上の整数)のAデータ(n)(nは0〜N−1の整数)から冗長化データを生成すると共に、冗長化データからAデータ(n)を生成する装置としてコンピュータを動作させる。誤り訂正プログラムは、生成部、特定部、及び、復元部を備える。
ここで、2進数で表した値における0又は1の値の並びを、ビット列とする。また、Aデータ(n)が示すビット列を、A(n)とする。また、A(n)の各々に対応する整数であって、各整数は他の整数とは異なる値を有する整数を、S(n)とし、S(n)の最大値をSmaxとする。また、A(n)に対応しており、ビット長がSmaxとlとを加算した値であるビット列を、B(n)とし、B(n)は、S(n)を指数として2を累乗した値と、A(n)が示す値とを乗算した値を示す。また、全てのA(n)の排他的論理和を示すビット列であるP1を示すデータを、P1データとし、全てのB(n)の排他的論理和を示すビット列であるP2を示すデータを、P2データとする。
生成部は、Aデータ(n)に基づきP1データ及びP2データを生成し、Aデータ(n)、P1データ、及び、P2データの各々について、当該データの誤りを検出するための付加データを生成し、Aデータ(n)、P1データ、P2データ、及び、付加データを、冗長化データとする。
また、特定部は、冗長化データに含まれる付加データに基づき、該冗長化データに含まれるAデータ(n)、P1データ、及び、P2データのうちの破損しているデータを特定する。
また、復元部は、冗長化データにおいて、Aデータ(n)のうちの2つが破損しており、且つ、P1データ及びP2データが破損していない場合に、冗長化データに基づき、破損している2つのAデータ(n)を復元する。
また、破損している2つのAデータ(n)のnの値を、f0、f1(f0、f1は0〜N−1の整数)とし、破損していないAデータ(n)のnの値を、t(tは、0〜N−1の整数であって、f0、f1以外の整数)とする。また、A(f0)とA(f1)との排他的論理和を示すビット列を、X0とし、B(f0)とB(f1)との排他的論理和を示すビット列を、X1とする。また、B(f0)において、当該B(f0)に含まれるA(f0)の最下位ビット、最上位ビットに相当するビットの位置を、それぞれ、bl、bmとし、X1におけるblからbmまでのビット列を、X1Aとする。
また、復元部は、全てのA(t)とP1との排他的論理和を算出することで、X0を算出し、A(t)に基づき算出された全てのB(t)とP2との排他的論理和に基づき、X1Aを算出する。また、S(f0)とS(f1)との差の絶対値を指数として2を累乗した値を、Sとし、A(f1)が示す値をSで除算した値を示す、ビット長がlであるビット列、又は、A(f1)が示す値をSで乗算した値を示すビット列における、最下位ビットから並ぶビット長がlであるビット列を、A´(f1)とする。復元部は、X0とX1Aとの排他的論理和を算出することで、A(f1)とA´(f1)との排他的論理和であるX2を算出し、X2に基づきA(f1)を特定し、特定したA(f1)と、P1又はP2とに基づき、A(f0)を特定し、特定したA(f0)及びA(f1)に基づき、Aデータ(f0)及びAデータ(f1)を復元する。
このような構成によれば、ガロア体の積演算を用いること無く、排他的論理和等を用いてデータの誤り訂正が行われるので、データの誤り訂正において処理負荷を抑制することができる。
なお、上記構成において、復元部は、Aデータ(n)のうちの1つであるAデータ(f2)(f2は0〜N−1の整数)が破損しており、且つ、P1データが破損していない場合に、破損していないAデータ(n)をAデータ(t)(tは、0〜N−1の整数であって、f2以外の整数)とし、全てのA(t)とP1との排他的論理和をA(f2)として算出し、算出したA(f2)に基づきAデータ(f2)を復元しても良い。
このような構成によれば、P1が破損していない場合に、破損しているデータを特定することができる。
また、上記構成において、復元部は、Aデータ(n)のうちの1つであるAデータ(f3)(f3は0〜N−1の整数)が破損しており、且つ、P2データが破損していない場合に、破損していないAデータ(n)をAデータ(t)(tは、0〜N−1の整数であって、f3以外の整数)とし、全てのB(t)とP2との排他的論理和をB(f3)として算出し、算出したB(f3)に基づきAデータ(f3)を復元しても良い。
また、上記構成において、復元部は、Aデータ(n)のうちの1つであるAデータ(f3)(f3は0〜N−1の整数)が破損しており、且つ、P2データが破損していない場合に、破損していないAデータ(n)をAデータ(t)(tは、0〜N−1の整数であって、f3以外の整数)とし、全てのB(t)とP2との排他的論理和をB(f3)として算出し、算出したB(f3)に基づきAデータ(f3)を復元しても良い。
このような構成によれば、P2が破損していない場合に、破損しているデータを特定することができる。
また、上記構成において、誤り訂正プログラムは、冗長化データを1つのコンピュータファイルとして出力するように構成されてもよい。このような構成によれば、冗長化データを1つのデータとして扱うことができるので、ユーザにとっての利便性が向上する。
また、上記構成において、誤り訂正プログラムは、冗長化データを1つのコンピュータファイルとして出力するように構成されてもよい。このような構成によれば、冗長化データを1つのデータとして扱うことができるので、ユーザにとっての利便性が向上する。
なお、上述した誤り訂正プログラムにより動作するコンピュータに相当する、誤り訂正装置を構成してもよい。このような場合であっても、同様の効果を得ることができる。
以下、本発明の実施形態について図面を用いて説明する。なお、本発明の実施の形態は、下記の実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の形態を採りうる。
[1.構成の説明]
図1Aは、本実施形態の誤り訂正装置として作動する周知のPC1の構成を示している。PC1は、ディスプレイ10、HDD20、CPU30、ROM40、RAM50、入力装置60等を備える。
図1Aは、本実施形態の誤り訂正装置として作動する周知のPC1の構成を示している。PC1は、ディスプレイ10、HDD20、CPU30、ROM40、RAM50、入力装置60等を備える。
ディスプレイ10は、映像信号に基づき、CPU30等にて生成された映像を表示する。入力装置60は、キーボード、マウス等から構成され、ユーザから受け付けた操作に応じた信号をCPU30に出力する。ROM40は読み出し専用の不揮発性メモリであり、HDD20は読み出し、書き込み可能な不揮発性メモリである。ROM40、HDD20には、CPU30が読み出して実行するプログラム等が予め記憶されている。RAM50は読み出し、書き込み可能な揮発性メモリであり、CPU30がROM40、HDD20に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存したり、作業用のデータを一時的に保存したりするための記憶領域として用いられる。
CPU30は、OSをHDD20から読み出して実行し、HDD20に記憶されている各種プログラムをOS上のプロセスとして実行する。このプロセスにおいて、CPU30は入力装置60から信号の入力を受け付け、ディスプレイ10に表示する映像を生成し、RAM50、HDD20に対してデータの読み出し、書き込みの制御を行う。
PC1には、本実施形態の誤り訂正プログラムがインストールされている。誤り訂正プログラムは、HDD20に保存されていると共に、OS上のプロセスとして実行されるアプリケーションの1つであり、誤り訂正プログラムを動作させることで、PC1は誤り訂正装置として稼働する。なお、誤り訂正装置を、PC1以外の電子装置として構成しても良い。
[2.動作の説明]
(1)概要について
まず、誤り訂正プログラムの概要について説明する。以下の説明では、誤り訂正プログラムが処理を行うといった記載がなされているが、これは、誤り訂正プログラムに従い動作するPC1のCPU30が処理を行うということを意味するのは、言うまでも無い。
(1)概要について
まず、誤り訂正プログラムの概要について説明する。以下の説明では、誤り訂正プログラムが処理を行うといった記載がなされているが、これは、誤り訂正プログラムに従い動作するPC1のCPU30が処理を行うということを意味するのは、言うまでも無い。
誤り訂正プログラムは、冗長化の対象となるデータ(以下、オリジナルデータ)から冗長化データを生成する生成部と、冗長化データにおいて破損しているデータを特定する特定部と、破損しているデータを復元する復元部と、を備える。ここでいう冗長化データとは、オリジナルデータが冗長化されたデータのことである。冗長化とは、オリジナルデータに該オリジナルデータ以外の情報を追加することによって耐障害性を向上させること、をいう。
なお、ここでいうオリジナルデータとは、PC1に搭載されたプログラムを用いて作成された任意のデータをいう。オリジナルデータには、例えば、入力装置60を介してユーザから受け付けた操作に応じて、PC1に搭載されたプログラム(一例として、CADプログラム)を用いて作成された、ビル、家屋等の建築物を含む各種構造物(以後、建設物)を建設するための三次元の設計図を表すデータが含まれうる。但し、これに限定されるものではなく、オリジナルデータには、PC1に搭載されたプログラムを用いて作成された、種々の設計図を表すデータが含まれうる。
誤り訂正プログラムにおいて、生成部は、後述する図3に示すように、冗長化データを生成する冗長化処理を実行する。また、誤り訂正プログラムにおいて、特定部及び復元部は、後述する図4、図5、図8に示すように、冗長化データにおいて破損しているデータを特定し、破損しているデータを復元する復元処理を実行する。以下、順に説明する。
(2)冗長化処理について
(2−1)冗長化処理の概要
冗長化処理では、誤り訂正プログラムは、オリジナルデータをある一定のサイズに分割してデータブロックを生成し、このデータブロックを用いて2種類のパリティを生成し、データブロックとこれらのパリティとを含む冗長化データを生成する。ここでいうパリティとは、破損したデータブロックを破損していないデータブロックに基づいて特定するために用いられる情報をいう。
(2−1)冗長化処理の概要
冗長化処理では、誤り訂正プログラムは、オリジナルデータをある一定のサイズに分割してデータブロックを生成し、このデータブロックを用いて2種類のパリティを生成し、データブロックとこれらのパリティとを含む冗長化データを生成する。ここでいうパリティとは、破損したデータブロックを破損していないデータブロックに基づいて特定するために用いられる情報をいう。
誤り訂正プログラムは、はじめに、冗長化の対象となるデータ(以下、オリジナルデータ)から同一サイズのN個のデータであるデータブロック(以後、Aデータ(n)とも記載)を生成し、Aデータ(n)から冗長化データを生成する。なお、Nは2以上の整数であり、nは、0〜N−1の整数である。また、Aデータ(n)のサイズをビット長で表すと、lビットであり、バイト長で表すと、Lバイトとなる。
オリジナルデータのサイズは、Aデータ(n)のサイズであるLの整数倍であることが望ましい。なお、オリジナルデータのサイズがLの整数倍でない場合は、例えば、Aデータ(0)、Aデータ(1)、Aデータ(2)、・・・といった様に順に分割した際に最後となるAデータ(N−1)のサイズが、L未満となることがあり得る。この場合、誤り訂正プログラムは、不足分を0で充填することによって、Aデータ(n−1)のサイズがLとなるよう調整してもよい。
誤り訂正プログラムは、Aデータ(n)に加えて更に、2種類のパリティデータ、及び、付加データh(n)を生成する。2種類のパリティデータとは、P1データ、P2データである。パリティデータは1つ又は2つのAデータ(n)が破損した際、破損したAデータ(n)を復元可能にするためのデータである。
誤り訂正プログラムは、Aデータ(n)、P1データ、P2データ、付加データ、及び、例えば管理データといったその他データを含む冗長化データを生成する。
なお、本実施形態では、管理データがその他データとして含まれているが、これに限定されるものではない。その他データには、例えば、通信において送受信するデータに含まれるヘッダやフッダ等、が含まれうる。誤り訂正プログラムは、少なくともAデータ(n)、P1データ、P2データ、及び、付加データを含むデータ、として構成されうる。
なお、本実施形態では、管理データがその他データとして含まれているが、これに限定されるものではない。その他データには、例えば、通信において送受信するデータに含まれるヘッダやフッダ等、が含まれうる。誤り訂正プログラムは、少なくともAデータ(n)、P1データ、P2データ、及び、付加データを含むデータ、として構成されうる。
以下では、Aデータ(n)、P1データ、及び、P2データが示すビット列を、それぞれ、A(n)、P1、及び、P2と記載する。ビット列とは、2進数で表した値における0又は1の値の並びを意味する。また、理解を容易にするために、本実施形態の具体例を説明する際には、図1Bに示すように、N=4とし、A(0)、A(1)、A(2)、A(3)をA(n)(nは0〜3の整数)として説明する。但し、Nが4に限定されないことは、言うまでもない。
(2−1−1)P1の生成
誤り訂正プログラムは、全てのA(n)の排他的論理和を、P1として算出する。なお、P1のサイズは、lビット(換言すれば、Lバイト)となる。図2Aは、本実施形態において、N=4としたときに、A(0)〜A(3)の排他的論理和としてP1が生成される様子を示す。以下では、排他的論理和を「^」の記号で表す。つまり、P1は(1)式のように表される。
誤り訂正プログラムは、全てのA(n)の排他的論理和を、P1として算出する。なお、P1のサイズは、lビット(換言すれば、Lバイト)となる。図2Aは、本実施形態において、N=4としたときに、A(0)〜A(3)の排他的論理和としてP1が生成される様子を示す。以下では、排他的論理和を「^」の記号で表す。つまり、P1は(1)式のように表される。
P1=A(0)^A(1)^A(2)^A(3) (1)
(2−1−2)P2の生成
ここで、A(n)の各々に対応するN個の整数であって、各整数は、他の整数とは異なる値を有する整数を、S(n)とする。なお、S(n)は0以上の整数であっても良い。また、S(n)の最大値を、Smaxとする。また、A(n)に対応するビット列を、B(n)とする。B(n)のサイズは、バイト長がMであり、ビット長がmである。また、B(n)のサイズをビット長で表すと、Smaxとlとを加算した値となる。B(n)は、A(n)が示す値と、S(n)を指数として2を累乗した値とを乗算した値を示す。換言すれば、B(n)は、A(n)をS(n)ビット上位側にシフトした値を示す。そして、P2は、全てのB(n)の排他的論理和を示す。
(2−1−2)P2の生成
ここで、A(n)の各々に対応するN個の整数であって、各整数は、他の整数とは異なる値を有する整数を、S(n)とする。なお、S(n)は0以上の整数であっても良い。また、S(n)の最大値を、Smaxとする。また、A(n)に対応するビット列を、B(n)とする。B(n)のサイズは、バイト長がMであり、ビット長がmである。また、B(n)のサイズをビット長で表すと、Smaxとlとを加算した値となる。B(n)は、A(n)が示す値と、S(n)を指数として2を累乗した値とを乗算した値を示す。換言すれば、B(n)は、A(n)をS(n)ビット上位側にシフトした値を示す。そして、P2は、全てのB(n)の排他的論理和を示す。
なお、シフトとは、所定のメモリ領域に記憶されているデータが示すビット列を上位側又は下位側に移動させることで、該ビット列を編集することを意味する。ここで、予め定められた正の整数を、Dとする。ビット列をDビット上位側にシフトした場合には、シフト後の該メモリ領域における最下位ビットから上位側に並ぶDビットには、0が設定された状態となる。また、ビット列をDビット下位側にシフトした場合には、シフト後の該ビット列における最上位ビットから下位側に並ぶDビットには、0が設定された状態となる。そして、シフト後の該メモリ領域に記憶されているデータが示すビット列が、シフトの結果として得られる。
誤り訂正プログラムは、A(n)に基づきP2を算出する。具体的には、例えば、乗算、除算、加算、減算、又は、データのシフト等や、Aデータ(n)をメモリの所定のアドレスに保存したりすることで、A(n)からB(n)が算出される。そして、全てのB(n)の排他的論理和を算出することで、P2が算出される。P2のサイズは、Mバイト(換言すれば、Smax+lビット)となる。
図2Bは、本実施形態において、N=4としたときに、B(0)〜B(3)の排他的論理和としてP2が生成される様子を示す。この場合、SmaxはS(3)となる。
ここで、S(n)は、一例として、nk(kは1以上の整数)として表されるものとする。また、一例として、kは8の倍数とする。すなわち、k=8x(xは1以上の整数)、つまり、S(n)=8nxとなる。また、この場合、P2のバイト長であるMは、L+(N−1)xバイトとなる。
ここで、S(n)は、一例として、nk(kは1以上の整数)として表されるものとする。また、一例として、kは8の倍数とする。すなわち、k=8x(xは1以上の整数)、つまり、S(n)=8nxとなる。また、この場合、P2のバイト長であるMは、L+(N−1)xバイトとなる。
また、ここでは、S(n)をnkとする例を示したが、これに限定されるものではない。S(n)は、nの増加と無関係に、ランダムに設定されうる。
なお、kは、任意の値に設定されうる。但し、本実施形態のように、kは、8、16、32、・・・等といったバイト単位、すなわち8の倍数であることが望ましい。更に述べると、kは、コンピュータのバス幅に等しい値とすることが望ましい。例えば、64ビットアーキテクチャのコンピュータで64ビットバスが用いられる場合であれば、k=64とすることが望ましい。
なお、kは、任意の値に設定されうる。但し、本実施形態のように、kは、8、16、32、・・・等といったバイト単位、すなわち8の倍数であることが望ましい。更に述べると、kは、コンピュータのバス幅に等しい値とすることが望ましい。例えば、64ビットアーキテクチャのコンピュータで64ビットバスが用いられる場合であれば、k=64とすることが望ましい。
本実施形態においては、一例として、B(n)及びP2の算出は、Aデータ(n)のメモリ転送と、A(n)と、該メモリ転送先に記憶されているデータが示すビット列との排他的論理和と、によって、一括して実現される。すなわち、メモリには、予めP2データが記憶される領域(P2領域)として、Mバイトの領域が設定されている。P2の算出を開始する直前は、P2領域に0が設定される。また、P2領域には、A(n)の記憶領域であるR(n)が定められている。R(n)の先頭アドレスは、0が設定されたP2領域におけるR(n)にAデータ(n)をメモリ転送することで、P2領域に保存されたデータがB(n)を示すよう調整されている。一例として、R(n)の先頭アドレスは、P2領域の先頭アドレスから、P2領域の末尾側に、x(N−1−n)バイトオフセットされたアドレスとなる。なお、Aデータ(n)の記憶領域R(n)は、他のAデータ(n)の記憶領域と一部重複する。
そして、R(n)にAデータ(n)が転送される際、R(n)に記憶されているデータが示すビット列とA(n)との排他的論理和が算出される。そして、算出された値が、R(n)に記憶される。このため、Aデータ(n)が全てP2領域に転送されると、P2領域にてP2データが生成される。これにより、乗除算等を用いること無く、メモリ転送によりP2を生成できるため、処理負荷を抑制できる。
但し、P2の生成方法は、これに限定されるものではない。例えば、A(n)に基づいてB(n)を示すデータを生成し、これらのデータからP2データを生成してP2領域に記憶しても良い。
ここで、P2は、(2)式のように表される。
P2=B(0)^B(1)^B(2)^B(3) (2)
(2−1−3)付加データの生成
誤り訂正プログラムは、Aデータ(n)、P1データ、及び、P2データの各々について、当該データの誤りを検出するためのデータである付加データを生成する。ここでは、Aデータ(n)、P1データ、及び、P2データの各々から算出したハッシュ値を示すデータが、付加データとして用いられる。ハッシュ値とは、元になるデータに対して予め定められた演算処理(以下、ハッシュ関数)を行うことによって求められる値をいう。以下では、Aデータ(n)、P1データ、及び、P2データの各々から算出したハッシュ値を示すデータを、それぞれ、h(n)、h(P1)、h(P2)とする。ここでは、各データについて、同じハッシュ関数を用いてハッシュ値を算出するものとする。h(n)、h(P1)、h(P2)は、予め定められたデータサイズ(以下、ハッシュサイズ)となる。
P2=B(0)^B(1)^B(2)^B(3) (2)
(2−1−3)付加データの生成
誤り訂正プログラムは、Aデータ(n)、P1データ、及び、P2データの各々について、当該データの誤りを検出するためのデータである付加データを生成する。ここでは、Aデータ(n)、P1データ、及び、P2データの各々から算出したハッシュ値を示すデータが、付加データとして用いられる。ハッシュ値とは、元になるデータに対して予め定められた演算処理(以下、ハッシュ関数)を行うことによって求められる値をいう。以下では、Aデータ(n)、P1データ、及び、P2データの各々から算出したハッシュ値を示すデータを、それぞれ、h(n)、h(P1)、h(P2)とする。ここでは、各データについて、同じハッシュ関数を用いてハッシュ値を算出するものとする。h(n)、h(P1)、h(P2)は、予め定められたデータサイズ(以下、ハッシュサイズ)となる。
(2−1−4)管理データ
管理データは、誤り訂正プログラムにおいて、予めその値が定められている種々のデータをいう。管理データは、例えば、A(n)の数であるN、A(n)のサイズであるL、ハッシュサイズ、及び、B(n)及びP2のサイズであるM等を示す。また、管理データには、例えば、上述のkやx等といった、nとS(n)とを対応づけるためのデータが含まれうる。これらのデータ等は、予めHDD20に記憶されており、誤り訂正プログラムを実行する際に、RAM50に記憶される。
管理データは、誤り訂正プログラムにおいて、予めその値が定められている種々のデータをいう。管理データは、例えば、A(n)の数であるN、A(n)のサイズであるL、ハッシュサイズ、及び、B(n)及びP2のサイズであるM等を示す。また、管理データには、例えば、上述のkやx等といった、nとS(n)とを対応づけるためのデータが含まれうる。これらのデータ等は、予めHDD20に記憶されており、誤り訂正プログラムを実行する際に、RAM50に記憶される。
(2−2)冗長化処理
次に、冗長化処理について、図3を用いて説明する。誤り訂正プログラムは、例えば、HDD20に対して、PC1上のプログラムによって生成されたオリジナルデータの書き込みを行う際に、本冗長化処理を実行する。本冗長化処理によって生成された冗長化データは、HDD20に対して、1つのコンピュータファイルとして記憶されるものとする。1つのコンピュータファイルとは、PC1におけるファイルシステム上で、1つのファイルとして扱われるデータであること、を意味する。
次に、冗長化処理について、図3を用いて説明する。誤り訂正プログラムは、例えば、HDD20に対して、PC1上のプログラムによって生成されたオリジナルデータの書き込みを行う際に、本冗長化処理を実行する。本冗長化処理によって生成された冗長化データは、HDD20に対して、1つのコンピュータファイルとして記憶されるものとする。1つのコンピュータファイルとは、PC1におけるファイルシステム上で、1つのファイルとして扱われるデータであること、を意味する。
なお、以下の説明において主語が省略されている場合は、誤り訂正プログラムを主語とする。また、オリジナルデータは、HDD20において、予め定められた領域に記憶されているものとする。
はじめに、S110では、RAM50から管理データを取得する。
S115では、HDD20において、P1データが記憶されるサイズがLバイトの領域(以下、P1領域)、及び、P2領域を設定する。また、本ステップでは、P1領域及びP2領域は、0に初期化される。また、nは0に初期化される。
S115では、HDD20において、P1データが記憶されるサイズがLバイトの領域(以下、P1領域)、及び、P2領域を設定する。また、本ステップでは、P1領域及びP2領域は、0に初期化される。また、nは0に初期化される。
S120〜S150では、オリジナルデータからLバイトのAデータ(n)を生成する処理が繰り返し実行される。また、S120〜S150が繰り返し実行されることによって、P1データ及びP2データが生成される。
具体的には、S120では、オリジナルデータにおいて、S120〜S150の処理対象となっていないデータ(以下、未処理データ)のサイズが、L以上か否かを判断する。未処理データがL以上の場合、処理をS130へ移行させ、L未満の場合、処理をS125へ移行させる。
S125では、未処理データに、所定のサイズの0を示すデータを加えたものを、Lバイトのデータとする。なお、未処理データに対しどのように0を示すデータを加えるかについては、適宜定められる。
S130では、オリジナルデータからLバイトのデータをAデータ(n)として取得し、Aデータ(n)をHDD20に記憶する。
S135では、S130にて取得したAデータ(n)が示すA(n)と、P1領域に記憶されたデータが示すビット列との排他的論理和を算出し、算出結果をP1領域に記憶する。
S135では、S130にて取得したAデータ(n)が示すA(n)と、P1領域に記憶されたデータが示すビット列との排他的論理和を算出し、算出結果をP1領域に記憶する。
S140では、S130にて取得したAデータ(n)を、上述のように、P2領域内にメモリ転送し、且つ、排他的論理和を算出する。
S145では、Aデータ(n)についてのハッシュ値であるh(n)を算出し、h(n)をHDD20に記憶する。また、本ステップでは、n+1を新たなnとして記憶し直す。
S145では、Aデータ(n)についてのハッシュ値であるh(n)を算出し、h(n)をHDD20に記憶する。また、本ステップでは、n+1を新たなnとして記憶し直す。
S150では、オリジナルデータのうち、未処理データがあるか否かを判断する。未処理データがある場合は、処理をS120へ移行させ、S120〜S150の処理を繰り返す。未処理データがない場合は、処理をS155へ移行させる。これにより、S155へ処理が移行されるまでに、Aデータ(n)及びh(n)(nは0〜N−1)、P1データ、P2データがそれぞれ生成され、HDD20に記憶される。
S155では、P1データについてのハッシュ値を示すh(P1)を生成し、h(P1)をHDD20に記憶する。
S160では、P2データについてのハッシュ値を示すh(P2)を生成し、h(P2)をHDD20に記憶する。そして、本冗長化処理は終了となる。
S160では、P2データについてのハッシュ値を示すh(P2)を生成し、h(P2)をHDD20に記憶する。そして、本冗長化処理は終了となる。
このようにして、Aデータ(n)、h(n)、P1データ、h(P1)、P2データ、h(P2)、及び、管理データが、冗長化データとして、HDD20に記憶される。
(3)復元処理について
(3−1)復元処理の概要
復元処理では、誤り訂正プログラムは、特定部が、冗長化データにおいて破損しているデータを特定する。続いて、誤り訂正プログラムは、復元部が、冗長化データにおいて破損しているデータの数が2以下であり、且つAデータ(n)のうち破損しているものが2つ以下である場合に、破損しているAデータ(n)を特定し、復元する。なお、P1データ及びP2データの両方が破損している場合、及び、破損しているデータの数が3以上である場合、誤り訂正プログラムは、破損しているAデータ(n)を復元できない。
(3)復元処理について
(3−1)復元処理の概要
復元処理では、誤り訂正プログラムは、特定部が、冗長化データにおいて破損しているデータを特定する。続いて、誤り訂正プログラムは、復元部が、冗長化データにおいて破損しているデータの数が2以下であり、且つAデータ(n)のうち破損しているものが2つ以下である場合に、破損しているAデータ(n)を特定し、復元する。なお、P1データ及びP2データの両方が破損している場合、及び、破損しているデータの数が3以上である場合、誤り訂正プログラムは、破損しているAデータ(n)を復元できない。
(3−2)復元処理
続いて、誤り訂正プログラムにおける特定部及び復元部が実行する復元処理について、図4を用いて説明する。誤り訂正プログラムは、例えば、HDD20から、冗長化データの読み出しを行う際に、本復元処理を実行する。
続いて、誤り訂正プログラムにおける特定部及び復元部が実行する復元処理について、図4を用いて説明する。誤り訂正プログラムは、例えば、HDD20から、冗長化データの読み出しを行う際に、本復元処理を実行する。
はじめに、S210では、破損しているデータを特定する。具体的には、冗長化データに含まれるh(n)、h(P1)及びh(P2)を用いて、冗長化データに含まれるAデータ(n)、P1データ、及び、P2データのうちの破損しているデータを特定する。
つまり、本ステップでは、冗長化データに含まれるAデータ(n)、P1データ、及び、P2データから、冗長化データの生成時と同じハッシュ関数を用いてハッシュ値が算出される。そして、算出されたハッシュ値と冗長化データに含まれるh(n)、h(P1)、及び、h(P2)とが一致していない場合に、一致していないデータを破損しているデータとして特定する。このようなハッシュ値に基づいて破損しているデータを特定する技術は、公知の技術であるため、詳細な説明を割愛する。
S215では、少なくとも1つのAデータ(n)が破損しているか否かを判断する。少なくとも1つのAデータ(n)が破損している場合は、処理をS220へ移行させ、破損していない場合は、本復元処理を終了させる。
S220では、Aデータ(n)とP1データとP2データとのうち、破損しているデータの数が2よりも大きいか否かを判断する。破損しているデータの数が2よりも大きい場合は処理をS255へ移行させ、該数が2以下である場合は処理をS225へ移行させる。
S225では、破損しているAデータ(n)の数が2であるか否かを判断する。ここで、破損しているAデータ(n)の数が2である場合は、処理をS230へ移行させて第1復元処理を実行する。第1復元処理では、破損している2つのA(n)を復元して、本復元処理を終了させる。破損しているAデータ(n)の数が2でない場合、つまり1である場合は、処理をS235へ移行させる。
S235では、P1データが破損しているか否かを判断する。ここで、P1データが破損していない場合は、処理をS240へ移行させて第2復元処理を実行する。第2復元処理では、破損している1つのAデータ(n)を復元して、本復元処理を終了させる。P1データが破損している場合は、処理をS245へ移行させる。
S245では、P2データが破損しているか否かを判断する。ここで、P2データが破損していない場合は、処理をS250へ移行させて第3復元処理を実行する。第3復元処理では、破損している1つのAデータ(n)を復元して、本復元処理を終了させる。P2データが破損している場合は、処理をS255へ移行させる。
P1データ及びP2データの両方が破損している場合、及び、破損しているデータの数が3以上である場合に移行するS255では、一例として、復元処理が異常終了されたことを表す異常フラグをセットし、本復元処理を終了させる。
次に、第1復元処理、第2復元処理、第3復元処理をそれぞれ説明する。
(3−2−1)第1復元処理
次に、第1復元処理について、図5を用いて説明する。第1復元処理では、Aデータ(n)のうちの2つが破損しており、且つ、P1データ及びP2データが破損していない場合に、破損している2つのAデータ(n)が復元される。ここで、破損しているAデータ(n)のnの値を、f0、f1(f0、f1は0〜N−1の整数)とし、破損していないAデータ(n)のnの値を、t(tは、0〜N−1の整数であって、f0、f1以外の整数)とする。
(3−2−1)第1復元処理
次に、第1復元処理について、図5を用いて説明する。第1復元処理では、Aデータ(n)のうちの2つが破損しており、且つ、P1データ及びP2データが破損していない場合に、破損している2つのAデータ(n)が復元される。ここで、破損しているAデータ(n)のnの値を、f0、f1(f0、f1は0〜N−1の整数)とし、破損していないAデータ(n)のnの値を、t(tは、0〜N−1の整数であって、f0、f1以外の整数)とする。
図6Aは、本実施形態において、N=4としたときに、Aデータ(1)とAデータ(2)とが破損しており、且つ、Aデータ(0)とAデータ(3)とP1とP2とが破損していない様子を示す。
S310では、全てのA(t)とP1との排他的論理和を算出することで、A(f0)とA(f1)との排他的論理和を示すビット列であるX0を算出する。すなわち、本実施形態においては、図6Bに示すように、A(0)とA(3)とP1との排他的論理和を、X0として算出する。P1は(1)式で表されることから、X0は、以下の(3)式で表されるように、A(1)とA(2)との排他的論理和に相当する。
P1=A(0)^A(1)^A(2)^A(3)
A(0)^P1=A(0)^A(0)^A(1)^A(2)^A(3)
A(0)^P1=A(1)^A(2)^A(3)
A(3)^A(0)^P1=A(3)^A(1)^A(2)^A(3)
A(3)^A(0)^P1=A(1)^A(2)=X0 (3)
S320では、A(t)に基づきB(t)を算出する。すなわち、本実施形態においては、破損していないA(0)とA(3)とに基づき、B(0)とB(3)とを算出する。
A(0)^P1=A(0)^A(0)^A(1)^A(2)^A(3)
A(0)^P1=A(1)^A(2)^A(3)
A(3)^A(0)^P1=A(3)^A(1)^A(2)^A(3)
A(3)^A(0)^P1=A(1)^A(2)=X0 (3)
S320では、A(t)に基づきB(t)を算出する。すなわち、本実施形態においては、破損していないA(0)とA(3)とに基づき、B(0)とB(3)とを算出する。
S330では、全てのB(t)とP2との排他的論理和を算出することで、B(f0)とB(f1)との排他的論理和を示すビット列であるX1を算出する。すなわち、本実施形態においては、図6Cに示すように、B(0)とB(3)とP2との排他的論理和を、X1として算出する。P2は(2)式で表されることから、X1は、以下の(4)式で表されるように、B(1)とB(2)との排他的論理和に相当する。
P2=B(0)^B(1)^B(2)^B(3)
B(0)^B(3)^P2=B(1)^B(2)=X1 (4)
そして、S340〜S360では、次のようにしてA(f0)、A(f1)が復元される。
B(0)^B(3)^P2=B(1)^B(2)=X1 (4)
そして、S340〜S360では、次のようにしてA(f0)、A(f1)が復元される。
まず、B(f0)において、A(f0)の最下位ビット、最上位ビットに相当するビットの位置を、それぞれ、bl、bmとする。つまり、B(f0)におけるA(f0)が占めるビット列の最下位ビットの位置を、blとし、該ビット列の最上位ビットの位置を、bmとする。そして、X1におけるblからbmまでのビット列を、X1Aとする。
本実施形態では、一例として、Aデータ(1)とAデータ(2)とが破損している。X1におけるX1Aを、B(1)に含まれるA(1)に揃えるか(f0<f1、つまり、f0=1、f1=2とするか)、又は、B(2)におけるA(2)に揃えるか(f0>f1、つまり、f0=2、f1=1とするか)によって、計算方法は異なるものとなる。
すなわち、f0<f1(換言すれば、f0=1、f1=2)の場合、図6Cに示すように、B(1)におけるA(1)が占める部分の最下位のビット、最上位のビットが、それぞれ、bl、bmとなる。そして、X1Aは、A(1)と、B(2)におけるblからbmかけてのビット列との排他的論理和を示す。一方、f0>f1(換言すれば、f0=2、f1=1)の場合、B(2)におけるA(2)が占める部分の最下位のビット、最上位のビットが、それぞれ、bl、bmとなる。そして、X1Aは、A(2)と、B(1)におけるblからbmかけてのビット列との排他的論理和を示す。
また、図6Dに示すように、f0<f1の場合には、A(f1)を、S(f0)とS(f1)との差分の絶対値である|S(f0)−S(f1)|ビット上位側にシフトさせたデータ列を、A´(f1)とする。なお、本実施形態では、|S(f0)−S(f1)|=kとなる。ここで、|S(f0)−S(f1)|を指数として2を累乗した値を、Sとする。換言すれば、A´(f1)は、A(f1)が示す値をSで乗算した値のビット列における、最下位ビットから並ぶデータ長がlであるビット列となる。一方、f0>f1の場合には、A(f1)を、|S(f0)−S(f1)|ビット下位側にシフトさせたデータ列を、A´(f1)とする。換言すれば、A´(f1)は、A(f1)が示す値をSで除算した値を示す、ビット長がlであるビット列となる。
そして、図7Aに示すように、X0とX1Aとの排他的論理和であるX2を算出する。X2は、A(f1)とA´(f1)との排他的論理和に相当する。さらに、X2に基づきA(f1)を特定し、特定したA(f1)と、P1又はP2とに基づき、A(f0)を特定する。
本実施形態では、一例として、X1を下位側にシフトした上でX2を算出する。
まず、f0<f1とした場合について説明する。S340では、X1をS(1)ビット(換言すれば、kビット)下位側にシフトさせたX1´を算出する。図7Bに示すように、X1´は、A(1)と同じ値を示すビット長がmのビット列と、A(2)をS(2)−S(1)ビット上位側にシフトした値と同じ値を示す、ビット長がmのビット列との排他的論理和を示す。そして、X1´における最下位ビットから並ぶビット長がlのビット列を、X1Aとして特定する。
まず、f0<f1とした場合について説明する。S340では、X1をS(1)ビット(換言すれば、kビット)下位側にシフトさせたX1´を算出する。図7Bに示すように、X1´は、A(1)と同じ値を示すビット長がmのビット列と、A(2)をS(2)−S(1)ビット上位側にシフトした値と同じ値を示す、ビット長がmのビット列との排他的論理和を示す。そして、X1´における最下位ビットから並ぶビット長がlのビット列を、X1Aとして特定する。
S350では、X1AとX0との排他的論理和であるX2を算出する。図7Bに示すように、X2は、A(2)と、A(2)をS(2)−S(1)ビット(換言すれば、kビット)上位側にシフトしたビット列との排他的論理和に相当する。
一方、f0>f1とした場合、以下のようにしてX2が算出される。すなわち、S340では、X1をS(2)ビット下位側にシフトさせたX1´を算出する。図8に示すように、X1´は、A(1)をS(1)ビット下位側にシフトさせたビット列と同じ値を示す、ビット長がmのビット列と、A(2)と同じ値を示すビット長がmのビット列との排他的論理和を示す。そして、X1´における最下位ビットから並ぶビット長がlのビット列を、X1Aとして特定する。
S350では、X1AとX0との排他的論理和であるX2を算出する。図8に示すように、X2は、A(1)と、A(1)をS(2)−S(1)ビット(換言すれば、kビット)下位側にシフトしたビット列との排他的論理和に相当する。
なお、この他にも、一例として、X0と同じ値を示すビット長がmのビット列を、S(1)ビット、又は、S(2)ビット上位側にシフトしたX0´を算出しても良い。そして、X0´とX1との排他的論理和であるYを算出しても良い。Yにおけるblからbmまでのビット列は、X2となる。シフト等により、YからX2を算出しても良い。
続いて、S360では、X2に基づきA(f1)が特定され、その後、A(f0)が特定される。
まず、f0<f1の場合、つまり、f1=2の場合、X2は、A(f1)と、A(f1)を、|S(f0)−S(f1)|ビット上位側にシフトしたビット列であるA´(f1)との排他的論理和となる。このため、本実施形態では、X2は、図7Bに示すように、A(2)と、A(2)をS(2)−S(1)ビット(換言すれば、kビット)上位側にシフトしたビット列との排他的論理和に相当する。まず、X2に基づき、A(f1)が特定される。以下では、A(f1)の特定方法について説明する。
まず、f0<f1の場合、つまり、f1=2の場合、X2は、A(f1)と、A(f1)を、|S(f0)−S(f1)|ビット上位側にシフトしたビット列であるA´(f1)との排他的論理和となる。このため、本実施形態では、X2は、図7Bに示すように、A(2)と、A(2)をS(2)−S(1)ビット(換言すれば、kビット)上位側にシフトしたビット列との排他的論理和に相当する。まず、X2に基づき、A(f1)が特定される。以下では、A(f1)の特定方法について説明する。
X2及びA(2)において、最下位ビットから並ぶビット長がS(2)−S(1)のビット列を、(ア)とする。また、A´(2)において、最下位ビットから並ぶビット長がS(2)−S(1)のビット列は、全て0となる。このため、図9Aに示すように、X2及びA(2)の(ア)は一致する。したがって、X2の(ア)を、A(2)における(ア)として特定できる。
次に、A(2)、X2において、(ア)の上位側に隣接するビットから上位側に並ぶビット長がkのビット列を、それぞれ、(イ)、(ウ)とする。図9Bに示すように、(ウ)は、(ア)と(イ)との排他的論理和に相当する。このため、A(2)の(ア)とX2の(ウ)との排他的論理和を算出することで、A(2)の(イ)を特定できる。
そして、図9Cに示すように、同様にして、A(2)における(イ)の上位側に隣接するビットから上位側に並ぶビットを、ビット長がkのビット列単位で繰り返し特定することで、A(2)を特定する。
一方、f0>f1の場合、つまり、f1=1の場合、X2は、A(f1)と、A(f1)を、|S(f0)−S(f1)|ビット下位側にシフトしたビット列であるA´(f1)との排他的論理和となる。このため、本実施形態では、X2は、図8に示すように、A(1)と、A(1)をS(2)−S(1)ビット(換言すれば、kビット)下位側にシフトしたビット列との排他的論理和に相当する。そして、同様にして、まず、X2に基づき、A(f1)が特定される。
X2及びA(1)において、最上位ビットから並ぶビット長がS(2)−S(1)のビット列を、(ア)とする。また、A´(1)において、最上位ビットから並ぶビット長がS(2)−S(1)のビット列は、全て0となる。このため、図9Dに示すように、X2及びA(1)の(ア)は一致する。したがって、X2の(ア)を、A(1)における(ア)として特定できる。
次に、A(1)、X2において、(ア)の下位側に隣接するビットから下位側に並ぶビット長がkのビット列を、それぞれ、(イ)、(ウ)とする。図9Dに示すように、(ウ)は、(ア)と(イ)との排他的論理和に相当する。このため、A(1)の(ア)とX2の(ウ)との排他的論理和を算出することで、A(1)の(イ)を特定できる。
そして、同様にして、A(1)における(イ)の下位側に隣接するビットから下位側に並ぶビットを、ビット長がkのビット列単位で繰り返し特定することで、A(1)を特定する。
次に、A(f1)と、P1又はP2とに基づき、A(f0)を特定する。具体的には、P1とA(t)と排他的論理和により算出されたX0とA(f1)との排他的論理和を、A(f0)として算出しても良い。この他にも、A(f1)に基づきB(f1)を算出しても良い。そして、X1とB(f1)との排他的論理和を、B(f0)として算出し、B(f0)に基づきA(f0)を算出しても良い。
誤り訂正プログラムは、特定したA(f0)、A(f1)を、冗長化データにおけるAデータ(f0)、Aデータ(f1)に設定することで、これらのデータを復元する。そして、第1復元処理を終了する。
(3−2−2)第2復元処理
次に、第2復元処理について、図10Aを用いて説明する。誤り訂正プログラムは、第2復元処理では、Aデータ(n)のうちの1つであるAデータ(f2)(f2は0〜N−1の整数)が破損しており、且つ、P1データが破損していない場合に、A(f2)を特定することが可能である。ここで、破損していないAデータ(n)をAデータ(t)(tは、0〜N−1の整数であって、f2以外の整数)と記載する。
次に、第2復元処理について、図10Aを用いて説明する。誤り訂正プログラムは、第2復元処理では、Aデータ(n)のうちの1つであるAデータ(f2)(f2は0〜N−1の整数)が破損しており、且つ、P1データが破損していない場合に、A(f2)を特定することが可能である。ここで、破損していないAデータ(n)をAデータ(t)(tは、0〜N−1の整数であって、f2以外の整数)と記載する。
図10Bは、一例として、Aデータ(0)〜Aデータ(3)のうちAデータ(1)が破損しており、且つ、P2データが破損しP1データが破損していない様子を示す。この場合、f2=1であり、tは0、2、3である。
S410では、全てのA(t)とP1との各々が示す値の排他的論理和を、A(f2)として算出する。なお、算出したA(f2)を、冗長化データにおけるAデータ(f2)に設定することで、Aデータ(f2)が復元されても良い。そして、第2復元処理を終了する。
(3−2−3)第3復元処理
次に、第3復元処理について、図10Cを用いて説明する。誤り訂正プログラムは、第3復元処理では、Aデータ(n)のうちの1つであるAデータ(f3)(f3は0〜N−1の整数)が破損しており、且つ、P2データが破損していない場合に、A(f3)を特定することが可能である。ここで、破損していないAデータ(n)をAデータ(t)(tは、0〜N−1の整数であって、f3以外の整数)と記載する。
次に、第3復元処理について、図10Cを用いて説明する。誤り訂正プログラムは、第3復元処理では、Aデータ(n)のうちの1つであるAデータ(f3)(f3は0〜N−1の整数)が破損しており、且つ、P2データが破損していない場合に、A(f3)を特定することが可能である。ここで、破損していないAデータ(n)をAデータ(t)(tは、0〜N−1の整数であって、f3以外の整数)と記載する。
図10Dは、一例として、Aデータ(0)〜Aデータ(3)のうちAデータ(1)が破損しており、且つ、P1データが破損しP2データが破損していない様子を示す。この場合、f3=1であり、tは0、2、3である。
S510では、A(t)に基づき、B(t)を算出する。すなわち、本実施形態おいては、A(0)とA(2)とA(3)とに基づき、B(0)とB(2)とB(3)とを算出する。
S520では、全てのB(t)とP2との排他的論理和を示すビット列であるX3を算出する。
ここで、X3をS(f3)ビット下位側にシフトした値を、X3´とする。S530では、X3に基づきX3´を算出する。なお、X3´は、例えば、除算やシフト等により算出される。そして、X3´の最下位ビットから並ぶlビットのビット列を、A(f3)として特定する。なお、特定したA(f3)を、冗長化データにおけるAデータ(f3)に設定することで、Aデータ(f3)が復元されても良い。そして、第3復元処理を終了する。
ここで、X3をS(f3)ビット下位側にシフトした値を、X3´とする。S530では、X3に基づきX3´を算出する。なお、X3´は、例えば、除算やシフト等により算出される。そして、X3´の最下位ビットから並ぶlビットのビット列を、A(f3)として特定する。なお、特定したA(f3)を、冗長化データにおけるAデータ(f3)に設定することで、Aデータ(f3)が復元されても良い。そして、第3復元処理を終了する。
[3.効果]
本実施形態の誤り訂正プログラムによれば、ガロア体の積演算を用いること無く、排他的論理和等を用いてデータの誤り訂正が行われるので、データの誤り訂正において処理負荷を抑制することができる。また、冗長化データを生成する際には、A(n)をP2領域にメモリ転送しながら排他的論理和を行うことで、P2データが生成される。このため、冗長化データを生成する際の処理負荷を抑制できる。
本実施形態の誤り訂正プログラムによれば、ガロア体の積演算を用いること無く、排他的論理和等を用いてデータの誤り訂正が行われるので、データの誤り訂正において処理負荷を抑制することができる。また、冗長化データを生成する際には、A(n)をP2領域にメモリ転送しながら排他的論理和を行うことで、P2データが生成される。このため、冗長化データを生成する際の処理負荷を抑制できる。
[4.他の実施形態]
以上、本開示の実施形態について説明したが、本開示は上述の実施形態に限定されることなく、種々変形して実施することができる。
以上、本開示の実施形態について説明したが、本開示は上述の実施形態に限定されることなく、種々変形して実施することができる。
(4a)上記実施形態では、S(n)は、8の倍数に設定されていたが、これに限定されるものではない。S(n)は、例えば、S(0)=2、S(1)=8、S(2)=0、S(3)=4、といったように、8の倍数といったような所定の数の倍数でなく、任意に設定されうる。なお、上記実施形態及びこの例においては、いずれも、nとS(n)との対応を表すデータが管理データとして含まれる。また、S(n)にnの値そのものを用いてもよい。この場合、nとS(n)との対応を表すデータが管理データとして不要になる。これにより、管理データのための記憶領域を別の用途に活用することができる。
(4b)上述した誤り訂正プログラムにより動作するコンピュータに相当する、誤り訂正装置を構成してもよい。このような場合であっても、誤り訂正プログラムにより得られる効果と同様の効果を得ることができる。
(4c)上記実施形態では、オリジナルデータから生成された冗長化データは、HDD20に対して、1つのコンピュータファイルとして記憶されていたが、これに限定されるものではない。冗長化データは、異なる複数のHDDに対して、HDD毎に分割して記憶されうる。また、冗長化データは、パケット単位に分割されて、送受信されうる。
HDDでは、セクタ単位でデータの書き込みが行われる。データの破損は、これらセクタ単位、パケット単位で発生する可能性が高い。Aデータ(n)と該Aデータ(n)から生成されたh(n)とを含むデータを、分割ブロックというものとする。分割ブロックの大きさは、セクタ又はパケットの整数倍となるように設定されることが望ましい。つまり、分割ブロックの大きさがセクタ又はパケットの整数倍となるように、Aデータ(n)のサイズであるLが設定されることが望ましい。
また、これによれば、分割ブロックの境界と、セクタ又はパケットによる境界とを一致させることができるので、セクタ又はブロックにおけるデータの破損が複数の分割ブロックに渡って影響を与えること、を抑制することができる。
(4d)上記実施形態では、ハッシュ値を付加データとして用いたが、これに限定されるものではない。付加データは、例えば、周知のパリティ符号といったように、Aデータ(n)、P1データ、P2データが破損しているか否かを特定できる情報であればよい。
(4e)上記実施形態では、オリジナルデータを分割して複数のAデータ(n)を生成し、Aデータ(n)に基づいてP1データ及びP2データを生成し、少なくともこれらを含む冗長化データを生成したが、これに限定されるものではない。冗長化プログラムは、例えば、Aデータ(n)の各々を更に小分割サイズK(K<L)に分割するように構成されてもよい。そして、冗長化プログラムは、該小分割サイズKのデータをAデータ(n)と見なして、同様に、P1データ及びP2データを生成して記憶するように構成されてもよい。つまり、オリジナルデータに全体に対してP1データ及びP2データといった2つのパリティが1組だけ生成されるのではなく、オリジナルデータに全体に対してP1データ及びP2データが複数組生成されてもよい。これによれば、より耐障害性を向上させることができる。
(4f)上記実施形態における1つの構成要素が有する複数の機能を、複数の構成要素によって実現したり、1つの構成要素が有する1つの機能を、複数の構成要素によって実現したりしてもよい。また、複数の構成要素が有する複数の機能を、1つの構成要素によって実現したり、複数の構成要素によって実現される1つの機能を、1つの構成要素によって実現したりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加又は置換してもよい。なお、特許請求の範囲に記載した文言から特定される技術思想に含まれるあらゆる態様が本開示の実施形態である。
[5.特許請求の範囲との対応]
上記実施形態の説明で用いた用語と、特許請求の範囲の記載に用いた用語との対応を示す。冗長化処理(S110〜S160)が生成部に相当し、S210が特定部に相当し、S215〜S250が復元部に相当する。
上記実施形態の説明で用いた用語と、特許請求の範囲の記載に用いた用語との対応を示す。冗長化処理(S110〜S160)が生成部に相当し、S210が特定部に相当し、S215〜S250が復元部に相当する。
1…PC、10…ディスプレイ、20…HDD、30…CPU、40…ROM、50…RAM、60…入力装置。
Claims (5)
- ビット長がlであるN個(Nは2以上の整数)のAデータ(n)(nは0〜N−1の整数)から冗長化データを生成すると共に、前記冗長化データから前記Aデータ(n)を生成する装置としてコンピュータを動作させる誤り訂正プログラムであって、
2進数で表した値における0又は1の値の並びを、ビット列とし、
前記Aデータ(n)が示す前記ビット列を、A(n)とし、
前記A(n)の各々に対応する整数であって、各整数は他の整数とは異なる値を有する整数を、S(n)とし、前記S(n)の最大値をSmaxとし、
前記A(n)に対応しており、ビット長が前記Smaxと前記lとを加算した値である前記ビット列を、B(n)とし、前記B(n)は、前記S(n)を指数として2を累乗した値と、前記A(n)が示す値とを乗算した値を示し、
全ての前記A(n)の排他的論理和を示す前記ビット列であるP1を示すデータを、P1データとし、全ての前記B(n)の排他的論理和を示す前記ビット列であるP2を示すデータを、P2データとし、
前記Aデータ(n)に基づき前記P1データ及び前記P2データを生成し、前記Aデータ(n)、前記P1データ、及び、前記P2データの各々について、当該データの誤りを検出するための付加データを生成し、前記Aデータ(n)、前記P1データ、前記P2データ、及び、前記付加データを、前記冗長化データとする生成部と、
前記冗長化データに含まれる前記付加データに基づき、該冗長化データに含まれる前記Aデータ(n)、前記P1データ、及び、前記P2データのうちの破損しているデータを特定する特定部と、
前記冗長化データにおいて、前記Aデータ(n)のうちの2つが破損しており、且つ、前記P1データ及び前記P2データが破損していない場合に、前記冗長化データに基づき、破損している2つの前記Aデータ(n)を復元する復元部として、コンピュータを動作させ、
破損している2つの前記Aデータ(n)のnの値を、f0、f1(f0、f1は0〜N−1の整数)とし、破損していない前記Aデータ(n)のnの値を、t(tは、0〜N−1の整数であって、f0、f1以外の整数)とし、
前記A(f0)と前記A(f1)との排他的論理和を示す前記ビット列を、X0とし、
前記B(f0)と前記B(f1)との排他的論理和を示す前記ビット列を、X1とし、
前記B(f0)において、当該B(f0)に含まれる前記A(f0)の最下位ビット、最上位ビットに相当するビットの位置を、それぞれ、bl、bmとし、前記X1における前記blから前記bmまでの前記ビット列を、X1Aとし、
前記復元部は、
全ての前記A(t)と前記P1との排他的論理和を算出することで、前記X0を算出し、
前記A(t)に基づき算出された全ての前記B(t)と前記P2との排他的論理和に基づき、前記X1Aを算出し、
前記S(f0)と前記S(f1)との差の絶対値を指数として2を累乗した値を、Sとし、
前記A(f1)が示す値を前記Sで除算した値を示す、ビット長が前記lである前記ビット列、又は、前記A(f1)が示す値を前記Sで乗算した値を示す前記ビット列における、最下位ビットから並ぶビット長が前記lである前記ビット列を、A´(f1)とし、
前記X0と前記X1Aとの排他的論理和を算出することで、前記A(f1)と前記A´(f1)との排他的論理和であるX2を算出し、
前記X2に基づき前記A(f1)を特定し、特定した前記A(f1)と、前記P1又は前記P2とに基づき、前記A(f0)を特定し、特定した前記A(f0)及び前記A(f1)に基づき、前記Aデータ(f0)及び前記Aデータ(f1)を復元する
誤り訂正プログラム。 - 請求項1に記載の誤り訂正プログラムであって、
前記復元部は、
前記Aデータ(n)のうちの1つである前記Aデータ(f2)(f2は0〜N−1の整数)が破損しており、且つ、前記P1データが破損していない場合に、
破損していない前記Aデータ(n)を前記Aデータ(t)(tは、0〜N−1の整数であって、f2以外の整数)とし、
全ての前記A(t)と前記P1との排他的論理和を前記A(f2)として算出し、算出した前記A(f2)に基づき前記Aデータ(f2)を復元する
誤り訂正プログラム。 - 請求項1又は請求項2に記載の誤り訂正プログラムであって、
前記復元部は、
前記Aデータ(n)のうちの1つである前記Aデータ(f3)(f3は0〜N−1の整数)が破損しており、且つ、前記P2データが破損していない場合に、
破損していない前記Aデータ(n)を前記Aデータ(t)(tは、0〜N−1の整数であって、f3以外の整数)とし、
全ての前記B(t)と前記P2との排他的論理和を前記B(f3)として算出し、算出した前記B(f3)に基づき前記Aデータ(f3)を復元する
誤り訂正プログラム。 - 請求項1から請求項3のいずれか1項に記載の誤り訂正プログラムであって、
前記冗長化データを1つのコンピュータファイルとして出力する
誤り訂正プログラム。 - ビット長がlであるN個(Nは2以上の整数)のAデータ(n)(nは0〜N−1の整数)から冗長化データを生成すると共に、前記冗長化データから前記Aデータ(n)を生成する装置としてコンピュータを動作させる誤り訂正装置であって、
2進数で表した値における0又は1の値の並びを、ビット列とし、
前記Aデータ(n)が示す前記ビット列を、A(n)とし、
前記A(n)の各々に対応する整数であって、各整数は他の整数とは異なる値を有する整数を、S(n)とし、前記S(n)の最大値をSmaxとし、
前記A(n)に対応しており、ビット長が前記Smaxと前記lとを加算した値である前記ビット列を、B(n)とし、前記B(n)は、前記S(n)を指数として2を累乗した値と、前記A(n)が示す値とを乗算した値を示し、
全ての前記A(n)の排他的論理和を示す前記ビット列であるP1を示すデータを、P1データとし、全ての前記B(n)の排他的論理和を示す前記ビット列であるP2を示すデータを、P2データとし、
前記Aデータ(n)に基づき前記P1データ及び前記P2データを生成し、前記Aデータ(n)、前記P1データ、及び、前記P2データの各々について、当該データの誤りを検出するための付加データを生成し、前記Aデータ(n)、前記P1データ、前記P2データ、及び、前記付加データを、前記冗長化データとする生成部と、
前記冗長化データに含まれる前記付加データに基づき、該冗長化データに含まれる前記Aデータ(n)、前記P1データ、及び、前記P2データのうちの破損しているデータを特定する特定部と、
前記冗長化データにおいて、前記Aデータ(n)のうちの2つが破損しており、且つ、前記P1データ及び前記P2データが破損していない場合に、前記冗長化データに基づき、破損している2つの前記Aデータ(n)を復元する復元部と、を備え、
破損している2つの前記Aデータ(n)のnの値を、f0、f1(f0、f1は0〜N−1の整数)とし、破損していない前記Aデータ(n)のnの値を、t(tは、0〜N−1の整数であって、f0、f1以外の整数)とし、
前記A(f0)と前記A(f1)との排他的論理和を示す前記ビット列を、X0とし、
前記B(f0)と前記B(f1)との排他的論理和を示す前記ビット列を、X1とし、
前記B(f0)において、当該B(f0)に含まれる前記A(f0)の最下位ビット、最上位ビットに相当するビットの位置を、それぞれ、bl、bmとし、前記X1における前記blから前記bmまでの前記ビット列を、X1Aとし、
前記復元部は、
全ての前記A(t)と前記P1との排他的論理和を算出することで、前記X0を算出し、
前記A(t)に基づき算出された全ての前記B(t)と前記P2との排他的論理和に基づき、前記X1Aを算出し、
前記S(f0)と前記S(f1)との差の絶対値を指数として2を累乗した値を、Sとし、
前記A(f1)が示す値を前記Sで除算した値を示す、ビット長が前記lである前記ビット列、又は、前記A(f1)が示す値を前記Sで乗算した値を示す前記ビット列における、最下位ビットから並ぶビット長が前記lである前記ビット列を、A´(f1)とし、
前記X0と前記X1Aとの排他的論理和を算出することで、前記A(f1)と前記A´(f1)との排他的論理和であるX2を算出し、
前記X2に基づき前記A(f1)を特定し、特定した前記A(f1)と、前記P1又は前記P2とに基づき、前記A(f0)を特定し、特定した前記A(f0)及び前記A(f1)に基づき、前記Aデータ(f0)及び前記Aデータ(f1)を復元する
誤り訂正装置。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2017101669A JP2018198358A (ja) | 2017-05-23 | 2017-05-23 | 誤り訂正プログラム、及び、誤り訂正装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2017101669A JP2018198358A (ja) | 2017-05-23 | 2017-05-23 | 誤り訂正プログラム、及び、誤り訂正装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2018198358A true JP2018198358A (ja) | 2018-12-13 |
Family
ID=64663064
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2017101669A Pending JP2018198358A (ja) | 2017-05-23 | 2017-05-23 | 誤り訂正プログラム、及び、誤り訂正装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2018198358A (ja) |
Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2004165922A (ja) * | 2002-11-12 | 2004-06-10 | Sony Corp | 情報処理装置および方法、並びにプログラム |
| JP2008186400A (ja) * | 2007-01-31 | 2008-08-14 | Fujitsu Ltd | Raid装置及びガロア体を用いたデータ復元装置 |
-
2017
- 2017-05-23 JP JP2017101669A patent/JP2018198358A/ja active Pending
Patent Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2004165922A (ja) * | 2002-11-12 | 2004-06-10 | Sony Corp | 情報処理装置および方法、並びにプログラム |
| JP2008186400A (ja) * | 2007-01-31 | 2008-08-14 | Fujitsu Ltd | Raid装置及びガロア体を用いたデータ復元装置 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN111553473B (zh) | 数据冗余方法及执行数据冗余方法的神经网络处理器 | |
| CN112860475A (zh) | 基于rs纠删码的校验块恢复方法、装置、系统及介质 | |
| WO2020047707A1 (zh) | 分布式存储系统的数据编码、解码及修复方法 | |
| US20210218419A1 (en) | Method, device and apparatus for storing data, computer readable storage medium | |
| CN103699494A (zh) | 一种数据存储方法、数据存储设备和分布式存储系统 | |
| JP2013003656A (ja) | メモリコントローラ | |
| CN110990189A (zh) | 数据存储方法、装置、电子设备及计算机可读存储介质 | |
| CN110750382A (zh) | 用于提高数据修复性能的最小存储再生码编码方法及系统 | |
| CN114385409A (zh) | 基于纠删码的编码方法、分布式系统、设备及存储介质 | |
| WO2016082156A1 (zh) | 元数据的恢复方法及装置 | |
| WO2018000788A1 (zh) | 一种数据存储方法和装置、一种数据恢复方法和装置 | |
| CN111782152A (zh) | 数据存储方法、数据恢复方法、装置、服务器及存储介质 | |
| CN103631670B (zh) | 存储器储存装置、存储器控制器与数据处理方法 | |
| CN112799875A (zh) | 基于高斯消元进行校验恢复的方法、系统、设备及介质 | |
| US20080133967A1 (en) | Distributed object sharing system and method thereof | |
| CN115454711A (zh) | 一种分布式存储系统中纠删数据恢复的方法、装置及介质 | |
| CN113468118B (zh) | 一种基于区块链的文件增量存储方法、装置及存储介质 | |
| CN107992268A (zh) | 一种坏块标记的方法及相关装置 | |
| CN111857603B (zh) | 数据处理方法及相关装置 | |
| CN114691414B (zh) | 一种校验块生成方法及一种数据恢复方法 | |
| CN106919474A (zh) | 一种缓存数据保护方法和装置 | |
| US20200112322A1 (en) | Multi-dimensional quasi-cyclic (qc) low-density parity-check (ldpc) code constructions | |
| JP2013050836A (ja) | ストレージシステムとデータ・インテグリティのチェック方法並びにプログラム | |
| JP2018198358A (ja) | 誤り訂正プログラム、及び、誤り訂正装置 | |
| CN109144767B (zh) | 数据存储系统及其操作方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20190312 |