(57)【要約】【課題】誤った更新済みデータに正しいＢＣＣを付加することを防止するブロックデータの部分更新装置、ブロックデータの部分更新方法、およびブロックデータの部分更新プログラムの提供する。【解決手段】ブロックデータの部分更新装置１のＲｅａｄ  ＤＭＡ１３が、キャッシュメモリ１１から読み込んだ元データのＣＲＣを元データＣＲＣ格納部１５に格納し、更新データのＣＲＣを更新データＣＲＣ格納部１７に格納する。また、更新元部分ＣＲＣ演算部１６が、Ｒｅａｄ  ＤＭＡ１３によって読み込まれた元データのうち更新される部分のブロックデータに基づいて、該更新される部分のブロックデータのＣＲＣ（更新元部分ＣＲＣ）を演算する。そして、ＢＣＣ演算部１８が、元データＣＲＣと更新元部分ＣＲＣと更新データＣＲＣとに基づいて、更新済みデータのＣＲＣを演算する。【選択図】図１
2008158832.tif 000002
【特許請求の範囲】
【請求項１】
チェックコードで保護されたブロックデータの部分更新装置であって、
チェックコードを生成するチェックコード生成手段と、
更新対象となる元データＤ１の更新される部分のブロックデータＢＤ１上に更新ブロックデータＢＤ２を書き込んで、更新済みデータＤ２に更新し、該更新済みデータＤ２に上記チェックコード生成手段で生成されたチェックコードを付加するデータ更新手段とを備え、
上記チェックコード生成手段は、
更新対象となる元データＤ１とそのチェックコードＢＣＣ１を格納した領域から、更新される部分のブロックデータＢＤ１と、更新対象となる元データＤ１のチェックコードＢＣＣ１を読み取る手段と、
上記更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１を生成する手段と、
上記更新対象となる元データＤ１を更新する更新ブロックデータＢＤ２と、そのチェックコードＢＣＣＤ２を読み込む手段と、
上記更新ブロックデータＢＤ２のチェックコードＢＣＣＤ２と、上記元データＤ１のチェックコードＢＣＣ１と、更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１とから、更新済みデータＤ２のチェックコードＢＣＣ２を生成する手段とを備えることを特徴とするブロックデータの部分更新装置。
【請求項２】
上記更新済みデータＤ２のチェックコードＢＣＣ２を生成する手段が、上記元データＤ１のチェックコードＢＣＣ１と、更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１と、更新ブロックデータＢＤ２が上記元データＤ１に対する書き込み位置にあるか否かに応じて決まる更新ブロックデータＢＤ２のチェックコードＢＣＣＤ２とに基づいて、上記更新済みデータＤ２のチェックコードＢＣＣ２を生成する
ことを特徴とする請求項１に記載のブロックデータの部分更新装置。
【請求項３】
チェックコードで保護されたブロックデータの部分更新方法であって、
更新対象となる元データＤ１とそのチェックコードＢＣＣ１を格納した領域から、更新される部分のブロックデータＢＤ１と、更新対象となる元データＤ１のチェックコードＢＣＣ１を読み取るステップと、
上記更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１を生成するステップと、
上記更新対象となる元データＤ１を更新する更新ブロックデータＢＤ２と、そのチェックコードＢＣＣＤ２を読み込むステップと、
上記更新ブロックデータＢＤ２のチェックコードＢＣＣＤ２と、上記元データＤ１のチェックコードＢＣＣ１と、更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１とから、更新済みデータＤ２のチェックコードＢＣＣ２を生成するステップと、
上記元データＤ１の更新される部分のブロックデータＢＤ１上に上記更新ブロックデータＢＤ２を書き込んで、更新済みデータＤ２に更新し、該更新済みデータＤ２に上記チェックコードＢＣＣ２を付加するステップとからなる
ことを特徴とするブロックデータの部分更新方法。
【請求項４】
上記更新済みデータＤ２のチェックコードＢＣＣ２を生成するステップが、上記元データＤ１のチェックコードＢＣＣ１と、更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１と、更新ブロックデータＢＤ２が上記元データＤ１に対する書き込み位置にあるか否かに応じて決まる更新ブロックデータＢＤ２のチェックコードＢＣＣＤ２とに基づいて、上記更新済みデータＤ２のチェックコードＢＣＣ２を生成する
ことを特徴とする請求項３に記載のブロックデータの部分更新方法。
【請求項５】
チェックコードで保護されたブロックデータの部分更新プログラムであって、
コンピュータに、
更新対象となる元データＤ１とそのチェックコードＢＣＣ１を格納した領域から、更新される部分のブロックデータＢＤ１と、更新対象となる元データＤ１のチェックコードＢＣＣ１を読み取る処理と、
上記更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１を生成する処理と、
上記更新対象となる元データＤ１を更新する更新ブロックデータＢＤ２と、そのチェックコードＢＣＣＤ２を読み込む処理と、
上記更新ブロックデータＢＤ２のチェックコードＢＣＣＤ２と、上記元データＤ１のチェックコードＢＣＣ１と、更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１とから、更新済みデータＤ２のチェックコードＢＣＣ２を生成する処理と、
上記元データＤ１の更新される部分のブロックデータＢＤ１上に上記更新ブロックデータＢＤ２を書き込んで、更新済みデータＤ２に更新し、該更新済みデータＤ２に上記チェックコードＢＣＣ２を付加する処理とを実行させる
ことを特徴とするブロックデータの部分更新プログラム。
【請求項６】
上記更新済みデータＤ２のチェックコードＢＣＣ２を生成する処理が、上記元データＤ１のチェックコードＢＣＣ１と、更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１と、更新ブロックデータＢＤ２が上記元データＤ１に対する書き込み位置にあるか否かに応じて決まる更新ブロックデータＢＤ２のチェックコードＢＣＣＤ２とに基づいて、上記更新済みデータＤ２のチェックコードＢＣＣ２を生成する
ことを特徴とする請求項５に記載のブロックデータの部分更新プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブロックデータの部分更新技術に関し、特に、ブロックデータを部分更新する際のチェックコードを生成するブロックデータの部分更新装置、ブロックデータの部分更新方法、およびブロックデータの部分更新プログラムに関する。
【背景技術】
【０００２】
ＲＡＩＤ装置は、ＬＢＡ単位（５１２バイト（ｂｙｔｅ））のブロックデータで、ユーザデータを管理し、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）にＲｅａｄ（読み込み）／Ｗｒｉｔｅ（書き込み）を行っている。
図１２は、ＲＡＩＤ装置が管理するユーザデータのフォーマット例を示す図である。ＲＡＩＤ装置内部では、ユーザデータの信頼性を高めるために、図１２（Ａ）に示すように、５１２バイトのユーザデータに８バイトのＢＣＣ（Ｂｌｏｃｋ  Ｃｈｅｃｋ  Ｃｏｄｅ）を付加しており、該ＢＣＣに基づいて、装置内部やＨＤＤ内部でのデータ化けが容易に検出できるようになっている。
上記８バイトのＢＣＣは、６バイトのＢＩＤ（Ｂｌｏｃｋ  ＩＤ）と、２バイトのブロックチェックコードであるＣＲＣとから構成される。ＢＩＤは、ブロックを一意に識別する識別子である。
【０００３】
Ｍａｉｎｆｒａｍｅ系のシステムの場合は、可変長なＣＫＤフォーマットで構成されているため、図１２（Ｂ）、図１２（Ｃ）に示すように、５１２バイトのＬＢＡの中にＣｏｕｎｔ，Ｋｅｙ，Ｄａｔａの３つの可変長フィールドを６４バイトの境界で敷き詰めている。このため、Ｃｏｕｔ，Ｋｅｙ，Ｄａｔａの一部のフィールド（Ｆｉｅｌｄ）を更新する場合、更新したＬＢＡのＢＣＣ（ＢＩＤ＋ＣＲＣ）を更新する必要がある。
ＭａｉｎＦｒａｍｅ系のデータを更新する場合、データの信頼性を持たせるため、更新対象となる元データだけでなく、更新ブロックデータ（更新データ）についてもＣＲＣを付加している。更新データの形式の例を以下に示す。
【０００４】
１．ブロックデータ全体を更新対象とする更新データの形式
５１２バイトのブロックデータ全体を更新対象とする場合、ＢＣＣも含めたＬＢＡ単位で更新データを書き込むことによって、データ更新を行う。
２．ブロックデータを部分更新する場合の更新データの形式
（１）更新データが右詰めされた形式
更新データが右詰めされた形式とは、図１３（Ａ）に示すように、更新データを右詰めして、非更新部分を０詰めしたフォーマットである。元データを更新する場合には、更新対象となる元データ上に、更新データを所定の位置まで左シフトして書き込む。この時、元データのＢＣＣ（ＢＩＤ＋ＣＲＣ）を更新する必要がある。
（２）更新データがデータ更新位置（元データに対する書き込み位置）に書き込まれた形式
更新データがデータ更新位置に書き込まれた形式とは、図１３（Ｂ）に示すように、更新データがデータ更新位置に書き込まれ、非更新部分を０詰めしたフォーマットである。元データを更新する場合には、元データ上に該データ更新位置にある更新データをそのまま書き込む。この時、元データのＢＣＣ（ＢＩＤ＋ＣＲＣ）を更新する必要がある。
【０００５】
従来、図１４に示すような部分データ更新回路によってブロックデータを部分更新していた。図１４に示す部分データ更新回路は、ユーザデータを格納するキャッシュメモリ２１と、キャッシュメモリ２１に対するデータの読込み／書き込みを媒介するキャッシュメモリインタフェース２２と、キャッシュメモリ２１から元データと更新データとを読み込むＲｅａｄ  ＤＭＡ２３と、元データおよび更新データのＢＣＣのチェックを行うＢＣＣチェッカー２４と、元データの上に更新データを書き込んで更新済みデータに更新し、該更新済みデータを更新用データバッファ２６に格納するバッファコントローラ２５と、更新済みデータが格納される更新用データバッファ２６と、更新用データバッファ２６に格納された更新済みデータのＢＣＣを生成して該更新済みデータに付加するＢＣＣ演算部２７と、ＢＣＣが付加された更新済みデータをキャッシュメモリに書き込むＷｒｉｔｅ  ＤＭＡ２８とを備える。
図１４に示す部分データ更新回路は、例えば以下の［１］〜［８］までの手順に従ってブロックデータの部分更新処理を行う。なお、Ｍａｉｎｆｒａｍｅ系のシステムに対応するユーザデータのフォーマットに従うと、６４バイト単位でデータ更新がされるため、この例では、更新ブロック位置を指定しやすいように、図１５に示すように、各々が６４バイトのＢＬＫ０〜ＢＬＫ７までの８個のサブブロック（Ｓｕｂ−ｂｌｏｃｋ）でユーザデータを表記する。
【０００６】
例えば、更新対象となる元データのＢＬＫ４，３，２を更新データで更新する場合、図１４に示す部分データ更新回路は、以下の手順で該更新処理を行う。
［１］Ｒｅａｄ  ＤＭＡ２３が、キャッシュメモリ２１に格納されている元データを５２０バイト（５１２バイトのユーザデータ＋８バイトのＢＣＣ）読み込む。
［２］ＢＣＣチェッカー２４が、読み込まれたユーザデータのＣＲＣおよびＢＩＤのチェックを行ない、正当であれば、該ユーザデータのＢＣＣを削除する。
［３］バッファコントローラ２５が、更新用データバッファ２６内に用意された空のユーザデータのＢＬＫ７，６，５，１，０に、元データのＢＬＫ７，６，５，１，０のデータを格納する。
［４］Ｒｅａｄ  ＤＭＡ２３が、キャッシュメモリ２１に格納されている更新データを５２０バイト（５１２バイトのユーザデータ＋８バイトのＢＣＣ）読み込む。
［５］ＢＣＣチェッカー２４が、上記手順［４］で読み込まれたユーザデータのＣＲＣおよびＢＩＤのチェックを行ない、正当であれば、該ユーザデータのＢＣＣを削除する。
［６］バッファコントローラ２５が、更新データを更新データバッファ２６に格納する。該手順［６］においては、更新データが右詰めされた形式か、更新データがデータ更新位置に書き込まれた形式かによって、更新データの格納処理が異なる。
図１５中に示すＢＬＫ２，１，０のデータが更新データである場合のように、更新データが右詰めされた形式のとき、バッファコントローラ２５は、更新用データバッファ２６に用意され、上記手順［３］においてＢＬＫ７，６，５，１，０に元データが格納されたユーザデータのＢＬＫ４，３，２に更新データ（ＢＬＫ２，１，０のデータ）を格納する。
図１５中に示すＢＬＫ４，３，２が更新データである場合のように、更新データがデータ更新位置に書き込まれた形式であるとき、バッファコントローラ２５は、更新用データバッファ２６に用意され、上記手順［３］においてＢＬＫ７，６，５，１，０に元データが格納されたユーザデータのＢＬＫ４，３，２に更新データ（ＢＬＫ４，３，２のデータ）を格納する。
【０００７】
［７］ＢＣＣ演算部２７が、更新用データバッファ２６に格納されたユーザデータ（更新済みデータ）に基づいてＢＣＣ（ＣＲＣ＋ＢＩＤ）を生成し、生成されたＢＣＣを更新済みデータに付加する。
［８］Ｗｒｉｔｅ  ＤＭＡ２８が、上記手順［７］においてＢＣＣが付加された更新済みデータをキャッシュメモリ２１に書き込む。
なお、従来のデータ更新に関する具体的技術として、下記の特許文献１に、書き込みデータ中の更新データからチェックコードを生成し、生成されたチェックコードと書き込みデータ中のチェックコードとの比較結果に基づいて、書き込みデータをディスク部に書き込むディスクアレイ装置に関して記載されている。
【特許文献１】特開２０００−１０５６７５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
上述した図１４に示す従来の部分データ更新回路では、ＢＣＣチェッカー２４によって元データおよび更新データのＢＣＣを削除し、該ＢＣＣが削除された元データを更新データで更新した上で、更新済みデータについてのＢＣＣをＢＣＣ演算部２７によって生成する。すなわち、従来の部分データ更新回路では、データの更新回路とＢＣＣの演算回路とが分離されていない。
従って、ＢＣＣチェッカー２４によってユーザデータのＢＣＣが削除されてからＢＣＣ演算部２７によって更新済みデータについてのＢＣＣが生成されるまでの間の処理（元データの更新用データバッファ２６への格納処理および更新データの元データ上への書き込み処理）におけるデータ化けを検出することが困難である。
該データ化けを検出するために、例えばＢＣＣチェッカー２４とバッファコントローラ２５との間のデータパス、バッファコントローラ２５と更新用データバッファ２６との間のデータパスにパリティ（Ｐａｒｉｔｙ）を付加することが考えられる。しかし、更新用データバッファ２６のアドレス化け等により、更新用データバッファ２６に対して誤ったデータが書き込まれた場合、ＢＣＣ演算部２７は、誤ったデータに対して正当なＢＣＣを付加してしまい、ＲＡＩＤ装置の信頼性が低下しまう恐れがある。
【０００９】
本発明は上記問題点を解決するためになされたものであって、誤った更新済みデータに正しいＢＣＣを付加することを防止するブロックデータの部分更新装置、ブロックデータの部分更新方法、およびブロックデータの部分更新プログラムの提供を目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するため、本発明においては、データの更新回路とＢＣＣの演算回路とが分離されたブロックデータの部分更新装置を設ける。
【００１１】
すなわち、本発明は、次のようにして前記課題を解決する。
（１）チェックコードで保護されたブロックデータの部分更新装置を設ける。上記ブロックデータの部分更新装置が、チェックコードを生成するチェックコード生成手段と、更新対象となる元データＤ１の更新される部分のブロックデータＢＤ１上に更新ブロックデータＢＤ２を書き込んで、更新済みデータＤ２に更新し、該更新済みデータＤ２に上記チェックコード生成手段で生成されたチェックコードを付加するデータ更新手段とを備える。  また、上記チェックコード生成手段は、更新対象となる元データＤ１とそのチェックコードＢＣＣ１を格納した領域から、更新される部分のブロックデータＢＤ１と、更新対象となる元データＤ１のチェックコードＢＣＣ１を読み取る手段と、上記更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１を生成する手段と、上記更新対象となる元データＤ１を更新する更新ブロックデータＢＤ２と、そのチェックコードＢＣＣＤ２を読み込む手段と、上記更新ブロックデータＢＤ２のチェックコードＢＣＣＤ２と、上記元データＤ１のチェックコードＢＣＣ１と、更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１とから、更新済みデータＤ２のチェックコードＢＣＣ２を生成する手段とを備える。
（２）上記更新済みデータＤ２のチェックコードＢＣＣ２を生成する手段が、上記元データＤ１のチェックコードＢＣＣ１と、更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１と、更新ブロックデータＢＤ２が上記元データＤ１に対する書き込み位置にあるか否かに応じて決まる更新ブロックデータＢＤ２のチェックコードＢＣＣＤ２とに基づいて、上記更新済みデータＤ２のチェックコードＢＣＣ２を生成する。
（３）チェックコードで保護されたブロックデータの部分更新方法を実行する。上記ブロックデータの部分更新方法が、更新対象となる元データＤ１とそのチェックコードＢＣＣ１を格納した領域から、更新される部分のブロックデータＢＤ１と、更新対象となる元データＤ１のチェックコードＢＣＣ１を読み取るステップと、上記更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１を生成するステップと、上記更新対象となる元データＤ１を更新する更新ブロックデータＢＤ２と、そのチェックコードＢＣＣＤ２を読み込むステップと、上記更新ブロックデータＢＤ２のチェックコードＢＣＣＤ２と、上記元データＤ１のチェックコードＢＣＣ１と、更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１とから、更新済みデータＤ２のチェックコードＢＣＣ２を生成するステップと、上記元データＤ１の更新される部分のブロックデータＢＤ１上に上記更新ブロックデータＢＤ２を書き込んで、更新済みデータＤ２に更新し、該更新済みデータＤ２に上記チェックコードＢＣＣ２を付加するステップとからなる。
（４）上記更新済みデータＤ２のチェックコードＢＣＣ２を生成するステップが、上記元データＤ１のチェックコードＢＣＣ１と、更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１と、更新ブロックデータＢＤ２が上記元データＤ１に対する書き込み位置にあるか否かに応じて決まる更新ブロックデータＢＤ２のチェックコードＢＣＣＤ２とに基づいて、上記更新済みデータＤ２のチェックコードＢＣＣ２を生成する。
（５）チェックコードで保護されたブロックデータの部分更新プログラムを設ける。上記ブロックデータの部分更新プログラムが、コンピュータに、更新対象となる元データＤ１とそのチェックコードＢＣＣ１を格納した領域から、更新される部分のブロックデータＢＤ１と、更新対象となる元データＤ１のチェックコードＢＣＣ１を読み取る処理と、上記更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１を生成する処理と、上記更新対象となる元データＤ１を更新する更新ブロックデータＢＤ２と、そのチェックコードＢＣＣＤ２を読み込む処理と、上記更新ブロックデータＢＤ２のチェックコードＢＣＣＤ２と、上記元データＤ１のチェックコードＢＣＣ１と、更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１とから、更新済みデータＤ２のチェックコードＢＣＣ２を生成する処理と、上記元データＤ１の更新される部分のブロックデータＢＤ１上に上記更新ブロックデータＢＤ２を書き込んで、更新済みデータＤ２に更新し、該更新済みデータＤ２に上記チェックコードＢＣＣ２を付加する処理とを実行させる。
（６）上記更新済みデータＤ２のチェックコードＢＣＣ２を生成する処理が、上記元データＤ１のチェックコードＢＣＣ１と、更新される部分のブロックデータＢＤ１のチェックコードＢＣＣＤ１と、更新ブロックデータＢＤ２が上記元データＤ１に対する書き込み位置にあるか否かに応じて決まる更新ブロックデータＢＤ２のチェックコードＢＣＣＤ２とに基づいて、上記更新済みデータＤ２のチェックコードＢＣＣ２を生成する。
【発明の効果】
【００１２】
本発明のブロックデータの部分更新装置においては、更新済みデータのチェックコードを演算する回路と、データの更新回路とが分離されている。従って、本発明によれば、誤った更新済みデータに正しいＢＣＣを付加することを防止することが可能となる。
また、本発明によれば、元データに誤った更新データを上書きしてしまっても、本発明によって生成された正しい更新済みデータのチェックコードに基づいて、該更新済みデータが誤ったデータであることを検出することができる。
また、本発明によれば、正しい更新済みデータに誤ったチェックコードが付加された場合であっても、該チェックコードの正当性のチェックを通じて、正しい更新済みデータに誤ったチェックコードが付加されたことを検出することができる。
【発明を実施するための最良の形態】
【００１３】
図１は、本発明のブロックデータの部分更新装置の構成の一例を示す図である。ブロックデータの部分更新装置１は、ブロックデータを部分更新する処理装置である。ブロックデータの部分更新とは、ブロックデータの一部を更新することをいう。例えば、ブロックデータの部分更新装置１は、ホストコンピュータ（図示を省略）からのブロックデータの部分更新要求を受けて、該ブロックデータの部分更新を行う。
ブロックデータの部分更新装置１は、キャッシュメモリ１１、キャッシュメモリインタフェース１２、Ｒｅａｄ  ＤＭＡ１３、ＢＩＤチェッカー１４、元データＣＲＣ格納部１５、更新部分ＣＲＣ演算部１６、更新データＣＲＣ格納部１７、ＢＣＣ演算部１８、Ｗｒｉｔｅ  ＤＭＡ１９、ＣＲＣチェッカー２０、更新データパス３０を備える。
【００１４】
図１の点線で囲った部分に示すように、ＢＩＤチェッカー１４、元データＣＲＣ格納部１５、更新部分ＣＲＣ演算部１６、更新データＣＲＣ格納部１７、ＢＣＣ演算部１８が、ＢＣＣの演算回路を構成し、Ｒｅａｄ  ＤＭＡ１３、更新データパス３０、Ｗｒｉｔｅ  ＤＭＡ１９が、データの更新回路を構成する。
キャッシュメモリ１１にはユーザデータが格納される。キャッシュメモリインタフェース１２は、キャッシュメモリ１１に対するデータの読込み／書き込みを媒介する。Ｒｅａｄ  ＤＭＡ１３は、キャッシュメモリ１１から元データと更新データとを読み込む。また、Ｒｅａｄ  ＤＭＡ１３は、読み込んだ更新データを更新データパス３０を通じてＷｒｉｔｅ  ＤＭＡ１９に送信する。
ＢＩＤチェッカー１４は、元データおよび更新データのＢＣＣ内部のＢＩＤの正当性のチェックを行う。
【００１５】
元データＣＲＣ格納部１５には、元データのＣＲＣ（元データＣＲＣ）が格納される。更新元部分ＣＲＣ演算部１６は、元データのうち更新される部分のブロックデータに基づいて、更新元部分ＣＲＣを演算して生成する。更新元部分ＣＲＣとは、元データのうち更新される部分のブロックデータのＣＲＣである。更新データＣＲＣ１７には、更新データのＣＲＣ（更新データＣＲＣ）が格納される。
ＢＣＣ演算部１８は、元データＣＲＣ格納部１５に格納された元データＣＲＣと、更新元部分ＣＲＣ演算部１６によって生成された更新元部分ＣＲＣと、更新データＣＲＣ格納部１７に格納された更新データＣＲＣとに基づいて、更新済みデータのＣＲＣ（更新済みデータＣＲＣ）を演算して生成する。更新済みデータとは、元データの更新される部分が更新データによって上書きされた結果得られるデータである。また、ＢＣＣ演算部１８は、生成されたＣＲＣにＢＩＤを付加して更新済みデータのＢＣＣを生成する。
【００１６】
Ｗｒｉｔｅ  ＤＭＡ１９は、Ｒｅａｄ  ＤＭＡ１３から受信した更新データとＢＣＣ演算部１８によって生成された更新済みデータのＢＣＣとをキャッシュメモリ１１に格納されている元データに上書きする。
ＣＲＣチェッカー２０は、キャッシュメモリ１１に格納されているユーザデータのＣＲＣの正当性をチェックする。本発明の一実施例によれば、ブロックデータの部分更新装置１が、ブロックデータの部分更新の結果をホストコンピュータ（図示を省略）に返す際に用いるインタフェースカード（図示を省略）に、ユーザデータのＣＲＣの正当性をチェックする機能を備えたチップを備えるようにしてもよい。
なお、上述したブロックデータの部分更新装置１及びその各部の機能は、ＣＰＵとその上で実行されるプログラムにより実現される。本発明を実現するプログラムは、コンピュータが読み取り可能な記録媒体、例えば半導体メモリ、ハードディスク、ＣＤ−ＲＯＭ、ＤＶＤ等に格納することができ、これらの記録媒体に記録して提供され、又は、通信インタフェースを介してネットワークを利用した送受信により提供される。
【００１７】
図２は、本発明のブロックデータの部分更新処理フローの一例を示す図である。この例では、ユーザデータを、前述した図１５に示すようなＢＬＫ０〜ＢＬＫ７までの８個のサブブロックで表記する。また、図２に示す処理フローでは、元データのＢＬＫ４，３，２を、データ更新位置（ＢＬＫ４，３，２）に書き込まれた形式の更新データで更新する処理を例にとって説明する。
【００１８】
まず、Ｒｅａｄ  ＤＭＡ１３が、キャッシュメモリ１１から、元データのＢＬＫ４、３、２とＢＣＣとを読み込む（ステップＳ１）。次に、ＢＩＤチェッカー１４が、ステップＳ１において読み込まれたＢＣＣの内部のＢＩＤの正当性をチェックする（ステップＳ２）。
更新元部分ＣＲＣ演算部１６が、ステップＳ１において読み込まれた元データのＢＬＫ４，３，２のデータに基づいて、更新元部分ＣＲＣを生成する（ステップＳ３）。Ｒｅａｄ  ＤＭＡ１３が、ステップＳ１において読み込まれたＢＣＣの内部のＣＲＣを元データＣＲＣとして元データＣＲＣ格納部１５に格納する（ステップＳ４）。
【００１９】
次に、Ｒｅａｄ  ＤＭＡ１３が、キャッシュメモリ１１から更新データのＢＬＫ４，３，２とＢＣＣとを読み込み、更新データのＢＬＫ４，３，２をＷｒｉｔｅ  ＤＭＡ１９に送信する（ステップＳ５）。そして、ＢＩＤチェッカー１４が、上記ステップＳ５において読み込まれたＢＣＣの内部のＢＩＤの正当性をチェックする（ステップＳ６）。また、Ｒｅａｄ  ＤＭＡ１３が、上記ステップＳ５において読み込まれたＢＣＣの内部のＣＲＣを更新データＣＲＣとして更新データＣＲＣ格納部１７に格納する（ステップＳ７）。    ＢＣＣ演算部１８が、元データＣＲＣ格納部１５に格納された元データＣＲＣと、更新元部分ＣＲＣ演算部１６によって生成された更新元部分ＣＲＣと、更新データＣＲＣ格納部１７に格納された更新データＣＲＣとに基づいて、更新済みデータＣＲＣを演算して生成し、生成された更新済みデータＣＲＣにＢＩＤを付加して、更新済みデータのＢＣＣを生成する（ステップＳ８）。
そして、Ｗｒｉｔｅ  ＤＭＡ１９が、Ｒｅａｄ  ＤＭＡ１３から送信された更新データのＢＬＫ４，３，２をキャッシュメモリ１１に格納されている元データのＢＬＫ４，３，２に上書きするとともに、該更新データの上書き後の更新済みデータに上記ステップＳ８において生成された更新済みデータのＢＣＣを付加して（ステップＳ９）、処理を終了する。
【００２０】
図３は、本発明のブロックデータの部分更新処理フローの他の例を示す図である。図２に示す処理フローでは、図１５に示すフォーマットを有する元データのＢＬＫ４，３，２を、右詰めされた形式の更新データ（ＢＬＫ２，１，０の更新データ）で更新する処理を例にとって説明する。
まず、Ｒｅａｄ  ＤＭＡ１３が、キャッシュメモリ１１から、元データのＢＬＫ４，３，２とＢＣＣとを読み込む（ステップＳ１１）。次に、ＢＩＤチェッカー１４が、ステップＳ１において読み込まれたＢＣＣの内部のＢＩＤの正当性をチェックする（ステップＳ１２）。
【００２１】
更新元部分ＣＲＣ演算部１６が、ステップＳ１１において読み込まれた元データのＢＬＫ４，３，２のデータに基づいて、更新元部分ＣＲＣを生成する（ステップＳ１３）。Ｒｅａｄ  ＤＭＡ１３が、ステップＳ１１において読み込まれたＢＣＣの内部のＣＲＣを元データＣＲＣとして元データＣＲＣ格納部１５に格納する（ステップＳ１４）。
次に、Ｒｅａｄ  ＤＭＡ１３が、キャッシュメモリ１１から更新データのＢＬＫ２，１，０とＢＣＣとを読み込み、更新データのＢＬＫ２，１，０をＷｒｉｔｅ  ＤＭＡ１９に送信する（ステップＳ１５）。そして、ＢＩＤチェッカー２４が、上記ステップＳ１５において読み込まれたＢＣＣの内部のＢＩＤの正当性をチェックする（ステップＳ１６）。また、Ｒｅａｄ  ＤＭＡ１３が、上記ステップＳ１５において読み込まれたＢＣＣの内部のＣＲＣを更新データＣＲＣとして更新データＣＲＣ格納部１７に格納する（ステップＳ１７）。
【００２２】
ＢＣＣ演算部１８が、元データＣＲＣ格納部１５に格納された元データＣＲＣと、更新元部分ＣＲＣ演算部１６によって生成された更新元部分ＣＲＣと、更新データＣＲＣ格納部１７に格納された更新データＣＲＣとに基づいて、更新済みデータＣＲＣを演算して生成し、生成された更新済みデータＣＲＣにＢＩＤを付加して、更新済みデータのＢＣＣを生成する（ステップＳ１８）。
そして、Ｗｒｉｔｅ  ＤＭＡ１９が、Ｒｅａｄ  ＤＭＡ１３から送信された更新データのＢＬＫ２，１，０をキャッシュメモリ１１に格納されている元データのＢＬＫ４，３，２に上書きするとともに、該更新データの上書き後の更新済みデータに上記ステップＳ１８において生成された更新済みデータのＢＣＣを付加して（ステップＳ１９）、処理を終了する。
【００２３】
前述した図１に示す本発明のブロックデータの部分更新装置１では、データの更新回路と、ＢＣＣの計算回路とが分離されている。従って、図１に示す本発明のブロックデータの部分更新装置１が、上記図２または図３に示す処理フローに従ってブロックデータの部分更新処理を行うことにより、データ信頼性に対して以下のような効果がある。
（１）Ｗｒｉｔｅ  ＤＭＡ１９がキャッシュメモリ１１に対して誤った更新データを書き込んでしまうような場合でも、誤った更新済みデータにはＢＣＣ演算部１８によって生成された正しい更新済みデータのＢＣＣが付加されている。従って、例えばＣＲＣチェッカー２０が、誤った更新済みデータについてのＣＲＣチェックを行うことによって、ＣＲＣエラーとなり、該更新済みデータが誤ったデータであることを検出することができる。（２）ＢＣＣ演算部１８が誤ったＢＣＣを生成し、Ｗｒｉｔｅ  ＤＭＡ１９がキャッシュメモリ１１に対して正しい更新データと上記誤ったＢＣＣとを書き込んだ場合、更新済みデータについてのＣＲＣチェックの結果、ＣＲＣエラーとなるため、該更新済みデータに誤ったＢＣＣが付加されたことを検出することができる。
（３）ブロックデータの部分更新装置が、データの部分更新を行うには、元データのＢＣＣと、更新データのＢＣＣと、更新部分のブロックデータを読込み／書き込みすればよい。従って、キャッシュメモリ１１とデータ更新回路との間のデータ転送量を少なくすることができる。
（４）前述した図１４に示す従来の部分データ更新回路において必要であった更新用データバッファ２６が不要となる。
【００２４】
（実施例）
以下に、本発明の実施例について説明する。図４は、本発明の実施例に係るブロックデータの部分更新装置の構成の一例を示す図である。ブロックデータの部分更新装置３は、キャッシュメモリ１１、キャッシュメモリインタフェース１２、Ｒｅａｄ  ＤＭＡ１３、ＢＩＤチェッカー１４、元データＣＲＣ格納部１５、更新部分ＣＲＣ演算部１６、更新データＣＲＣ格納部１７、ＢＣＣ演算部１８、Ｗｒｉｔｅ  ＤＭＡ１９、更新データパス３０を備える。図４に示すブロックデータの部分更新装置３が備える構成要素のうち、図１に示すブロックデータの部分更新装置１が備える構成要素と同符号のものは、該ブロックデータの部分更新装置１が備える構成要素と同様の機能を有するので、ここでの詳細な説明は省略する。
【００２５】
更新元部分ＣＲＣ演算部１６は、元データのうち更新される部分のデータと、更新位置パラメータ格納部１８２に格納された更新位置パラメータ（Ｆ（ｍ））とに基づいて、後述する式（１０）に従って、更新元部分ＣＲＣ（以下、「ＣＲＣpart」と記述）を算出する。算出されたＣＲＣpartは、更新元部分ＣＲＣ演算部１６内のＣＲＣpartレジスタ（図示を省略）に格納される。上記更新位置パラメータ（Ｆ（ｍ））は、上記更新される部分の先頭のブロック位置（更新開始ブロック位置）であるｍに対応するパラメータである。更新位置パラメータ（Ｆ（ｍ））を示す式については、後述する。
【００２６】
ＢＣＣ演算部１８は、Ｓｅｅｄパラメータ格納部１８１、更新位置パラメータ格納部１８２、加算回路１８３、１８６、マスク回路１８４、乗算回路１８５、ＢＩＤ付加部１８７を備える。Ｓｅｅｄパラメータ格納部１８１には、Ｓｅｅｄパラメータ（ＳＥＥＤ）が予め格納されている。ＳＥＥＤとは、後述するＳｅｅｄ値で決まる定数である。ＳＥＥＤを示す式については後述する。更新位置パラメータ格納部１８２には、更新位置パラメータ（Ｆ（ｍ））が予め格納されている。
加算回路１８３は、更新データＣＲＣ格納部１７に格納されている更新データＣＲＣ（以下、「ＣＲＣmod 」と記述）と、Ｓｅｅｄパラメータ格納部１８１に格納されているＳｅｅｄパラメータとを加算（ＸＯＲ演算）する。
【００２７】
マスク回路１８４は、更新位置パラメータ格納部１８２から更新位置パラメータを読み出して出力する。更新データが右詰めされた形式である場合、マスク回路１８４は、更新位置パラメータ格納部１８２から読み出した更新位置パラメータをそのまま出力する。更新データがデータ更新位置に書き込まれた形式である場合、マスク回路１８４は、値「１」を出力する。
乗算回路１８５は、後述するＣＲＣ生成多項式Ｇ（Ｘ）を原始多項式とした乗算回路である。乗算回路１８５は、加算回路１８３による加算結果とマスク回路１８４の出力とを乗算する。
加算回路１８６は、乗算回路１８５による乗算結果と更新元部分ＣＲＣ演算部１６によって演算された更新元部分ＣＲＣと元データＣＲＣ格納部１５に格納されている元データＣＲＣ（以下、「ＣＲＣpre 」と記述）とを加算（ＸＯＲ演算）して、更新済みデータＣＲＣ（以下、「ＣＲＣpost」と記述）を生成する。ＢＩＤ付加部１８７は、ＣＲＣpostに更新済みデータに対するＢＩＤを付加する。
【００２８】
本発明の実施例における、ＣＲＣpostの生成処理の例について、以下に説明する。この例では、ユーザデータは、前述した図１５に示すような、各々が６４バイトのＢＬＫ０〜ＢＬＫ７までの８個のサブブロックで表記されるものとする。また、ブロックデータの部分更新装置３は、図５（Ａ）に示す元データの更新される部分のデータであるＰ2 を、図５（Ｂ）または図５（Ｃ）に示す更新データであるＱ2 で更新するものとする。図５（Ａ）において、Ｐ2 は、更新される部分であるＢＬＫｍからＢＬＫｎ−１までのサブブロックに格納されている。また、Ｐ1 およびＰ3 は、元データにおける更新されない部分のデータである。
なお、図５（Ｂ）中のＱ2 は、右詰めされた形式の更新データを示し、図５（Ｃ）中のＱ2 は、データ更新位置に書き込まれた形式の更新データを示している。
【００２９】
以下、ブロックデータの部分更新装置３が処理する各データを多項式表記で表示する。本発明の実施例においては、以下のように定義される、ＡＮＳＩ  Ｔ１０のＣＲＣ演算の生成多項式Ｇ（Ｘ）を用いる。
Ｇ（Ｘ）＝Ｘ16＋Ｘ15＋Ｘ11＋Ｘ9 ＋Ｘ8 ＋Ｘ7 ＋Ｘ5 ＋Ｘ4 ＋Ｘ2 ＋Ｘ1 ＋１
ここで、一般に、ＣＲＣを生成する回路のＳｅｅｄ値（初期値）として、以下の式（１）のように表記されるＳ（Ｘ）を定義する。
【００３０】
【数１】
2008158832.tif 000003
【００３１】
ユーザデータＰ（Ｘ）を、上記式（２）と表記すると、ＣＲＣを生成する回路によって生成されるＣＲＣは、以下の（３）式のように表現することができる。
ＣＲＣ＝（Ｓ（Ｘ）×Ｘ4096＋Ｐ（Ｘ）×Ｘ16）ｍｏｄＧ（Ｘ）・・・式（３）
【００３２】
図６は、上記式（３）に従うＣＲＣの算出処理を説明する図である。一般に、ＣＲＣを生成する回路は、図６（Ａ）に示すユーザデータＰ（Ｘ）に１６ビット（２バイト）の空の領域を付加するとともに、Ｓ（Ｘ）を５１２バイトのデータの先頭にシフトする。そして、ＣＲＣを生成する回路は、図６（Ｂ）に示すように、Ｐ（Ｘ）に１６ビットの空の領域が付加されたデータとＳ（Ｘ）が５１２バイトの先頭にシフトされたデータとを加算して、図６（Ｃ）に示すような、Ｓ（Ｘ）とＰ（Ｘ）とが５１２バイトの領域に格納され、該５１２バイトの領域に１６ビットの空の領域が付加されたデータを生成する。そして、ＣＲＣを生成する回路は、図６（Ｄ）に示すように、図６（Ｃ）に示すデータをＧ（Ｘ）で割って、その余りをＣＲＣとして算出する。算出されたＣＲＣは、図６（Ｅ）に示すように、Ｐ（Ｘ）に付加されていた１６ビットの空の領域に格納される。
【００３３】
本発明の実施例において、前述した図５（Ａ）に示す元データのＰ1 ，Ｐ2 ，Ｐ3 と、図５（Ｂ）または図５（Ｃ）に示す更新データＱ2 をそれぞれＰ1 （Ｘ），Ｐ2 （Ｘ），Ｐ3 （Ｘ），Ｑ2 （Ｘ）と関数表現すると、元データＣＲＣ格納部１５に格納される元データＣＲＣ（ＣＲＣpre ）は、以下の式（４）のように表現される。
【００３４】
【数２】
2008158832.tif 000004
【００３５】
図７は、上記式（４）に従うＣＲＣpre の算出処理を説明する図である。まず、図７（Ａ）に示すような、元データのうち更新される部分のデータＰ2 、更新されない部分のデータＰ1 、Ｐ3 からなるユーザデータに１６ビット（２バイト）の空の領域を付加するとともに、Ｓ（Ｘ）を５１２バイトのデータの先頭にシフトする。そして、図７（Ｂ）に示すように、ユーザデータに１６ビットの空の領域が付加されたデータとＳ（Ｘ）が５１２バイトの先頭にシフトされたデータとを加算して、図７（Ｃ）に示すような、Ｓ（Ｘ）とＰ1 、Ｐ2 、Ｐ3 とが５１２バイトの領域に格納され、該５１２バイトの領域に１６ビットの空の領域が付加されたデータを生成する。そして、図７（Ｄ）に示すように、図７（Ｃ）に示すデータをＧ（Ｘ）で割って、その余りをＣＲＣpre として算出する。
また、更新データは、図５（Ｂ）または図５（Ｃ）に示すＱ2 であることから、式（４）中のＰ2 （Ｘ）をＱ2 （Ｘ）で置き換えることによって、更新済みデータＣＲＣ（ＣＲＣpost）は、以下の式（５）のように表現される。
【００３６】
【数３】
2008158832.tif 000005
【００３７】
次に、更新データＣＲＣ格納部１７に格納されている更新データＣＲＣ（ＣＲＣmod ）について説明する。ＣＲＣmod を表現する式は、更新データが右詰めされた形式であるか、更新データがデータ更新位置に書き込まれた形式であるかによって異なる。
図５（Ｂ）に示すように、更新データＱ2 が右詰めされた形式である場合、ＣＲＣmod は、以下のように表現される。
ＣＲＣmod ＝（Ｓ（Ｘ）×Ｘ4096＋Ｑ2 （Ｘ）×Ｘ16）ｍｏｄＧ（Ｘ）・・・式（６）  
【００３８】
図８は、上記式（６）に従うＣＲＣmod の算出処理を説明する図である。まず、図８（Ａ）に示す更新データＱ2 に１６ビット（２バイト）の空の領域を付加するとともに、Ｓ（Ｘ）を５１２バイトのデータの先頭にシフトする。そして、図８（Ｂ）に示すように、Ｑ2 に１６ビットの空の領域が付加されたデータとＳ（Ｘ）が５１２バイトの先頭にシフトされたデータとを加算して、図８（Ｃ）に示すような、Ｓ（Ｘ）とＱ2 とが５１２バイトの領域に格納され、該５１２バイトの領域に１６ビットの空の領域が付加されたデータを生成する。そして、図８（Ｄ）に示すように、図８（Ｃ）に示すデータをＧ（Ｘ）で割って、その余りをＣＲＣmod として算出する。
上記式（４）と式（６）とを用いて、式（５）に示すＣＲＣpostを以下の式（８）に書き換えることができる。下記の式（８）において、＋、−はＸＯＲ演算を示している。
ここで、前述したＳｅｅｄパラメータ（ＳＥＥＤ）は、以下の式で定義される。
ＳＥＥＤ＝（Ｓ（Ｘ）×Ｘ4096）ｍｏｄＧ（Ｘ）  …式（７）
また、前述した更新位置パラメータＦ（ｍ）は、以下の式（９）で定義される。
【００３９】
【数４】
2008158832.tif 000006
【００４０】
本発明の実施例においては、ユーザデータが、ＢＬＫ０〜ＢＬＫ７までの８個のサブブロックで表記されることから、更新開始ブロック位置ｍは、０〜７までの値をとり、Ｆ（ｍ）は、該更新開始ブロック位置ｍに対応するパラメータとなる。
また、更新元部分ＣＲＣ演算部１６が算出するＣＲＣpartは、以下のように表現することができる。
ＣＲＣpart＝（Ｐ2 （Ｘ）×Ｘ16×Ｆ（ｍ））ｍｏｄＧ（Ｘ）・・・式（１０）
式（１０）は、前述した式（３）においてＳｅｅｄ値＝０として、Ｐ2 （Ｘ）についてＣＲＣ生成の演算を行い、Ｆ（ｍ）で乗算することによってＣＲＣpartが算出されることを示している。
【００４１】
従って、前述した式（８）で表現されるＣＲＣpostは、式（９）で定義されるＦ（ｍ）と、式（１０）に示されるＣＲＣpartと、式（７）で定義されるＳＥＥＤとを用いて、以下の式（１１）に書き換えることができる。
ＣＲＣpost＝ＣＲＣpre ＋ＣＲＣpart＋（（ＣＲＣmod ＋ＳＥＥＤ）×Ｆ（ｍ））ｍｏｄＧ（Ｘ）・・・式（１１）
図５（Ｃ）に示すように、更新データＱ2 がデータ更新位置に書き込まれた形式である場合、ＣＲＣmod は、以下のように表現される。
【００４２】
【数５】
2008158832.tif 000007
【００４３】
図９は、上記式（１２）に従うＣＲＣmod の算出処理を説明する図である。まず、図９（Ａ）に示す、データ更新位置（ＢＬＫｍ〜ＢＬＫｎ−１）にある更新データＱ2 に１６ビット（２バイト）の空の領域を付加するとともに、Ｓ（Ｘ）を５１２バイトのデータの先頭にシフトする。そして、図９（Ｂ）に示すように、Ｑ2 に１６ビットの空の領域が付加されたデータとＳ（Ｘ）が５１２バイトの先頭にシフトされたデータとを加算して、図９（Ｃ）に示すような、Ｓ（Ｘ）とＱ2 とが５１２バイトの領域に格納され、該５１２バイトの領域に１６ビットの空の領域が付加されたデータを生成する。そして、図９（Ｄ）に示すように、図９（Ｃ）に示すデータをＧ（Ｘ）で割って、その余りをＣＲＣmod として算出する。
前述した式（４）、式（７）、式（９）、式（１０）、式（１２）を用いて、式（５）に示すＣＲＣpostを以下の式（１３）に書き換えることができる。
【００４４】
【数６】
2008158832.tif 000008
【００４５】
上記式（１３）は、式（１１）の右辺の第３項におけるＦ（ｍ）をＦ（０）＝１としたときの計算と同値である。従って、式（１１）で示される、更新データＱ2 が右詰めされた形式である場合のＣＲＣpostと、式（１３）で示される、更新データＱ2 がデータ更新位置に書き込まれた形式である場合のＣＲＣpostは、マスク回路１８４の出力する値を「１」とすれば、一つのＢＣＣの演算回路で算出することができる。
【００４６】
図１０は、更新データが右詰めされた形式である場合の、ブロックデータの部分更新処理フローの例を示す図である。図１０に示す処理フローでは、図１５に示すようなフォーマットを有する元データのＢＬＫ４，３，２を、ＢＬＫ２，１，０に書き込まれた形式の更新データで更新する処理を例にとって説明する。
まず、Ｒｅａｄ  ＤＭＡ１３が、キャッシュメモリ１１から、元データのＢＬＫ４，３，２とＢＣＣとを読み込む（ステップＳ２１）。次に、ＢＩＤチェッカー１４が、ステップＳ２１において読み込まれたＢＣＣの内部のＢＩＤの正当性をチェックする（ステップＳ２２）。
更新元部分ＣＲＣ演算部１６が、ステップＳ２１において読み込まれた元データのＢＬＫ４，３，２のデータに基づいて、ＣＲＣpartを算出し、算出したＣＲＣpartをＣＲＣpartレジスタに格納する（ステップＳ２３）。ステップＳ２３において、更新元部分ＣＲＣ演算部１６は、前述した式（３）に従って、Ｓｅｅｄ値＝０としてＢＬＫ４，３，２のデータについてＣＲＣ生成の演算を行い、更新位置パラメータＦ（２）で乗算する演算を行う。より具体的には、更新元部分ＣＲＣ演算部１６は、Ｐ2 （Ｘ）をＢＬＫ４，３，２のデータの関数表現、Ｆ（ｍ）をＦ（２）として、式（１０）に従ってＣＲＣpartを算出する。
【００４７】
次に、Ｒｅａｄ  ＤＭＡ１３が、ステップＳ２１において読み込まれたＢＣＣの内部のＣＲＣをＣＲＣpre として元データＣＲＣ格納部１５に格納する（ステップＳ２４）。  次に、Ｒｅａｄ  ＤＭＡ１３が、キャッシュメモリ１１から更新データのＢＬＫ２，１，０とＢＣＣとを読み込み、更新データのＢＬＫ２，１，０をＷｒｉｔｅ  ＤＭＡ１９に送信する（ステップＳ２５）。そして、ＢＩＤチェッカー１４が、上記ステップＳ２５において読み込まれたＢＣＣの内部のＢＩＤの正当性をチェックする（ステップＳ２６）。また、Ｒｅａｄ  ＤＭＡ１３が、上記ステップＳ２５において読み込まれたＢＣＣの内部のＣＲＣをＣＲＣmod として更新データＣＲＣ格納部１７に格納する（ステップＳ２７）。  ＢＣＣ演算部１８が、更新データＣＲＣ格納部１７に格納されたＣＲＣmod にＳＥＥＤを加算（ＸＯＲ）した後、マスク回路１８４から出力される更新位置パラメータＦ（２）を乗算する（ステップＳ２８）。
【００４８】
ＢＣＣ演算部１８が、ステップＳ２８における乗算結果と、ステップＳ２３においてＣＲＣpartレジスタに格納されたＣＲＣpartと、ステップＳ２４において元データＣＲＣ格納部１５に格納されたＣＲＣpre とを加算して、ＣＲＣpostを算出する（ステップＳ２９）。すなわち、ＢＣＣ演算部１８は、前述した式（１１）に従って、ＣＲＣpostを算出する。
ＢＣＣ演算部１８のＢＩＤ付加部１８７が、ステップＳ２９において算出されたＣＲＣpostにＢＩＤを付加して、更新済みデータのＢＣＣを生成する（ステップＳ３０）。Ｗｒｉｔｅ  ＤＭＡ１９が、Ｒｅａｄ  ＤＭＡ１３から送信された更新データのＢＬＫ２，１，０をキャッシュメモリ１１に格納されている元データのＢＬＫ４，３，２に上書きするとともに、更新済みデータに上記ステップＳ３０において生成された更新済みデータのＢＣＣを付加して（ステップＳ３１）、処理を終了する。
【００４９】
図１１は、更新データがデータ更新位置に書き込まれた形式である場合の、ブロックデータの部分更新処理フローの例を示す図である。図１１に示す処理フローでは、元データのＢＬＫ４，３，２を、データ更新位置（ＢＬＫ４，３，２）に書き込まれた形式の更新データで更新する処理を例にとって説明する。
【００５０】
まず、Ｒｅａｄ  ＤＭＡ１３が、キャッシュメモリ１１から、元データのＢＬＫ４，３，２とＢＣＣとを読み込む（ステップＳ４１）。次に、ＢＩＤチェッカー１４が、ステップＳ４１において読み込まれたＢＣＣの内部のＢＩＤの正当性をチェックする（ステップＳ４２）。
更新元部分ＣＲＣ演算部１６が、ステップＳ４１において読み込まれた元データのＢＬＫ４，３，２のデータに基づいて、ＣＲＣpartを算出し、算出したＣＲＣpartをＣＲＣpart レジスタに格納する（ステップＳ４３）。ステップＳ４３において、更新元部分ＣＲＣ演算部１６は、前述した式（３）に従って、Ｓｅｅｄ値＝０としてＢＬＫ４，３，２のデータについてＣＲＣ生成の演算を行い、更新位置パラメータＦ（２）で乗算する演算を行う。より具体的には、更新元部分ＣＲＣ演算部１６は、Ｐ2 （Ｘ）をＢＬＫ４，３，２のデータの関数表現、Ｆ（ｍ）をＦ（２）として、式（１０）に従ってＣＲＣpartを算出する。
【００５１】
Ｒｅａｄ  ＤＭＡ１３が、ステップＳ４１において読み込まれたＢＣＣの内部のＣＲＣをＣＲＣpre として元データＣＲＣ格納部１５に格納する（ステップＳ４４）。そして、Ｒｅａｄ  ＤＭＡ１３が、キャッシュメモリ１１から更新データのＢＬＫ４，３，２とＢＣＣとを読み込み、更新データのＢＬＫ４，３，２をＷｒｉｔｅ  ＤＭＡ１９に送信する（ステップＳ４５）。そして、ＢＩＤチェッカー１４が、上記ステップＳ４５において読み込まれたＢＣＣの内部のＢＩＤの正当性をチェックする（ステップＳ４６）。また、Ｒｅａｄ  ＤＭＡ１３が、上記ステップＳ４５において読み込まれたＢＣＣの内部のＣＲＣをＣＲＣmod として更新データＣＲＣ格納部１７に格納する（ステップＳ４７）。
【００５２】
ＢＣＣ演算部１８が、更新データＣＲＣ格納部１７に格納されたＣＲＣmod にＳＥＥＤを加算（ＸＯＲ）した後、マスク回路１８４から出力される値「１」を乗算する（ステップＳ４８）。
ＢＣＣ演算部１８が、ステップＳ４８における乗算結果と、ステップＳ４３においてＣＲＣpartレジスタに格納されたＣＲＣpartと、ステップＳ４４において元データＣＲＣ格納部１５に格納されたＣＲＣpre とを加算して、ＣＲＣpostを算出する（ステップＳ４９）。すなわち、ＢＣＣ演算部１８は、前述した式（１３）に従って、ＣＲＣpostを算出する。
ＢＣＣ演算部１８のＢＩＤ付加部１８７が、ステップＳ４９において算出されたＣＲＣpostにＢＩＤを付加して、更新済みデータのＢＣＣを生成する（ステップＳ５０）。Ｗｒｉｔｅ  ＤＭＡ１９が、Ｒｅａｄ  ＤＭＡ１３から送信された更新データのＢＬＫ４，３，２をキャッシュメモリ１１に格納されている元データのＢＬＫ４，３，２に上書きするとともに、更新済みデータに上記ステップＳ５０において生成された更新済みデータのＢＣＣを付加して（ステップＳ５１）、処理を終了する。
【産業上の利用可能性】
【００５３】
以上、説明したように、本発明によれば、誤った更新済みデータに正しいＢＣＣを付加することを防止することが可能となる。
また、本発明によれば、元データに誤った更新データを上書きしてしまっても、本発明によって生成された正しい更新済みデータのチェックコードに基づいて、該更新済みデータが誤ったデータであることを検出することができる。
また、本発明によれば、正しい更新済みデータに誤ったチェックコードが付加された場合であっても、該チェックコードの正当性のチェックを通じて、更新済みデータに誤ったチェックコードが付加されたことを検出することができる。
【図面の簡単な説明】
【００５４】
【図１】本発明のブロックデータの部分更新装置の構成の一例を示す図である。
【図２】本発明のブロックデータの部分更新処理フローの一例を示す図である。
【図３】本発明のブロックデータの部分更新処理フローの他の例を示す図である。
【図４】本発明の実施例に係るブロックデータの部分更新装置の構成の一例を示す図である。
【図５】元データおよび更新データを示す図である。
【図６】式（３）に従うＣＲＣの算出処理を説明する図である。
【図７】式（４）に従うＣＲＣpre の算出処理を説明する図である。
【図８】式（６）に従うＣＲＣmod の算出処理を説明する図である。
【図９】式（１２）に従うＣＲＣmod の算出処理を説明する図である。
【図１０】更新データが右詰めされた形式である場合の、ブロックデータの部分更新処理フローの例を示す図である。
【図１１】更新データがデータ更新位置に書き込まれた形式である場合の、ブロックデータの部分更新処理フローの例を示す図である。
【図１２】ＲＡＩＤ装置が管理するユーザデータのフォーマット例を示す図である。
【図１３】更新データの形式の例を示す図である。
【図１４】従来の部分データ更新回路を示す図である。
【図１５】ユーザデータのサブブロックを示す図である。
【符号の説明】
【００５５】
１  ブロックデータの部分更新装置
１１、２１  キャッシュメモリ
１２、２２  キャッシュメモリインタフェース
１３、２３  Ｒｅａｄ  ＤＭＡ
１４  ＢＩＤチェッカー
１５  元データＣＲＣ格納部
１６  更新部分ＣＲＣ演算部
１７  更新データＣＲＣ格納部
１８、２７  ＢＣＣ演算部
１９、２８  Ｗｒｉｔｅ  ＤＭＡ
２０  ＣＲＣチェッカー
２４  ＢＣＣチェッカー
２５  バッファコントローラ
２６  更新用データバッファ
３０  更新データパス
１８１  Ｓｅｅｄパラメータ格納部
１８２  更新位置パラメータ格納部
１８３、１８６  加算回路
１８４  マスク回路
１８５  乗算回路
１８７  ＢＩＤ付加部
【図１】
2008158832.tif 000009
【図２】
2008158832.tif 000010
【図３】
2008158832.tif 000011
【図４】
2008158832.tif 000012
【図５】
2008158832.tif 000013
【図６】
2008158832.tif 000014
【図７】
2008158832.tif 000015
【図８】
2008158832.tif 000016
【図９】
2008158832.tif 000017
【図１０】
2008158832.tif 000018
【図１１】
2008158832.tif 000019
【図１２】
2008158832.tif 000020
【図１３】
2008158832.tif 000021
【図１４】
2008158832.tif 000022
【図１５】
2008158832.tif 000023