(57)【要約】【課題】データ再送の頻度を低減すること。【解決手段】受信装置２は、受信部２ａおよび制御部２ｂを有する。受信部２ａは、送信データＸを一定サイズに分割して得られたデータブロックＸ１〜Ｘ３と、データブロックＸ１〜Ｘ３に基づいて生成されたパリティブロックＰＸとを、送信装置１から受信する。制御部２ｂは、データブロックＸ１〜Ｘ３のうちデータブロックＸ２の受信処理に失敗した場合に、データブロックＸ１〜Ｘ３のうち受信処理に成功したデータブロックＸ１，Ｘ３と、受信処理に成功したパリティブロックＰＸとに基づいて、データブロックＸ２を復元する。【選択図】図１
2016059012.tif 000002
【特許請求の範囲】
【請求項１】
送信データを一定サイズに分割して得られた複数のデータブロックと、前記複数のデータブロックに基づいて生成されたパリティブロックとを、送信装置から受信する受信部と、
前記複数のデータブロックのうち一のデータブロックの受信処理に失敗した場合に、前記複数のデータブロックのうち受信処理に成功した他のデータブロックと、受信処理に成功した前記パリティブロックとに基づいて、前記一のデータブロックを復元する制御部と、
を有することを特徴とする受信装置。
【請求項２】
前記送信装置から複数の送信データが送信され、前記複数の送信データのうち同一の送信データを前記一定サイズに分割して得られたデータブロックのそれぞれと当該データブロックに基づいて生成されたパリティブロックとに対して、同一に属することを示すグループ識別情報が付加され、
前記制御部は、前記送信装置から前記受信部が受信した受信データブロックおよび受信パリティブロックにそれぞれ付加された前記グループ識別情報に基づいて、前記受信データブロックおよび前記受信パリティブロックの中から一のグループに属するデータブロックおよびパリティブロックを判別し、前記送信装置から送信された前記一のグループに属するデータブロックのうち第１のデータブロックの受信処理に失敗した場合に、前記受信データブロックのうち前記一のグループに属する第２のデータブロックと前記受信パリティブロックのうち前記一のグループに属するパリティブロックとに基づいて前記第１のデータブロックを復元する、
ことを特徴とする請求項１記載の受信装置。
【請求項３】
前記送信装置から送信されたデータブロックおよびパリティブロックには、付加された前記グループ識別情報が示すグループに属するデータブロックの数を示すブロック数情報がさらに付加されるとともに、前記送信装置から送信されたデータブロックには、前記グループ識別情報が示すグループ内の通し番号を示すブロック番号情報がさらに付加され、
前記制御部は、前記受信データブロックおよび前記受信パリティブロックにそれぞれ付加された前記グループ識別情報に基づいて、前記受信データブロックおよび前記受信パリティブロックの中から一のグループに属するデータブロックおよびパリティブロックを判別し、前記受信データブロックのうち前記一のグループに属するデータブロックに付加された前記ブロック数情報および前記ブロック番号情報に基づいて、前記一のグループに属するデータブロックのうち受信処理に失敗したデータブロックを判定する、
ことを特徴とする請求項２記載の受信装置。
【請求項４】
記憶部をさらに有し、
前記送信装置から送信されるデータブロックおよびパリティブロックのそれぞれには、第１の値と第２の値のいずれかが設定されるグループ切り替え情報がさらに付加され、送信されるデータブロックおよびパリティブロックが属するグループが切り替わるたびに、前記グループ切り替え情報に設定される値が前記第１の値と前記第２の値のうちの一方から他方へ切り替えられ、
前記受信部は、前記送信装置から受信したデータブロックおよびパリティブロックを、それぞれに付加された前記グループ識別情報および前記グループ切り替え情報とともに前記記憶部に一時的に格納し、
前記制御部は、前記記憶部に格納されたデータブロックおよびパリティブロックのうち、付加された前記グループ識別情報および前記グループ切り替え情報の両方が互いに同一であるデータブロックおよびパリティブロックを、同一のグループに属するデータブロックおよびパリティブロックと判別する、
ことを特徴とする請求項３記載の受信装置。
【請求項５】
受信装置へ送信する複数の送信データを一時的に記憶する記憶部と、
前記記憶部に記憶された前記複数の送信データのそれぞれを一定サイズに分割して複数のデータブロックを生成するとともに、前記複数のデータブロックのうち同一の送信データに対応するデータブロックに基づいてパリティブロックを生成し、前記複数のデータブロックおよびパリティブロックのうち、同一の送信データに対応するデータブロックおよびパリティブロックに対して、同一のグループに属することを示すグループ識別情報を付加して前記受信装置へ送信する制御部と、
を有することを特徴とする送信装置。
【請求項６】
前記制御部は、同一の送信データに基づいて生成したデータブロックのそれぞれと当該データブロックに基づいて生成したパリティブロックとに対して同一のグループに属するデータブロックの数を示すブロック数情報をさらに付加するとともに、同一のグループに属するデータブロックのそれぞれに対してグループ内の通し番号を示すブロック番号情報をさらに付加して送信することを特徴とする請求項５記載の送信装置。
【請求項７】
前記制御部は、前記受信装置へ送信するデータブロックおよびパリティブロックのそれぞれに対して、第１の値と第２の値のいずれかが設定されるグループ切り替え情報をさらに付加し、送信されるデータブロックおよびパリティブロックが切り替わるたびに、前記グループ切り替え情報に設定する値を前記第１の値と前記第２の値のうちの一方から他方へ切り替えることを特徴とする請求項５または６記載の送信装置。
【請求項８】
送信データを一定サイズに分割して得られた複数のデータブロックと、前記複数のデータブロックに基づいて生成されたパリティブロックとを送信する送信装置と、
前記複数のデータブロックのうち一のデータブロックの受信処理に失敗した場合に、前記複数のデータブロックのうち受信処理に成功した他のデータブロックと、受信処理に成功した前記パリティブロックとに基づいて、前記一のデータブロックを復元する受信装置と、
を有することを特徴とするデータ転送システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は受信装置、送信装置およびデータ転送システムに関する。
【背景技術】
【０００２】
バスやネットワークを介したデータ伝送の技術分野では、データ伝送の信頼性を向上させるための様々な技術が知られている。例えば、送信側が、データにＣＲＣ（Cyclic Redundancy Check）コードを付加して送信し、受信側が、ＣＲＣを用いて受信したデータの誤りを検出する技術がある。また、例えば、送信側がパケットにシーケンス番号を付加して送信し、受信側が受信に成功したパケットのシーケンス番号を返信する、あるいは受信に成功したパケットのシーケンス番号に基づいて受信していないパケットのシーケンス番号を返信するという技術もある。
【０００３】
データ伝送に関する技術としては、次のような提案もある。例えば、データグラムの大きさを示すヘッダを付加した複数の不定長データグラムを、ＰＣＩ（Peripheral Components Interconnect）バスを用いて拡張ボードに転送する技術が提案されている。また、送信データをブロック単位に分割し、各ブロックデータを構成する複数の分割データのそれぞれに、誤り検出用のパリティビットを付与する技術も提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−２９３７４１号公報
【特許文献２】特開２０１１−１０３５０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
データにＣＲＣコードを付加する、あるいは、パケットにシーケンス番号を付加するという上記の技術では、データの受信処理に失敗した場合に、そのデータを送信側に再送させる必要があるという問題がある。分割データのそれぞれにパリティビットを付与するという上記の技術についても同様である。受信処理に失敗したデータの再送が必要な技術では、例えば、データの伝送路が混雑し、伝送速度が低下する、あるいは、データの伝送が組み込まれた処理全体の処理時間が長くなる等の問題がある。
【０００６】
１つの側面では、本発明は、データ再送の頻度を低減することが可能な受信装置、送信装置およびデータ転送システムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
１つの態様では、受信装置が提供される。この受信装置は、受信部と制御部を有する。受信部は、送信データを一定サイズに分割して得られた複数のデータブロックと、複数のデータブロックに基づいて生成されたパリティブロックとを、送信装置から受信する。制御部は、複数のデータブロックのうち一のデータブロックの受信処理に失敗した場合に、複数のデータブロックのうち受信処理に成功した他のデータブロックと、受信処理に成功したパリティブロックとに基づいて、一のデータブロックを復元する。
【０００８】
また、１つの態様では、送信装置が提供される。この送信装置は、記憶部と制御部を有する。記憶部は、受信装置へ送信する複数の送信データを一時的に記憶する。制御部は、記憶部に記憶された複数の送信データのそれぞれを一定サイズに分割して複数のデータブロックを生成するとともに、複数のデータブロックのうち同一の送信データに対応するデータブロックに基づいてパリティブロックを生成し、複数のデータブロックおよびパリティブロックのうち、同一の送信データに対応するデータブロックおよびパリティブロックに対して、同一のグループに属することを示すグループ識別情報を付加して受信装置へ送信する。
【０００９】
また、１つの態様では、データ転送システムが提供される。このデータ転送システムは、送信装置と受信装置を有する。送信装置は、送信データを一定サイズに分割して得られた複数のデータブロックと、複数のデータブロックに基づいて生成されたパリティブロックとを送信する。受信装置は、複数のデータブロックのうち一のデータブロックの受信処理に失敗した場合に、複数のデータブロックのうち受信処理に成功した他のデータブロックと、受信処理に成功したパリティブロックとに基づいて、一のデータブロックを復元する。
【発明の効果】
【００１０】
１つの側面では、データ再送の頻度を低減できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態のデータ転送システムを示す図である。
【図２】第２の実施の形態のストレージシステムを示す図である。
【図３】ＣＭのハードウェア例を示す図である。
【図４】通信回路のハードウェア例を示す図である。
【図５】統合したデータの再分割および付加情報についての比較例を示す図である。
【図６】ブロック受信処理の比較例を示す図である。
【図７】第２の実施の形態で使用される付加情報を示す図である。
【図８】符号による判定処理の具体例を示す図である。
【図９】送信側の通信回路の機能例を示す図である。
【図１０】受信側の通信回路の機能例を示す図である。
【図１１】送信テーブルの例を示す図である。
【図１２】符号管理テーブルの例を示す図である。
【図１３】仕掛中テーブルの例を示す図である。
【図１４】保留テーブルの例を示す図である。
【図１５】送信処理の例を示すフローチャートである。
【図１６】受信処理の例（その１）を示すフローチャートである。
【図１７】受信処理の例（その２）を示すフローチャートである。
【図１８】受信処理の例（その３）を示すフローチャートである。
【図１９】監視処理の例を示すフローチャートである。
【図２０】受信処理の具体例（その１）を示す図である。
【図２１】受信処理の具体例（その２）を示す図である。
【発明を実施するための形態】
【００１２】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のデータ転送システムを示す図である。データ転送システムは、送信装置１および受信装置２を含む。送信装置１と受信装置２とは、バスやネットワークを介して接続される。
【００１３】
送信装置１は、記憶部１ａと制御部１ｂを有する。受信装置２は、受信部２ａと制御部２ｂを有する。記憶部１ａは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置でもよい。制御部１ｂ，２ｂは、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。なお、受信装置２も揮発性記憶装置、不揮発性記憶装置を有する。
【００１４】
送信装置１において、記憶部１ａは、受信装置２に送信される複数の送信データを記憶する。記憶部１ａは、例えば、送信される送信データを一時的に記憶する送信バッファとして実現される。
【００１５】
制御部１ｂは、記憶部１ａに記憶されている送信データを一定サイズのデータブロックに分割する。制御部１ｂは、送信データ毎に１つ以上のデータブロックを生成する。また、制御部１ｂは、生成された複数のデータブロックのうち、同一の送信データに対応するデータブロックに基づいてパリティブロックを生成する。制御部１ｂは、送信データ毎に、生成された１つ以上のデータブロックとパリティブロックとを受信装置２へ送信する。
【００１６】
一方、受信装置２において、受信部２ａは、送信装置１から送信されたデータブロックおよびパリティブロックを受信する。
制御部２ｂは、同一の送信データに対応するデータブロックおよびパリティブロックのうち、１つのデータブロックの受信処理に失敗した場合には、同じ送信データに対応する、受信処理に成功した他のデータブロックと受信処理に成功したパリティブロックとに基づいて、受信処理に失敗したデータブロックを復元する。
【００１７】
なお、受信部２ａが受信したデータブロックおよびパリティブロックの中から、制御部２ｂが同一の送信データに対応するデータブロックおよびパリティブロックを判別できるようにする方法としては、次のような方法がある。例えば、送信装置１の制御部１ｂは、同一の送信データに対応するデータブロックおよびパリティブロックに対して、それらが同一のグループに属することを示すグループ識別情報を付加し、グループ識別情報が付加されたデータブロックおよびパリティブロックを受信装置２へ送信する。受信装置２の受信部２ａは、送信されたデータブロックおよびパリティブロックを受信する。受信装置２の制御部２ｂは、受信部２ａが受信したデータブロックおよびパリティブロックに付加されたグループ識別情報に基づいて、同一の送信データに対応するデータブロックおよびパリティブロックを判別する。
【００１８】
以下、図１を参照しながら具体的な処理例について説明する。図１は、送信装置１から受信装置２へデータＸが送信される場合を例示している。
送信装置１の制御部１ｂは、データＸをデータブロックＸ１〜Ｘ３に分割する（ステップＳ１）。また、制御部１ｂは、データブロックＸ１〜Ｘ３に基づいて、パリティブロックＰＸを生成する（ステップＳ２）。制御部１ｂは、データブロックＸ１〜Ｘ３およびパリティブロックＰＸを受信装置２へ送信する（ステップＳ３）。
【００１９】
ここで、受信装置２は、データブロックＸ１，Ｘ３とパリティブロックＰＸの受信処理には成功したものの、データブロックＸ２の受信処理に失敗したものとする（ステップＳ４）。受信処理に失敗するケースとしては、例えば、伝送路上等においてデータブロックＸ２が失われた場合や、受信装置２がデータブロックＸ２を受信したものの、受信装置２が有する記憶装置への格納に失敗した場合等がある。
【００２０】
データブロックＸ２の受信処理に失敗した場合、受信装置２の制御部２ｂは、受信処理に成功したデータブロックＸ１，Ｘ３およびパリティブロックＰＸを用いて、受信処理に失敗したデータブロックＸ２を復元する（ステップＳ５）。これにより、実質的にデータＸの受信に成功したことになり、送信装置１からデータＸを再送させる必要がなくなる。
【００２１】
以上の第１の実施の形態によれば、送信装置１において、送信データが複数のデータブロックに分割されるとともに、それらの複数のデータブロックに基づいてパリティブロックが生成される。そして、分割された複数のデータブロックとそれらに基づくパリティブロックとが、送信装置１から受信装置２へ送信される。これにより、受信装置２は、１つの送信データに対応するデータブロックのうちの１つの受信処理に失敗した場合でも、当該送信データに対応する、受信処理に成功した他のデータブロックおよびパリティブロックを用いて、受信処理に失敗したデータブロックを復元できる。受信処理に失敗したデータブロックを復元できた場合、対応する送信データを送信装置１に再送させる必要はない。
【００２２】
したがって、第１の実施の形態によれば、送信装置１から受信装置２へ送信データが再送される頻度を低減することができる。データ再送の頻度が低減されることで、例えば、送信装置１と受信装置２との間の通信トラフィックを緩和し、伝送速度を向上させることができる。また、送信データの送信処理を含む送信装置１の所定情報処理全体の処理時間を短縮できる。
【００２３】
［第２の実施の形態］
次に、第１の実施の形態の送信装置１および受信装置２を含むシステムとして、ストレージシステムを例示する。
【００２４】
図２は、第２の実施の形態のストレージシステムを示す図である。第２の実施の形態のストレージシステムは、ストレージ装置１００およびホスト装置４００，４００ａを含む。
【００２５】
ストレージ装置１００とホスト装置４００，４００ａとの間は、ＳＡＳ（Serial Attached SCSI）やファイバチャネル（ＦＣ：Fibre Channel）などのケーブルを用いて接続されている。このような接続構成をＤＡＳ（Direct Attached Storage）と呼ぶこともある。ただし、ストレージ装置１００とホスト装置４００，４００ａとをファイバチャネルやｉＳＣＳＩ（Internet Small Computer System Interface）などを用いたＳＡＮ（Storage Area Network）を介して接続してもよい。ストレージ装置１００をＮＡＳ（Network Attached Storage）として用いることもできる。
【００２６】
ストレージ装置１００は、ＣＥ（Controller Enclosure）１１０およびＤＥ（Drive Enclosure）１２０を有する。ＣＥ１１０は、ＣＭ（Controller Module）２００，２００ａを有する。
【００２７】
ＣＭ２００，２００ａは、ホスト装置４００，４００ａからの要求に応じたＤＥ１２０に対するデータアクセス、ストレージ装置１００内のハードウェアモジュールの動作などを制御する。同様の機能を有するＣＭ２００，２００ａが冗長化されていることにより、ホスト装置４００，４００ａからＤＥ１２０へのアクセス動作の信頼性が高められている。
【００２８】
また、ＣＭ２００，２００ａは互いに接続されており、例えばキャッシュされたデータや所定の設定データなど、一方のＣＭに記憶された情報が他方のＣＭにも記憶されるようになっている。なお、このようにＣＭ２００とＣＭ２００ａとの間でデータが送受信される状態において、ＣＭ２００，２００ａのうち、一方が第１の実施の形態の送信装置１の一例となり、他方が受信装置２の一例となる。
【００２９】
ＤＥ１２０は、ＨＤＤ３００，３００ａ，３００ｂを有する。なお、ＤＥ１２０に搭載されるＨＤＤの数は、３台に限定されるものではない。
ホスト装置４００，４００ａは、ユーザが利用するクライアントコンピュータである。ホスト装置４００，４００ａは、ストレージ装置１００に対して、ストレージ装置１００のＤＥ１２０に搭載されたＨＤＤ３００〜３００ｂに対するアクセスを要求する。
【００３０】
図３は、ＣＭのハードウェア例を示す図である。ＣＭ２００は、ＣＰＵ２０１、ＲＡＭ２０５、ＰＣＨ（Platform Controller Hub）２０６、ＳＳＤ（Solid State Drive）２０７、ＰＣＩｅ（Peripheral Components Interconnect Express）スイッチ２０８、ＣＡ２０９，２０９ａ、ＳＡＳコントローラ２１０，２１０ａおよび通信回路５００を有する。
【００３１】
ＣＰＵ２０１には、ＲＡＭ２０５が接続されている。ＣＰＵ２０１には、ＰＣＨ２０６を介して、ＳＳＤ２０７が接続されている。ＣＰＵ２０１には、ＰＣＩｅスイッチ２０８を介して、ＣＡ２０９，２０９ａおよびＳＡＳコントローラ２１０，２１０ａが接続されている。ＣＰＵ２０１には、通信回路５００を介して、ＣＭ２００ａが接続されている。
【００３２】
ＣＰＵ２０１は、ＣＰＵコア２０２、ＰＣＩｅ制御部２０３およびメモリ制御部２０４を含む。ＣＰＵコア２０２は、ＣＭ２００の情報処理を制御する。ＰＣＩｅ制御部２０３は、ＰＣＨ２０６、ＰＣＩｅスイッチ２０８、通信回路５００との通信をＰＣＩｅのプロトコルを用いて行う。例えば、ＰＣＩｅ制御部２０３は、ＰＣＩｅヘッダを付加したデータを通信回路５００に送信する。メモリ制御部２０４は、ＲＡＭ２０５に記憶されているデータの読み込みまたは書き込みを行う。
【００３３】
ＲＡＭ２０５は、ＣＭ２００の主記憶装置である。ＲＡＭ２０５は、揮発性の半導体メモリである。ＲＡＭ２０５は、ＣＰＵコア２０２に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ２０５は、ＣＰＵコア２０２による処理に用いる各種データを記憶する。
【００３４】
ＰＣＨ２０６は、ＣＰＵ２０１とＳＳＤ２０７との間で、データを送受信する。また、ＰＣＨ２０６には、ＬＡＮ（Local Area Network）インタフェースが接続されていてもよい。
【００３５】
ＳＳＤ２０７は、ＣＭ２００の補助記憶装置である。ＳＳＤ２０７は、不揮発性の半導体メモリである。ＳＳＤ２０７には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ＣＭ２００は、補助記憶装置として、ＳＳＤ２０７の代わりにＨＤＤを備えていてもよい。
【００３６】
ＰＣＩｅスイッチ２０８は、ＣＰＵ２０１とＣＡ２０９，２０９ａおよびＳＡＳコントローラ２１０，２１０ａとの間で、データを送受信する。ＣＡ２０９は、ホスト装置４００と通信するためのインタフェースであり、ＣＡ２０９ａは、ホスト装置４００ａと通信するためのインタフェースである。ＳＡＳコントローラ２１０，２１０ａは、ＤＥ１２０内のＨＤＤと通信するためのインタフェースである。
【００３７】
通信回路５００は、ＣＭ２００ａと通信するためのインタフェースである。通信回路５００は、ＣＰＵ２０１とＣＭ２００ａとの間で、データを送受信する。通信回路５００と、ＣＰＵ２０１およびＣＭ２００ａとの間は、それぞれＰＣＩｅバスによって接続されている。通信回路５００は、例えば、ＣＭ２００のＲＡＭ２０５に記憶されたデータをＣＭ２００ａへ送信し、ＣＭ２００ａのＲＡＭ（図示せず）へのコピーを要求する処理や、ＣＭ２００ａのＲＡＭに記憶されたデータを受信してＣＭ２００のＲＡＭ２０５にコピーする処理などを行う。
【００３８】
なお、ＣＭ２００ａもＣＭ２００と同様のハードウェアにより実現できる。
図４は、通信回路のハードウェア例を示す図である。図４は、ＣＭ２００とＣＭ２００ａにそれぞれ含まれる通信回路５００，５００ａのハードウェア例を示している。通信回路５００ａは、通信回路５００に対応するハードウェアであり、通信回路５００と通信回路５００ａとはＰＣＩｅバスを介して接続されている。また、図４は、ＣＭ２００のＣＰＵ２０１およびＲＡＭ２０５と、ＣＭ２００ａのＣＰＵ２０１ａおよびＲＡＭ２０５ａも、通信回路５００，５００ａとともに示している。ＣＰＵ２０１ａおよびＲＡＭ２０５ａは、それぞれＣＰＵ２０１およびＲＡＭ２０５に対応するハードウェアである。
【００３９】
通信回路５００は、制御回路５０１、メモリ５０２および送受信回路５０３，５０４を有する。通信回路５００ａは、制御回路５０１ａ、メモリ５０２ａおよび送受信回路５０３ａ，５０４ａを有する。ＣＰＵ２０１とＣＰＵ２０１ａは、通信回路５００および通信回路５００ａを介してデータの送受信を行う。
【００４０】
制御回路５０１は、データの分割、付加情報の付加、受信したデータのエラー検出やエラー訂正等の通信回路５００の情報処理を制御する回路である。メモリ５０２は、揮発性の半導体メモリである。例えば、メモリ５０２は、ＲＡＭなどである。メモリ５０２は、制御回路５０１による処理に用いる各種データを記憶する。メモリ５０２は、送信データや受信データを一時的に格納するバッファとしても使用される。送受信回路５０３は、ＣＰＵ２０１との間のデータ送受信を制御する通信インタフェース回路である。送受信回路５０４は、ＣＭ２００ａとの間のデータ送受信を制御する通信インタフェース回路である。
【００４１】
制御回路５０１ａは、データの分割、付加情報の付加、受信したデータのエラー検出やエラー訂正等の通信回路５００ａの情報処理を制御する回路である。メモリ５０２ａは、揮発性の半導体メモリである。例えば、メモリ５０２ａは、ＲＡＭなどである。メモリ５０２ａは、制御回路５０１ａによる処理に用いる各種データを記憶する。メモリ５０２ａは、送信データや受信データを一時的に格納するバッファとしても使用される。送受信回路５０３ａは、ＣＰＵ２０１ａとの間のデータ送受信を制御する通信インタフェース回路である。送受信回路５０４ａは、ＣＭ２００ａとの間のデータ送受信を制御する通信インタフェース回路である。
【００４２】
上記の通信回路５００，５００ａによって実行されるデータ転送処理は、主として、ＲＡＭ２０５，２０５ａに記憶された所定のデータを、他方のＲＡＭに転送してバックアップするための処理である。バックアップの対象となるＲＡＭ上のデータとしては、例えば、ホスト装置４００，４００ａからの要求に応じたデータアクセス処理においてＲＡＭ上にキャッシュされたデータや、対応するＣＭの動作に関する各種の設定データ等がある。
【００４３】
ここで、ＲＡＭ２０５に記憶されているデータが、制御回路５０１，５０１ａにより転送されて、ＲＡＭ２０５ａに格納されるまでの流れを説明する。
制御回路５０１は、ＣＰＵコア２０２から送受信回路５０３を介してＲＡＭ２０５上のデータの転送要求を受信する。転送要求には、転送対象のデータが格納されている先頭位置を示すＲＡＭ２０５のアドレス、転送対象のデータのデータ長および転送先であるＲＡＭ２０５ａのアドレスなどが含まれる。
【００４４】
制御回路５０１は、受信した情報に基づいて、転送対象のデータの読み出し要求を送受信回路５０３を介して送信する。読み出し要求は、ＰＣＩｅ制御部２０３を介してメモリ制御部２０４に送信され、メモリ制御部２０４は、要求されたデータをＲＡＭ２０５から読み出して、ＰＣＩｅ制御部２０３を介して通信回路５００に送信する。送信されたデータは、送受信回路５０３によって受信され、メモリ５０２のバッファ領域に格納される。
【００４５】
ここで、読み出し要求に応じてＰＣＩｅ制御部２０３から通信回路５００へ送信されるデータは、実際には、ＰＣＩｅパケットのペイロードに分割して格納される。通信回路５００においては、受信されたＰＣＩｅパケットのペイロードのデータがメモリ５０２に格納されることで、これらのデータが一旦統合される。
【００４６】
制御回路５０１は、統合されたデータを一定サイズのデータブロックに再分割する。この再分割は、統合されたデータを通信回路５００ａへＰＣＩｅパケットによって送信する際に、ペイロードの中に、再分割されたデータブロックに加えて後述する付加情報を付加するために行われる。このため、再分割されたデータブロックのサイズは、ペイロードのサイズより付加情報のサイズ分だけ小さい。また、制御回路５０１は、統合されたデータから再分割された各データブロックに基づいて、パリティブロックを生成する。
【００４７】
制御回路５０１は、再分割された各データブロックおよびパリティブロックを、ＲＡＭ２０５ａへの書き込み要求を示すＰＣＩｅパケットとして、送受信回路５０４を介して通信回路５００ａに送信する。各ＰＣＩｅパケットのペイロードには、データブロックまたはパリティブロックと、付加情報とが格納される。
【００４８】
送信されたＰＣＩｅパケットは、通信回路５００ａの送受信回路５０４ａによって受信され、メモリ５０２ａのバッファ領域に格納される。制御回路５０１ａは、付加情報に基づいて、転送対象とされた同一のデータに対応するデータブロックおよびパリティブロックを判別するとともに、受信処理に失敗したデータブロックの有無を判定する。すべてのデータブロックの受信処理に成功した場合、転送対象のデータを正常に受信したことになる。また、例えば、１つのデータブロックの受信処理に失敗した場合、制御回路５０１ａは、受信処理に成功した他のデータブロックおよびパリティブロックを用いて、受信処理に失敗したデータブロックを復元する。この場合にも、転送対象のデータを正常に受信できたことになる。このように、転送対象のデータに対応する１つのデータブロックの受信処理に失敗した場合には、そのデータブロックを復元でき、転送対象のデータをＣＭ２００から再送信させる必要がない。
【００４９】
転送対象のデータを正常に受信できた場合、制御回路５０１ａは、送受信回路５０３ａを介して、このデータのＲＡＭ２０５ａへの書き込み要求を出力する。書き込み要求は、ＰＣＩｅ制御部２０３ａを介してメモリ制御部２０４ａに送信され、メモリ制御部２０４ａは、書き込みが要求されたデータをＲＡＭ２０５ａに書き込む。なお、実際には、正常に受信された転送対象のデータは、制御回路５０１ａによって再分割され、ＰＣＩｅパケットに格納されてＰＣＩｅ制御部２０３ａに送信される。
【００５０】
ここで、図５は、統合したデータの再分割および付加情報についての比較例を示す図である。なお、これ以後の説明では、データブロックとパリティブロックとを特に区別せずに表す場合には、「ブロック」と記載する場合がある。
【００５１】
図５の例では、ＣＰＵコア２０２から、ＲＡＭ２０５上のデータＹの転送が要求されたものとする。前述の手順により、ＲＡＭ２０５から読み出されたデータＹは、ＰＣＩｅパケットによってＰＣＩｅ制御部２０３から通信回路５００へ送信され、通信回路５００のメモリ５０２において一旦統合される。
【００５２】
制御回路５０１は、統合されたデータＹを一定サイズのデータブロックに再分割する。図５の例では、再分割により４つのデータブロックＹ１〜Ｙ４が生成されたものとする。また、制御回路５０１は、データブロックＹ１〜Ｙ４に基づいて、パリティブロックＰＹを生成する。なお、パリティブロックＰＹは、例えば、“Ｙ１  ＸＯＲ  Ｙ２  ＸＯＲ  Ｙ３  ＸＯＲ  Ｙ４”という式により算出される。“ＸＯＲ”は、ビット毎に排他的論理和を演算することを示す。
【００５３】
制御回路５０１は、データブロックＹ１〜Ｙ４およびパリティブロックＰＹのそれぞれに付加情報を付加する。ここで、付加情報には、送信されたデータブロックＹ１〜Ｙ４およびパリティブロックＰＹが同一のデータ（ここではデータＹ）に対応する同一のグループに属することを受信側が識別できるようにするためのグループ識別情報が含められる。グループ毎に異なる数値がグループ識別情報に設定されることで、受信側は受信したブロックが属するグループを識別できる。
【００５４】
このようなグループ識別情報の一例として、図５に示すような「先頭転送先アドレス」が考えられる。先頭転送先アドレスは、対応するデータＹのＲＡＭ２０５ａにおける格納先領域の先頭アドレスであり、同一グループに属するすべてのブロックについて共通の値となる。図５の例では、先頭転送先アドレスは“Ｙａ”であるとする。先頭転送先アドレスとしては、データＹの転送が要求される際にＣＰＵコア２０２から指定されるアドレスをそのまま利用できる。このため、制御回路５０１は、グループ識別情報を生成するための別の処理を行う必要がなく、付加情報にグループ識別情報を簡易な処理で付加できる。
【００５５】
さらに、グループ識別情報に対して、図５に示すような「ブロック数」を含める方法も考えられる。ブロック数は、同一グループに属するブロックの総数であり、同一グループに属するすべてのブロックについて共通の値となる。図５の例では、ブロック数は“５”となる。なお、ブロック数は、同一グループに属するデータブロックの総数であってもよい。
【００５６】
受信側は、付加情報内のブロック数を、同一グループに属するブロックを識別するだけでなく、同一グループに属するブロックの数を認識するためにも使用することができる。このように、他の目的で利用可能な情報をグループ識別情報に含めることで、付加情報のサイズを小さくすることができ、送信の際のオーバヘッドを小さくすることができる。
【００５７】
また、付加情報にはさらに、図５に示すような「ブロック番号」を含めることが考えられる。ブロック番号は、同一グループに属するブロックそれぞれの通し番号を示す。したがって、ブロック番号については、同一グループに属するブロック毎に異なる。なお、パリティブロックに付加されるブロック番号は、通し番号でなく、例えば、予め決められた値（例えば“０”）であってもよい。
【００５８】
以上のような付加情報は、ＰＣＩｅパケットのペイロードに、データブロックＹ１〜Ｙ４のいずれか、またはパリティブロックＰＹとともに格納される。制御回路５０１は、付加情報とブロックとを含む各ＰＣＩｅパケットを通信回路５００ａに送信する。なお、データブロックが格納されたＰＣＩｅパケットのＰＣＩｅヘッダには、書き込み先の先頭アドレスとして、転送先のＲＡＭ２０５ａにおける、格納されたデータブロックの書き込み先領域の先頭アドレスが記述される。
【００５９】
上記のようなＰＣＩｅパケットは、通信回路５００ａの送受信回路５０４ａによって受信され、メモリ５０２ａのバッファ領域へ格納される。通信回路５００ａの制御回路５０１ａは、付加情報を参照し、先頭転送先アドレス“アドレスＹａ”、ブロック数“５”が設定された５つのブロックがメモリ５０２ａに書き込まれているかを判定する。
【００６０】
５つのブロックが書き込まれている場合、制御回路５０１ａは、データＹを正常に受信できたと判定する。一方、例えば、４つのブロックしか書き込まれていない場合、制御回路５０１ａは、付加情報のブロック番号を参照し、ブロック番号を順に確認することで受信処理に失敗したブロックを特定できる。このとき、例えば、データブロックＹ３の受信処理に失敗していた場合、制御回路５０１ａは、受信済みのデータブロックＹ１，Ｙ２，Ｙ４とパリティブロックＰＹとを用いてデータブロックＹ３を復元できる。このように、制御回路５０１ａは、グループ内の１つのデータブロックの受信処理に失敗した場合でも、そのデータブロックを復元することができる。
【００６１】
しかしながら、次の図６に示すように、制御回路５０１ａがデータブロックの受信処理に失敗したことを正しく判別できないケースがある。そのケースは、ＲＡＭ２０５ａ上の同一の記憶領域に対するデータの転送が連続して要求されたときに発生する可能性がある。
【００６２】
図６は、ブロック受信処理の比較例を示す図である。図６の例では、ＣＭ２００の通信回路５００からＣＭ２００ａの通信回路５００ａに対して、データＹに対応するデータブロックＹ１〜Ｙ４およびパリティブロックＰＹが転送されたものとする。そして、通信回路５００ａの送受信回路５０４ａは、受信したデータブロックＹ１〜Ｙ４およびパリティブロックＰＹを、付加情報とともにメモリ５０２ａのバッファ領域へ正しく格納できたものとする。
【００６３】
データブロックＹ１〜Ｙ４およびパリティブロックＰＹのそれぞれに付加された付加情報のうち、グループ識別情報には、先頭転送先アドレス“ＹＺ”、ブロック数“５”が設定されている。また、例えば、データブロックＹ３に付加された付加情報には、ブロック番号“３”が設定されている。
【００６４】
制御回路５０１ａは、メモリ５０２ａに格納された各ブロックに付加された付加情報を順次読み出す。制御回路５０１ａは、データブロックＹ１〜Ｙ４およびパリティブロックＰＹのそれぞれに付加された付加情報から、グループ識別情報に先頭転送先アドレス“ＹＺ”、ブロック数“５”が設定された４つのデータブロックＹ１〜Ｙ４が全て揃っていると判定する。この場合、制御回路５０１ａは、データブロックＹ１〜Ｙ４をＲＡＭ２０５ａへ転送する。
【００６５】
次に、ＣＭ２００のＣＰＵコア２０２から通信回路５００に対して、データＺ（図示せず）の転送が要求されたとする。データＺの転送先の記憶領域は、直前に転送が要求されたデータＹと同一であるとする。すなわち、ＣＰＵコア２０２から指定されたデータＺの転送先領域の先頭アドレス（“ＹＺ”）およびデータ長は、データＹと同じであるとする。
【００６６】
この場合、通信回路５００の制御回路５０１は、データＺをデータブロックＺ１〜Ｚ４に分割するとともに、データブロックＺ１〜Ｚ４を用いてパリティブロックＰＺを生成する。制御回路５０１は、データブロックＺ１〜Ｚ４およびパリティブロックＰＺのそれぞれに付加情報を付加し、通信回路５００ａへ送信する。この場合、各ブロックに付加される付加情報のうち、グループ識別情報には先頭転送先アドレス“ＹＺ”、ブロック数“５”が設定される。通信回路５００ａの送受信回路５０４ａは、受信したデータブロックＺ１〜Ｚ４およびパリティブロックＰＺを付加情報とともにメモリ５０２ａのバッファ領域に格納する。
【００６７】
ここで、送受信回路５０４ａが、データブロックＺ１〜Ｚ４およびパリティブロックＰＺを、メモリ５０２ａにおけるデータブロックＹ１〜Ｙ４およびパリティブロックＰＹと同じ記憶領域に書き込む場合がある。このような書き込みが行われる原因としては、メモリ５０２ａの記憶容量が小さいことが挙げられる。特に、メモリ５０２ａは、ブロックの送信と受信の両方で使用され、さらに制御回路５０１ａの処理に必要なデータの記憶領域としても使用される。このため、通信回路５００から受信したデータの受信バッファとして使用可能な記憶領域の容量は、小さくなることが考えられる。
【００６８】
図６の例では、メモリ５０２ａ上のデータブロックＹ１〜Ｙ４およびパリティブロックＰＹと同じ記憶領域に、データブロックＺ１〜Ｚ４およびパリティブロックＰＺが書き込まれる事態が発生したとする。ただし、送受信回路５０４ａは、これらのブロックのうち、例えばデータブロックＺ３の書き込みに失敗し、メモリ５０２ａに対するデータブロックＺ３の書き込みが行われなかったとする。しかも、制御回路５０１ａは、このような送受信回路５０４ａでの書き込み失敗の発生を認識できず、データブロックＺ３の書き込みに成功したと認識しているものとする。このような書き込みエラーの発生原因としては、例えば、送受信回路５０４ａでノイズが発生した場合や送受信回路５０４ａの回路自体に異常がある場合がある。
【００６９】
このようなデータブロックＺ３の書き込みエラーが発生した場合、メモリ５０２ａ上では、データブロックＹ１，Ｙ２，Ｙ４およびパリティブロックＰＹが、それぞれデータブロックＺ１，Ｚ２，Ｚ４およびパリティブロックＰＺによってそれぞれ上書きされる。また、各ブロックに付加された付加情報も、新たな付加情報によって上書きされる。しかし、データブロックＹ３とその付加情報は、上書きされずにメモリ５０２ａにそのまま残る。
【００７０】
この状態から、制御回路５０１ａは、データブロックＺ１の付加情報から先頭転送先アドレス“ＹＺ”およびブロック数“５”を検出する。制御回路５０１ａは、各データブロックおよびパリティブロックＰＺの付加情報を参照し、付加情報の先頭転送先アドレスに“ＹＺ”が設定されたブロックが５つ存在するか否かを判定する。制御回路５０１ａは、データブロックＺ３の書き込みエラーを認識していないので、データブロックＺ２，Ｙ３，Ｚ４、パリティブロックＰＺの順に付加情報を読み出す。
【００７１】
メモリ５０２ａに記憶されたままのデータブロックＹ３の付加情報の内容は、上書きに失敗したデータブロックＺ３の付加情報の内容と同じである。このため、データブロックＺ１，Ｚ２，Ｙ３，Ｚ４およびパリティブロックＰＺの付加情報においては、いずれも先頭転送先アドレス“ＹＺ”およびブロック数“５”が設定されている。したがって、制御回路５０１ａは、先頭転送先アドレス“ＹＺ”およびブロック数“５”が付加されたブロックが５つ存在すると間違って判定してしまう。
【００７２】
そして、制御回路５０１ａは、ＲＡＭ２０５ａ上のデータブロックＹ１，Ｙ２，Ｙ３，Ｙ４がそれぞれ記憶された領域に、データブロックＺ１，Ｚ２，Ｙ３，Ｚ４を格納する。すると、ＲＡＭ２０５ａのデータブロックＹ３の記憶領域だけ、データブロックＺ３による更新がされないという事態が起こる。
【００７３】
このように、ＲＡＭ２０５ａ上の同じ記憶領域に対するデータの転送要求が連続して発生し、かつ、通信回路５００ａのメモリ５０２ａ上の同じ記憶領域に後続のデータに対応するブロックおよび付加情報が書き込まれた場合、メモリ５０２ａへの書き込みが誤ってスキップされたデータブロックを上記の付加情報から特定することができない。そのため、ＲＡＭ２０５ａの一部（データブロックＹ３の記憶領域）が更新されないという事態が起こり得る。
【００７４】
そこで、本実施の形態では、上記のような付加情報に符号の項目を追加することで、ＲＡＭ２０５ａの一部が更新されないという事態を防ぐ。
図７は、第２の実施の形態で使用される付加情報を示す図である。図７では、図５，図６に例示した付加情報のグループ識別情報に符号の項目が追加されたことを示している。符号の項目には、“０”または“１”が設定される。なお、符号の項目に設定される値は、予め決められた２通りの値のいずれかであれば“０”，“１”に限らない。
【００７５】
符号の値は、１つの転送データが通信回路５００から通信回路５００ａに送信される度に変更される。例えば、制御回路５０１は、データＹを分割したデータブロックＹ１〜Ｙ４およびパリティブロックＰＹそれぞれに、符号“０”が設定された付加情報を付加して、通信回路５００ａに送信する。次に、制御回路５０１は、データＺを分割したデータブロックＺ１〜Ｚ４およびパリティブロックＰＺそれぞれに、符号“１”が設定された付加情報を付加して、通信回路５００ａに送信する。このように、制御回路５０１は、転送データが変わる度に付加情報の符号を変更する。
【００７６】
図８は、符号による判定処理の具体例を示す図である。図８は、図６の例と同様、データＹの転送が要求された後、ＲＡＭ２０５ａ上のデータＹと同一の記憶領域に対して同じデータサイズのデータＺの転送が要求されたケースを示す。また、通信回路５００の制御回路５０１は、データＹに対応するブロックの付加情報に符号“０”を設定し、次のデータＺに対応するブロックの付加情報に符号“１”を設定したとする。
【００７７】
図８の左側の状態では、データＹの転送要求に応じて、通信回路５００ａのメモリ５０２ａには、データブロックＹ１，Ｙ２，Ｙ３，Ｙ４およびパリティブロックＰＹが付加情報とともに正常に記憶されている。この状態から、データＺの転送が要求され、通信回路５００の制御回路５０１は、データブロックＺ１，Ｚ２，Ｚ３，Ｚ４およびパリティブロックＰＺを付加情報とともに通信回路５００ａへ送信する。
【００７８】
通信回路２００ａでは、図６の例と同様に、メモリ５０２ａ上のデータブロックＹ１，Ｙ２，Ｙ３，Ｙ４およびパリティブロックＰＹと同じ領域に、受信したデータブロックＺ１，Ｚ２，Ｚ３，Ｚ４およびパリティブロックＰＺが格納されるとする。ただし、図６の例と同様に、送受信回路５０４ａは、データブロックＺ３の書き込みに失敗し、図８の中央に示すように、データブロックＹ３とその付加情報とがメモリ５０２ａにそのまま残ったとする。また、制御回路５０１ａは、データブロックＺ３の書き込みに失敗したことを検知できなかったものとする。
【００７９】
制御回路５０１ａは、各ブロックの付加情報をメモリ５０２ａから順に読み出す。このとき、データブロックＺ１，Ｚ２，Ｚ４およびパリティブロックＰＺについては、対応する付加情報における符号、アドレスおよびブロック数の値が同じである。そのため、制御回路５０１ａは、データブロックＺ１，Ｚ２，Ｚ４およびパリティブロックＰＺが同じグループに属すると判定する。しかし、データブロックＹ３については、対応する付加情報におけるアドレスおよびブロック数の値はデータブロックＺ１，Ｚ２，Ｚ４およびパリティブロックＰＺと同じであるものの、符号の値はデータブロックＺ１，Ｚ２，Ｚ４およびパリティブロックＰＺとは異なる。そのため、制御回路５０１ａは、データブロックＹ３は、データブロックＺ１，Ｚ２，Ｚ４およびパリティブロックＰＺとは異なるグループに属すると判定する。そして、制御回路５０１ａは、データブロックＺ１，Ｚ２，Ｚ４およびパリティブロックＰＺの付加情報に設定されたブロック数およびブロック番号から、ブロック番号“３”が付加されたデータブロックＺ３の受信処理に失敗したことを正しく判定することができる。
【００８０】
これにより、制御回路５０１ａは、受信処理に成功したデータブロックＺ１，Ｚ２，Ｚ４およびパリティブロックＰＺを用いてデータブロックＺ３を復元し、データブロックＺ１〜Ｚ４をＲＡＭ２０５ａに書き込むことができる。データブロックＺ３の受信処理に失敗したにもかかわらず、データＺ全体がＲＡＭ２０５ａに正常に書き込まれるので、データＺのＣＭ２００からの再送が必要にならない。
【００８１】
このように、付加情報の符号と先頭転送先アドレスとブロック数とで１つのグループに属する全てのブロックが揃っていることの確認を行うことで、受信処理を失敗したことを判定できる。制御回路５０１ａにより、受信処理を失敗した状態でデータブロックをＲＡＭ２０５ａに送信しないように制御するので、ＲＡＭ２０５ａの一部が更新されないという事態を防ぐことができる。
【００８２】
なお、送信側の制御回路５０１は、符号が一方の値である場合のみ、符号以外の付加情報の各ビットの値を反転させてもよい。例えば、制御回路５０１は、符号が“１”の場合に、符号以外の付加情報の各ビットの値を反転させる。この場合、受信側の制御回路５０１ａは、付加情報の符号の値に基づいて、符号以外の付加情報の各ビットが反転されているかを判定する。反転されていると判定した場合、制御回路５０１ａは、同一グループに属するブロックの受信数を判定する際に、少なくともブロック数およびブロック番号の各ビットを反転させてから利用する。
【００８３】
このようなビット反転が施される場合、受信側の制御回路５０１ａは、同一グループに属するブロックを判別する際に、符号が“１”であっても、グループ識別情報の各ビットを反転させないままグループ識別情報の比較処理を行うことができる。例えば、図８のケースで上記のようなビット反転が施されない場合、データブロックＺ１，Ｚ２，Ｚ４およびパリティブロックＰＺに付加されたグループ識別情報と、データブロックＹ３に付加されたグループ識別情報との間では、符号の値のみが異なることになる。これに対して、上記のようなビット反転が施された場合、データブロックＺ１，Ｚ２，Ｚ４およびパリティブロックＰＺに付加されたグループ識別情報と、データブロックＹ３に付加されたグループ識別情報との間では、グループ識別情報全体が異なる。このため、例えば、グループ識別情報のうち符号の部分のみ、伝送路上の伝送時やメモリ５０２ａへの書き込み時等でエラーが発生して値が変化してしまった場合でも、データブロックＺ１，Ｚ２，Ｚ４およびパリティブロックＰＺが属するグループにデータブロックＹ３が属さないことを判定できる。換言すると、グループ識別情報全体が符号と同等の役割を果たすようになる。これにより、エラー判定の精度が向上する。
【００８４】
次に、図９および図１０を用いて、通信回路５００，５００ａの機能について説明する。通信回路５００，５００ａは、実際にはともに同じ機能を備える。しかしながら、図９および図１０では、説明を簡単にするために、通信回路５００を送信側、通信回路５００ａを受信側として説明し、通信回路５００の受信側としての機能と通信回路５００ａの送信側としての機能とを省略する。
【００８５】
図９は、送信側の通信回路の機能例を示す図である。通信回路５００は、記憶部５１０、転送制御部５２０およびブロック生成部５３０を有する。記憶部５１０は、例えば、メモリ５０２に確保した記憶領域として実装される。転送制御部５２０およびブロック生成部５３０の処理は、例えば、制御回路５０１が備えるプロセッサが所定のファームウェアプログラムを実行することで実現される。また、転送制御部５２０およびブロック生成部５３０の少なくとも一方は、専用の回路として実装されてもよい。
【００８６】
記憶部５１０は、転送制御部５２０およびブロック生成部５３０の処理に用いられる情報を記憶する。記憶部５１０は、バッファ記憶部５１１およびテーブル記憶部５１２を有する。バッファ記憶部５１１は、ＲＡＭ２０５から取得したデータブロックなどを一時的に記憶する。テーブル記憶部５１２は、送信テーブルを記憶する。送信テーブルには、転送サイズ、付加情報のサイズを示す情報および符号など、付加情報を生成するために用いられる情報が登録される。転送サイズは、通信回路５００から通信回路５００ａへＰＣＩｅパケットにより１回に送信できるデータのサイズである。転送サイズおよび付加情報のサイズは、予め送信テーブルに登録されている。また、符号は、送信側の通信回路５００で管理される符号である。
【００８７】
転送制御部５２０は、ＣＰＵ２０１からデータの転送要求を受信する。転送制御部５２０は、受信した転送要求に基づいて、送信テーブルに転送元アドレスと先頭転送先アドレスを登録する。これとともに、転送制御部５２０は、転送が要求されたデータの読み出しを、ＰＣＩｅ制御部２０３を介してメモリ制御部２０４に要求する。この読み出し要求に応じて、ＲＡＭ２０５からデータが読み出され、メモリ制御部２０４およびＰＣＩｅ制御部２０３を介して通信回路５００へ送信される。このデータは、ＰＣＩｅパケットに分割して送信され、分割されたデータブロックがメモリ５０２に格納されることで一旦統合される。
【００８８】
転送制御部５２０は、送信テーブルを参照して付加情報を作成し、後述するブロック生成部５３０が作成した複数のデータブロックおよびパリティブロックのそれぞれに付加情報を付加する。転送制御部５２０は、送受信回路５０４を介して、付加情報を付加した複数のデータブロックおよびパリティブロックそれぞれを通信回路５００ａに送信する。転送制御部５２０は、複数のデータブロックおよびパリティブロックそれぞれの送信を完了したら、送信テーブルに登録されている符号を更新する。例えば、転送制御部５２０は、符号が“０”の場合は符号を“１”に更新する。転送制御部５２０は、符号が“１”の場合は符号を“０”に更新する。
【００８９】
ブロック生成部５３０は、送信テーブルに登録されている転送サイズおよび付加情報のサイズに基づいて、バッファ記憶部５１１で統合されたデータを再度分割し、複数のデータブロックを作成する。ブロック生成部５３０は、作成された複数のデータブロックに基づいてパリティブロックを生成する。
【００９０】
図１０は、受信側の通信回路の機能例を示す図である。通信回路５００ａは、記憶部５１０ａ、転送制御部５２０ａ、解析部５３０ａ、監視部５４０ａおよび復元部５５０ａを有する。転送制御部５２０ａ、解析部５３０ａ、監視部５４０ａおよび復元部５５０ａは、互いに通信可能である。
【００９１】
記憶部５１０ａは、例えば、メモリ５０２ａに確保した記憶領域として実装される。転送制御部５２０ａ、解析部５３０ａ、監視部５４０ａおよび復元部５５０ａの処理は、例えば、制御回路５０１ａが備えるプロセッサが所定のファームウェアプログラムを実行することで実現される。また、転送制御部５２０ａ、解析部５３０ａ、監視部５４０ａおよび復元部５５０ａの少なくとも１つは、専用の回路のモジュールとして実装されてもよい。
【００９２】
記憶部５１０ａは、転送制御部５２０ａ、解析部５３０ａ、監視部５４０ａおよび復元部５５０ａの処理に用いられる情報を記憶する。記憶部５１０ａは、バッファ記憶部５１１ａおよびテーブル記憶部５１２ａを有する。バッファ記憶部５１１ａは、通信回路５００から送信されたデータブロックおよびパリティブロックを付加情報とともに一時的に記憶する。テーブル記憶部５１２ａは、符号管理テーブル、仕掛中テーブルおよび保留テーブルを記憶する。符号管理テーブルには、受信側の通信回路５００ａで管理される符号を示す情報が登録される。仕掛中テーブルには、解析部５３０ａが１つのグループに属する全てのデータブロックが揃っているかを確認している処理対象のグループに関する情報が登録される。保留テーブルには、上記の処理対象以外のグループに関する情報が登録される。
【００９３】
通信回路５００から送信されたデータブロックおよびパリティブロックは、付加情報とともにバッファ記憶部５１１ａに格納される。転送制御部５２０ａは、バッファ記憶部５１１ａに格納された各ブロックの負荷情報に基づいて、データのエラー検出およびエラー訂正を行う。
【００９４】
転送制御部５２０ａは、１つのグループに属する全てのデータブロックが揃っている場合、送受信回路５０３ａに当該全てのデータブロックを転送するように指示する。送受信回路５０３ａは、ＰＣＩｅ制御部２０３ａ、メモリ制御部２０４ａを介して、１つのグループに属する全てのデータブロックをＲＡＭ２０５ａに送信する。また、転送制御部５２０ａは、１つのグループに属するデータブロックの１つの受信処理に失敗した場合、そのデータブロックを復元したブロックを復元部５５０ａから取得し、送受信回路５０３ａを介して、受信処理に成功したデータブロックとともにＲＡＭ２０５ａに送信する。
【００９５】
解析部５３０ａは、データブロックおよびパリティブロックに付加されている付加情報が示す符号を確認する。解析部５３０ａは、符号管理テーブルに登録されている符号と確認した符号とが異なる場合は、データブロックまたはパリティブロックに関する情報を仕掛中テーブルに登録する。一方、解析部５３０ａは、符号管理テーブルに登録されている符号と確認した符号とが同じ場合は、データブロックまたはパリティブロックに関する情報を保留テーブルに登録する。
【００９６】
解析部５３０ａは、転送制御部５２０ａがＰＣＩｅ制御部２０３ａ、メモリ制御部２０４ａを介してＲＡＭ２０５ａに１つのグループに属する全てのデータブロックを送信した場合、符号管理テーブルに登録されている符号を更新する。例えば、解析部５３０ａは、符号が“０”の場合は符号を“１”に更新する。解析部５３０ａは、符号が“１”の場合は符号を“０”に更新する。
【００９７】
監視部５４０ａは、仕掛中テーブルにデータブロックまたはパリティブロックに関する情報が最初に登録されたら、所定の時間内に該当グループに属する全てのブロックがバッファ記憶部５１１ａに揃うか否かを監視する。所定の時間内に該当グループに属する全てのブロックが揃わない場合（タイムアウト）、監視部５４０ａは、バッファ記憶部５１１ａに格納されていないデータブロックを復元するように復元部５５０ａに指示する。
【００９８】
復元部５５０ａは、バッファ記憶部５１１ａに格納されている１つのグループに属するデータブロックと当該グループに属するパリティブロックを用いて、バッファ記憶部５１１ａに格納されていない当該グループに属するデータブロックを復元する。
【００９９】
図１１は、送信テーブルの例を示す図である。送信テーブル５１３は、テーブル記憶部５１２に格納される。送信テーブル５１３は、転送サイズ、付加情報のサイズ、符号、転送元アドレス、先頭転送先アドレス、データサイズ、ブロック数の項目を含む。
【０１００】
転送サイズの項目には、転送サイズを示す情報が登録される。転送サイズとは、１つのＰＣＩｅパケットで転送可能なデータのサイズ、すなわちＰＣＩｅパケットのペイロードのサイズを示す。付加情報のサイズの項目には、付加情報のサイズを示す情報が登録される。符号の項目には、“０”または“１”が登録される。転送元アドレスの項目には、転送元のアドレスが登録される。先頭転送先アドレスの項目には、転送対象のデータに対応するブロックのうち、先頭のデータブロックが格納される転送先のアドレスが登録される。データサイズの項目には、転送対象のデータのサイズが登録される。ブロック数の項目には、転送対象のデータに対応するブロックの数が登録される。
【０１０１】
図１２は、符号管理テーブルの例を示す図である。符号管理テーブル５１４は、テーブル記憶部５１２ａに格納される。符号管理テーブル５１４は、符号の項目を含む。符号の項目には、“０”または“１”が登録される。
【０１０２】
図１３は、仕掛中テーブルの例を示す図である。仕掛中テーブル５１５は、テーブル記憶部５１２ａに格納される。仕掛中テーブル５１５は、先頭転送先アドレス、受信予定ブロック数、受信済みブロック番号の項目を含む。
【０１０３】
先頭転送先アドレスの項目には、先頭のデータブロックが格納される転送先のアドレスが登録される。受信予定ブロック数の項目には、受信する予定のブロック数が登録される。受信済みブロック番号の項目には、転送制御部５２０ａがバッファ記憶部５１１ａに格納したブロックの番号が登録される。
【０１０４】
具体的には、先頭転送先アドレスの項目には、付加情報の先頭転送先アドレスが登録される。受信予定ブロック数の項目には、付加情報のブロック数が登録される。受信済みブロック番号の項目には、受信済みブロックの付加情報のブロック番号が登録される。
【０１０５】
図１４は、保留テーブルの例を示す図である。保留テーブル５１６は、テーブル記憶部５１２ａに格納される。保留テーブル５１６は、先頭転送先アドレス、受信予定ブロック数、受信済みブロック番号の項目を含む。
【０１０６】
先頭転送先アドレスの項目には、先頭のデータブロックが格納される転送先のアドレスが登録される。受信予定ブロック数の項目には、受信する予定のブロック数が登録される。受信済みブロック番号の項目には、転送制御部５２０ａがバッファ記憶部５１１ａに格納したブロックの番号が登録される。
【０１０７】
具体的には、先頭転送先アドレスの項目には、付加情報の先頭転送先アドレスが登録される。受信予定ブロック数の項目には、付加情報のブロック数が登録される。受信済みブロック番号の項目には、付加情報のブロック番号が登録される。
【０１０８】
保留テーブル５１６には、仕掛かり中テーブル５１５に登録されている、処理対象のあるグループに属するブロックを受信中に、別のグループに属するブロックを受信した場合に、後者のブロックに関する情報が登録される。保留テーブル５１６は、登録された情報に対応するブロックが、メモリ５０２ａに記憶された誤ったブロックか、または仕掛かり中テーブル５１５に登録された情報に対応するグループの次に送信されたグループに属するブロックかが判別可能になるまで、該当ブロックに関する情報を一時的に保持する。
【０１０９】
図１５は、送信処理の例を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。
（Ｓ１１）転送制御部５２０は、ＣＰＵ２０１のＣＰＵコア２０２からデータの転送要求を受信する。転送制御部５２０は、受信した転送要求に設定された、ＲＡＭ２０５における転送元アドレス、ＲＡＭ２０５ａにおける先頭転送先アドレス、およびデータサイズを、送信テーブル５１３の転送元アドレス、先頭転送先アドレスおよびデータサイズにそれぞれ登録する。
【０１１０】
（Ｓ１２）転送制御部５２０は、転送が要求されたデータの読み出しを、ＰＣＩｅ制御部２０３を介してメモリ制御部２０４に要求する。送受信回路５０３は、メモリ制御部２０４によってＲＡＭ２０５から読み出されたデータを、ＰＣＩｅ制御部２０３を介して１つ以上のＰＣＩｅパケットとして取得する。
【０１１１】
送受信回路５０３は、取得したＰＣＩｅパケットをバッファ記憶部５１１に格納する。送受信回路５０３は、ＰＣＩｅパケットをバッファ記憶部５１１に格納した旨を転送制御部５２０に通知する。転送制御部５２０は、各ＰＣＩｅパケットに格納されたデータブロックを統合する。転送制御部５２０は、ブロック生成部５３０に転送対象のデータをバッファ記憶部５１１に格納した旨の通知を行う。
【０１１２】
（Ｓ１３）ブロック生成部５３０は、送信テーブル５１３の転送サイズと付加情報のサイズとデータサイズに基づいて、ブロック数を算出する。ブロック数は、“データサイズ／（転送サイズ−付加情報のサイズ）”という式により算出される。ブロック生成部５３０は、算出したブロック数を送信テーブル５１３に登録する。
【０１１３】
（Ｓ１４）ブロック生成部５３０は、送信テーブル５１３の転送サイズと付加情報のサイズに基づいて、統合したデータブロックを再分割して、複数のデータブロックを作成する。すなわち、再分割後のデータブロックのサイズは、“転送サイズ−付加情報のサイズ”となる。
【０１１４】
（Ｓ１５）ブロック生成部５３０は、作成された複数のデータブロックに基づいてパリティブロックを生成する。ブロック生成部５３０は、送信テーブル５１３のブロック数をインクリメントする。すなわち、送信テーブル５１３のブロック数には、データブロックとパリティブロックとの数を合算した数が登録される。ブロック生成部５３０は、転送制御部５２０にブロックの生成が完了した旨を通知する。
【０１１５】
（Ｓ１６）転送制御部５２０は、生成されたブロックの中から、１つのデータブロックまたはパリティブロックを選択する。転送制御部５２０は、送信テーブル５１３の符号、先頭転送先アドレス、ブロック数を、それぞれ符号、先頭転送先アドレス、ブロック数の欄に設定した付加情報を生成する。また、転送制御部５２０は、付加情報のブロック番号の欄に、ステップＳ１４，Ｓ１５で生成されたブロックのうち、ステップＳ１６で選択した選択順を示す番号を設定する。転送制御部５２０は、選択したデータブロックまたはパリティブロックに、生成した付加情報を付加する。
【０１１６】
（Ｓ１７）転送制御部５２０は、送受信回路５０４を介して付加情報を付加したデータブロックまたはパリティブロックをＰＣＩｅパケットのペイロードに格納し、当該ＰＣＩｅパケットを通信回路５００ａに送信する。
【０１１７】
（Ｓ１８）転送制御部５２０は、ステップＳ１４，Ｓ１５で生成された全てのデータブロックおよびパリティブロックを送信済みであるか否かを判定する。送信済みの場合、処理をステップＳ１９に進める。送信済みでない場合、処理をステップＳ１６に進める。
【０１１８】
（Ｓ１９）転送制御部５２０は、送信テーブル５１３の符号を更新する。例えば、転送制御部５２０は、現在の符号が“０”の場合は符号を“１”に更新する。転送制御部５２０は、現在の符号が“１”の場合は符号を“０”に更新する。そして、処理を終了する。
【０１１９】
これにより、１つのグループに属する全てのデータブロックおよびパリティブロックのそれぞれを通信回路５００ａに送信することができる。
また、データブロックまたはパリティブロックを送信する順番は、全てのデータブロックを送信した後にパリティブロックを送信してもよいし、パリティブロックを送信した後に全てのデータブロックを送信してもよい。
【０１２０】
図１６は、受信処理の例（その１）を示すフローチャートである。以下、図１６に示す処理をステップ番号に沿って説明する。
（Ｓ２１）送受信回路５０４ａは、１つのデータブロックまたはパリティブロックを受信する。送受信回路５０４ａは、１つのデータブロックまたはパリティブロックを、付加されていた付加情報とともにバッファ記憶部５１１ａに格納する。送受信回路５０４ａは、１つのデータブロックまたはパリティブロックを受信した旨を解析部５３０ａに通知する。
【０１２１】
以下、解析部５３０ａは、送受信回路５０４ａがバッファ記憶部５１１ａに格納した１つのブロック（データブロックまたはパリティブロック）に対する処理を行う。
（Ｓ２２）解析部５３０ａは、ブロックに付加されている付加情報に設定された符号を確認する。
【０１２２】
（Ｓ２３）解析部５３０ａは、符号管理テーブル５１４に登録されている符号とステップＳ２２で確認した符号とが異なるか否かを判定する。符号が異なる場合、処理をステップＳ２４に進める。符号が同じ場合、処理をステップＳ３１に進める。
【０１２３】
（Ｓ２４）解析部５３０ａは、仕掛中テーブル５１５にデータが登録されているか否かを判定する。すなわち、解析部５３０ａは、仕掛中テーブル５１５にデータが登録されているか、または、全く登録されていないかを判定する。データが登録されている場合、処理をステップＳ２６に進める。データが登録されていない場合、処理をステップＳ２５に進める。
【０１２４】
（Ｓ２５）解析部５３０ａは、ブロックに付加されている付加情報に設定された先頭転送先アドレス、ブロック数、ブロック番号を、仕掛中テーブル５１５の先頭転送先アドレス、受信予定ブロック数、受信済みブロック番号にそれぞれ登録する。解析部５３０ａは、監視部５４０ａに対して、仕掛中テーブル５１５に登録された１つのグループに属する全てのブロックが所定の時間内にバッファ記憶部５１１ａに揃うか否かを監視するように指示する。これにより、以降の処理は、解析部５３０ａと監視部５４０ａとの処理が並行して実行される。そして、処理をステップＳ５４に進める。
【０１２５】
（Ｓ２６）解析部５３０ａは、ブロックに付加されている付加情報に設定された先頭転送先アドレス、ブロック数が、仕掛中テーブル５１５に登録されている先頭転送先アドレス、受信予定ブロック数と同じであるか否かの判定を行う。同じ場合、処理をステップＳ２７に進める。異なる場合、処理をステップＳ５４に進める。
【０１２６】
なお、異なる場合、処理対象のブロックは異常なブロックである可能性が高い。このため、解析部５３０ａは、判定で用いたブロック、すなわち、ステップＳ２１でバッファ記憶部５１１ａに格納したブロックを廃棄してもよい。また、解析部５３０ａは、異常が発生したことを通知する情報を通信回路５００に出力してもよい。
【０１２７】
（Ｓ２７）解析部５３０ａは、仕掛中テーブル５１５の受信済みブロック番号に、ブロックに付加されている付加情報に設定されたブロック番号を登録する。
（Ｓ２８）解析部５３０ａは、仕掛中テーブル５１５に登録された１つのグループに属する全てのブロックを受信しているか否かの判定を行う。具体的には、解析部５３０ａは、仕掛中テーブル５１５に登録されている受信予定ブロック数と受信済みブロック番号の数とが一致するか否かの判定を行う。例えば、仕掛中テーブル５１５に登録されている受信予定ブロック数が“５”、仕掛中テーブル５１５に登録されている受信済みブロック番号が“１”〜“５”の場合、解析部５３０ａは、１つのグループに属する全てのブロックを受信していると判定する。全てのブロックを受信している場合、解析部５３０ａは、その旨を監視部５４０ａに通知する。そして、処理をステップＳ５１に進める。一部のブロックの受信が完了していない場合、処理をステップＳ５４に進める。
【０１２８】
図１７は、受信処理の例（その２）を示すフローチャートである。以下、図１７に示す処理をステップ番号に沿って説明する。
（Ｓ３１）解析部５３０ａは、保留テーブル５１６にデータが登録されているか否かを判定する。データが登録されている場合、処理をステップＳ３３に進める。データが登録されていない場合、処理をステップＳ３２に進める。
【０１２９】
（Ｓ３２）解析部５３０ａは、ブロックに付加されている付加情報に設定された先頭転送先アドレス、ブロック数、ブロック番号を、保留テーブル５１６の先頭転送先アドレス、受信予定ブロック数、受信済みブロック番号に登録する。そして、処理をステップＳ５４に進める。
【０１３０】
ここで、ステップＳ３１で“Ｎｏ”と判定される場合とは、直近に仕掛中テーブル５１５１に登録されたグループとは別のグループに属するブロックが１つ検出された場合である。この場合、検出されたブロックが、送信側から次に送信されたデータに対応する正当なブロックなのか、あるいは、書き込みエラー等によってバッファ記憶部５１１ａに残ったままになっている不要なブロックなのかを確定できない。そこで、解析部５３０ａは、ステップＳ３２において、検出されたブロックに関する情報を保留テーブル５１６に一時的に保持させる。検出されたブロックに関する情報は、そのブロックの正否が確定するまでの間、保留テーブル５１６に保持される。
【０１３１】
（Ｓ３３）解析部５３０ａは、ブロックに付加されている付加情報に設定された先頭転送先アドレス、ブロック数が、保留テーブル５１６に登録されている先頭転送先アドレス、受信予定ブロック数と同じであるか否かの判定を行う。同じ場合、解析部５３０ａは、ステップＳ２１でバッファ記憶部５１１ａに格納したブロックに付加されている付加情報に設定されているブロック番号を、保留テーブル５１６の受信済みブロック番号に登録する。そして、処理をステップＳ３４に進める。異なる場合、処理をステップＳ３９に進める。
【０１３２】
（Ｓ３４）解析部５３０ａは、仕掛中テーブル５１５にデータが登録されているか否かを判定する。データが登録されている場合、処理をステップＳ３５に進める。データが登録されていない場合、そして、処理をステップＳ３８に進める。
【０１３３】
ここで、ステップＳ３３で“Ｙｅｓ”、ステップＳ３４で“Ｙｅｓ”と判定された場合、仕掛中テーブル５１５に登録されているグループとは別のグループに属するブロックを連続して受信したことになる。この場合、保留テーブル５１６に登録されているブロックは、次に送信されたデータに対応するブロックであり、廃棄してはいけない正しいブロックであると判定される。このため、ステップＳ３５以降の処理で、仕掛中テーブル５１５に登録されたグループについての受信処理を完了させるための処理が行われる。
【０１３４】
（Ｓ３５）解析部５３０ａは、仕掛中テーブル５１５を参照して、仕掛中テーブル５１５に登録されているグループに属するデータブロックのうち、受信済みでないデータブロックを復元できるか否かの判定を行う。具体的には、（１）解析部５３０ａは、仕掛中テーブル５１５に登録されている受信予定ブロック数と仕掛中テーブル５１５に登録されている受信済みブロック番号の数との差分が１つであるか確認する。（２）差分が１つである場合、解析部５３０ａは、受信済みブロック番号に基づいて、受信済みでないブロックがデータブロックであるかを判定する。解析部５３０ａは、受信済みでないブロックがデータブロックである場合に、そのデータブロックを復元できると判断する。復元できる場合、解析部５３０ａは、その旨を復元部５５０ａに通知する。そして、処理をステップＳ３７に進める。復元できない場合、処理をステップＳ３６に進める。
【０１３５】
また、（１）において差分が１つであり、受信済みでないブロックがパリティブロックの場合、解析部５３０ａは、全てのデータブロックが揃っている旨を転送制御部５２０ａに通知する。転送制御部５２０ａは、ＰＣＩｅ制御部２０３ａおよびメモリ制御部２０４ａを介して、全てのデータブロックをＲＡＭ２０５ａに送信する。解析部５３０ａは、仕掛中テーブル５１５に登録されているデータをリセット（消去）する。そして、処理を終了する。
【０１３６】
（Ｓ３６）解析部５３０ａは、転送制御部５２０ａを介して、通信回路５００に対して、仕掛中テーブル５１５に登録されたグループに対応する送信データを再送するように要求する。解析部５３０ａは、仕掛中テーブル５１５に登録されているデータをリセットする。そして、処理をステップＳ５４に進める。
【０１３７】
（Ｓ３７）復元部５５０ａは、仕掛中テーブル５１５に登録された受信済みのデータブロックおよびパリティブロックを用いて、受信済みでないデータブロックを復元する。復元部５５０ａは、データブロックを復元した旨を転送制御部５２０ａに通知する。転送制御部５２０ａは、仕掛中テーブル５１５に登録されたグループに属する全てのデータブロックをＲＡＭ２０５ａに転送するように、送受信回路５０３ａに指示する。これらのデータブロックの全体は、送受信回路５０３ａによってＰＣＩｅパケットに再分割されて、ＰＣＩｅ制御部２０３ａおよびメモリ制御部２０４ａを介してＲＡＭ２０５ａに送信される。これにより、全てのデータブロックが、ＲＡＭ２０５ａに格納され、仕掛中テーブル５１５に登録されているグループに関するデータ転送処理が完了する。
【０１３８】
（Ｓ３８）解析部５３０ａは、保留テーブル５１６に登録されているデータによって、仕掛中テーブル５１５の情報を更新する。また、解析部５３０ａは、監視部５４０ａに対して、仕掛中テーブル５１５に登録されたグループに属する全てのブロックが所定の時間内にバッファ記憶部５１１ａに揃うか否かを監視するように指示を行う。これにより、以降の処理は、解析部５３０ａと監視部５４０ａとの処理が並行して実行される。そして、処理をステップＳ４１に進める。
【０１３９】
（Ｓ３９）解析部５３０ａは、仕掛中テーブル５１５にデータが登録されているか否かを判定する。データが登録されている場合、処理をステップＳ４２に進める。データが登録されていない場合、処理をステップＳ４０に進める。
【０１４０】
（Ｓ４０）解析部５３０ａは、ステップＳ２１でバッファ記憶部５１１ａに格納したブロックに付加された付加情報に設定されている先頭転送先アドレス、ブロック数、ブロック番号を、仕掛中テーブル５１５に登録する。また、解析部５３０ａは、監視部５４０ａに対して、仕掛中テーブル５１５に登録された１つのグループに属する全てのブロックが所定の時間内にバッファ記憶部５１１ａに揃うか否かを監視するように指示を行う。これにより、以降の処理は、解析部５３０ａと監視部５４０ａとの処理が並行して実行される。
【０１４１】
（Ｓ４１）解析部５３０ａは、符号管理テーブル５１４に登録されている符号を別の値に更新する。また、解析部５３０ａは、保留テーブル５１６に登録されているデータをリセットする。そして、処理をステップＳ５４に進める。
【０１４２】
（Ｓ４２）解析部５３０ａは、ステップＳ２１でバッファ記憶部５１１ａに格納したブロックに付加された付加情報に設定されている先頭転送先アドレス、ブロック数、ブロック番号によって、保留テーブル５１６の情報を更新する。そして、処理をステップＳ５４に進める。
【０１４３】
図１８は、受信処理の例（その３）を示すフローチャートである。以下、図１８に示す処理をステップ番号に沿って説明する。
（Ｓ５１）転送制御部５２０ａは、仕掛中テーブル５１５に登録されたグループに属する全てのデータブロックをＲＡＭ２０５ａに転送するように、送受信回路５０３ａに指示する。これらのデータブロックの全体は、送受信回路５０３ａによってＰＣＩｅパケットに再分割されて、ＰＣＩｅ制御部２０３ａおよびメモリ制御部２０４ａを介してＲＡＭ２０５ａに送信される。これにより、全てのデータブロックが、ＲＡＭ２０５ａに格納される。転送制御部５２０ａは、全てのデータブロックを送信した旨を解析部５３０ａに通知する。
【０１４４】
（Ｓ５２）解析部５３０ａは、仕掛中テーブル５１５に登録されているデータをリセットする。
（Ｓ５３）解析部５３０ａは、符号管理テーブル５１４に登録されている符号を別の値に更新する。
【０１４５】
（Ｓ５４）解析部５３０ａは、次のデータブロックを待つ。そして、処理を終了する。
図１９は、監視処理の例を示すフローチャートである。以下、図１９に示す処理をステップ番号に沿って説明する。監視処理は、解析部５３０ａから監視部５４０ａに対して、仕掛中テーブル５１５に登録されたグループに属する全てのブロックが所定の時間内にバッファ記憶部５１１ａに揃うか否かを監視する旨の指示を受けてから処理が始まる。
【０１４６】
（Ｓ６１）監視部５４０ａは、タイマのカウントを開始する。
監視部５４０ａは、以下のステップＳ６２，Ｓ６３を所定の時間間隔で行う。
（Ｓ６２）監視部５４０ａは、仕掛中テーブル５１５に登録されたグループに属する全てのブロックを受信済みか否かの判定を行う。監視部５４０ａは、解析部５３０ａから仕掛中テーブル５１５に登録されたグループに属する全てのブロックを受信した旨の通知（図１６のステップＳ２８参照）を受けることにより判定できる。全てのブロックを受信している場合、処理を終了する。全てのブロックを受信していない場合、処理をステップＳ６３に進める。
【０１４７】
（Ｓ６３）監視部５４０ａは、タイマのカウントを開始してから所定時間が経過しているか否かを判定する。すなわち、監視部５４０ａは、タイムアウトであるか否かを判定する。タイムアウトの場合、処理をステップＳ６４に進める。タイムアウトでない場合、処理をステップＳ６２に進める。
【０１４８】
（Ｓ６４）監視部５４０ａは、仕掛中テーブル５１５を参照して、受信済みでないデータブロックを復元できるか否かの判定を行う。この判定処理は、図１７のステップＳ３５での解析部５３０ａによる判定処理と同様の処理が、監視部５４０ａによって行われる。復元できる場合、監視部５４０ａは、その旨を復元部５５０ａに通知する。そして、処理をステップＳ６６に進める。復元できない場合、処理をステップＳ６５に進める。
【０１４９】
また、該当グループに属する全てのデータブロックを受信済みの場合、監視部５４０ａは、その旨を転送制御部５２０ａに通知する。転送制御部５２０ａは、ＰＣＩｅ制御部２０３ａおよびメモリ制御部２０４ａを介して、全てのデータブロックをＲＡＭ２０５ａに送信する。監視部５４０ａは、仕掛中テーブル５１５に登録されているデータをリセットする。そして、処理を終了する。
【０１５０】
（Ｓ６５）監視部５４０ａは、転送制御部５２０ａを介して、通信回路５００に仕掛中テーブル５１５に登録されたグループに対応する送信データを再送するように要求する。そして、処理を終了する。
【０１５１】
（Ｓ６６）復元部５５０ａは、仕掛中テーブル５１５に登録された受信済みのデータブロックおよびパリティブロックを用いて、受信済みでないデータブロックを復元する。復元部５５０ａは、データブロックを復元した旨を転送制御部５２０ａに通知する。転送制御部５２０ａは、仕掛中テーブル５１５に登録されたグループに属する全てのデータブロックをＲＡＭ２０５ａに転送するように、送受信回路５０３ａに指示する。これらのデータブロックの全体は、送受信回路５０３ａによってＰＣＩｅパケットに再分割されて、ＰＣＩｅ制御部２０３ａおよびメモリ制御部２０４ａを介してＲＡＭ２０５ａに送信される。これにより、全てのデータブロックが、ＲＡＭ２０５ａに格納され、仕掛中テーブル５１５に登録されているグループに関するデータ転送処理が完了する。
【０１５２】
（Ｓ６７）監視部５４０ａは、仕掛中テーブル５１５に登録されているデータをリセットする。そして、処理を終了する。
図２０は、受信処理の具体例（その１）を示す図である。図２０は、図６、図８で説明したようなバッファ領域への書き込みエラーが発生したケースを示す。
【０１５３】
図２０では、まず、データＡの転送が要求され、データＡを分割して得られたデータブロックＡ１〜Ａ４と、データブロックＡ１〜Ａ４に基づくパリティブロックＰＡとが、バッファ記憶部５１１ａに記憶されたとする。なお、データＡ、データブロックＡ１，Ａ２，Ａ４およびパリティブロックＰＡは図示しない。これらのブロックに付加される付加情報には、符号“１”、先頭転送先アドレス“ＡＤＤ１”、ブロック数“５”が設定されるものとする。
【０１５４】
この状態から、データＡと同じ転送先でデータサイズも同じデータＢの転送が要求されたとする。データＢはデータブロックＢ１〜Ｂ４に分割され、データブロックＢ１〜Ｂ４に基づいてパリティブロックＰＢが生成される。これらのブロックに付加される付加情報には、符号“０”、先頭転送先アドレス“ＡＤＤ１”、ブロック数“５”が設定される。なお、データブロックＢ３については図示しない。また、これらのデータブロックＢ１〜Ｂ４およびパリティブロックＰＢが、バッファ記憶部５１１ａにおけるデータブロックＡ１〜Ａ４およびパリティブロックＰＡと同じ記憶領域に書き込まれるものとする。
【０１５５】
まず、データブロックＡ１，Ａ２は、それぞれデータブロックＢ１，Ｂ２によって上書きされたとする。この時点で、符号管理テーブル５１４には“１”が登録され、仕掛中テーブル５１５には、先頭転送先アドレス“ＡＤＤ１”、受信予定ブロック数“５”、受信済みブロック番号“１”，“２”が登録されている。
【０１５６】
ここで、転送制御部５２０ａは、データブロックＢ３の書き込みに失敗し、データブロックＡ３がバッファ記憶部５１１ａにそのまま残ったものとする。このとき、データブロックＡ３の付加情報が読み出されるが、符号が“１”であることから、データブロックＡ３に関する情報は保留テーブル５１６に登録される（図１７のステップＳ３２に対応）。
【０１５７】
次に、データブロックＢ４とパリティブロックＰＢの書き込みに成功すると、仕掛中テーブル５１５の受信済みブロックには、さらにデータブロックＢ４とパリティブロックＰＢとが登録される。しかし、データＢに対応する受信済みのブロック数は“４”であるので、データＢに対応する全てのブロックが受信済みとは判定されない（図１６のステップＳ２８“Ｎｏ”に対応）。
【０１５８】
次に、データＣ（図示せず）から生成されたデータブロックＣ１を受信したとする。データブロックＣ１の付加情報には、符号“１”、先頭転送先アドレス“ＡＤＤ２”、ブロック数“５”が設定されている。この場合、保留テーブル５１６に登録されていたデータブロックＡ３は無効なデータであると判定され、データブロックＣ１の付加情報によって保留テーブル５１６が更新される（図１７のステップＳ４２に対応）。
【０１５９】
また、パリティブロックＰＢの受信処理から一定時間内にデータＢに対応するブロックを受信できず、データＢについてタイムアウトとなった場合、受信済みになっていない（すなわち、書き込みに失敗した）データブロックＢ３が復元される（図１９のステップＳ６６に対応）。
【０１６０】
以上の処理により、データブロックＢ３の書き込みに失敗した場合でも、データＢの転送を正常に完了することができる。また、書き込み失敗によりバッファ記憶部５１１ａに残っていたデータブロックＡ３を、不要なデータと判定して破棄することができる。
【０１６１】
図２１は、受信処理の具体例（その２）を示す図である。図２１は、伝送路上でのパケットロス等によってブロックの受信抜けが発生したケースを示す。
図２１では、まず、データＣの転送が要求され、データＣを分割して得られたデータブロックＣ１〜Ｃ４と、データブロックＣ１〜Ｃ４に基づくパリティブロックＰＣとが、通信回路５００から通信回路５００ａへ送信されたものとする。これらのブロックの付加情報には、符号“１”、先頭転送先アドレス“ＡＤＤ２”、ブロック数“５”が設定されている。
【０１６２】
しかし、伝送の過程でデータブロックＣ３が失われ、通信回路５００ａのバッファ記憶部５１１ａには、データブロックＣ１，Ｃ２，Ｃ４、パリティブロックＰＣの順にブロックが格納されたとする。この状態では、例えば、符号管理テーブル５１４には“０”が登録され、仕掛中テーブル５１５には、先頭転送先アドレス“ＡＤＤ２”、受信予定ブロック数“５”、受信済みブロック番号“１”，“２”，“４”，“５”が登録されている。なお、データＣおよびデータブロックＣ３については図示しない。
【０１６３】
さらに、データＤ（図示せず）の転送が要求され、データＤを分割して得られたデータブロックＤ１がバッファ記憶部５１１ａに格納されたとする。データブロックＤ１の付加情報には、符号“０”、先頭転送先アドレス“ＡＤＤ３”、ブロック数“４”が設定されている。この場合、データブロックＤ１に関する情報が保留テーブル５１６に登録される（図１７のステップＳ３２に対応）。
【０１６４】
ここで、次に、データＤを分割して得られたデータブロックＤ２がバッファ記憶部５１１ａに格納されたとする。この場合、データブロックＤ２の付加情報に設定されたブロック番号が、受信済みブロック番号として保留テーブル５１６に追加登録される。また、この場合、仕掛中テーブル５１５に登録されたもの以外のグループに属するブロックが２つ受信されたことになる。このため、仕掛中テーブル５１５に登録されたグループの受信処理を終了するための処理が実行される（図１７のステップＳ３４“Ｙｅｓ”に対応）。
【０１６５】
図２１のケースでは、データブロックＣ３が復元され、データブロックＣ１〜Ｃ４がＲＡＭ２０５ａに書き込まれて、データＣの転送が正常に終了する（図１７のステップＳ３７に対応）。そして、保留テーブル５１６に登録されていたデータブロックＤ１，Ｄ２に関する情報によって、仕掛中テーブル５１５の情報が更新される（図１７のＳ３８に対応）。
【０１６６】
以上の処理により、データブロックＣ３が失われ、データＣに対応するブロックの中に受信済みでないブロックがある状況で、次のデータＤに対応するブロックが送信された場合に、データブロックＣ３が失われたことを推定し、その復元を行うことができる。また、データブロックＤ１，Ｄ２を、後続のデータＤに対応する正当なブロックであると判定することができる。
【０１６７】
なお、バッファ記憶部５１１ａにデータブロックＣ１，Ｃ２，Ｃ４、パリティブロックＰＣ、データブロックＤ１が格納された状態で、データＣについてのタイムアウトが発生した場合には、次のような処理が実行される。まず、仕掛中テーブル５１５に登録されたグループの受信処理を終了するための処理が実行される（図１９のステップＳ６３“Ｙｅｓ”に対応）。図２１のケースでは、データブロックＣ３が復元され、データブロックＣ１〜Ｃ４がＲＡＭ２０５ａに書き込まれて、データＣの転送が正常に終了する（図１９のステップＳ６６に対応）。次に、仕掛中テーブル５１５の情報がリセットされる（図１９のＳ６７に対応）。
【０１６８】
これにより、データブロックＣ３が失われ、データＣに対応するブロックの中に受信済みでないブロックがある状況で、次のデータＤに対応するブロックが送信された場合に、データブロックＣ３が失われたことを推定し、その復元を行うことができる。なお、保留テーブル５１６にはデータブロックＤ１に関する情報が登録されたままになるが、例えば、次のデータブロックＤ２が受信されると、データブロックＤ１，Ｄ２に関する情報が保留テーブル５１６から仕掛中テーブル５１５に移動される（図１７のＳ３４“Ｎｏ”，Ｓ３８に対応）。これにより、後続のデータに対応する正当なブロックの受信が行われていることが判定される。
【０１６９】
なお、以上の第２の実施の形態では、通信回路５００から通信回路５００ａへのデータ送信において、１つのＰＣＩｅパケットに１つのブロック（データブロックまたはパリティブロック）を格納するものとした。しかしながら、“付加情報＋ブロック”のサイズを、必ずしもＰＣＩｅパケットのペイロードのサイズと一致させる必要はなく、このサイズをペイロードより大きくすることもできる。ただし、ブロック単位で伝送路上の受信エラーを検出できるようにするためには、ＰＣＩｅパケットのペイロードに複数のブロックが含まれることは望ましくない。このため、“付加情報＋ブロック”のサイズが、ペイロードと同じか、またはペイロードの２倍以上となるように、ブロックサイズが決められることが望ましい。
【０１７０】
なお、上記各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
また、以上の各実施の形態に関し、さらに以下の付記を開示する。
【０１７１】
（付記１）  送信データを一定サイズに分割して得られた複数のデータブロックと、前記複数のデータブロックに基づいて生成されたパリティブロックとを、送信装置から受信する受信部と、
前記複数のデータブロックのうち一のデータブロックの受信処理に失敗した場合に、前記複数のデータブロックのうち受信処理に成功した他のデータブロックと、受信処理に成功した前記パリティブロックとに基づいて、前記一のデータブロックを復元する制御部と、
を有することを特徴とする受信装置。
【０１７２】
（付記２）  前記送信装置から複数の送信データが送信され、前記複数の送信データのうち同一の送信データを前記一定サイズに分割して得られたデータブロックのそれぞれと当該データブロックに基づいて生成されたパリティブロックとに対して、同一に属することを示すグループ識別情報が付加され、
前記制御部は、前記送信装置から前記受信部が受信した受信データブロックおよび受信パリティブロックにそれぞれ付加された前記グループ識別情報に基づいて、前記受信データブロックおよび前記受信パリティブロックの中から一のグループに属するデータブロックおよびパリティブロックを判別し、前記送信装置から送信された前記一のグループに属するデータブロックのうち第１のデータブロックの受信処理に失敗した場合に、前記受信データブロックのうち前記一のグループに属する第２のデータブロックと前記受信パリティブロックのうち前記一のグループに属するパリティブロックとに基づいて前記第１のデータブロックを復元する、
ことを特徴とする付記１記載の受信装置。
【０１７３】
（付記３）  前記送信装置から送信されたデータブロックおよびパリティブロックには、付加された前記グループ識別情報が示すグループに属するデータブロックの数を示すブロック数情報がさらに付加されるとともに、前記送信装置から送信されたデータブロックには、前記グループ識別情報が示すグループ内の通し番号を示すブロック番号情報がさらに付加され、
前記制御部は、前記受信データブロックおよび前記受信パリティブロックにそれぞれ付加された前記グループ識別情報に基づいて、前記受信データブロックおよび前記受信パリティブロックの中から一のグループに属するデータブロックおよびパリティブロックを判別し、前記受信データブロックのうち前記一のグループに属するデータブロックに付加された前記ブロック数情報および前記ブロック番号情報に基づいて、前記一のグループに属するデータブロックのうち受信処理に失敗したデータブロックを判定する、
ことを特徴とする付記２記載の受信装置。
【０１７４】
（付記４）  記憶部をさらに有し、
前記送信装置から送信されるデータブロックおよびパリティブロックのそれぞれには、第１の値と第２の値のいずれかが設定されるグループ切り替え情報がさらに付加され、送信されるデータブロックおよびパリティブロックが属するグループが切り替わるたびに、前記グループ切り替え情報に設定される値が前記第１の値と前記第２の値のうちの一方から他方へ切り替えられ、
前記受信部は、前記送信装置から受信したデータブロックおよびパリティブロックを、それぞれに付加された前記グループ識別情報および前記グループ切り替え情報とともに前記記憶部に一時的に格納し、
前記制御部は、前記記憶部に格納されたデータブロックおよびパリティブロックのうち、付加された前記グループ識別情報および前記グループ切り替え情報の両方が互いに同一であるデータブロックおよびパリティブロックを、同一のグループに属するデータブロックおよびパリティブロックと判別する、
ことを特徴とする付記３記載の受信装置。
【０１７５】
（付記５）  前記複数の送信データは、記憶装置への書き込みが要求されたデータであり、
前記送信装置から送信されるデータブロックおよびパリティブロックのうち、同一の送信データに対応するデータブロックおよびパリティブロックに付加される前記グループ識別情報として、対応する送信データの前記記憶装置における書き込み先領域の先頭アドレスが付加される、
ことを特徴とする付記２乃至４のいずれか１つに記載の受信装置。
【０１７６】
（付記６）  前記受信装置は、前記記憶装置へのアクセスを制御するストレージ制御装置であり、
前記送信装置から前記受信装置へ送信される送信データは、前記受信装置が備えるメモリに対する書き込みが要求された、前記送信装置が備えるメモリ内のデータである、
ことを特徴とする付記５記載の受信装置。
【０１７７】
（付記７）  受信装置へ送信する複数の送信データを一時的に記憶する記憶部と、
前記記憶部に記憶された前記複数の送信データのそれぞれを一定サイズに分割して複数のデータブロックを生成するとともに、前記複数のデータブロックのうち同一の送信データに対応するデータブロックに基づいてパリティブロックを生成し、前記複数のデータブロックおよびパリティブロックのうち、同一の送信データに対応するデータブロックおよびパリティブロックに対して、同一のグループに属することを示すグループ識別情報を付加して前記受信装置へ送信する制御部と、
を有することを特徴とする送信装置。
【０１７８】
（付記８）  前記制御部は、同一の送信データに基づいて生成したデータブロックのそれぞれと当該データブロックに基づいて生成したパリティブロックとに対して同一のグループに属するデータブロックの数を示すブロック数情報をさらに付加するとともに、同一のグループに属するデータブロックのそれぞれに対してグループ内の通し番号を示すブロック番号情報をさらに付加して送信することを特徴とする付記７記載の送信装置。
【０１７９】
（付記９）  前記制御部は、前記受信装置へ送信するデータブロックおよびパリティブロックのそれぞれに対して、第１の値と第２の値のいずれかが設定されるグループ切り替え情報をさらに付加し、送信されるデータブロックおよびパリティブロックが切り替わるたびに、前記グループ切り替え情報に設定する値を前記第１の値と前記第２の値のうちの一方から他方へ切り替えることを特徴とする付記７または８記載の送信装置。
【０１８０】
（付記１０）  前記複数の送信データのそれぞれは、記憶装置への書き込みが要求されたデータであり、
前記制御部は、同一の送信データに対応するデータブロックおよびパリティブロックに付加する前記グループ識別情報として、対応する送信データの前記記憶装置における書き込み先領域の先頭アドレスを付加する、
ことを特徴とする付記７または８記載の送信装置。
【０１８１】
（付記１１）  前記送信装置は、前記送信装置が備える記憶装置へのアクセスを制御するストレージ制御装置であり、
前記送信装置から前記受信装置へ送信される送信データは、前記送信装置が備えるメモリ内のデータである、
ことを特徴とする付記１０記載の送信装置。
【０１８２】
（付記１２）  送信データを一定サイズに分割して得られた複数のデータブロックと、前記複数のデータブロックに基づいて生成されたパリティブロックとを送信する送信装置と、
前記複数のデータブロックのうち一のデータブロックの受信処理に失敗した場合に、前記複数のデータブロックのうち受信処理に成功した他のデータブロックと、受信処理に成功した前記パリティブロックとに基づいて、前記一のデータブロックを復元する受信装置と、
を有することを特徴とするデータ転送システム。
【０１８３】
（付記１３）  前記送信装置は、複数の送信データを前記受信装置へ送信する際に、前記複数の送信データのうち同一の送信データを前記一定サイズに分割して得られたデータブロックのそれぞれと当該データブロックに基づいて生成したパリティブロックとに対して、同一のグループに属することを示すグループ識別情報を付加して送信し、
前記受信装置は、前記送信装置から受信した受信データブロックおよび受信パリティブロックにそれぞれ付加された前記グループ識別情報に基づいて、前記受信データブロックおよび前記受信パリティブロックの中から一のグループに属するデータブロックおよびパリティブロックを判別し、前記送信装置から送信された前記一のグループに属するデータブロックのうち第１のデータブロックの受信処理に失敗した場合に、前記受信データブロックのうち前記一のグループに属する第２のデータブロックと前記受信パリティブロックのうち前記一のグループに属するパリティブロックとに基づいて前記第１のデータブロックを復元する、
ことを特徴とする付記１２記載のデータ転送システム。
【０１８４】
（付記１４）  前記送信装置は、同一の送信データに基づいて生成したデータブロックのそれぞれと当該データブロックに基づいて生成したパリティブロックとに対して同一のグループに属するデータブロックの数を示すブロック数情報をさらに付加するとともに、同一のグループに属するデータブロックのそれぞれに対してグループ内の通し番号を示すブロック番号情報をさらに付加して送信し、
前記受信装置は、前記受信データブロックおよび前記受信パリティブロックにそれぞれ付加された前記グループ識別情報に基づいて、前記受信データブロックおよび前記受信パリティブロックの中から一のグループに属するデータブロックおよびパリティブロックを判別し、前記受信データブロックのうち前記一のグループに属するデータブロックに付加された前記ブロック数情報および前記ブロック番号情報に基づいて、前記一のグループに属するデータブロックのうち受信処理に失敗したデータブロックを判定する、
ことを特徴とする付記１３記載のデータ転送システム。
【０１８５】
（付記１５）  前記送信装置は、前記受信装置へ送信するデータブロックおよびパリティブロックのそれぞれに対して、第１の値と第２の値のいずれかが設定されるグループ切り替え情報をさらに付加し、送信されるデータブロックおよびパリティブロックが属するグループが切り替わるたびに、前記グループ切り替え情報に設定する値を前記第１の値と前記第２の値のうちの一方から他方へ切り替え、
前記受信装置は、受信バッファを備え、前記送信装置から受信したデータブロックおよびパリティブロックを、それぞれに付加された前記グループ識別情報および前記グループ切り替え情報とともに前記受信バッファに格納し、前記受信バッファに格納されたデータブロックおよびパリティブロックのうち、付加された前記グループ識別情報および前記グループ切り替え情報の両方が互いに同一であるデータブロックおよびパリティブロックを、同一のグループに属するデータブロックおよびパリティブロックと判別する、
ことを特徴とする付記１３または１４記載のデータ転送システム。
【０１８６】
（付記１６）  前記送信装置から送信される送信データは、記憶装置への書き込みが要求されたデータであり、
前記送信装置は、同一の送信データに対応するデータブロックおよびパリティブロックに付加する前記グループ識別情報として、対応する送信データの前記記憶装置における書き込み先領域の先頭アドレスを付加する、
ことを特徴とする付記１３乃至１５のいずれか１つに記載のデータ転送システム。
【０１８７】
（付記１７）  前記送信装置は、第１の記憶装置へのアクセスを制御する第１のストレージ制御装置であり、
前記受信装置は、第２の記憶装置へのアクセスを制御する第２のストレージ制御装置であり、
前記送信装置から前記受信装置へ送信される送信データは、前記受信装置が備える第２のメモリに対する書き込みが要求された、前記送信装置が備える第１のメモリ内のデータである、
ことを特徴とする付記１６記載のデータ転送システム。
【符号の説明】
【０１８８】
１  送信装置
１ａ  記憶部
１ｂ，２ｂ  制御部
２  受信装置
２ａ  受信部
Ｓ１，Ｓ２，Ｓ３，Ｓ４，Ｓ５  ステップ
【図１】
2016059012.tif 000003
【図２】
2016059012.tif 000004
【図３】
2016059012.tif 000005
【図４】
2016059012.tif 000006
【図５】
2016059012.tif 000007
【図６】
2016059012.tif 000008
【図７】
2016059012.tif 000009
【図８】
2016059012.tif 000010
【図９】
2016059012.tif 000011
【図１０】
2016059012.tif 000012
【図１１】
2016059012.tif 000013
【図１２】
2016059012.tif 000014
【図１３】
2016059012.tif 000015
【図１４】
2016059012.tif 000016
【図１５】
2016059012.tif 000017
【図１６】
2016059012.tif 000018
【図１７】
2016059012.tif 000019
【図１８】
2016059012.tif 000020
【図１９】
2016059012.tif 000021
【図２０】
2016059012.tif 000022
【図２１】
2016059012.tif 000023