(57)【要約】【課題】記憶装置に書き込むデータの同一性を保証する。【解決手段】上位装置３から送信されるデータを格納するデータ記憶部１４０と、データ記憶部１４０に格納されたデータを読み出した後に、読み出したデータをデータ記憶部１４０に書き込む読み書き部１１１と、読み書き部１１１によってデータ記憶部１４０から読み出されるデータに関する第１の値を算出する第１算出部１３１と、第１算出部１３１によって算出された第１の値を格納する第１記憶部１３２と、読み書き部１１１によってデータ記憶部１４０に書き込まれるデータに関する第２の値を算出する第２算出部１３３と、第２算出部１３３によって算出された第２の値を格納する第２記憶部１３４と、第１記憶部１３２に格納された第１の値と、第２記憶部１３４に格納された第２の値とを比較する比較部１１２と、を備える。【選択図】図１
2016014972.tif 000002
【特許請求の範囲】
【請求項１】
上位装置と通信可能に接続され、前記上位装置との通信を制御する通信制御装置であって、
前記上位装置から送信されるデータを格納するデータ記憶部と、
前記データ記憶部に格納されたデータを読み出した後に、当該読み出したデータを前記データ記憶部に書き込む読み書き部と、
前記読み書き部によって前記データ記憶部から読み出されるデータに関する第１の値を算出する第１算出部と、
前記第１算出部によって算出された前記第１の値を格納する第１記憶部と、
前記読み書き部によって前記データ記憶部に書き込まれるデータに関する第２の値を算出する第２算出部と、
前記第２算出部によって算出された前記第２の値を格納する第２記憶部と、
前記第１記憶部に格納された前記第１の値と、前記第２記憶部に格納された前記第２の値とを比較する比較部と、
を備えることを特徴とする、通信制御装置。
【請求項２】
前記比較部による比較の結果が不一致である場合に、エラーを出力するエラー出力部
を備えることを特徴とする、請求項１に記載の通信制御装置。
【請求項３】
当該通信制御装置は、記憶装置と通信可能に接続され、
前記比較部による比較の結果が不一致である場合に、前記記憶装置に対するデータの送信を抑止する抑止部
を備えることを特徴とする、請求項１又は２に記載の通信制御装置。
【請求項４】
前記データ記憶部における物理アドレスを多重化させた仮想アドレスに対応付けるアドレス変換部を備え、
前記読み書き部は、前記仮想アドレスを指定することにより、前記データ記憶部に対するデータの読み書きを行なう、
ことを特徴とする、請求項３に記載の通信制御装置。
【請求項５】
前記多重化させた仮想アドレスのそれぞれに対応する複数組の前記第１及び第２記憶部を備え、
前記比較部は、前記第１及び第２記憶部の組毎に前記比較を行なう、
ことを特徴とする、請求項４に記載の通信制御装置。
【請求項６】
前記第２算出部は、前記上位装置から送信されたデータに前記記憶装置に送信する必要がないデータが含まれている場合であっても、前記読み書き部によって前記データ記憶部に書き込まれたデータと、前記記憶装置に送信する必要がないデータとに基づき、前記第２の値を算出する、
ことを特徴とする、請求項４又は５に記載の通信制御装置。
【請求項７】
前記読み書き部は、前記仮想アドレスのうち特定のアドレスを指定することにより、前記記憶装置に送信する必要がないデータを前記第２算出部に送信する、
ことを特徴とする、請求項６に記載の通信制御装置。
【請求項８】
前記第１及び第２の値は、チェックサムである、
ことを特徴とする、請求項１〜７いずれか１項に記載の通信制御装置。
【請求項９】
上位装置と通信可能に接続されるストレージ装置であって、
前記上位装置との通信を制御する通信制御部を備え、
前記通信制御部は、
前記上位装置から送信されたデータを格納するデータ記憶部と、
前記データ記憶部に格納されたデータを読み出した後に、当該読み出したデータを前記データ記憶部に書き込む読み書き部と、
前記読み書き部によって前記データ記憶部から読み出されるデータに関する第１の値を算出する第１算出部と、
前記第１算出部によって算出された前記第１の値を格納する第１記憶部と、
前記読み書き部によって前記データ記憶部に書き込まれるデータに関する第２の値を算出する第２算出部と、
前記第２算出部によって算出された前記第２の値を格納する第２記憶部と、
前記第１記憶部に格納された前記第１の値と、前記第２記憶部に格納された前記第２の値とを比較する比較部と、
を備えることを特徴とする、ストレージ装置。
【請求項１０】
上位装置と通信可能に接続され、前記上位装置との通信を制御する通信制御装置に備えられるコンピュータに、
前記上位装置から送信されるデータを格納するデータ記憶部からデータを読み出した後に、当該読み出したデータを前記データ記憶部に書き込み、
前記データ記憶部から読み出されるデータに関する第１の値を第１記憶部から読み出し、
前記データ記憶部に書き込まれるデータに関する第２の値を第２記憶部から読み出し、
前記第１記憶部から読み出した前記第１の値と前記第２記憶部から読み出した前記第２の値とを比較する、
処理を実行させることを特徴とする、通信制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信制御装置，ストレージ装置及び通信制御プログラムに関する。
【背景技術】
【０００２】
ホスト装置とのインタフェース（ＩＦ）となるアダプタカードとして、Channel Adapter（ＣＡ）を備えるストレージ装置が知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−１９１５９４号公報
【特許文献２】特開２０１２−８８７５８号公報
【特許文献３】特開２０１１−１７６８９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のＣＡ内部においては、パリティ等についての保護がされない箇所があり、バス上でデータ化けが発生する可能性がある。そして、ＣＡ内部でデータ化けが発生したことをエラーとして検出できないため、誤ったデータが記憶装置に書き込まれる可能性があるという課題がある。
１つの側面では、本発明は、記憶装置に書き込むデータの同一性を保証することを目的とする。
【課題を解決するための手段】
【０００５】
このため、この通信制御装置は、上位装置と通信可能に接続され、前記上位装置との通信を制御する通信制御装置であって、前記上位装置から送信されるデータを格納するデータ記憶部と、前記データ記憶部に格納されたデータを読み出した後に、当該読み出したデータを前記データ記憶部に書き込む読み書き部と、前記読み書き部によって前記データ記憶部から読み出されるデータに関する第１の値を算出する第１算出部と、前記第１算出部によって算出された前記第１の値を格納する第１記憶部と、前記読み書き部によって前記データ記憶部に書き込まれるデータに関する第２の値を算出する第２算出部と、前記第２算出部によって算出された前記第２の値を格納する第２記憶部と、前記第１記憶部に格納された前記第１の値と、前記第２記憶部に格納された前記第２の値とを比較する比較部と、を備える。
【発明の効果】
【０００６】
開示の通信制御装置によれば、記憶装置に書き込むデータの同一性を保証することができる。
【図面の簡単な説明】
【０００７】
【図１】実施形態の一例としてのストレージシステムの機能構成を模式的に示す図である。
【図２】実施形態の一例としてのストレージ装置におけるデータ保障制御処理を説明する図である。
【図３】実施形態の一例としてのストレージ装置におけるデータ保障制御処理を例示するシーケンス図である。
【図４】実施形態の第１変形例としてのストレージ装置におけるデータバッファ多重化処理を説明する図である。
【図５】実施形態の第１変形例としてのストレージ装置におけるデータ保障制御処理を例示するシーケンス図である。
【図６】実施形態の第１変形例としてのストレージ装置におけるデータ保障制御処理を例示するシーケンス図である。
【図７】（ａ）〜（ｄ）は実施形態の第２変形例としてのストレージ装置におけるデータ保障制御処理を説明する図である。
【図８】実施形態の第２変形例としてのストレージ装置におけるデータ保障制御処理を例示するシーケンス図である。
【図９】実施形態の関連技術としてのＣＡにおけるデータフローを説明する図である。
【図１０】実施形態の関連技術としてのＣＡにおいて伝送されるデータを説明する図である。
【発明を実施するための形態】
【０００８】
以下、図面を参照して本通信制御装置，ストレージ装置及び通信制御プログラムに係る一実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。
また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【０００９】
以下、図中において、同一の各符号は同様の部分を示しているので、その説明は省略する。
〔Ａ〕実施形態の一例
〔Ａ−１〕システム構成
図１は、実施形態の一例としてのストレージシステムの機能構成を模式的に示す図である。
【００１０】
ストレージシステム１００は、ホスト装置（上位装置）３に対して記憶領域を提供するものであり、ホスト装置３及びストレージ装置１０を備える。
ホスト装置３は、例えば、サーバ機能を備えたコンピュータであり、ストレージ装置１０に対して可変長（ＣＫＤ）のリード／ライトのアクセスを行なう。
ストレージ装置１０は、後述する記憶装置２を搭載し、ホスト装置３に対して記憶領域を提供する装置である。ストレージ装置１０は、ＣＡ（通信制御装置，通信制御部）１，記憶装置２及びController Module（ＣＭ）４を備える。
【００１１】
記憶装置２は、データを読み書き可能に格納する既知の装置であり、例えば、Hard Disk Drive（ＨＤＤ）やSolid State Drive（ＳＳＤ）である。図１に示す例においては、１つの記憶装置２のみを示しているが、ストレージ装置１０は複数の記憶装置２を備えても良い。この場合には、ストレージ装置１０は、例えば、Redundant Arrays of Inexpensive Disks（ＲＡＩＤ）を用いて複数の記憶装置２にデータを分散し、冗長化した状態で保存しても良い。
【００１２】
ＣＭ４は、種々の制御を行なう装置であり、ホスト装置３からのストレージアクセス要求（アクセス制御信号：以下、ホストＩ／Ｏという）に従って、各種制御を行なう。具体的には、ＣＭ４は、ＣＡ１からのブロックアクセスに基づき、記憶装置２に対するデータの書き込み及び読み出しを実行する。
ＣＡ１は、ホスト装置３と記憶装置２とを通信可能に接続するインタフェースコントローラである。ＣＡ１は、ホスト装置３や記憶装置２から送信されたデータを受信して、データバッファ１４０に一旦格納した後に、このデータをＣＭ４に受け渡し、又、ＣＭ４から受け取ったデータをホスト装置３に送信する。すなわち、ＣＡ１は、ホスト装置２等の外部装置との間でのデータの入出力（Ｉ／Ｏ）を制御する。ＣＡ１は、ホスト装置３との間の可変長アクセスとＣＭ４との間のブロックアドレスとを変換する機能を備える。なお、図１に示す例においては説明のためにＣＡ１とＣＭ４とを互いに分離して示しているが、例えばＣＡ１をインタフェースカードとしてＣＭ４上に搭載しても良い。
【００１３】
図９は、実施形態の関連技術としてのＣＡにおけるデータフローを説明する図である。
図９に示すストレージシステム１００ａは、ＣＡ１ａ，記憶装置２ａ及びホスト装置３ａを備える。なお、ストレージシステム１００ａのうち、ＣＡ１ａ及び記憶装置２ａは、図示しないストレージ装置が備える機能構成である。
ホスト装置３ａは、例えば、サーバ機能を備えたコンピュータである。
【００１４】
記憶装置２ａは、データを読み書き可能に格納する既知の装置であり、例えば、ＨＤＤやＳＳＤである。
ＣＡ１ａは、ホスト装置３ａと記憶装置２ａとを通信可能に接続するインタフェースコントローラである。ＣＡ１ａは、ホスト装置３ａやストレージ記憶装置２ａから送信されたデータを受信して、データバッファ１４０ａに一旦格納した後に、このデータをストレージ装置が備える図示しないＣＭに受け渡し、又、ＣＭから受け取ったデータをホスト装置３ａに送信する。すなわち、ＣＡ１ａは、ホスト装置２ａ等の外部装置との間でのデータの入出力（Ｉ／Ｏ）を制御する。
【００１５】
ＣＡ１ａは、Micro-Processing Unit（ＭＰＵ）１１０ａ，Chip Select（ＣＳ）メモリ１２０ａ，Field-Programmable Gate Array（ＦＰＧＡ）１３０ａ，データバッファ１４０ａ，スイッチ（ＳＷ）１５０ａ及びＩＦチップ１６０ａを備える。
ＩＦチップ１６０ａは、例えば、Fiber Cannel（ＦＣ）のプロトコル制御を行ない、１つのＩＦチップ１６０ａ当たり２チャネルのＦＣインタフェースを提供する。
【００１６】
ＳＷ１５０ａは、ＩＦチップ１６０ａとＭＰＵ１１０ａとの間及びＭＰＵ１１０ａとＦＰＧＡ１３０ａとの間のデータパスを切り替える。
データバッファ１４０ａは、ホスト装置３ａと図示しないＣＭとの間で送受信されるデータを一時的に格納する記憶装置である。
ＦＰＧＡ１３０ａは、任意に構成を設定できる集積回路であり、図示しないＣＭとの間でデータの送受信を行なう。ＦＰＧＡ１３０ａは、チェックコードの生成及びチェックを行なう。ホスト装置３ａとＣＡ１ａとの間のアクセスはCount Key Data（ＣＫＤ；可変長）アクセスであるのに対して、ＣＡ１ａと記憶装置２ａとの間のアクセスはブロックアクセスである。そこで、ＣＡ１ａは、可変長アクセスとブロックアクセスとの変換を行なう機能を備える。
【００１７】
ＣＳメモリ１２０ａは、ＭＰＵ１１０ａに記憶領域を提供する記憶装置である。
ＭＰＵ１１０ａは、種々の制御や演算を行なう処理装置であり、例えばＣＳメモリ１２０ａに格納されたOperating System（ＯＳ）やプログラムを実行することにより、種々の機能を実現する。
図１０は、実施形態の関連技術としてのＣＡにおいて伝送されるデータを説明する図である。
【００１８】
以下、図９及び図１０を用いて、本実施形態の関連技術としてのストレージシステムにおけるデータフローを説明する。なお、図９及び図１０のそれぞれに示す符号Ｃ１〜Ｃ８は互いに同様の処理を示す。
ホスト装置３ａが記憶装置２ａにライトＩ／Ｏを発行すると、ライトＩ／Ｏに係るデータは、データバッファ１４０ａに一時的に格納される（図９及び図１０の符号Ｃ１参照）。データバッファ１４０ａに格納されるデータには、例えば、 Cyclic Redundancy Check（ＣＲＣ；巡回冗長検査）コード（ＳＢ２−ＣＲＣ）が付加される。
【００１９】
ここで、データバッファ１４０ａに格納されたデータは、記憶装置２ａに書き込まれるべき複数の有効データと、後述するようにＭＰＵ１１０ａによって破棄される複数の無効データとを含む（図９及び図１０の符号Ｃ２参照）。
ＭＰＵ１１０ａは、データバッファ１４０ａに書き込まれたデータを読み出し、ＣＳメモリ１２０に書き込む。この際、ＭＰＵ１１０ａは、読み出したデータから有効データのみを抽出し、無効データを破棄して、ＣＳメモリ１２０ａに書き込む（図９及び図１０の符号Ｃ３参照）。ここで、データバッファ１４０ａとＭＰＵ１１０ａとの間のＦＰＧＡ１３０ａ，ＳＷ１５０ａ及びバス上を伝送されるデータには、例えば、End-to-end Cyclic Redundancy Check（ＥＣＲＣ）が付加される。一方、データバッファ１４０ａとＣＳメモリ１２０ａとの間の経路上に備えられるＭＰＵ１１０ａ内部のバス（不図示）上では、伝送されるデータには、ＥＣＲＣが付加されない。
【００２０】
ＣＳメモリ１２０ａに書き込まれるデータは、有効データのみを含む（図９及び図１０の符号Ｃ４参照）。ＣＳメモリ１２０ａに書き込まれたデータには、例えば、Error Checking and Correction（ＥＣＣ）が付加される。
ＭＰＵ１１０ａは、ＣＳメモリ１２０ａに書き込んだデータを読み出し、データバッファ１４０ａに一時的に格納する（図９及び図１０の符号Ｃ５，Ｃ６参照）。ここで、ＭＰＵ１１０ａとデータバッファ１４０ａとの間のＳＷ１５０ａ，ＦＰＧＡ１３０ａ及びバス上を伝送されるデータには、例えば、ＥＣＲＣが付加される。一方、データバッファ１４０ａとＣＳメモリ１２０ａとの間の経路上に備えられるＭＰＵ１１０ａ内部のバス（不図示）上では、伝送されるデータには、ＥＣＲＣが付加されない。
【００２１】
そして、データバッファ１４０ａに格納されたデータは、図示しないＣＭを介して記憶装置２ａに書き込まれる（図９及び図１０の符号Ｃ７，Ｃ８参照）。データバッファ１４０ａから送出されるデータには、例えば、Field Check Code（ＦＣＣ）及びBlock Check Code（ＢＣＣ）が付加される。
このように、本実施形態の関連技術としてのＣＡ１ａにおいては、ＭＰＵ１１０ａ内部のバス上を伝送されるデータにはＥＣＲＣが付加されないため、パリティ等についての保護がされず、バス上でデータ化けが発生する可能性がある。そして、ＭＰＵ１１０ａ内部でデータ化けが発生したことをエラーとして検出できないため、誤ったデータが記憶装置２ａに書き込まれる可能性があるという課題がある。特に、チェーンデータ機能を用いて、データを８個以上に分割してライトＩ／Ｏを発行する場合に、ＭＰＵ１１０ａ内部のバス上でデータ化けが発生すると、誤ったデータが記憶装置２ａに書き込まれる可能性がある。
【００２２】
そこで、本実施形態の一例においては、図１に示すように、ＣＡ１は、例えば、ＭＰＵ１１０，複数（図示する例では３つ）のSynchronous Dynamic Random Access Memory（ＳＤＲＡＭ）１２１，ＦＰＧＡ１３０，複数（図示する例では５つ）のＳＤＲＡＭ１４１，Peripheral Components Interconnect Expressスイッチ（ＰＣＩｅ−ＳＷ；ＳＷ）１５０，ＦＣコントローラ１６１及び複数（図示する例では２つ）のSmall Form factor Pluggableモジュール（ＳＦＰモジュール）１６２を備える。
【００２３】
ＳＦＰモジュール１６２は、ＣＡ１（ストレージ装置１０）とホスト装置３とを光ファイバーによって通信可能に接続するインタフェースモジュールである。なお、ＣＡ１（ストレージ装置１０）とホスト装置３との間の通信回線は光ファイバーに限定されるものではなく、ＣＡ１はＳＦＰモジュール１６２以外の種々のインタフェースモジュールを備えても良い。
【００２４】
ＦＣコントローラ１６１は、例えば、ＦＣのプロトコル制御を行ない、１つのＦＣコントローラ１６１当たり２チャネルのＦＣインタフェースを提供する。なお、ＣＡ１（ストレージ装置１０）とホスト装置３との間の通信プロトコルはＦＣに限定されるものではなく、ＣＡ１はＦＣコントローラ１６１以外の種々の通信プロトコルに対応するコントローラを備えても良い。
【００２５】
例えば、ＦＣコントローラ１６１とＳＦＰモジュール１６２とは、図１及び後述する図２に示すように、ＩＦチップ１６０として機能する。
ＳＷ１５０は、ＦＣコントローラ１６１とＭＰＵ１１０との間及びＭＰＵ１１０とＦＰＧＡ１３０との間のデータパスを切り替える。本実施形態の一例においては、ＳＷ１５０は、例えば、PCI Expressリンクを介して、ＦＣコントローラ１６１とＭＰＵ１１０とＦＰＧＡ１３０とを互いに通信可能に接続する。
【００２６】
ＳＤＲＡＭ１４１は、半導体メモリであり、例えばDouble-Data-Rate SDRAM（ＤＤＲ  ＳＤＲＡＭ）である。ＳＤＲＡＭ１４１は、ホスト装置３とＣＭ４との間で送受信されるデータを一時的に記憶（格納）する。図１に示す５つのＳＤＲＡＭ１４１は、図１及び後述する図２に示すように、データバッファ１４０として機能する。なお、図１に示す例においては、５つのＳＤＲＡＭ１４１を示しているが、これに限定されるものではなく、ＣＡ１が備えるＳＤＲＡＭ１４１の数は種々変更することができる。
【００２７】
ＦＰＧＡ１３０は、任意に構成を設定できる集積回路であり、ＣＭ４との間でデータの送受信を行なう。ＦＰＧＡ１３０は、チェックコードの生成及びチェックを行なう。ホスト装置３とＣＡ１との間のアクセスはＣＫＤ（可変長）アクセスであるのに対して、ＣＡ１とＣＭ４と記憶装置２との間のアクセスはブロックアクセスである。そこで、ＦＰＧＡ１３０は、可変長アクセスとブロックアクセスとの変換を行なう機能を備える。
【００２８】
更に、図１に示すように、ＦＰＧＡ１３０は、第１算出部１３１，第１記憶部（送信チェックサムレジスタ）１３２，第２算出部１３３，第２記憶部（受信チェックサムレジスタ）１３４及びアドレス変換部１３５として機能する。
第１算出部１３１は、ホスト装置３から送信されたデータのチェックサムを算出する。具体的には、第１算出部１３１は、ホスト装置３から送信されてデータバッファ１４０に格納されたデータをＭＰＵ１１０が読み出す場合に、ＭＰＵ１１０によって読み出されたデータのチェックサムを送信チェックサムとして算出する。例えば、第１算出部１３１は、ＭＰＵ１１０からデータバッファ１４０のアドレス0x0000〜0x0FFFへのリード要求を受信した場合に、送信チェックサムを算出する。また、第１算出部１３１は、算出した送信チェックサムを第１記憶部１３２に格納する。なお、チェックサムの算出には既知の種々の手法を用いることができるため、その算出手法の説明は省略する。
【００２９】
第１記憶部１３２は、第１算出部１３１によって算出された送信チェックサムを記憶（格納）する記憶領域であり、ＦＰＧＡ１３０内に備えられたレジスタである。
第２算出部１３３は、記憶装置２に送信するデータのチェックサムを計算する。具体的には、第２算出部１３３は、ＭＰＵ１１０がデータバッファ１４０にデータを書き込む場合に、ＭＰＵ１１０によって書き込まれたデータのチェックサムを受信チェックサムとして算出する。例えば、第２算出部１３３は、ＭＰＵ１１０からデータバッファ１４０のアドレス0x0000〜0x0FFF及び0x8000〜0x8FFFへのライト要求を受信した場合に、送信チェックサムを算出する。また、第２算出部１３３は、算出した受信チェックサムを第２記憶部１３４に格納する。
【００３０】
第２記憶部１３４は、第２算出部１３３によって算出された受信チェックサムを記憶（格納）する記憶領域であり、ＦＰＧＡ１３０内に備えられたレジスタである。
アドレス変換部１３５は、データバッファ１４０における物理アドレスを仮想アドレスに対応付ける（変換する）。これにより、ＭＰＵ１１０は、仮想アドレスを指定することにより、データバッファ１４０に対するデータの読み書きを行なうことができる。アドレス変換部１３５の機能の詳細については、後述する本実施形態の第１変形例において説明する。
【００３１】
なお、本実施形態の一例においては、ＦＰＧＡ１３０はアドレス変換部１３５としての機能を備えなくても良い。この場合には、ＭＰＵ１１０は、データバッファ１４０の物理アドレスを指定することにより、データバッファ１４０に対するデータの読み書きを行なう。
ＳＤＲＡＭ１２１は、半導体メモリであり、例えばＤＤＲ  ＳＤＲＡＭである。ＳＤＲＡＭ１２１は、ＭＰＵ１１０に記憶領域を提供する。図１に示す３つのＳＤＲＡＭ１２１は、図１及び後述する図２に示すように、ＣＳメモリ１２０として機能する。
【００３２】
ＣＳメモリ１２０は、ＭＰＵ１１０によってデータバッファ１４０から読み出されたデータを記憶（格納）する。なお、図１に示す例においては、３つのＳＤＲＡＭ１２１を示しているが、これに限定されるものではなく、ＣＡ１が備えるＳＤＲＡＭ１２１の数は種々変更することができる。
ＭＰＵ１１０は、種々の制御や演算を行なう処理装置であり、ＣＳメモリ１２０に格納されたＯＳやプログラムを実行することにより、ＣＭ４との通信やＣＡ１の制御等の種々の機能を実現する。すなわち、ＭＰＵ１１０は、図１に示すように、読み書き部１１１，比較部１１２，エラー出力部１１３及び抑止部１１４として機能する。
【００３３】
なお、これらの読み書き部１１１，比較部１１２，エラー出力部１１３及び抑止部１１４としての機能を実現するためのプログラム（通信制御プログラム）は、例えばフレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ等），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ＋Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋ＲＷ，ＨＤ  ＤＶＤ等），ブルーレイディスク，磁気ディスク，光ディスク，光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体から図示しない読取装置を介してプログラムを読み取って内部記録装置または外部記録装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供してもよい。
【００３４】
読み書き部１１１，比較部１１２，エラー出力部１１３及び抑止部１１４としての機能を実現する際には、内部記憶装置（本実施形態ではＣＳメモリ１２０）に格納されたプログラムがコンピュータのマイクロプロセッサ（本実施形態ではＭＰＵ１１０）によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行してもよい。
【００３５】
読み書き部１１１は、ＣＳメモリ１２０，第１記憶部１３２，第２記憶部１３４及びデータバッファ１４０に対して、データの読み書きを行なう。
具体的には、読み書き部１１１は、データバッファ１４０に格納されたデータを読み出し、ＣＳメモリ１２０に格納する。
また、読み書き部１１１は、ＣＳメモリ１２０に書き込んだデータを読み出し、データバッファ１４０に格納する。
【００３６】
更に、読み書き部１１１は、ＦＰＧＡ１３０の第１算出部１３１によって算出された送信チェックサムを第１記憶部１３２から読み出し、ＦＰＧＡ１３０の第２算出部１３３によって算出された受信チェックサムを第２記憶部１３４から読み出す。読み書き部１１１は、データバッファ１４０に格納されたデータの読み出しを行なう場合に、ＦＰＧＡ１３０の第１記憶部１３２及び第２記憶部１３４に格納されている値を“0”クリアする。
【００３７】
比較部１１２は、読み書き部１１１によって読み出された送信チェックサムと受信チェックサムとを比較する。つまり、比較部１１２は、第１記憶部１３２に格納された送信チェックサムと、第２記憶部１３４に格納された受信チェックサムとが一致するかを判定する。
エラー出力部１１３は、比較部１１２による比較の結果が不一致である場合に、エラーを出力する。例えば、エラー出力部１１３は、比較部１１２によって送信チェックサムと受信チェックサムとが一致しないと判定された場合に、図示しない表示装置にエラーを出力する。これにより、エラー出力部１１３は、ホスト装置３からのＩ／Ｏによって記憶装置２に書き込まれるデータにビット化け等のエラーが発生したことをユーザに通知する。
【００３８】
抑止部１１４は、比較部１１２による比較の結果が不一致である場合に、記憶装置２に対するデータの送信を抑止する。例えば、抑止部１１４は、比較部１１２によって送信チェックサムと受信チェックサムとが一致しないと判定された場合に、ＣＭ４に対して抑止信号を発行することにより、データバッファ１４０に格納されたデータが記憶装置２に書き込まれることを抑止する。これにより、抑止部１１４は、ＭＰＵ１１０においてデータ化けが生じたおそれのあるデータが記憶装置２に書き込まれることを阻止する。
【００３９】
〔Ａ−２〕動作
上述の如く構成された実施形態の一例としてのストレージ装置におけるデータ保障制御処理を、図２を参照しながら、図３に示すシーケンス図（ステップＳ１〜Ｓ１５）に従って説明する。
図２は、実施形態の一例としてのストレージ装置におけるデータ保障制御処理を説明する図である。
【００４０】
図２に示す例においては、簡単のため、ストレージ装置１０の筐体の図示を省略し、ストレージ装置１０が備えるＣＭ４の図示も省略している。また、ＦＰＧＡ１３０が備える機能構成として、送信チェックサムレジスタ１３２及び受信チェックサムレジスタ１３４のみを示し、その他の機能構成の図示は簡単のため省略している。
ホスト装置３からのＩ／Ｏが発行され、データバッファ１４０にデータが格納されると、ＭＰＵ１１０の読み書き部１１１は、送信チェックサムレジスタ１３２及び受信チェックサムレジスタ１３４に格納されている値を“0”クリア（初期化）する（図２の符号Ａ１及び図３のステップＳ１参照）。
【００４１】
読み書き部１１１は、データバッファ１４０に格納されているデータを読み出す（図２の符号Ａ２参照）。具体的には、読み書き部１１１は、ＦＰＧＡ１３０に対して、データバッファ１４０が格納するデータ（例えばアドレス0x0000〜0x0100）のリード要求を発行する（図３のステップＳ２参照）。ＦＰＧＡ１３０は、ＭＰＵ１１０からのリード要求をデータバッファ１４０に転送する（図３のステップＳ３参照）。データバッファ１４０は、ＦＰＧＡ１３０にリード応答を発行する（図３のステップＳ４参照）。そして、ＦＰＧＡ１３０は、データバッファ１４０からのリード応答をＭＰＵ１１０に転送する（図３のステップＳ５参照）。
【００４２】
ＭＰＵ１１０の読み書き部１１１は、データバッファ１４０から読み出したデータをＣＳメモリ１２０に書き込む（図２の符号Ａ３参照）。言い換えれば、読み書き部１１１は、ＣＳメモリ１２０に対してデータのライト要求を発行する（図３のステップＳ６参照）。
ＦＰＧＡ１３０の第１算出部１３１は、ＭＰＵ１１０によってデータバッファ１４０から読み出されたデータのチェックサムを算出し、送信チェックサムとして送信チェックサムレジスタ１３２に格納する（図２の符号Ａ４及び図３のステップＳ７参照）。
【００４３】
ＭＰＵ１１０の読み書き部１１１は、ＣＳメモリ１２０に書き込んだデータを読み出す（図２の符号Ａ５参照）。具体的には、読み書き部１１１は、ＣＳメモリ１２０に対してデータのリード要求を発行する（図３のステップＳ８参照）。そして、ＣＳメモリ１２０は、ＭＰＵ１１０に対してデータのリード応答を発行する（図３のステップＳ９参照）。
ＭＰＵ１１０の読み書き部１１１は、ＣＳメモリ１２０から読み出したデータをデータバッファ１４０に書き込む（図２の符号Ａ６参照）。具体的には、読み書き部１１１は、ＦＰＧＡ１３０に対して、データバッファ１４０（例えばアドレス0x0000〜0x0100）へのデータのライト要求を発行する（図３のステップＳ１０参照）。ＦＰＧＡ１３０は、ＭＰＵ１１０からのライト要求をデータバッファ１４０に転送する（図３のステップＳ１１参照）。
【００４４】
ＦＰＧＡ１３０の第２算出部１３３は、ＭＰＵ１１０によってデータバッファ１４０に書き込まれたデータのチェックサムを算出し、受信チェックサムとして受信チェックサムレジスタ１３４に格納する（図２の符号Ａ７及び図３のステップＳ１２参照）。
ＭＰＵ１１０の読み書き部１１１は、送信チェックサムレジスタ１３２に格納された送信チェックサムと、受信チェックサムレジスタ１３４に格納された受信チェックサムとを読み出す。具体的には、読み書き部１１１は、ＦＰＧＡ１３０に対して、送信チェックサム及び受信チェックサムのリード要求を発行する（図３のステップＳ１３参照）。そして、ＦＰＧＡ１３０は、ＭＰＵ１１０に対して、送信チェックサム及び受信チェックサムのリード応答を発行する（図３のステップＳ１４参照）。
【００４５】
ＭＰＵ１１０の比較部１１２は、読み書き部１１１によって読み出された送信チェックサムと受信チェックサムとを比較する（図２の符号Ａ８及び図３のステップＳ１５参照）。
ここで、比較部１１２による比較が一致した場合には、データバッファ１４０に格納されたデータが記憶装置２に送信される。
【００４６】
一方、比較部１１２による比較の結果が不一致である場合には、ＭＰＵ１１０のエラー出力部１１３は、エラーを出力する。また、比較部１１２による比較の結果が不一致である場合には、ＭＰＵ１１０の抑止部１１４は、記憶装置２に対するデータの送信を抑止しても良い。
〔Ａ−３〕効果
このように、上述した実施形態の一例における通信制御装置１（ストレージ装置１０）によれば、例えば以下の作用効果を奏することができる。
【００４７】
第１算出部１３１は、読み書き部１１１によってデータ記憶部１４０から読み出されるデータに関する第１の値を算出する。また、第２算出部１３３は、読み書き部１１１によってデータ記憶部１４０に書き込まれるデータに関する第２の値を算出する。そして、比較部１１２は、第１記憶部１３２に格納された第１の値と、第２記憶部１３４に格納された第２の値とを比較する。これにより、記憶装置２に書き込むデータの同一性を保証することができる。
【００４８】
エラー出力部１１３は、比較部１１２による比較の結果が不一致である場合に、エラーを出力する。これにより、ユーザは、記憶装置２に書き込むデータにビット化け等のエラーが発生したことを知ることができる。
抑止部１１４は、比較部１１２による比較の結果が不一致である場合に、記憶装置２に対するデータの送信を抑止する。これにより、ビット化け等のエラーが発生したデータが記憶装置２に書き込まれることにより、記憶装置２内のデータが破損することを防ぐことができる。
【００４９】
また、ＭＰＵ１１０の内部バスにおけるデータ保護ための機能を備える必要がないため、回路規模の増大による製造コストの増加を防ぐことができる。
更に、ＭＰＵ１１０の内部バスにおけるデータ保護を行なわないため、データ伝送速度等の性能の低下を防ぐことができる。
〔Ｂ〕実施形態の第１変形例
〔Ｂ−１〕システム構成
図４は、実施形態の第１変形例としてのストレージ装置におけるデータバッファ多重化処理を説明する図である。
【００５０】
図４に示す例においては、ＦＰＧＡ１３０の備える機能構成として複数組の送信チェックサムレジスタ１３２及び受信チェックサムレジスタ１３４のみを示し、他の機能構成の図示は簡単のため省略している。
本実施形態の第１変形例においては、データ保障制御処理を多重化させて行なう。
ＦＰＧＡ１３０のアドレス変換部１３５は、データバッファ１４０における物理アドレスを多重化させた仮想アドレスに対応付ける（変換する）。図４に示す例においては、アドレス変換部１３５は、データバッファ１４０の物理アドレスを３重に多重化させた仮想アドレスに対応付ける。
【００５１】
具体的には、アドレス変換部１３５は、データバッファ１４０内に３つの記憶領域を定義し、３つの記憶領域のそれぞれに対応するデータバッファ仮想アドレス空間１４２を設定する。
また、ＦＰＧＡ１３０は、アドレス変換部１３５によって多重化された仮想アドレスのそれぞれに対応する複数組の送信チェックサムレジスタ１３２及び受信チェックサムレジスタ１３４を備える。図４に示す例においては、ＦＰＧＡ１３０は、仮想アドレスの多重数と同数の３組の送信チェックサムレジスタ１３２（送信チェックサムレジスタ＃１〜＃３）及び受信チェックサムレジスタ１３４（受信チェックサムレジスタ＃１〜＃３）を備える。
【００５２】
以下、複数の送信チェックサムレジスタのうち１つを特定する必要があるときには「送信チェックサムレジスタ＃１」，「送信チェックサムレジスタ＃２」又は「送信チェックサムレジスタ＃３」と表記するが、任意の送信チェックサムレジスタを指すときには「送信チェックサムレジスタ１３２」と表記する。また、以下、複数の受信チェックサムレジスタのうち１つを特定する必要があるときには「受信チェックサムレジスタ＃１」，「受信チェックサムレジスタ＃２」又は「受信チェックサムレジスタ＃３」と表記するが、任意の受信チェックサムレジスタを指すときには「受信チェックサムレジスタ１３４」と表記する。
【００５３】
ＭＰＵ１１０の読み書き部１１１は、例えばＳＤＲＡＭ１２１に格納されたメモリマップ（不図示）を参照可能に設定されている。そして、読み書き部１１１は、格納されたメモリマップを参照することにより、データバッファ１４０の物理アドレス空間が多重化されたデータバッファ仮想アドレス空間１４２として認識することができる。図４に示す例においては、読み書き部１１１は、データバッファ１４０の仮想アドレス空間を３つのデータバッファ仮想アドレス空間１４２（データバッファ仮想アドレス空間＃１〜＃３）として認識する。
【００５４】
以下、複数のデータバッファ仮想アドレス空間のうち１つを特定する必要があるときには「データバッファ仮想アドレス空間＃１」，「データバッファ仮想アドレス空間＃２」又は「データバッファ仮想アドレス空間＃３」と表記するが、任意のデータバッファ仮想アドレス空間を指すときには「データバッファ仮想アドレス空間１４２」と表記する。
データバッファ仮想アドレス空間＃１〜＃３のそれぞれには、データバッファ１４０の物理アドレス空間と同じデータ容量（図示する例では２５６ＭＢ）が定義されている。そのため、ＭＰＵ１１０の読み書き部１１１は、データバッファ１４０の物理アドレス空間を３倍に拡張されたデータバッファ仮想アドレス空間１４２として認識する。読み書き部１１１は、仮想アドレス（データバッファ仮想アドレス空間１４２）を指定することにより、データバッファ１４０に対するデータの読み書きを行なう。
【００５５】
図４に示す例においては、データバッファ仮想アドレス空間＃１に対して、送信チェックサムレジスタ＃１及び受信チェックサムレジスタ＃１が対応付けられている。また、データバッファ仮想アドレス空間＃２に対して、送信チェックサムレジスタ＃２及び受信チェックサムレジスタ＃２が対応付けられている。更に、データバッファ仮想アドレス空間＃３に対して、送信チェックサムレジスタ＃３及び受信チェックサムレジスタ＃３が対応付けられている。
【００５６】
以下、本実施形態の第１変形例において、ＭＰＵ１１０の読み書き部１１１がデータバッファ仮想アドレス空間＃１〜＃３を指定して読み書きを行なうデータを、データ＃１〜＃３とそれぞれ示す場合がある。また、以下、送信チェックサムレジスタ＃１〜＃３に格納される送信チェックサムを、送信チェックサム＃１〜＃３とそれぞれ示す場合がある。更に、以下、本実施形態の第１変形例において、受信チェックサムレジスタ＃１〜＃３に格納される受信チェックサムを、受信チェックサム＃１〜＃３とそれぞれ示す場合がある。
【００５７】
ＦＰＧＡ１３０の第１算出部１３１及び第２算出部１３３は、同一のデータについて算出した送信チェックサム及び受信チェックサムを一組の送信チェックサムレジスタ１３２及び受信チェックサムレジスタ１３４にそれぞれ格納する。
具体的には、第１算出部１３１は、ＭＰＵ１１０によってデータバッファ仮想アドレス空間＃１を指定したデータ＃１の読み出しが行なわれると、送信チェックサム＃１を算出して送信チェックサムレジスタ＃１に格納する。第２算出部１３３は、ＭＰＵ１１０によってデータバッファ仮想アドレス空間＃１を指定したデータ＃１の書き込みが行なわれると、受信チェックサム＃１を算出して受信チェックサムレジスタ＃１に格納する。
【００５８】
また、第１算出部１３１は、ＭＰＵ１１０によってデータバッファ仮想アドレス空間＃２を指定したデータ＃２の読み出しが行なわれると、送信チェックサム＃２を算出して送信チェックサムレジスタ＃２に格納する。第２算出部１３３は、ＭＰＵ１１０によってデータバッファ仮想アドレス空間＃２を指定したデータ＃２の書き込みが行なわれると、受信チェックサム＃２を算出して受信チェックサムレジスタ＃２に格納する。
【００５９】
更に、第１算出部１３１は、ＭＰＵ１１０によってデータバッファ仮想アドレス空間＃３を指定したデータ＃３の読み出しが行なわれると、送信チェックサム＃３を算出して送信チェックサムレジスタ＃３に格納する。第２算出部１３３は、ＭＰＵ１１０によってデータバッファ仮想アドレス空間＃３を指定したデータ＃３の書き込みが行なわれると、受信チェックサム＃３を算出して受信チェックサムレジスタ＃３に格納する。
【００６０】
ＭＰＵ１１０の比較部１１２は、送信チェックサムレジスタ１３２及び受信チェックサムレジスタ１３４の組毎に、送信チェックサムと受信チェックサムとの比較を行なう。
具体的には、比較部１１２は、送信チェックサムレジスタ＃１に格納された送信チェックサム＃１と、受信チェックサムレジスタ＃１に格納された受信チェックサム＃１とを比較する。また、比較部１１２は、送信チェックサムレジスタ＃２に格納された送信チェックサム＃２と、受信チェックサムレジスタ＃２に格納された受信チェックサム＃２とを比較する。更に、比較部１１２は、送信チェックサムレジスタ＃３に格納された送信チェックサム＃３と、受信チェックサムレジスタ＃３に格納された受信チェックサム＃３とを比較する。
【００６１】
〔Ｂ−２〕動作
上述の如く構成された実施形態の第１変形例としてのストレージ装置におけるデータ保障制御処理の例を、図５及び図６に示すシーケンス図（ステップＳ２１〜Ｓ３５，Ｓ４１〜Ｓ５５）に従って説明する。具体的には、図５にステップＳ２１〜Ｓ３２，Ｓ４１〜Ｓ４７を示し、図６にステップＳ３３〜Ｓ３５，Ｓ４８〜Ｓ５５を示す。
【００６２】
図５及び図６に示す例においては、ＭＰＵ１１０の読み書き部１１１は、データバッファ仮想アドレス空間＃１，＃２を指定してデータ＃１，＃２の読み書きをそれぞれ行なう。また、図５及び図６において実線矢印で示しているステップＳ２１〜Ｓ３５はデータ＃１に関する処理を示し、図５及び図６において破線矢印で示しているステップＳ４１〜Ｓ５５はデータ＃２に関する処理を示す。
【００６３】
ホスト装置３からのＩ／Ｏが発行され、データバッファ１４０にデータ＃１が格納されると、ＭＰＵ１１０の読み書き部１１１は、送信チェックサムレジスタ＃１及び受信チェックサムレジスタ＃１に格納されている値を“0”クリア（初期化）する（図５のステップＳ２１参照）。
読み書き部１１１は、データバッファ１４０に格納されているデータ＃１を読み出す。具体的には、読み書き部１１１は、ＦＰＧＡ１３０に対して、データバッファ仮想アドレス空間＃１を指定して、データバッファ１４０が格納するデータ＃１（例えばアドレス0x0000〜0x0100）のリード要求を発行する（図５のステップＳ２２参照）。ＦＰＧＡ１３０のアドレス変換部１３５は、ＭＰＵ１１０からのリード要求に係る仮想アドレスを物理アドレスに変換し、リード要求をデータバッファ１４０に転送する（図５のステップＳ２３参照）。データバッファ１４０は、ＦＰＧＡ１３０にリード応答を発行する（図３のステップＳ２４参照）。そして、ＦＰＧＡ１３０のアドレス変換部１３５は、データバッファ１４０からのリード応答に係る物理アドレスを仮想アドレスに変換し、リード応答をＭＰＵ１１０に転送する（図５のステップＳ２５参照）。
【００６４】
ＭＰＵ１１０の読み書き部１１１は、ＣＳメモリ１２０に対してデータ＃１のライト要求を発行することにより、読み出したデータ＃１をＣＳメモリ１２０に書き込む（図５のステップＳ２６参照）。
ＦＰＧＡ１３０の第１算出部１３１は、ＭＰＵ１１０によってデータバッファ１４０から読み出されたデータ＃１のチェックサムを算出し、送信チェックサム＃１として送信チェックサムレジスタ＃１に格納する（図５のステップＳ２７参照）。
【００６５】
ホスト装置３からのＩ／Ｏが発行され、データバッファ１４０にデータ＃２が格納されると、ＭＰＵ１１０の読み書き部１１１は、送信チェックサムレジスタ＃２及び受信チェックサムレジスタ＃２に格納されている値を“0”クリア（初期化）する（図５のステップＳ４１参照）。
読み書き部１１１は、ＣＳメモリ１２０に書き込んだデータ＃１を読み出す。具体的には、読み書き部１１１は、ＣＳメモリ１２０に対してデータ＃１のリード要求を発行する（図５のステップＳ２８参照）。そして、ＣＳメモリ１２０は、ＭＰＵ１１０に対してデータ＃１のリード応答を発行する（図３のステップＳ２９参照）。
【００６６】
読み書き部１１１は、データバッファ１４０に格納されているデータ＃２を読み出す。具体的には、読み書き部１１１は、ＦＰＧＡ１３０に対して、データバッファ仮想アドレス空間＃２を指定して、データバッファ１４０が格納するデータ＃２（例えばアドレス0x1100〜0x1200）のリード要求を発行する（図５のステップＳ４２参照）。ＦＰＧＡ１３０のアドレス変換部１３５は、ＭＰＵ１１０からのリード要求に係る仮想アドレスを物理アドレスに変換し、リード要求をデータバッファ１４０に転送する（図５のステップＳ４３参照）。データバッファ１４０は、ＦＰＧＡ１３０にリード応答を発行する（図５のステップＳ４４参照）。そして、ＦＰＧＡ１３０のアドレス変換部１３５は、データバッファ１４０からのリード応答に係る物理アドレスを仮想アドレスに変換し、リード応答をＭＰＵ１１０に転送する（図５のステップＳ４５参照）。
【００６７】
ＭＰＵ１１０の読み書き部１１１は、ＣＳメモリ１２０に対してデータ＃２のライト要求を発行することにより、読み出したデータ＃２をＣＳメモリ１２０に書き込む（図５のステップＳ４６参照）。
ＦＰＧＡ１３０の第１算出部１３１は、ＭＰＵ１１０によってデータバッファ１４０から読み出されたデータ＃２のチェックサムを算出し、送信チェックサム＃２として送信チェックサムレジスタ＃２に格納する（図５のステップＳ４７参照）。
【００６８】
ＭＰＵ１１０の読み書き部１１１は、ＣＳメモリ１２０から読み出したデータ＃１をデータバッファ１４０に書き込む。具体的には、読み書き部１１１は、ＦＰＧＡ１３０に対して、データバッファ仮想アドレス空間＃１を指定して、データバッファ１４０（例えばアドレス0x0000〜0x0100）へのデータ＃１のライト要求を発行する（図５のステップＳ３０参照）。ＦＰＧＡ１３０のアドレス変換部１３５は、ＭＰＵ１１０からのライト要求に係る仮想アドレスを物理アドレスに変換し、ライト要求をデータバッファ１４０に転送する（図５のステップＳ３１参照）。
【００６９】
ＦＰＧＡ１３０の第２算出部１３３は、ＭＰＵ１１０によってデータバッファ１４０に書き込まれたデータ＃１のチェックサムを算出し、受信チェックサム＃１として受信チェックサムレジスタ＃１に格納する（図５のステップＳ３２参照）。
ＭＰＵ１１０の読み書き部１１１は、ＣＳメモリ１２０に書き込んだデータ＃２を読み出す。具体的には、読み書き部１１１は、ＣＳメモリ１２０に対してデータ＃２のリード要求を発行する（図６のステップＳ４８参照）。そして、ＣＳメモリ１２０は、ＭＰＵ１１０に対してデータ＃２のリード応答を発行する（図６のステップＳ４９参照）。
【００７０】
ＭＰＵ１１０の読み書き部１１１は、送信チェックサムレジスタ＃１に格納された送信チェックサム＃１と、受信チェックサムレジスタ＃１に格納された受信チェックサム＃１とを読み出す。具体的には、読み書き部１１１は、ＦＰＧＡ１３０に対して、送信チェックサム＃１及び受信チェックサム＃１のリード要求を発行する（図６のステップＳ３３参照）。そして、ＦＰＧＡ１３０は、ＭＰＵ１１０に対して、送信チェックサム＃１及び受信チェックサム＃１のリード応答を発行する（図５のステップＳ３４参照）。
【００７１】
ＭＰＵ１１０の比較部１１２は、読み書き部１１１によって読み出された送信チェックサム＃１と受信チェックサム＃１とを比較する（図６のステップＳ３５参照）。
ここで、比較部１１２による比較が一致した場合には、データバッファ１４０に格納されたデータ＃１が記憶装置２に送信される。
一方、比較部１１２による比較の結果が不一致である場合には、ＭＰＵ１１０のエラー出力部１１３は、エラーを出力する。また、比較部１１２による比較の結果が不一致である場合には、ＭＰＵ１１０の抑止部１１４は、記憶装置２に対するデータ＃１の送信を抑止しても良い。
【００７２】
ＭＰＵ１１０の読み書き部１１１は、ＣＳメモリ１２０から読み出したデータ＃２をデータバッファ１４０に書き込む。具体的には、読み書き部１１１は、ＦＰＧＡ１３０に対して、データバッファ仮想アドレス空間＃２を指定して、データバッファ１４０（例えばアドレス0x1100〜0x1200）へのデータ＃２のライト要求を発行する（図６のステップＳ５０参照）。ＦＰＧＡ１３０のアドレス変換部１３５は、ＭＰＵ１１０からのライト要求に係る仮想アドレスを物理アドレスに変換し、ライト要求をデータバッファ１４０に転送する（図６のステップＳ５１参照）。
【００７３】
ＦＰＧＡ１３０の第２算出部１３３は、ＭＰＵ１１０によってデータバッファ１４０に書き込まれたデータ＃２のチェックサムを算出し、受信チェックサム＃２として受信チェックサムレジスタ＃２に格納する（図６のステップＳ５２参照）。
ＭＰＵ１１０の読み書き部１１１は、送信チェックサムレジスタ＃２に格納された送信チェックサム＃２と、受信チェックサムレジスタ＃２に格納された受信チェックサム＃２とを読み出す。具体的には、読み書き部１１１は、ＦＰＧＡ１３０に対して、送信チェックサム＃２及び受信チェックサム＃２のリード要求を発行する（図６のステップＳ５３参照）。そして、ＦＰＧＡ１３０は、ＭＰＵ１１０に対して、送信チェックサム＃２及び受信チェックサム＃２のリード応答を発行する（図６のステップＳ５４参照）。
【００７４】
ＭＰＵ１１０の比較部１１２は、読み書き部１１１によって読み出された送信チェックサム＃２と受信チェックサム＃２とを比較する（図６のステップＳ５５参照）。
ここで、比較部１１２による比較が一致した場合には、データバッファ１４０に格納されたデータ＃２が記憶装置２に送信される。
一方、比較部１１２による比較の結果が不一致である場合には、ＭＰＵ１１０のエラー出力部１１３は、エラーを出力する。また、比較部１１２による比較の結果が不一致である場合には、ＭＰＵ１１０の抑止部１１４は、記憶装置２に対するデータ＃２の送信を抑止しても良い。
【００７５】
〔Ｂ−３〕効果
このように、実施形態の第１変形例における通信制御装置１（ストレージ装置１０）によれば、実施形態の一例において奏することができる上述した効果とともに、例えば以下の効果を奏することができる。
アドレス変換部１３５は、データ記憶部１４０における物理アドレスを多重化させた仮想アドレスに対応付ける。そして、読み書き部１１１は、仮想アドレスを指定することにより、データ記憶部１４０に対するデータの読み書きを行なう。これにより、上位装置３からのＩ／Ｏが多重化されて発行された場合においても、複数のデータの伝送処理を並行して多重化させて行なうことができる。
【００７６】
比較部１１２は、多重化させた仮想アドレスのそれぞれに対応する複数の第１及び第２記憶部１３２，１３４の組毎に比較を行なう。これにより、上位装置３からのＩ／Ｏが多重化されて発行された場合においても、複数のデータについてのデータ保障制御処理を並行して多重化させて行なうことができる。
〔Ｃ〕実施形態の第２変形例
〔Ｃ−１〕システム構成
図９及び図１０を用いて示したように、本実施形態の関連技術としてのストレージシステムにおいて伝送されるデータにおいては、記憶装置２ａに書き込まれるべき有効データと、ＭＰＵ１１０ａによって破棄される無効データとを含む場合がある。この場合には、ＭＰＵ１１０ａは、データバッファ１４０ａから読み出したデータから有効データのみを抽出して無効データを破棄した後に、有効データをデータバッファ１４０ａに書き込む。
【００７７】
上述した実施形態の一例において、ホスト装置３から送信されるデータに無効データが含まれる場合には、無効データが破棄される前にＦＰＧＡ１３０の第１算出部１３１によって算出される送信チェックサムと、無効データが破棄された後にＦＰＧＡ１３０の第２算出部１３３によって算出される受信チェックサムとは、異なる値となる。これにより、ＭＰＵ１１０の比較部１１２は、ＭＰＵ１１０内部のバス上でビット化け等のエラーが発生していないにも関わらず、送信チェックサムと受信チェックサムとの不一致を検出してしまう。
【００７８】
そこで、本実施形態の第２変形例においては、ＭＰＵ１１０の読み書き部１１１は、ホスト装置３から送信されたデータに無効データが含まれている場合であっても、無効データをダミーデータとしてＦＰＧＡ１３０に書き込む。例えば、図４に示したデータバッファ仮想アドレス空間＃１〜＃３に加えて、ダミーライト用のデータバッファ仮想アドレス空間を定義する。そして、読み書き部１１１は、ダミーライト用のデータバッファ仮想アドレス空間を指定することにより、ＦＰＧＡ１３０が備える図示しない受信バッファにダミーデータを書き込む（以下、単に「ＦＰＧＡ１３０にダミーデータを書き込む」という場合がある。）。例えば、データバッファ仮想アドレス空間１４２に対応する物理アドレスを0x0000〜0x0FFFと定義し、ダミーライト用のデータバッファ仮想アドレス空間に対応する物理アドレスを0x8000〜0x8FFFと定義する。
【００７９】
また、ダミーライト用のデータバッファ仮想アドレス空間を指定して書き込まれたダミーデータは、データバッファ１４０に書き込まれないように設定する。例えば、ＦＰＧＡ１３０のアドレス変換部１３５は、ＭＰＵ１１０からデータバッファ１４０のアドレス0x0000〜0x0FFFへのライト要求を受信した場合には、ライト要求に係るデータをデータバッファ１４０に書き込む。一方、アドレス変換部１３５は、ＭＰＵ１１０からデータバッファ１４０のアドレス0x8000〜0x8FFFへのライト要求を受信した場合には、ライト要求に係るデータをデータバッファ１４０に書き込まない。
【００８０】
ＦＰＧＡ１３０の第２算出部１１３は、ＭＰＵ１１０によってデータバッファ１４０に書き込まれたデータ（有効データ）と、ＭＰＵ１１０によってＦＰＧＡ１３０に書き込まれたダミーデータ（無効データ）とに基づき、受信チェックサムを算出する。
〔Ｃ−２〕動作
上述の如く構成された実施形態の第２変形例としてのストレージ装置におけるデータ保障制御処理の例を、図７（ａ）〜（ｄ）を参照しながら、図８に示すシーケンス図（ステップＳ１〜Ｓ１５，Ｓ６１〜Ｓ６４）に従って説明する。図８のステップＳ１〜Ｓ１５に示す処理は図３のステップＳ１〜Ｓ１５に示した処理とそれぞれ同様であるため、その詳細な説明は省略する場合がある。
【００８１】
図７（ａ）〜（ｄ）に示す例においては、ＦＰＧＡ１３０が備える機能構成として、送信チェックサムレジスタ１３２及び受信チェックサムレジスタ１３４のみを示し、その他の機能構成の図示は簡単のため省略している。
図７（ａ）〜（ｄ）及び図８に示す例において、ホスト装置３からの一連のＩ／Ｏによって送信されたデータ＃１〜＃３のうち、データ＃１，＃３は有効データであり、データ＃２は無効データであるものとする。
【００８２】
ホスト装置３からのＩ／Ｏが発行され、データバッファ１４０にデータ＃１〜＃３が格納されると、ＭＰＵ１１０の読み書き部１１１は、送信チェックサムレジスタ１３２及び受信チェックサムレジスタ１３４に格納されている値を“0”クリア（初期化）する（図８のステップＳ１参照）。
読み書き部１１１は、データバッファ１４０が格納するデータ＃１〜＃３（例えばアドレス0x0000〜0x0100）のリード要求を発行することによって、データバッファ１４０に格納されているデータ＃１〜＃３を読み出す（図７（ａ）の符号Ｂ１及び図８のステップＳ２〜Ｓ５参照）。
【００８３】
読み書き部１１１は、ＣＳメモリ１２０にライト要求を発行することによって、データ＃１〜＃３をＣＳメモリ１２０に書き込む（図８のステップＳ６参照）。
ＦＰＧＡ１３０の第１算出部１３１は、ＭＰＵ１１０によってデータバッファ１４０から読み出されたデータ＃１〜＃３のチェックサムを算出し、送信チェックサムとして送信チェックサムレジスタ１３２に格納する（図７（ａ）の符号Ｂ２及び図８のステップＳ７参照）。
【００８４】
ＭＰＵ１１０の読み書き部１１１は、ＣＳメモリ１２０にリード要求を発行することによって、ＣＳメモリ１２０に書き込んだデータ＃１〜＃３の中から有効データ＃１，＃３を抽出して読み出す（図８のステップＳ８，Ｓ９参照）。
読み書き部１１１は、データバッファ１４０（例えばアドレス0x0000〜0x0050）へのデータ＃１，＃３のライト要求を発行することによって、ＣＳメモリ１２０から読み出したデータ＃１，＃３をデータバッファ１４０に書き込む（図７（ｂ）の符号Ｂ３及び図８のステップＳ１０，Ｓ１１参照）。
【００８５】
ＦＰＧＡ１３０の第２算出部１３３は、ＭＰＵ１１０によってデータバッファ１４０に書き込まれたデータ＃１，＃３のチェックサムを算出し、受信チェックサムとして受信チェックサムレジスタ１３４に格納する（図７（ｂ）の符号Ｂ４及び図８のステップＳ１２参照）。
ＭＰＵ１１０の読み書き部１１１は、ＣＳメモリ１２０に書き込んだデータ＃１〜＃３の中から無効データ＃２を抽出して読み出す。具体的には、読み書き部１１１は、ＣＳメモリ１２０にデータ＃２のリード要求を発行する（図８のステップＳ６１参照）。そして、ＣＳメモリ１２０は、ＭＰＵ１１０に対してデータ＃２のリード応答を発行する（図８のステップＳ６２参照）。
【００８６】
ＭＰＵ１１０の読み書き部１１１は、ＦＰＧＡ１３０に対してダミーライト用のデータバッファ仮想アドレス空間（例えば物理アドレス0x8000〜0x8050に対応する仮想アドレス）を指定してライト要求を発行する。これにより、読み書き部１１１は、ＣＳメモリ１２０から読み出したデータ＃２をダミーデータとしてＦＰＧＡ１３０に書き込む（図７（ｃ）の符号Ｂ５及び図８のステップＳ６３参照）。
【００８７】
ＦＰＧＡ１３０の第２算出部１３３は、ＭＰＵ１１０によってデータバッファ１４０に書き込まれたデータ（有効データ）＃１，＃３と、ＭＰＵ１１０によってＦＰＧＡ１３０に書き込まれたダミーデータ（無効データ）＃２とに基づき、受信チェックサムを算出する。そして、第２算出部１３３は、算出した受信チェックサムを受信チェックサムレジスタ１３４に格納する（図７（ｃ）の符号Ｂ６及び図８のステップＳ６４参照）。
【００８８】
ＭＰＵ１１０によって書き込まれたデータにはダミーデータであることを示すオフセット（例えば0x8000）が付加されているため、ＦＰＧＡ１３０のアドレス変換部１３５は、ダミーデータをデータバッファ１４０に転送せずに破棄する。
ＭＰＵ１１０の読み書き部１１１は、ＦＰＧＡ１３０に対して送信チェックサム及び受信チェックサムのリード要求を発行する。これにより、読み書き部１１１は、送信チェックサムレジスタ１３２に格納された送信チェックサムと、受信チェックサムレジスタ１３４に格納された受信チェックサムとを読み出す（図７（ｄ）の符号Ｂ７及び図８のステップＳ１３，Ｓ１４参照）。
【００８９】
ＭＰＵ１１０の比較部１１２は、読み書き部１１１によって読み出された送信チェックサムと受信チェックサムとを比較する（図８のステップＳ１５参照）。
ここで、比較部１１２による比較が一致した場合には、データバッファ１４０に格納されたデータ＃１，＃３が記憶装置２に送信される。
一方、比較部１１２による比較の結果が不一致である場合には、ＭＰＵ１１０のエラー出力部１１３は、エラーを出力する。また、比較部１１２による比較の結果が不一致である場合には、ＭＰＵ１１０の抑止部１１４は、記憶装置２に対するデータ＃１，＃３の送信を抑止しても良い。
【００９０】
〔Ｃ−３〕効果
このように、実施形態の第２変形例における通信制御装置１（ストレージ装置１０）によれば、実施形態の一例において奏することができる上述した効果とともに、例えば以下の効果を奏することができる。
第２算出部１３３は、上位装置３から送信されたデータに記憶装置２に送信する必要がないデータが含まれている場合であっても、読み書き部１１１によってデータ記憶部１４０に書き込まれたデータと、記憶装置２に送信する必要がないデータとに基づき、第２の値を算出する。これにより、ＭＰＵ１１０内部のバス上でビット化け等のエラーが発生していないにも関わらず、比較部１１２が送信チェックサムと受信チェックサムとの不一致を検出してしまうことを防ぐことができる。
【００９１】
読み書き部１１１は、仮想アドレスのうち特定のアドレスを指定することにより、記憶装置２に送信する必要がないデータを第２算出部１３３に送信する。これにより、不要なデータが記憶装置２に送信されることを防ぐことができる。
〔Ｄ〕その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【００９２】
上述した実施形態の一例及び各変形例においては、第１算出部１３１及び第２算出部１３３がチェックサムを算出し、比較部１１２は算出されたチェックサムを比較することとしたが、これに限定されるものではない。第１算出部１３１及び第２算出部がチェックサム以外の種々の誤り検出符号を算出し、比較部１１２は算出された誤り検出符号を比較しても良い。
【００９３】
また、上述した実施形態の一例及び各変形例においては、ＭＰＵ１１０が比較部１１２，エラー出力部１１３及び抑止部１１４としての機能を備えることとしたが、これに限定されるものではない。例えば、ＦＰＧＡ１３０が比較部１１２，エラー出力部１１３及び抑止部１１４としての機能を備えても良い。
更に、上述した実施形態の第２変形例においては、読み書き部１１１はダミーライト用のデータバッファ仮想アドレス空間を指定することによりダミーデータをＦＰＧＡ１３０に書き込むこととしたが、これに限定されるものではない。例えば、読み書き部１１１は、図４に示したデータバッファ仮想アドレス空間１４２を指定することにより、ダミーデータをＦＰＧＡ１３０に書き込んでも良い。この場合には、読み書き部１１１は、ダミーデータの書き込み前にダミーデータを書き込むことを示す信号をＦＰＧＡ１３０に送信する。また、読み書き部１１１は、ダミーデータであることを示すフラグをダミーデータに付加してＦＰＧＡ１３０に書き込んでも良い。これにより、ＦＰＧＡ１３０は、書き込まれたデータがダミーデータであることを認識することができる。
【００９４】
〔Ｅ〕付記
（付記１）
上位装置と通信可能に接続され、前記上位装置との通信を制御する通信制御装置であって、
前記上位装置から送信されるデータを格納するデータ記憶部と、
前記データ記憶部に格納されたデータを読み出した後に、当該読み出したデータを前記データ記憶部に書き込む読み書き部と、
前記読み書き部によって前記データ記憶部から読み出されるデータに関する第１の値を算出する第１算出部と、
前記第１算出部によって算出された前記第１の値を格納する第１記憶部と、
前記読み書き部によって前記データ記憶部に書き込まれるデータに関する第２の値を算出する第２算出部と、
前記第２算出部によって算出された前記第２の値を格納する第２記憶部と、
前記第１記憶部に格納された前記第１の値と、前記第２記憶部に格納された前記第２の値とを比較する比較部と、
を備えることを特徴とする、通信制御装置。
【００９５】
（付記２）
前記比較部による比較の結果が不一致である場合に、エラーを出力するエラー出力部
を備えることを特徴とする、付記１に記載の通信制御装置。
（付記３）
当該通信制御装置は、記憶装置と通信可能に接続され、
前記比較部による比較の結果が不一致である場合に、前記記憶装置に対するデータの送信を抑止する抑止部
を備えることを特徴とする、付記１又は２に記載の通信制御装置。
【００９６】
（付記４）
前記データ記憶部における物理アドレスを多重化させた仮想アドレスに対応付けるアドレス変換部を備え、
前記読み書き部は、前記仮想アドレスを指定することにより、前記データ記憶部に対するデータの読み書きを行なう、
ことを特徴とする、付記３に記載の通信制御装置。
【００９７】
（付記５）
前記多重化させた仮想アドレスのそれぞれに対応する複数組の前記第１及び第２記憶部を備え、
前記比較部は、前記第１及び第２記憶部の組毎に前記比較を行なう、
ことを特徴とする、付記４に記載の通信制御装置。
【００９８】
（付記６）
前記第２算出部は、前記上位装置から送信されたデータに前記記憶装置に送信する必要がないデータが含まれている場合であっても、前記読み書き部によって前記データ記憶部に書き込まれたデータと、前記記憶装置に送信する必要がないデータとに基づき、前記第２の値を算出する、
ことを特徴とする、付記４又は５に記載の通信制御装置。
【００９９】
（付記７）
前記読み書き部は、前記仮想アドレスのうち特定のアドレスを指定することにより、前記記憶装置に送信する必要がないデータを前記第２算出部に送信する、
ことを特徴とする、付記６に記載の通信制御装置。
（付記８）
前記第１及び第２の値は、チェックサムである、
ことを特徴とする、付記１〜７のいずれか１項に記載の通信制御装置。
【０１００】
（付記９）
上位装置と通信可能に接続されるストレージ装置であって、
前記上位装置との通信を制御する通信制御部を備え、
前記通信制御部は、
前記上位装置から送信されたデータを格納するデータ記憶部と、
前記データ記憶部に格納されたデータを読み出した後に、当該読み出したデータを前記データ記憶部に書き込む読み書き部と、
前記読み書き部によって前記データ記憶部から読み出されるデータに関する第１の値を算出する第１算出部と、
前記第１算出部によって算出された前記第１の値を格納する第１記憶部と、
前記読み書き部によって前記データ記憶部に書き込まれるデータに関する第２の値を算出する第２算出部と、
前記第２算出部によって算出された前記第２の値を格納する第２記憶部と、
前記第１記憶部に格納された前記第１の値と、前記第２記憶部に格納された前記第２の値とを比較する比較部と、
を備えることを特徴とする、ストレージ装置。
【０１０１】
（付記１０）
前記比較部による比較の結果が不一致である場合に、エラーを出力するエラー出力部
を備えることを特徴とする、付記９に記載のストレージ装置。
（付記１１）
前記比較部による比較の結果が不一致である場合に、当該ストレージ装置が有する記憶装置に対するデータの送信を抑止する抑止部
を備えることを特徴とする、付記９又は１０に記載のストレージ装置。
【０１０２】
（付記１２）
前記データ記憶部における物理アドレスを多重化させた仮想アドレスに対応付けるアドレス変換部を備え、
前記読み書き部は、前記仮想アドレスを指定することにより、前記データ記憶部に対するデータの読み書きを行なう、
ことを特徴とする、付記１１に記載のストレージ装置。
【０１０３】
（付記１３）
前記多重化させた仮想アドレスのそれぞれに対応する複数組の前記第１及び第２記憶部を備え、
前記比較部は、前記第１及び第２記憶部の組毎に前記比較を行なう、
ことを特徴とする、付記１２に記載のストレージ装置。
【０１０４】
（付記１４）
前記第２算出部は、前記上位装置から送信されたデータに前記記憶装置に送信する必要がないデータが含まれている場合であっても、前記読み書き部によって前記データ記憶部に書き込まれたデータと、前記記憶装置に送信する必要がないデータとに基づき、前記第２の値を算出する、
ことを特徴とする、付記１２又は１３に記載のストレージ装置。
【０１０５】
（付記１５）
前記読み書き部は、前記仮想アドレスのうち特定のアドレスを指定することにより、前記記憶装置に送信する必要がないデータを前記第２算出部に送信する、
ことを特徴とする、付記１４に記載のストレージ装置。
（付記１６）
前記第１及び第２の値は、チェックサムである、
ことを特徴とする、付記９〜１５のいずれか１項に記載のストレージ装置。
【０１０６】
（付記１７）
上位装置と通信可能に接続され、前記上位装置との通信を制御する通信制御装置に備えられるコンピュータに、
前記上位装置から送信されるデータを格納するデータ記憶部からデータを読み出した後に、当該読み出したデータを前記データ記憶部に書き込み、
前記データ記憶部から読み出されるデータに関する第１の値を第１記憶部から読み出し、
前記データ記憶部に書き込まれるデータに関する第２の値を第２記憶部から読み出し、
前記第１記憶部から読み出した前記第１の値と前記第２記憶部から読み出した前記第２の値とを比較する、
処理を実行させることを特徴とする、通信制御プログラム。
【０１０７】
（付記１８）
前記比較の結果が不一致である場合に、エラーを出力する、
処理を前記コンピュータに実行させることを特徴とする、付記１７に記載の通信制御プログラム。
（付記１９）
前記通信制御装置は、記憶装置と通信可能に接続され、
前記比較の結果が不一致である場合に、前記記憶装置に対するデータの送信を抑止する、
処理を前記コンピュータに実行させることを特徴とする、付記１７又は１８に記載の通信制御プログラム。
【０１０８】
（付記２０）
前記データ記憶部における物理アドレスを多重化させた仮想アドレスを指定することにより、前記データ記憶部に対するデータの読み書きを行なう、
処理を前記コンピュータに実行させることを特徴とする、付記１７〜１９のいずれか１項に記載の通信制御プログラム。
【０１０９】
（付記２１）
前記多重化させた仮想アドレスのそれぞれに対応する複数の前記第１及び第２記憶部の組毎に、前記比較を行なう、
処理を前記コンピュータに実行させることを特徴とする、付記２０に記載の通信制御プログラム。
【０１１０】
（付記２２）
前記上位装置から送信されたデータに前記記憶装置に送信する必要がないデータが含まれている場合であっても、前記データ記憶部に書き込まれたデータと、前記記憶装置に送信する必要がないデータとに基づき、算出された前記第２の値を前記第２記憶部から読み出す、
処理を前記コンピュータに実行させることを特徴とする、付記１９に記載の通信制御プログラム。
【０１１１】
（付記２３）
前記第１及び第２の値は、チェックサムである、
ことを特徴とする、付記１７〜２２のいずれか１項に記載の通信制御プログラム。
【符号の説明】
【０１１２】
１００    ストレージシステム
１０      ストレージ装置
１        ＣＡ（通信制御装置，通信制御部）
１１０    ＭＰＵ（コンピュータ）
１１１    読み書き部
１１２    比較部
１１３    エラー出力部
１１４    抑止部
１２０    ＣＳメモリ
１２１    ＳＤＲＡＭ
１３０    ＦＰＧＡ
１３１    第１算出部
１３２    送信チェックサムレジスタ（第１記憶部）
１３３    第２算出部
１３４    受信チェックサムレジスタ（第２記憶部）
１３５    アドレス変換部
１４０    データバッファ（データ記憶部）
１４１    ＳＤＲＡＭ
１４２    データバッファ仮想アドレス空間
１５０    ＳＷ（ＰＣＩｅ−ＳＷ）
１６０    ＩＦチップ
１６１    ＦＣコントローラ
１６２    ＳＦＰモジュール
２        記憶装置
３        ホスト装置（上位装置）
４        ＣＭ
１００ａ  ストレージシステム
１ａ      ＣＡ
１１０ａ  ＭＰＵ
１２０ａ  ＣＳメモリ
１３０ａ  ＦＰＧＡ
１４０ａ  データバッファ
１５０ａ  ＳＷ
１６０ａ  ＩＦチップ
２ａ      記憶装置
３ａ      ホスト装置
【図１】
2016014972.tif 000003
【図２】
2016014972.tif 000004
【図３】
2016014972.tif 000005
【図４】
2016014972.tif 000006
【図５】
2016014972.tif 000007
【図６】
2016014972.tif 000008
【図７】
2016014972.tif 000009
【図８】
2016014972.tif 000010
【図９】
2016014972.tif 000011
【図１０】
2016014972.tif 000012