(57)【要約】【課題】本発明のデータ転送制御装置は、キャッシュメモリへのデータ転送順序が乱れる場合でも、データがキャッシュメモリに正しく記憶されたか否かを判定できる。【解決手段】ホスト３から入力されたデータは、キャッシュメモリ２の所定領域３Ａに転送されて記憶される。各ブロック毎に第１検査用データが生成され、記憶される。データ整合性判定部６は、データの書込み終了後にキャッシュメモリ２からデータを読み出し、第２検査用コードを改めて生成する。第２検査用コードと第１検査用コードとを比較することにより、データがキャッシュメモリ２に正常に記憶されたか否かを判定することができる。データ整合性判定部６は、キャッシュメモリに書き込まれたデータのアドレスに基づいて、データの整合性を判定することもできる。【選択図】図１
2009199266.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュメモリへのデータ転送を制御するためのデータ転送制御装置であって、
前記キャッシュメモリへのデータ転送が不連続に実行され得る場合において、
受信したデータについて、前記データのエラーを検出するための検査用データを生成する検査用データ生成部と、
生成された前記検査用データを一時的に記憶するための検査用データ記憶部と、
前記キャッシュメモリに記憶されるデータについて整合性を判定するデータ整合性判定部であって、前記キャッシュメモリに記憶されるデータが予め指定される指定サイズに一致し、かつ、前記データの連続性が維持されているか否かを判定するためのデータ整合性判定部と、
を備えるデータ転送制御装置。
【請求項２】
前記データ整合性判定部は、前記キャッシュメモリに前記指定サイズのデータを記憶させる場合に生成される第１検査用データと、前記キャッシュメモリから前記指定サイズの前記データを読み出す場合に生成される第２検査用データとを比較し、前記第１検査用データと前記第２検査用データとが一致する場合に、前記キャッシュメモリに記憶されたデータに整合性があると判定する、請求項１に記載のデータ転送制御装置。
【請求項３】
前記第１検査用データは前記検査用データ生成部により生成されて、前記検査用データ記憶部に記憶されており、
前記第２検査用データはデータ検査回路により生成されるようになっており、
前記データ検査回路は、前記検査用データ記憶部に記憶される前記第１検査用データと前記第２検査用データとを比較し、第１検査用データと前記第２検査用データとが一致する場合に、前記キャッシュメモリに記憶されたデータに整合性があると判定する、請求項２に記載のデータ転送制御装置。
【請求項４】
前記データ整合性判定部は、前記キャッシュメモリに記憶されるデータを所定サイズ単位で管理するためのビットマップを生成するビットマップ生成部と、前記ビットマップに基づいて前記キャッシュメモリに記憶されたデータの整合性を判定するためのビットマップ検査部とを備えている、請求項１に記載のデータ転送制御装置。
【請求項５】
前記データ整合性判定部は、前記キャッシュメモリに記憶されるデータのアドレスを示すログを管理するためのログ管理部と、前記ログに基づいて前記キャッシュメモリに記憶されたデータの整合性を判定するためのログ検査部とを備えている、請求項１に記載のデータ転送制御装置。
【請求項６】
前記ログ管理部は、これから前記キャッシュメモリに転送するデータのアドレスと前記キャッシュメモリに記憶済のデータのアドレスとを比較することにより、前記ログ内のアドレスを更新させるようになっており、
前記ログ検査部は、前記ログに含まれるエントリが１つになった場合に、前記キャッシュメモリに記憶されたデータに整合性があると判定する請求項５に記載のデータ転送制御装置。
【請求項７】
前記データ整合性判定部により使用される作業領域が、前記キャッシュメモリに設けられている、請求項１に記載のデータ転送制御装置。
【請求項８】
前記データ整合性判定部は、さらに、前記キャッシュメモリから読み出されるデータが予め指定される別の指定サイズに一致し、かつ、前記読み出されたデータの連続性が維持されているか否かを判定することができる、請求項１に記載のデータ転送制御装置。
【請求項９】
前記データ整合性判定部は、前記キャッシュメモリから前記別の指定サイズのデータを読み出す場合に生成される第３検査用データと、前記別の指定サイズのデータを外部に送信する場合に生成される第４検査用データとを比較し、前記第３検査用データと前記第４検査用データとが一致する場合に、前記キャッシュメモリから読み出されて送信されるデータに整合性があると判定する、請求項８に記載のデータ転送制御装置。
【請求項１０】
キャッシュメモリへのデータ転送が不連続に実行され得る場合に、前記キャッシュメモリに転送されるデータの整合性を判定するためのデータ整合性判定方法であって、
受信したデータを前記キャッシュメモリに転送させるステップと、
前記キャッシュメモリに転送される前記データについて、判定用データを生成するステップと、
生成された前記判定用データを記憶するステップと、
予め指定される指定サイズだけ、前記キャッシュメモリに前記データが転送されたか否かを判定するステップと、
前記指定サイズのデータが前記キャッシュメモリに転送されたと判定された場合、記憶されている前記判定用データに基づいて、前記キャッシュメモリに転送されて前記キャッシュメモリに記憶されたデータの整合性を判定するステップと、
を備える、データ整合性判定方法。
【請求項１１】
前記判定用データは、（Ａ）前記キャッシュメモリに記憶される前記データのエラーを検出するための検査用データ、（Ｂ）前記キャッシュメモリに記憶されるデータの有無を所定サイズ単位で管理するためのビットマップ、または、（Ｃ）前記キャッシュメモリに記憶される前記データのアドレスのログのうち、いずれか一つとして構成され、
前記データの整合性を判定するステップは、
（ａ）前記判定用データが前記検査用データとして構成される場合、前記データを前記キャッシュメモリに記憶する場合に生成される第１検査用データと、前記キャッシュメモリから前記データを読み出す場合に生成される第２検査用データとを比較し、前記第１検査用データと前記第２検査用データとが一致する場合に、前記キャッシュメモリに記憶されたデータに整合性があると判定するようになっており、
（ｂ）前記判定用データが前記ビットマップとして構成される場合、前記ビットマップの全部に、記憶済であることを示すビットがそれぞれ設定されている場合に、前記キャッシュメモリに記憶されたデータに整合性があると判定するようになっており、
（ｃ）前記判定用データが前記ログとして構成される場合、前記ログに示される開始アドレス及び終了アドレスが、予め指定される指定サイズに対応する開始アドレス及び終了アドレスに一致する場合に、前記キャッシュメモリに記憶されたデータに整合性があると判定するようになっている、
請求項１０に記載のデータ整合性判定方法。
【請求項１２】
ホストコンピュータと記憶装置との間のデータ送受信を制御するための記憶制御装置であって、
前記ホストコンピュータとの間の通信を実行する第１通信制御部と、
前記記憶装置との間の通信を実行する第２通信制御部と、
前記第１通信制御部及び前記第２通信制御部との間に設けられ、前記第１通信制御部及び前記第２通信制御部とキャッシュメモリとの間のデータ転送をそれぞれ制御するデータ転送制御装置であって、前記第１通信制御部から前記キャッシュメモリへのデータ転送が不連続に実行され得るデータ転送制御装置と、
を備え、さらに、
前記データ転送制御装置は、
受信したデータについて、前記データのエラーを検出するための検査用データを生成する検査用データ生成部と、
生成された前記検査用データを一時的に記憶するための検査用データ記憶部と、
前記キャッシュメモリに記憶されるデータについて整合性を判定するデータ整合性判定部であって、前記キャッシュメモリに記憶されるデータが予め指定される指定サイズに一致し、かつ、前記データの連続性が維持されているか否かを判定するためのデータ整合性判定部とを備えている、
記憶制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送制御装置、データ整合性判定方法及び記憶制御装置に関する。
【背景技術】
【０００２】
記憶制御装置は、例えば、サーバやメインフレーム等のホストコンピュータ（以下、「ホスト」）に接続される。記憶制御装置は、ＲＡＩＤ（Redundant Array of Inexpensive Disks）に基づく記憶領域をホストに提供する。
【０００３】
記憶制御装置では、例えば、ＲＡＩＤ１〜ＲＡＩＤ６として知られているように、データに冗長性を付加することもできる。記憶制御装置は、データにパリティデータを付加したり、あるいは、データのコピーを別のディスクドライブにも書き込むことにより、ディスクドライブの障害発生時に備えている。
【０００４】
さらに、保証コードを使用する記憶制御装置も知られている（特許文献１）。一つの従来技術では、保証コードとして、ホストコンピュータがアクセス先として指定する論理ブロックの論理アドレス（以下、「ＬＡ（Logical Address）」）、及び、論理ブロックのデータについて排他的論理和演算を実施して求められるＬＲＣ（Longitudinal Redundancy Check）を、論理ブロックにそれぞれ付加し、この保証コードと論理ブロックとをディスクドライブに保存させる。ＬＡは、論理ブロックのデータが書き込まれる記憶領域のアドレスの誤りを検出するために用いられる。ＬＲＣは、論理ブロックのデータの誤りを検出するための誤り検出符号として用いられる。
【０００５】
ところで、キャッシュメモリにデータが順番通りに転送されない場合も考えられる。このような順番通りではない転送状態を、アウトオブオーダと呼ぶことにする。アウトオブオーダが発生した場合でも、各論理ブロックに保証コードを正しく設定する方法が提案されている（特許文献２）。なお、メモリの誤り訂正符号に関する技術も知られている（特許文献３）。
【特許文献１】特開２０００−３４７８１５号公報
【特許文献２】特開２００６−４００１１号公報
【特許文献３】特開２００７−１１５３９０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従来技術では、アウトオブオーダが発生した場合でも論理ブロックに保証コードを設定可能である。しかし、この従来技術は、保証コードの設定方法のみを開示しており、全てのデータがキャッシュメモリに正常に転送されたか否かを判定する方法は、全く記載されていない。従って、従来技術では、キャッシュメモリに転送して記憶させるべきデータを全て受信したか否かを正確に判別することができず、使い勝手が低い。
【０００７】
本発明は、上記の問題点に鑑みてなされたもので、その目的は、キャッシュメモリに記憶させるデータの整合性を検出することのできるデータ転送制御装置、データ整合性判定方法及び記憶制御装置を提供することにある。本発明の更なる目的は、後述する実施形態の記載から明らかになるであろう。
【課題を解決するための手段】
【０００８】
上記課題を解決すべく、本発明の第１観点に従うデータ転送制御装置は、キャッシュメモリへのデータ転送を制御するためのデータ転送制御装置であって、キャッシュメモリへのデータ転送が不連続に実行され得る場合において、受信したデータについて、データのエラーを検出するための検査用データを生成する検査用データ生成部と、生成された検査用データを一時的に記憶するための検査用データ記憶部と、キャッシュメモリに記憶されるデータについて整合性を判定するデータ整合性判定部であって、キャッシュメモリに記憶されるデータが予め指定される指定サイズに一致し、かつ、データの連続性が維持されているか否かを判定するためのデータ整合性判定部と、を備える。
【０００９】
第２観点では、第１観点において、データ整合性判定部は、キャッシュメモリに指定サイズのデータを記憶させる場合に生成される第１検査用データと、キャッシュメモリから指定サイズのデータを読み出す場合に生成される第２検査用データとを比較し、第１検査用データと第２検査用データとが一致する場合に、キャッシュメモリに記憶されたデータに整合性があると判定する。
【００１０】
第３観点では、第２観点において、第１検査用データは検査用データ生成部により生成されて、検査用データ記憶部に記憶されており、第２検査用データはデータ検査回路により生成されるようになっており、データ検査回路は、検査用データ記憶部に記憶される第１検査用データと第２検査用データとを比較し、第１検査用データと第２検査用データとが一致する場合に、キャッシュメモリに記憶されたデータに整合性があると判定するようになっている。
【００１１】
第４観点では、第１観点において、データ整合性判定部は、キャッシュメモリに記憶されるデータを所定サイズ単位で管理するためのビットマップを生成するビットマップ生成部と、ビットマップに基づいてキャッシュメモリに記憶されたデータの整合性を判定するためのビットマップ検査部とを備えている。
【００１２】
第５観点では、第１観点において、データ整合性判定部は、キャッシュメモリに記憶されるデータのアドレスを示すログを管理するためのログ管理部と、ログに基づいてキャッシュメモリに記憶されたデータの整合性を判定するためのログ検査部とを備える。
【００１３】
第６観点では、第５観点において、ログ管理部は、これからキャッシュメモリに転送するデータのアドレスとキャッシュメモリに記憶済のデータのアドレスとを比較することにより、ログ内のアドレスを更新させるようになっており、ログ検査部は、ログに含まれるエントリが１つになった場合に、キャッシュメモリに記憶されたデータに整合性があると判定する。
【００１４】
第７観点では、第１観点において、データ整合性判定部により使用される作業領域が、キャッシュメモリに設けられている。
【００１５】
第８観点では、第１観点において、データ整合性判定部は、さらに、キャッシュメモリから読み出されるデータが予め指定される別の指定サイズに一致し、かつ、読み出されたデータの連続性が維持されているか否かを判定することができる。
【００１６】
第９観点では、第８観点において、データ整合性判定部は、キャッシュメモリから別の指定サイズのデータを読み出す場合に生成される第３検査用データと、別の指定サイズのデータを外部に送信する場合に生成される第４検査用データとを比較し、第３検査用データと第４検査用データとが一致する場合に、キャッシュメモリから読み出されて送信されるデータに整合性があると判定する。
【００１７】
第１０観点に従うデータ整合性判定方法は、キャッシュメモリへのデータ転送が不連続に実行され得る場合に、キャッシュメモリに転送されるデータの整合性を判定するためのデータ整合性判定方法であって、受信したデータをキャッシュメモリに転送させるステップと、キャッシュメモリに転送されるデータについて、判定用データを生成するステップと、生成された判定用データを記憶するステップと、予め指定される指定サイズだけ、キャッシュメモリにデータが転送されたか否かを判定するステップと、指定サイズのデータがキャッシュメモリに転送されたと判定された場合、記憶されている判定用データに基づいて、キャッシュメモリに転送されてキャッシュメモリに記憶されたデータの整合性を判定するステップと、を備える。
【００１８】
第１１観点では、第１０観点において、判定用データは、（Ａ）キャッシュメモリに記憶されるデータのエラーを検出するための検査用データ、（Ｂ）キャッシュメモリに記憶されるデータの有無を所定サイズ単位で管理するためのビットマップ、または、（Ｃ）キャッシュメモリに記憶されるデータのアドレスのログのうち、いずれか一つとして構成され、データの整合性を判定するステップは、（ａ）判定用データが検査用データとして構成される場合、データをキャッシュメモリに記憶する場合に生成される第１検査用データと、キャッシュメモリからデータを読み出す場合に生成される第２検査用データとを比較し、第１検査用データと第２検査用データとが一致する場合に、キャッシュメモリに記憶されたデータに整合性があると判定するようになっており、（ｂ）判定用データがビットマップとして構成される場合、ビットマップの全部に、記憶済であることを示すビットがそれぞれ設定されている場合に、キャッシュメモリに記憶されたデータに整合性があると判定するようになっており、（ｃ）判定用データがログとして構成される場合、ログに示される開始アドレス及び終了アドレスが、予め指定される指定サイズに対応する開始アドレス及び終了アドレスに一致する場合に、キャッシュメモリに記憶されたデータに整合性があると判定するようになっている。
【００１９】
第１２観点に従う記憶制御装置は、ホストコンピュータと記憶装置との間のデータ送受信を制御するための記憶制御装置であって、ホストコンピュータとの間の通信を実行する第１通信制御部と、記憶装置との間の通信を実行する第２通信制御部と、第１通信制御部及び第２通信制御部との間に設けられ、第１通信制御部及び第２通信制御部とキャッシュメモリとの間のデータ転送をそれぞれ制御するデータ転送制御装置であって、第１通信制御部からキャッシュメモリへのデータ転送が不連続に実行され得るデータ転送制御装置と、を備え、さらに、データ転送制御装置は、受信したデータについて、データのエラーを検出するための検査用データを生成する検査用データ生成部と、生成された検査用データを一時的に記憶するための検査用データ記憶部と、キャッシュメモリに記憶されるデータについて整合性を判定するデータ整合性判定部であって、キャッシュメモリに記憶されるデータが予め指定される指定サイズに一致し、かつ、データの連続性が維持されているか否かを判定するためのデータ整合性判定部とを備えている。
【００２０】
本発明の各部または各ステップの少なくとも一部は、コンピュータプログラムとして構成される場合がある。このコンピュータプログラムは、記録媒体に固定して配布したり、ネットワークを介して配信することができる。
【発明を実施するための最良の形態】
【００２１】
以下、図面に基づいて、本発明の実施の形態を説明する。まず最初に、本発明の概念を説明し、その次に、具体的な実施例について説明する。図１は、本発明の概念を模式的に示す説明図である。図１及び図１に関する以下の記載は、本発明の理解及び実施に必要な程度で、本発明の概要を示しており、本発明の範囲を図１に記載された範囲に限定するものではない。
【００２２】
図１は、本発明に従うデータ転送制御装置を含む情報処理システムの概要を示す説明図である。この情報処理システムは、例えば、データ転送制御装置１（以下、制御装置１とも呼ぶ）と、キャッシュメモリ２と、ホスト３とを備える。
【００２３】
サーバやメインフレーム等として構成されるホスト３は、キャッシュメモリ２に記憶させるべきデータ（ライトデータ）を発行する。制御装置１は、ホスト３から受信したライトデータをキャッシュメモリ２に転送して、キャッシュメモリ２に記憶させる。
【００２４】
キャッシュメモリ２は、ホスト３から受信したライトデータを一時的に記憶するメモリ装置である。なお、後述の実施例から明らかとなるように、論理ボリュームから読み出されたデータも、キャッシュメモリ２に一時的に記憶させることができる。
【００２５】
キャッシュメモリ２は、例えば、受信データ記憶領域２Ａと、検査用データ記憶領域２Ｂと、判定用データ記憶領域２Ｃとを備えることができる。受信データ記憶領域２Ａは、ホスト３から受信したデータまたは論理ボリュームから読み出されたデータを記憶するための領域である。検査用データ記憶領域２Ｂは、各論理ブロック毎の検査用データを記憶するための領域である。判定用データ記憶領域２Ｃは、キャッシュメモリ２に記憶されたデータの整合性を判定するためのデータを記憶する領域である。
【００２６】
制御装置１は、ホスト３とキャッシュメモリ２との間のデータ転送を制御する。制御装置１は、ホスト３から受信したデータをキャッシュメモリ２に転送して記憶させる機能のほかに、検査用データ生成部４と、検査用データ記憶部５と、整合性判定部６とを備えている。
【００２７】
検査用データとは、論理アドレス（ＬＡ）やＬＲＣから構成される、データの正しさを保証するためのコードである。検査用データ生成部４は、各論理ブロック毎にそれぞれ検査用データを生成するための機能である。検査用データ記憶部５は、生成された検査用データを一時的に記憶するための機能である。
【００２８】
整合性判定部６は、キャッシュメモリ２に記憶されるデータの整合性を判定するための機能である。整合性とは、例えば、キャッシュメモリ２に記憶させるべき全データがキャッシュメモリ２に正しく記憶されていることを意味する。
【００２９】
整合性判定部６は、以下に述べるように、複数種類の方法７〜９のいずれか一つによって、データの整合性を判定可能である。第１の判定方法７は、整合性を判定するための判定用データとして、検査用データ（保証コード）を用いる方法である。第２の判定方法８は、判定用データとして、ビットマップを用いる方法である。第３の判定方法９は、判定用データとして、キャッシュメモリ２に記憶されるデータのアドレスのログを用いる方法である。
【００３０】
第１の判定方法７では、ホスト３から受信したデータをキャッシュメモリ２に記憶させる場合に生成される検査用データと、キャッシュメモリ２からデータを読み出した場合に生成される検査用データとを比較する。
【００３１】
ホスト３からデータを受信すると、検査用データ生成部４は、受信データの各論理ブロック毎にそれぞれ検査用データを生成し、これら生成された各検査用データは、検査用データ記憶部５に記憶される。
【００３２】
ライトコマンドによって指定されたサイズだけライトデータを受信した場合、別の検査用データ生成部７Ａは、キャッシュメモリ２からデータを読み出して、検査用データを改めて生成する。検査用データ比較部７Ｂは、ライトデータの受信時に生成された検査用データ（第１検査用データ）と、キャッシュメモリ２からのライトデータ読み出し時に生成される検査用データ（第２検査用データ）とを比較し、一致するか否かを判定する。
【００３３】
受信時の検査用データと読み出し時の検査用データとが一致する場合、ホスト３から受信した全データを正しくキャッシュメモリ２に記憶させることができた場合である。つまり、正常に転送が完了した場合である。これに対し、受信時の検査用データと読み出し時の検査用データとが不一致の場合、記憶されるべきデータがキャッシュメモリ２に正しく記憶されていない場合である。つまり、転送が異常終了した場合である。整合性判定部６は、正常終了または異常終了のいずれかの判定結果６Ａを出力する。異常終了が出力される場合、ホスト３は、ライトデータを再び送信する。
【００３４】
第２の判定方法８では、所定サイズ単位で、ホスト３から受信したデータを管理するためのビットマップを用い、ビットマップの全ビットが設定された場合に、キャッシュメモリ２にデータが正しく記憶されたと判定する。
【００３５】
ビットマップ生成部８Ａは、ホスト３から指定されたサイズに対応するビットマップを生成する。ホスト３は、ライトコマンドによって、ライトデータのサイズを事前に通知することができる。ビットマップ生成部８Ａは、ホスト３から所定サイズのデータを受信する度に、ビットマップを更新する。受信された部分に対応するビットには、例えば、「１」が設定される。ビットマップは、ビットマップ記憶部８Ｂに記憶される。
【００３６】
ビットマップ検査部８Ｃは、ビットマップ記憶部８Ｂに記憶されたビットマップを読み出し、全てのビットに受信済であることを示す値（例えば「１」）が設定されているか否かを検査する。ビットマップの全ビットが受信済に設定されている場合、キャッシュメモリ２にデータが正しく記憶されていることを意味する。
【００３７】
第３の判定方法９では、ログアドレスに基づいて、キャッシュメモリ２にデータが正しく記憶されているか否かを判定する。ログアドレス管理部９Ａは、キャッシュメモリ２に記憶されたデータのアドレスを示すログアドレスを管理する。ログアドレスには、開始アドレスと終了アドレスとが記録される。ログアドレス検査部９Ｃは、ログアドレス記憶部９Ｂからログアドレスを読み出し、ログアドレスに基づいて、キャッシュメモリ２に記憶されたデータの整合性を判定する。
【００３８】
簡単な例で説明すると、ホスト３は、開始アドレス及びデータサイズを指定して、ライトコマンドを発行する。従って、開始アドレスにデータサイズを加えた値が終了アドレスとなる。ライトデータが断片的に不連続に送信された場合、各断片データの開始アドレス及び終了アドレスが、ログアドレスとして記憶される。
【００３９】
例えば、第１の断片データの終了アドレスと第２の断片データの開始アドレスとが一致する場合、第１の断片データの終了アドレスは、第２の断片データの終了アドレスに更新される。第１の断片データと第２の断片データとは連続するデータであると判定されるためである。このように、受信される各データのアドレスをそれぞれ検査することにより、ログアドレスには、開始アドレス及び終了アドレスがそれぞれ一つずつ残る。この場合、キャッシュメモリ２にデータが正しく記憶されたと判定することができる。これに対し、もしも、データの一部が脱落した場合は、開始アドレスと終了アドレスとのペアが複数存在することになる。
【００４０】
このように構成される本実施形態によれば、データがキャッシュメモリ２に不連続に転送される場合であっても、キャッシュメモリ２に記憶されるデータの整合性を判定することができ、使い勝手が向上する。
【００４１】
本実施形態では、第１の判定方法７〜第３の判定方法９のいずれか一つを用いることにより、データがキャッシュメモリ２に正しく記憶されたか否かを判定できる。従って、例えば、必要とする判定精度、使用可能なメモリサイズや判定所要時間等に応じて、いずれかの判定方法を採用すればよい。
【００４２】
例えば、第１の判定方法の場合、キャッシュメモリ２に誤ったデータが記憶されている場合でも、第１検査用データと第２検査用データとが偶然一致する可能性がある。つまり、ＬＲＣによるエラー検出には限界がある。
【００４３】
第２の判定方法の場合、キャッシュメモリ２に転送されたか否かをビットマップを用いて管理するため、第１の判定方法よりも確実に整合性を判定することができる。しかし、ビットマップを保存するためのバッファのサイズが大きくなる。複数のライトコマンドを同時に処理可能な仕様にする場合、各ライトコマンド毎にそれぞれビットマップを用意し、保存しなければならない。
【００４４】
第３の判定方法の場合、キャッシュメモリ２に記憶されたデータのアドレスを管理するため、第１の判定方法よりも確実にデータの整合性を判定できる。また、ビットマップを用いないため、判定に必要なバッファのサイズは、第２の判定方法よりも少ない。しかし、受信データの断片化の度合に応じて（データの不連続の状況に応じて）、ログアドレスのエントリ数を設定する必要がある。エントリ数を大きく設定すると、バッファを無駄に使用する可能性がある。以下、本実施形態を詳細に説明する。
【実施例１】
【００４５】
図２は、本実施例に係る記憶制御装置１０を含む情報処理システムの全体構成を示す説明図である。この情報処理システムは、例えば、少なくとも一つの記憶制御装置１０と、少なくとも一つの記憶ドライブ搭載部２０と、少なくとも一つのホスト３０とを含んで構成される。記憶制御装置１０内のデータ転送制御回路１５は、図１中のデータ転送制御装置１に対応する。
【００４６】
先に、記憶ドライブ搭載部（以下、ＨＤＵ）２０とホスト３０について説明し、次に、記憶制御装置１０の構成を説明する。記憶ドライブ搭載部２０は、複数の記憶ドライブ２１を備えている。各記憶ドライブ２１は、例えば、ハードディスクデバイスとして構成される。ハードディスクデバイスに限らず、フラッシュメモリデバイス、光磁気記憶デバイス、ホログラフィックメモリデバイス等を用いる構成でもよい。
【００４７】
ＲＡＩＤ構成等によっても相違するが、例えば、２個１組や４個１組等の所定数の記憶ドライブ２１によって、パリティグループが構成される。パリティグループは、パリティグループ内の各記憶ドライブ２１がそれぞれ有する物理的記憶領域を、一つの記憶領域として仮想化したものである。パリティグループの有する物理的記憶領域には、論理デバイスである論理ボリューム２２を一つ以上設けることができる。なお、一つの記憶ドライブ２１の物理的記憶領域に、一つ以上の論理ボリューム２２を設ける構成でもよい。
【００４８】
ホスト３０は、例えば、サーバやメインフレームコンピュータとして構成され、通信ネットワークＣＮ１０，ＣＮ１１を介して、記憶制御装置１０に接続される。一方の通信ネットワークＣＮ１０は、例えば、ＦＣ−ＳＡＮ（Fibre Channel-Storage Area Network）のように構成される。他方の通信ネットワークＣＮ１１は、例えば、ＩＰ−ＳＡＮ（Internet Protocol-Storage Area Network）のように構成される。つまり、記憶制御装置１０は、メインフレーム系ホスト（ホスト１，ホスト２）と、オープン系ホスト（ホスト３，ホスト４）のいずれにも対応可能である。
【００４９】
記憶制御装置１０は、例えば、「第１通信制御部」としてのホスト通信制御部１１と、「第２通信制御部」としてのディスク通信制御部１２と、マイクロプロセッサ制御部１３（図中、ＭＰ制御部１３）と、キャッシュメモリ１４と、データ転送制御回路１５と、データ転送経路１６とを備える。
【００５０】
ホスト通信制御部１１は、ホスト３０との間の通信を制御する回路である。ホスト通信制御部１１の詳細は、図３と共に後述する。ディスク通信制御部１２は、各記憶ドライブ２１との通信を制御する回路である。
【００５１】
マイクロプロセッサ制御部１３は、ホスト３０から受領したコマンドに応じて、ホスト通信制御部１１やディスク通信制御部１２及びデータ転送制御回路１５をそれぞれ制御する回路である。
【００５２】
データ転送制御回路１５は、制御情報（データ入出力要求）やデータの転送を制御する回路である。データ転送制御回路１５は、ホスト通信制御部１１とマイクロプロセッサ制御部１３との間の制御情報の受け渡しや、ディスク通信制御部１２とマイクロプロセッサ制御部１３との間の制御情報の受け渡しを制御する。
【００５３】
さらに、データ転送制御回路１５は、ホスト通信制御部１１とキャッシュメモリ１４との間のデータ送受信と、ディスク通信制御部１２とキャッシュメモリ１４との間のデータ送受信とを制御する。なお、データ通信経路１６は、例えば、PCI Expressのようなシリアル転送インターフェースとして構成される。
【００５４】
データ転送制御回路１５は、例えば、第１データ転送回路１１０と、第２データ転送回路１７０と、キャッシュコントローラ１８０とを備える。第１データ転送回路１１０は、ホスト通信制御部１１とキャッシュメモリ１４との間のデータ転送を実行する。第２データ転送回路１７０は、ディスク通信制御部１２とキャッシュメモリ１４との間のデータ転送を実行する。キャッシュコントローラ１８０は、キャッシュメモリ１４へのデータ入出力を制御する。
【００５５】
第１データ転送回路１１０及び第２データ転送回路１７０には、後述のように、検査用データとしてのブロック保証コード（ＢＣＣと略記）の生成及びチェックを行う機能を設けることができる。
【００５６】
例えば、ホスト通信制御部１１がホスト３０からライトコマンドを受信した場合、ホスト通信制御部１１は、データ転送制御回路１５を介して、マイクロプロセッサ制御部１３にライトコマンドを転送する。
【００５７】
マイクロプロセッサ制御部１３は、受領したライトコマンドに従って第１データ転送回路１１０に転送用パラメータを設定し、ホスト通信制御部１１にデータ転送の開始を指示する。これにより、データは、ホスト通信制御部１１からデータ転送制御回路１５を介してキャッシュメモリ１４に転送され、キャッシュメモリ１４に格納される。ホスト通信制御部１１は、データをキャッシュメモリ１４に格納した旨をマイクロプロセッサ制御部１３に通知する。
【００５８】
マイクロプロセッサ制御部１３は、第２データ転送回路１７０に転送用パラメータを設定し、ディスク通信制御部１２に論理ボリューム２２へのデータ転送を指示する。これにより、キャッシュメモリ１４から読み出されたデータは、ディスク通信制御部１２を介して、論理ボリューム２２を構成する記憶ドライブ２１に書き込まれる。
【００５９】
ホスト通信制御部１１がホスト３０からリードコマンドを受信した場合、読み出し対象のデータが、キャッシュメモリ１４に存在するか否かを調べる。キャッシュメモリ１４に読み出しデータが存在しない場合、マイクロプロセッサ制御部１３は、第２データ転送回路１７０に転送用パラメータを設定し、ディスク通信制御部１２にデータ転送の開始を指示する。ディスク通信制御部１２は、読み出し対象のデータを論理ボリューム２２から読み出して、キャッシュメモリ１４に格納する。
【００６０】
マイクロプロセッサ制御部１３は、第１データ転送回路１１０に転送用パラメータを設定し、ホスト通信制御部１１にデータ転送の開始を指示する。ホスト通信制御部１１は、キャッシュメモリ１４に格納されたデータを読み出して、ホスト３０に送信する。
【００６１】
図３は、ホスト通信制御部１１の構成を模式的に示すブロック図である。ホスト通信制御部１１は、例えば、通信プロトコル回路１１Ａと、受信バッファ１１Ｂと、複数のＤＭＡ（Direct Memory Access）回路１１Ｃと、送信バッファ１１Ｄと、PCI Express用の通信インターフェース回路１１Ｅとを備える。
【００６２】
つまり、ホスト通信制御部１１は、ホスト３０から受信したライトデータを、複数のＤＭＡ回路１１Ｃを用いて、データ転送制御回路１５に送信する。各ＤＭＡ回路１１Ｃは、それぞれ並列に動作する。
【００６３】
従って、ホスト通信制御部１１がホスト３０から連続したライトデータを受信しても、ホスト通信制御部１１から第１データ転送回路１１０には、不連続なデータが送信される可能性がある。即ち、ホスト通信制御部１１から第１データ転送回路１１０には、順番が入れ替わってデータが転送される場合がある。データの順番が連続ではなく、不連続になることを、アウトオブオーダの発生と呼ぶ。
【００６４】
図４は、第１データ転送回路１１０の構成を模式的に示すブロック図である。第１データ転送回路１１０は、例えば、ＢＣＣ（Block Check Code）を生成するためのＢＣＣ生成回路１１１と、ＢＣＣを記憶するためのＢＣＣバッファ１１２と、データチェック回路１１３と、転送長カウンタ１１４とを備える。
【００６５】
データチェック回路１１３は、キャッシュメモリ１４から読み込んだ各論理ブロックのデータに基づいてＢＣＣを生成する機能と、この生成されたＢＣＣとＢＣＣバッファ１１２から読み出したＢＣＣとを比較する機能とを備える。
【００６６】
転送長カウンタ１１４は、第１データ転送回路１１０を介して転送されるデータのサイズを検出する回路である。転送長カウンタ１１４によって、第１データ転送回路１１０を介して転送されるデータのサイズが、ホスト３０から指定されたサイズ（転送長）に達したか否かを判定することができる。
【００６７】
図４中の左側には、ホスト３０から受信されたライトデータが示されている。このライトデータは、複数の論理ブロックから構成される。各論理ブロックのサイズは、例えば、５１２バイトである。
【００６８】
ライトデータは、ホスト通信制御部１１からデータ通信経路１６を介して第１データ転送回路１１０に入力される。ライトデータは、経路Ｐ１０を介して、キャッシュメモリ１４に転送され、キャッシュメモリ１４に記憶される。
【００６９】
第１データ転送回路１１０に入力されたライトデータは、経路Ｐ１１を介して、ＢＣＣ生成回路１１１にも入力される。ＢＣＣ生成回路１１１は、入力されたライトデータについて、各論理ブロック毎にＢＣＣを生成する。生成されたＢＣＣは、ＢＣＣバッファ１１２に記憶される。
【００７０】
ＢＣＣバッファ１１２は、一回のライトコマンドで転送可能な最大ブロック数に対応可能なサイズを有する。ＢＣＣは、上述の通りＬＲＣ（水平パリティ部）を備える。従って、一つの論理ブロックに関する完全なＢＣＣを生成するためには、その論理ブロックの全体がＢＣＣ生成回路１１１に入力される必要がある。ＢＣＣバッファ１１２には、ＢＣＣを算出するための途中結果を、各論理ブロック毎にそれぞれ記憶可能である。
【００７１】
ある論理ブロックの半分だけがＢＣＣ生成回路１１１に入力された場合、ＢＣＣ生成回路１１１は、その半分の論理ブロックに基づいてＢＣＣ演算を行う。ＢＣＣ生成回路１１１から出力されるＢＣＣ演算の途中結果は、ＢＣＣバッファ１１２に記憶される。
【００７２】
残りの半分の論理ブロックがＢＣＣ生成回路１１１に入力されると、ＢＣＣ生成回路１１１は、前回算出した途中結果の値をＢＣＣバッファ１１２から経路Ｐ１２を介して取得し、その途中結果の値を利用して完全なＢＣＣを算出する。完全なＢＣＣは、ＢＣＣバッファ１１２に格納されると共に、キャッシュメモリ１４にも記憶される。
【００７３】
このように、ＢＣＣバッファ１１２は、ＢＣＣを算出するためと、算出されたＢＣＣを記憶するためとに使用される。ＢＣＣバッファ１１２を廃止し、キャッシュメモリ１４内にＢＣＣを一時記憶する作業領域を設けることもできる。
【００７４】
但し、ＢＣＣバッファ１１２に代わる作業領域をキャッシュメモリ１４に設ける場合は、キャッシュメモリ１４へのアクセス頻度が増大し、データ転送性能に悪影響を及ぼす可能性がある。そこで、本実施例では、第１データ転送回路１１０内にＢＣＣバッファ１１２を設ける。これにより、ＢＣＣ演算のためのキャッシュアクセスを無くして、データ転送性能の向上を図ることができる。
【００７５】
ライトコマンドにより指定されたサイズのライトデータを受信した場合、データチェック回路１１３は、キャッシュメモリ１４からライトデータ（ブロック＃０〜＃ｎ）を読み出して、各論理ブロック毎にＢＣＣを算出する。
【００７６】
データチェック回路１１３は、改めて算出されたＢＣＣとＢＣＣバッファ１１２に記憶されているＢＣＣとを比較する。両方のＢＣＣが一致する場合、ホスト３０から入力された全てのデータがキャッシュメモリ１４に書き込まれたと判定することができる。
【００７７】
図５は、データ転送処理の概略を示すフローチャートである。なお、以下に示す各フローチャートは、本発明の理解及び実施に必要な程度で各処理の概要をそれぞれ示しており、実際のコンピュータプログラムとは相違する場合がある。いわゆる当業者であれば、図示されたステップの変更、新規なステップの追加、既存ステップの削除を行うことができるであろう。
【００７８】
第１データ転送回路１１０（以下、転送回路１１０とも呼ぶ）は、転送パラメータをセットし、ＢＣＣバッファ１１２を初期化する（Ｓ１０）。即ち、転送開始時に、転送回路１１０は、ライトコマンドによって指定されるブロック数（ライトデータのサイズ）に応じたＢＣＣバッファエリアを初期化する（Ｓ１０）。
【００７９】
例えば、３個の論理ブロックをキャッシュメモリ１４に転送しようとする場合、転送回路１１０は、３個のＢＣＣを保持するべく、ＢＣＣバッファのエリアを初期化する。各論理ブロックに関するＢＣＣをそれぞれ保持するためである。
【００８０】
そして、転送回路１１０は、ホスト通信制御部１１からデータが入力されるのを待つ（Ｓ１１）。ホスト通信制御部１１からのライトデータが到着すると（S11:YES）、転送回路１１０は、そのライトデータのアドレスに基づいて、対応する論理ブロックの番号を算出する（Ｓ１２）。転送回路１１０は、算出されたブロック番号に対応するＢＣＣをＢＣＣバッファ１１２から読み出す（Ｓ１２）。
【００８１】
転送回路１１０は、Ｓ１１で入力されたデータについてＢＣＣを演算し、その演算結果をＢＣＣバッファ１１２内の所定エリアに書き込む（Ｓ１３）。つまり、ＢＣＣにはＬＲＣが含まれるため、転送回路１１０（より正確には、ＢＣＣ生成回路１１１）は、一つの論理ブロックの全データを受信するまで、完全なＢＣＣを得ることができない。そこで、転送回路１１０は、ＢＣＣバッファ１１２に蓄積された演算途中結果を読み込んで、ＢＣＣを演算する（Ｓ１３）。さらに、転送回路１１０は、Ｓ１１で受信したライトデータをキャッシュメモリ１４に転送して記憶させる（Ｓ１３）。
【００８２】
転送回路１１０は、Ｓ１１で受信したデータのサイズ分だけ転送長カウンタ１１４の値を更新させる（Ｓ１４）。転送回路１１０は、転送長カウンタ１１４の値がライトコマンドで指定された転送長に一致したか否かを判定する（Ｓ１５）。転送回路１１０は、指定されたサイズのデータを受信するまで、Ｓ１１〜Ｓ１４を繰り返す（ｓ１５）。例えば、指定転送長として論理ブロック３個分のサイズが指定された場合、転送回路１１０は、論理ブロック３個分のデータをキャッシュメモリ１４に転送し終えるまで、各論理ブロックのＢＣＣを演算しながら、データをキャッシュメモリ１４に転送する。
【００８３】
指定されたサイズのライトデータをキャッシュメモリ１４に転送した場合（S15:YES）、転送回路１１０は、ＢＣＣバッファ１１２に記憶されているＢＣＣを、ＢＣＣバッファ１１２からキャッシュメモリ１４に転送させて、キャッシュメモリ１４内の所定場所に記憶させる（Ｓ１６）。図４の右側に示すように、キャッシュメモリ１４には、各論理ブロックのデータと、各論理ブロックのデータから算出されるＢＣＣとが、それぞれ記憶されるようになっている。
【００８４】
続いて、転送回路１１０は、データチェック回路１１３を用いて、キャッシュメモリ１４に格納されたデータが整合性を有するか否かを判定する。まず、転送回路１１０は、キャッシュメモリ１４から１つの論理ブロックのデータを読み出し（Ｓ１７）、読み出したデータについてＢＣＣを改めて算出する（Ｓ１８）。
【００８５】
転送回路１１０のデータチェック回路１１３は、Ｓ１８で算出されたＢＣＣと、ＢＣＣバッファ１１２に記憶されているＢＣＣとが一致するか否か判定する（Ｓ１９）。転送回路１１０は、指定されたサイズのデータを読み出すまで（上記の例では、３個の論理ブロックのデータを読み出すまで）、Ｓ１７〜Ｓ１９を繰り返す（Ｓ２０）。
【００８６】
つまり、転送回路１１０は、キャッシュメモリ１４に格納された全てのライトデータについて、各論理ブロック毎に、既に生成されているＢＣＣ（ＢＣＣバッファ１１２に記憶されているＢＣＣ）と改めて算出されるＢＣＣとをそれぞれ比較する。
【００８７】
キャッシュメモリ１４に格納するときに生成されたＢＣＣ（ＢＣＣバッファ１１２に記憶されているＢＣＣ）と、キャッシュメモリ１４から読み出したときに生成されるＢＣＣとが一致する場合（S19:YES）、その論理ブロックのデータは正しくキャッシュメモリ１４に記憶されていると判定できる。
【００８８】
これに対し、ＢＣＣバッファ１１２に記憶されているＢＣＣとキャッシュメモリ１４からデータを読み出す際に算出されるＢＣＣとが不一致の場合（S19:NO）、キャッシュメモリ１４に記憶されたデータに何らかの異常が生じていると判定できる。そこで、この場合（S19:NO）、転送回路１１０は、データ転送処理を異常終了させる。異常終了された旨は、ホスト通信制御部１１を介してホスト３０に通知される。その通知を受領したホスト３０は、再度ライトコマンドを発行し、データの書込みを試みる。
【００８９】
指定されたサイズだけＢＣＣのチェックを行った場合（S20:YES）、転送回路１１０は、回路異常が検出されたか否かを判定する（Ｓ２１）。回路異常が検出されなかった場合（S21:NO）、データ転送処理は正常に終了する。回路異常が検出された場合（S21:YES）、データ転送処理は異常終了する。
【００９０】
回路異常について説明する。本実施例では、データを移動させる度にＢＣＣをチェックすることにより、異常が生じたか否かを監視する。従って、例えば、Ｓ１２やＳ１３等においてデータを移動させる場合、転送回路１１０は、ＢＣＣの値を確認し、異常が生じたか否かを判定する。異常が検出された場合、転送回路１１０は、回路異常の発生を示すフラグをセットする。そして、転送回路１１０は、Ｓ２１において、回路異常の発生を示すフラグがセットされているか否かを確認することにより、回路異常が検出されたか否かを判定する。なお、上述の説明に代えて、データ移動時に回路異常の発生が検出された場合、その時点でデータ転送処理を異常終了させる構成でもよい。
【００９１】
図６〜図９に基づいて、キャッシュメモリ１４へのデータの格納方法と、キャッシュメモリ１４に格納されたデータの整合性をチェックする方法とを説明する。以下の説明では、ブロック番号＃０〜ブロック番号＃２までの合計３個の論理ブロックのデータを、キャッシュメモリ１４に格納させる場合を説明する。従って、ＢＣＣバッファ１１２には、３個のＢＣＣをそれぞれ保持するために、３つのエリアが設けられる。キャッシュメモリ１４には、３個の論理ブロックのデータを格納するための記憶領域が確保される。
【００９２】
なお、説明の便宜上、各論理ブロックは、それぞれ半分ずつの単位で、転送されるものとする。例えば、ブロック番号＃０の論理ブロックは、＃０ａと＃０ｂの２つのデータに分かれて転送される。ブロック番号＃１の論理ブロックは、＃１ａと＃１ｂの２つのデータに分かれて転送される。同様に、ブロック番号＃２の論理ブロックは、＃２ａと＃２ｂの２つのデータに分かれて転送される。
【００９３】
図６（ａ）に示すように、最初のデータ＃０ａが転送回路１１０に入力されると、この最初のデータ＃０ａはキャッシュメモリ１４の所定の場所に格納される。ＢＣＣ生成回路１１１は、データ（＃０ａ）に基づいてＢＣＣ（ＬＲＣ）を算出し、その算出結果（ＢＣＣ＃０ａ）をＢＣＣバッファ１１２の所定エリアに格納する。ＢＣＣバッファ１１２内の他のエリアには、それぞれ初期値が格納されている。ＢＣＣバッファ１１２に格納されたＢＣＣ＃０ａは、データ＃０ａに関するＢＣＣの演算途中結果であり、完全なＢＣＣ値ではない。
【００９４】
図６（ｂ）に示すように、最初の論理ブロック＃０に関する完全なＢＣＣは、前半部分のデータ＃０ａと後半部分のデータ＃０ｂとの両方が入力された場合に生成される。最初の論理ブロック＃０の後半部分のデータ＃０ｂが転送回路１１０に入力されると、ＢＣＣ生成回路１１１は、ＢＣＣバッファ１１２に格納されている途中結果ＢＣＣ＃０ａとデータ＃０ｂとに基づいて、論理ブロック＃０に関するＢＣＣ＃０を生成する。生成されたＢＣＣ＃０は、ＢＣＣバッファ１１２に記憶される。なお、入力されたデータ＃０ｂは、キャッシュメモリ１４に格納される。
【００９５】
図７（ａ）は、次の論理ブロック＃１の前半部分のデータ＃１ａが転送回路１１０に入力された場合を示す。データ＃１ａはキャッシュメモリ１４の所定場所に格納される。ＢＣＣ生成回路１１１は、初期値及びデータ＃１ａに基づいて、ＢＣＣの途中結果ＢＣＣ＃１ａを算出する。この途中結果ＢＣＣ＃１ａは、ＢＣＣバッファ１１２の所定エリアに格納される。
【００９６】
図７（ｂ）は、データの受信に関してアウトオブオーダが発生した様子を示す。論理ブロック＃１の後半部分のデータ＃１ｂを受信するよりも前に、論理ブロック＃２の前半部分のデータ＃２ａを先に受信した場合が示されている。
【００９７】
本来であれば、＃０ａ→＃０ｂ→＃１ａ→＃１ｂ→＃２ａの順番でデータが入力されるべきであるが、＃１ｂと＃２ａとの受信順序が入れ替わってしまい、アウトオブオーダ状態が発生している。
【００９８】
この場合、後半部分のデータ＃１ｂが未着であるから、２番目の論理ブロック＃１に関する完全なＢＣＣを生成することができない。従って、ＢＣＣバッファ１１２には、途中結果ＢＣＣ＃１ａが記憶されている。同様に、３番目の論理ブロック＃２に関する途中結果ＢＣＣ＃２ａもＢＣＣバッファ１１２に記憶される。
【００９９】
図８（ａ）は、論理ブロック＃１の後半部分のデータ＃１ｂを受信した様子を示す。これにより、論理ブロック＃１の全データが揃うため、ＢＣＣ生成回路１１１は、論理ブロック＃１に関する完全なＢＣＣを算出することができる。算出されたＢＣＣ＃１は、ＢＣＣバッファ１１２に記憶される。
【０１００】
図８（ｂ）は、論理ブロック＃２の後半部分のデータ＃２ｂを受信した様子を示す。つまり、転送回路１１０が全てのデータを受信した場合を示す。ＢＣＣ生成回路１１１は、論理ブロック＃２に関する完全なＢＣＣを生成することができる。生成されたＢＣＣ＃２はＢＣＣバッファ１１２に記憶される。
【０１０１】
図９（ａ）は、ＢＣＣバッファ１１２に記憶されている各論理ブロックのＢＣＣ（＃０〜＃２）を、キャッシュメモリ１４に転送して記憶させる様子を示す。
【０１０２】
図９（ｂ）は、データチェック回路１１３によって、キャッシュメモリ１４に記憶されたデータの整合性をチェックする様子を示す。この処理は、図５中のＳ１７〜Ｓ２１に対応する。データチェック回路１１３は、例えば、ＢＣＣ生成回路１１３１と、ＢＣＣ比較回路１１３２とを備える。
【０１０３】
ＢＣＣ生成回路１１３１は、チェック対象の各論理ブロックのデータをキャッシュメモリ１４から読込み、各論理ブロック毎にそれぞれＢＣＣを算出する。ＢＣＣ生成回路１１３１によって改めて算出されるＢＣＣは、「第２検査用データ」に該当する。
【０１０４】
次に、ＢＣＣ比較回路１１３２は、ＢＣＣ生成回路１１３１により生成されるＢＣＣと、ＢＣＣバッファ１１２に保持されているＢＣＣとを比較し、両者が一致するか否かを判定する。指定されたサイズの全論理ブロックについて、記憶時に生成されたＢＣＣと読み出し時に生成されるＢＣＣとがそれぞれ比較される。両方のＢＣＣが一致する場合、他に回路異常が発生していなければ、データ転送は正常に終了したと判定できる。
【０１０５】
このように構成される本実施例によれば、キャッシュメモリ１４へのデータ転送にアウトオブオーダ状況が生じた場合でも、キャッシュメモリ１４に記憶されるデータに整合性があるか否かを判定することができ、使い勝手が向上する。
【実施例２】
【０１０６】
図１０〜図１４に基づいて、本発明の第２実施例を説明する。本実施例を含む以下の各実施例は、第１実施例の変形例に該当する。本実施例では、ライトデータがキャッシュメモリ１４に書き込まれたか否かをビットマップ（図中、ＢＭＰ）で管理する。
【０１０７】
第１データ転送回路１１０Ａは、例えば、ＢＣＣ生成回路１１１と、ＢＣＣバッファ１１２と、転送長カウンタ１１４と、ビットマップ制御回路１２０と、ビットマップバッファ１２１と、ビットマップ監視回路１２２とを備えている。
【０１０８】
ホスト３０からのライトデータは、経路Ｐ１０を介してキャッシュメモリ１４に転送され記憶される。また、ホスト３０からのライトデータは、経路Ｐ１１ａを介して、ＢＣＣ生成回路１１１及びビットマップ制御回路１２０にそれぞれ入力される。ビットマップ制御回路１２０は、経路Ｐ１４を介して、ビットマップバッファ１２１に記憶されているビットマップを読み出すことができる。
【０１０９】
ＢＣＣ生成回路１１１，ＢＣＣバッファ１１２及び転送長カウンタ１１４は、第１実施例と同様の機能を実現する。即ち、ＢＣＣ生成回路１１１は、各論理ブロック毎に、データ検査用のＢＣＣをそれぞれ算出する。算出されたＢＣＣは、ＢＣＣバッファ１１２に記憶される。ライトコマンドにより指定されるサイズのデータを受信すると、ＢＣＣバッファ１１２に記憶された各ＢＣＣは、キャッシュメモリ１４に転送されて記憶される。
【０１１０】
ビットマップ制御回路１２０は、キャッシュメモリ１４に記憶されるライトデータについてビットマップを作成する。ビットマップは、ライトデータが受信されたか否かを所定サイズ単位で管理する。ビットマップは、ライトデータに含まれる各論理ブロック毎にそれぞれ用意される。ビットマップの詳細は、図１１と共に後述する。
【０１１１】
ビットマップバッファ１２１は、ライトデータを構成する各論理ブロックにそれぞれ対応するビットマップを保持する。第１実施例でも同様であるが、転送回路１１０Ａは、複数のライト処理を並列にそれぞれ処理することができる。即ち、転送回路１１０Ａは、複数のライトコマンドをほぼ同時に処理することができる。
【０１１２】
従って、同時に処理可能なライトコマンドの数に応じて、ビットマップを用意する必要がある。例えば、ライトコマンドで指定されるデータサイズを仮に８ブロックとし、同時に処理可能なライトコマンドの数を仮に４とするならば、合計３２（＝４×８）のビットマップが用意される。
【０１１３】
従って、ビットマップバッファ１２１のサイズを、３２個のビットマップをそれぞれ記憶させるための値に設定してもよい。しかし、この場合は、ビットマップバッファ１２１のサイズが大きくなる。
【０１１４】
そこで、本実施例では、ビットマップの格納領域をキャッシュメモリ１４にも用意し、ライトコマンドに応じてキャッシュメモリ１４からビットマップを読み出して、ビットマップバッファ１２１に記憶させる。
【０１１５】
つまり、上記の例で説明すると、４個のライトコマンド毎に、それぞれ８個ずつのビットマップを予め用意する。８個のビットマップを一つのビットマップグループとして考えると、４つのビットマップグループが用意される。これら４つのビットマップグループは、それぞれキャッシュメモリ１４に格納される。
【０１１６】
ビットマップバッファ１２１には、４つのビットマップグループのうち、現在転送処理中のライトデータに対応するビットマップグループのビットマップがセットされる。現在転送処理中のデータに含まれるアドレス情報からブロック番号を算出し、算出されたブロック番号に対応するビットマップグループを特定する。そして、特定されたビットマップグループに属する各ビットマップをキャッシュメモリ１４から読み出して、ビットマップバッファ１２１に記憶させる。
【０１１７】
ビットマップ監視回路１２２は、現在転送処理中のライトデータに対応するビットマップグループを特定し、ビットマップバッファ１２１に記憶されるべきビットマップを切り換えさせる。
【０１１８】
図１１は、ビットマップＴ１０の一例を示す説明図である。本実施例では、ライトデータを構成する各論理ブロック毎にそれぞれビットマップＴ１０が用意される。論理ブロックのサイズは、例えば５１２バイトである。ビットマップＴ１０は、論理ブロックの各バイト毎に、データを受信したか否かを管理する。
【０１１９】
従って、ブロックサイズが５１２バイトの場合、ビットマップＴ１０のサイズは、５１２ビットとなる。ビットマップＴ１０の各ビットのうち、転送回路１１０Ａに入力されたデータに対応するビットには、「１」が設定される。ビットマップＴ１０の全ビットに１が設定された場合、そのビットマップＴ１０によって管理されている論理ブロックの全データが受信されたことを意味する。
【０１２０】
図１２は、ビットマップの切替作業等を模式的に示す説明図である。上述の通り、キャッシュメモリ１４には、各ライトコマンドに対応する各論理ブロック毎のビットマップがそれぞれ記憶されている。図１２では、上述のビットマップグループをマップ番号で区別する。各ライトコマンド毎にマップ番号が対応付けられる。
【０１２１】
ビットマップ監視回路１２２は、転送回路１１０Ａに入力されたライトデータからブロック番号を検出し、検出したブロック番号に対応するマップ番号を特定する。特定されたマップ番号に対応するビットマップがキャッシュメモリ１４から読み出されて、ビットマップバッファ１２１に記憶される。ビットマップバッファ１２１に記憶されていた、前のビットマップは、キャッシュメモリ１４に転送されて記憶される。
【０１２２】
ビットマップ制御回路１２０は、転送回路１１０Ａに入力されたライトデータに基づいて、ビットマップバッファ１２１に記憶されたビットマップを更新する。つまり、ビットマップ制御回路１２０は、受信済のデータに対応するビットに「１」を設定する。
【０１２３】
予め指定されたサイズのデータが転送回路１１０Ａに入力されると、ビットマップ制御回路１２０は、各ビットマップの全ビットにそれぞれ「１」が設定されているか否かを検査する。
【０１２４】
ビットマップ内の全ビットに「１」が設定されている場合、そのビットマップに対応する論理ブロックの全データは、受信されてキャッシュメモリ１４に記憶されている。ビットマップが「０」のビットを有する場合、そのビットに対応するデータは受信されておらず、キャッシュメモリ１４に記憶されていない。
【０１２５】
図１３に基づいて本実施例によるデータ転送処理を説明する。転送回路１１０Ａは、ビットマップバッファ１２１を初期化する（Ｓ３０）。ホスト通信制御部１１からのライトデータが到着すると（S31:YES）、転送回路１１０Ａのビットマップ監視回路１２２は、ライトデータの開始アドレス及び転送サイズに基づいてブロック番号を検出し、その検出されたブロック番号に対応するマップ番号を特定する（Ｓ３２）。
【０１２６】
続いて、ビットマップ監視回路１２２は、Ｓ３１で受信したデータのブロック番号と、ビットマップバッファ１２１に設定されているマップ番号とが対応するか否かを判定する（Ｓ３３）。
【０１２７】
受信したデータのブロック番号とビットマップバッファ１２１に設定されているビットマップのマップ番号とが対応しない場合（S33:NO）、ビットマップ監視回路１２２は、ビットマップバッファ１２１に記憶されている各ビットマップをキャッシュメモリ１４に退避させる（Ｓ３４）。ビットマップ監視回路１２２は、Ｓ３１で受信したデータのブロック番号に対応するマップ番号に基づいて、そのマップ番号に属する各ビットマップをビットマップバッファ１２１に転送し、記憶させる（Ｓ３５）。
【０１２８】
ビットマップ制御回路１２０は、ビットマップバッファ１２１に設定されている各ビットマップのうち、Ｓ３１で受信したデータに対応するビットマップ内の所定ビットを更新させる（Ｓ３６）。所定ビットとは、Ｓ３１で受信したデータに対応する各ビットを意味する。
【０１２９】
なお、受信データのブロック番号とビットマップバッファ１２１に設定されているビットマップのマップ番号とが対応する場合（S33:YES）、Ｓ３４，Ｓ３５はスキップされ、Ｓ３６に移る。
【０１３０】
転送長カウンタ１１４のカウント値がライトコマンドで指定されたサイズと一致するまで、Ｓ３１〜Ｓ３６が繰り返し実行される。指定サイズのデータについてビットマップを更新させた後（S37:YES）、ビットマップ制御回路１２０は、ビットマップバッファ１２１に記憶されている各ビットマップをキャッシュメモリ１４に転送し、キャッシュメモリ１４に記憶させる（Ｓ３８）。そして、ビットマップ制御回路１２０は、ビットマップに基づいてデータの整合性をチェックする（Ｓ３９）。
【０１３１】
図１４は、図１３中にＳ３９で示すデータチェック処理のフローチャートである。ビットマップ制御回路１２０は、Ｓ３１で受信したデータに対応するビットマップをキャッシュメモリ１４から読み出す（Ｓ３９０）。なお、キャッシュメモリ１４から読み出さずに、ビットマップバッファ１２１からビットマップを読み出す構成でもよい。
【０１３２】
ビットマップ制御回路１２０は、読み出したビットマップの全ビットに受信済であることを示す値「１」が設定されているか否かを判定する（Ｓ３９１）。一つでも未更新のビットがある場合（S391:NO）、つまり、一つでも「１」に設定されていないビットが存在する場合（S391:NO）、データ転送処理は異常終了する。
【０１３３】
ビットマップの全ビットが更新されている場合（S391:YES）、つまり、ビットマップの全ビットに「１」が設定されている場合（S391:YES）、転送回路１１０Ａは、回路異常が検出されたか否かを判定する（Ｓ３９２）。第１実施例で述べたように、ＢＣＣの値を監視しながらデータを移動させており、ＢＣＣの変化によって回路異常が検出された場合は、回路異常の検出を示すフラグをセットするようになっている。
【０１３４】
回路異常が検出されなかった場合（S392:NO）、データ転送処理は正常終了する。回路異常が検出された場合（S392:YES）、データ転送処理は異常終了する。
【０１３５】
このように構成される本実施例も第１実施例と同様の効果を奏する。本実施例では、ライトデータがキャッシュメモリ１４に記憶されたか否かを、ビットマップによって管理するため、第１実施例よりも正確にデータの整合性を判定できる。
【０１３６】
第１実施例の場合は、例えば、複数回データが書き込まれた場所のＢＣＣや、一回もデータが書き込まれなかった場所のＢＣＣが、偶然正しいデータのＢＣＣと一致してしまう可能性が残る。この場合、第１実施例では、データ転送のエラーを検出できない。これに対し、本実施例では、ライトデータがキャッシュメモリ１４に書き込まれたか否かを、所定サイズ（１バイト単位）で管理するため、データ転送が正常に行われたか否かを正確に判定することができる。
【実施例３】
【０１３７】
図１５〜図２０に基づいて第３実施例を説明する。本実施例では、キャッシュメモリ１４に転送されたデータのアドレスをログアドレスとして管理し、ログアドレスに基づいてデータが正常にキャッシュメモリ１４に記憶されたか否かを判定する。
【０１３８】
図１５は、本実施例による転送回路１１０Ｂを示す。この転送回路１１０Ｂは、例えば、ＢＣＣ生成回路１１１と、ＢＣＣバッファ１１２と、転送長カウンタ１１４と、ログアドレス更新回路１３０と、ログバッファ１３１と、ログ監視回路１３２とを備える。
【０１３９】
ホスト３０からのライトデータは、経路Ｐ１０を介してキャッシュメモリ１４に転送され、記憶される。また、ホスト３０からのライトデータは、経路Ｐ１１Ｂを介して、ＢＣＣ生成回路１１１及びログアドレス更新回路１３０にそれぞれ入力される。ログアドレス更新回路１３０は、経路Ｐ１５を介して、ログバッファ１３１に記憶されているログドレスを読み出すことができる。
【０１４０】
キャッシュメモリ１４には、複数のライトコマンドのそれぞれに対応するログが記憶されている。例えば、ログ＃０はライトコマンド＃０に、ログ＃１はライトコマンド＃１に、ログ＃２はライトコマンド＃２にそれぞれ対応する。つまり、各ライトコマンド毎に、それぞれどこからどこまでの範囲でライトデータがキャッシュメモリ１４に書き込まれたかを、ログアドレスによって管理する。ログ監視回路１３２は、後述のように、ライトコマンドの番号に応じたログ（ログアドレス）を、ログバッファ１３１に設定させる。
【０１４１】
図１６は、ログアドレスに基づいてデータの整合性を判定する様子等を示す。ログバッファ１３１には、各ライトコマンドに対応するログアドレスが設定される。
【０１４２】
ログバッファ１３１は、例えば１６個のエントリを有する。各エントリは、開始アドレス（ＳＡＤＲ）及び終了アドレス（ＥＡＤＲ）を備える。つまり、ログバッファ１３１は、開始アドレスと終了アドレスからなる１６個のペアを管理可能である。
【０１４３】
開始アドレスのサイズ及び終了アドレスのサイズは、それぞれ２バイトである。各開始アドレス及び終了アドレスは、例えば、有効であるか否かを示す有効ビットＤ１０（１ビット）と、未使用の予約ビットＤ１１（１ビット）と、アドレスを記憶するビットＤ１２（１４ビット）との合計１６ビット（２バイト）を備える。
【０１４４】
図１７，図１８で述べるように、転送回路１１０Ｂに１番目のデータが入力されると、その一番目のデータの開始アドレスと終了アドレスとがそれぞれ検出され、ログバッファ１３１の空いているエントリ（例えば、＃０のエントリ）に登録される。
【０１４５】
２番目のデータが転送回路１１０Ｂに入力されると、２番目のデータの開始アドレスと終了アドレスとがそれぞれ検出される。そして、２番目のデータの開始アドレス及び終了アドレスと、１番目のデータの開始アドレス及び終了アドレスとが比較される。
【０１４６】
順番通りにデータが転送回路１１０Ｂに入力されている場合は、１番目のデータの終了アドレスと２番目のデータの開始アドレスとは一致する。キャッシュメモリ１４には、１番目のデータの開始アドレスから２番目のデータの終了アドレスまでの範囲のデータが、記憶されている。そこで、ログアドレス更新回路１３０は、１番目のデータの終了アドレスを２番目のデータの終了アドレスに更新させる。
【０１４７】
もしも、１番目のデータの開始アドレス及び終了アドレスと２番目のデータの開始アドレス及び終了アドレスとがいずれも不一致の場合、ログバッファ１３１内の空いているエントリ（例えば、＃１のエントリ）に、２番目のデータの開始アドレス及び終了アドレスが登録される。
【０１４８】
３番目のデータが転送回路１１０Ｂに入力された場合、３番目のデータの開始アドレス及び終了アドレスがそれぞれ検出される。３番目の開始アドレス及び終了アドレスは、ログバッファ１３１の各エントリに登録されている各アドレスと比較される。３番目のデータが、既にキャッシュメモリ１４に記憶されているデータに続くデータであると判定された場合、ログバッファ１３１に登録されている開始アドレスまたは終了アドレスが更新される。
【０１４９】
ライトコマンドで指定されたサイズの全データを転送回路１１０Ｂが正しく受信した場合、つまり、その転送の順番はともかく、予定されたデータを全てキャッシュメモリ１４に記憶させることができた場合は、キャッシュメモリ１４には、開始アドレスから指定サイズ分のライトデータが記憶される。従って、ログバッファ１３１には、一つの開始アドレスと一つの終了アドレスのみが記録される。
【０１５０】
ログバッファ１３１内に、有効なエントリが複数存在する場合は、例えば、データの一部が消失した場合や、同一データが重複して書き込まれたような場合である。従って、複数の有効なエントリがログバッファ１３１に残っている場合、キャッシュメモリ１４へのデータ転送に異常が生じたと判定することができる。
【０１５１】
図１７，図１８を参照して、ログバッファ１３１で管理されるアドレスが変化する様子を説明する。図１７（ａ）は、説明の前提となるライトデータの構造を示す。説明のために使用されるライトデータは、＃１〜＃４までの合計４個の論理ブロックを有する。
【０１５２】
１番目の論理ブロックの開始アドレスは「０」、終了アドレスは「０Ａ」である。２番目の論理ブロックの開始アドレスは「０Ａ」、終了アドレスは「０Ｂ」である。３番目の論理ブロックの開始アドレスは「０Ｂ」、終了アドレスは「０Ｃ」である。４番目の論理ブロックの開始アドレスは「０Ｃ」、終了アドレスは「０Ｄ」である。
【０１５３】
図１７（ｂ）には、４個の論理ブロックが順番通りにキャッシュメモリ１４に転送される場合を示す。図１７（ｂ）の（１）に示すように、最初の論理ブロック（０−０Ａ）が転送回路１１０Ｂに入力されると、ログバッファ１３１（１）のエントリ＃０に、その論理ブロックの開始アドレス（０）と終了アドレス（０Ａ）とが記録される。
【０１５４】
図１７（ｂ）の（２）は、２番目の論理ブロック（０Ａ−０Ｂ）が転送回路１１０Ｂに入力された場合を示す。ログアドレス更新回路１３０は、２番目の論理ブロックの開始アドレス（０Ａ）及び終了アドレス（０Ｂ）と、ログバッファ１３１に記録されている開始アドレス（０）及び終了アドレス（０Ａ）とを比較する。
【０１５５】
この場合、２番目の論理ブロックの開始アドレス（０Ａ）とエントリ＃０に記録されている終了アドレス（０Ａ）とは一致するため、ログアドレス更新回路１３０は、エントリ＃０の終了アドレスを「０Ｂ」に書き換える。キャッシュメモリ１４には、アドレス「０」からアドレス「０Ｂ」までのデータが記憶されているためである。
【０１５６】
同様に、図１７（ｂ）の（３）に示すように、３番目の論理ブロック（０Ｂ−０Ｃ）が転送回路１１０Ｂに入力されると、ログアドレス更新回路１３０は、エントリ＃０の終了アドレスを「０Ｂ」から「０Ｃ」に書き換える。
【０１５７】
同様に、図１７（ｂ）の（４）に示すように、４番目の論理ブロック（０Ｃ−０Ｄ）が転送回路１１０Ｂに入力されると、ログアドレス更新回路１３０は、エントリ＃０の終了アドレスを「０Ｃ」から「０Ｄ」に書き換える。
【０１５８】
図１８は、キャッシュメモリ１４に転送されるデータの順番が入れ替わった場合を示す説明図である。図１８の例では、１番目の論理ブロック（０−０Ａ）→３番目の論理ブロック（０Ｂ−０Ｃ）→２番目の論理ブロック（０Ａ−０Ｂ）→４番目の論理ブロック（０Ｃ−０Ｄ）の順番で、転送回路１１０Ｂにデータが入力されるものとする。但し、転送の順番が一部入れ替わっただけであり、データそのものは全てキャッシュメモリ１４に転送される。
【０１５９】
図１８（ｂ）の（１）に示すように、論理ブロック（０−０Ａ）が入力されると、ログバッファ１３１のエントリ＃０に、開始アドレス「０」及び終了アドレス（０Ａ）が登録される。
【０１６０】
図１８（ｂ）の（２）に示すように、論理ブロック（０Ｂ−０Ｃ）が入力されると、ログバッファ１３１のエントリ＃１に、開始アドレス（０Ｂ）及び終了アドレス（０Ｃ）が登録される。論理ブロック（０Ｂ−０Ｃ）の開始アドレス（０Ｂ）及び終了アドレス（０Ｃ）は、既に登録されている開始アドレス（０）及び終了アドレス（０Ａ）のいずれとも一致しないためである。従って、既存のエントリ＃０に加えて、新たなエントリ＃１が使用される。
【０１６１】
図１８（ｂ）の（３）は、論理ブロック（０Ａ−０Ｂ）が入力された場合を示す。この論理ブロックの開始アドレス（０Ａ）は、エントリ＃０に登録されている終了アドレス（０Ａ）に一致する。また、その論理ブロックの終了アドレス（０Ｂ）は、エントリ＃１に登録されている開始アドレス（０Ｂ）に一致する。
【０１６２】
即ち、論理ブロック（０Ａ−０Ｂ）の到着によりキャッシュメモリ１４に記憶されたデータの隙間が埋められ、キャッシュメモリ１４に開始アドレス「０」から終了アドレス「０Ｃ」までの連続したデータが記憶される。
【０１６３】
そこで、ログアドレス更新回路１３０は、エントリ＃０の終了アドレス「０Ａ」をエントリ＃１の終了アドレス「＃０Ｃ」に更新し、かつ、エントリ＃１を無効とする。エントリ＃１に登録されている開始アドレス及び終了アドレスの、それぞれの有効ビットＤ１０を無効に設定する。
【０１６４】
図１８（ｂ）の（４）は、論理ブロック（０Ｃ−０Ｄ）が入力された場合を示す。この論理ブロックの開始アドレス（０Ｃ）は、エントリ＃０の終了アドレス（０Ｃ）に一致するため、エントリ＃０の終了アドレスは「０Ｃ」から「０Ｄ」に変更される。
【０１６５】
図１９，図２０は、データ転送処理のフローチャートである。ログアドレス更新回路１３０は、ログバッファ１３１を初期化し（Ｓ５０）、ホスト通信制御部１１からデータが入力されるのを待つ（Ｓ５１）。
【０１６６】
データが入力されると（S51:YES）、ログ監視回路１３２は、このデータ転送に関するコマンド（つまり、ライトコマンドである）の番号を検出する（Ｓ５２）。上述の通り、転送回路１１０Ｂは、複数のコマンドを多重処理することができる。ログバッファ１３１には、各ライトコマンドに対応するログアドレスがキャッシュメモリ１４から読み出されて設定される。
【０１６７】
ログ監視回路１３２は、ログバッファ１３１に設定されているログアドレスのコマンド番号と、Ｓ５１で受信したライトデータに関するライトコマンドの番号とを比較する（Ｓ５３）。両方のコマンド番号が一致しない場合（S53:NO）、ログ監視回路１３２は、ログバッファ１３１に記憶されているログアドレスをキャッシュメモリ１４内の所定領域に退避させる（Ｓ５４）。続いて、ログ監視回路１３２は、Ｓ５２で検出されたコマンド番号に対応するログアドレスをキャッシュメモリ１４から読み出して、ログバッファ１３１に転送する（Ｓ５５）。これにより、ログバッファ１３１には、Ｓ５２で検出されたコマンド番号に対応するログアドレスが設定される。
【０１６８】
これに対し、Ｓ５２で検出されたコマンド番号とログバッファ１３１に記憶されているログアドレスに対応するコマンド番号とが一致する場合（S53:YES）、Ｓ５４及びＳ５５はスキップされ、図２０に示すＳ５６に移る。
【０１６９】
ログアドレス更新回路１３０は、Ｓ５１で受信したデータのアドレスとログバッファ１３１に記憶されているログアドレスとを比較する（Ｓ５６）。Ｓ５１で受信したデータのアドレスを、転送アドレスと呼ぶ場合がある。転送アドレスには、開始アドレス及び終了アドレスが含まれる。
【０１７０】
転送アドレスとログアドレスとの比較結果は、以下の３通りに分けられる。第１は、転送アドレスとログアドレスとが一つも一致しない場合、第２は、転送アドレスとログアドレスとが一カ所で一致する場合、第３は、転送アドレスとログアドレスとが二カ所で一致する場合、である。
【０１７１】
第１の場合を説明する（Ｓ５７）。図１８（ｂ）の（２）に示したように、受信データの転送アドレス（０Ｂ−０Ｃ）がログアドレス（０−０Ａ）のいずれとも一致しない場合は、空いているエントリ＃１に転送アドレス（０Ｂ−０Ｃ）が設定される。つまり、ログバッファ１３１内の空いているエントリ＃１が一つ選択され、転送アドレスの開始アドレス（０Ｂ）及び終了アドレス（０Ｃ）がエントリ＃１に登録される。さらに、開始アドレス（０Ｂ）及び終了アドレス（０Ｃ）の有効ビットＤ１０は有効に設定される。
【０１７２】
第２の場合を説明する（Ｓ５８）。図１７（ｂ）の（２）に示すように、受信データの転送アドレス（０Ａ−０Ｂ）のうち開始アドレス（０Ａ）は、エントリ＃０の終了アドレス（０Ａ）に一致する。そこで、ログアドレス更新回路１３０は、エントリ＃０の終了アドレス（０Ａ）を、受信データの終了アドレス（０Ｂ）に更新する。
【０１７３】
第３の場合を説明する（Ｓ５９）。図１８（ｂ）の（３）に示すように、受信データの転送アドレス（０Ａ−０Ｂ）は、エントリ＃０の終了アドレス（０Ａ）とエントリ＃１の開始アドレス（０Ｂ）とに、一致する。つまり、転送アドレスは、２カ所でログアドレスに一致する。この場合、ログアドレス更新回路１３０は、終了アドレスの一致するエントリ＃０の終了アドレス「０Ａ」を、開始アドレスの一致するエントリの終了アドレス「０Ｃ」に更新する（Ｓ５９）。そして、ログアドレス更新回路１３０は、開始アドレスの一致するエントリ＃１の有効ビットＤ１０を無効に設定し、そのエントリ＃１を無効とする（Ｓ６０）。
【０１７４】
転送長カウンタ１１４の値がライトコマンドで指定されたサイズに達するまで、Ｓ５１〜Ｓ６０のステップが繰り返される。ライトコマンドで指定されたサイズのデータを受信した場合（S61:YES）、転送回路１１０Ｂは、ログバッファ１３１内の有効エントリの数が１であるか否かを判定する（Ｓ６２）。
【０１７５】
図１８（ｂ）の（３），（４）に示すように、ライトコマンドで指定された全データがキャッシュメモリ１４に転送された場合、ログバッファ１３１には、有効なエントリが１つだけ存在する。有効なエントリが複数存在する場合は、データが分断されており、一部のデータが未だ受信されていない状態である。
【０１７６】
有効なエントリ数が１の場合（S62:YES）、転送回路１１０Ｂは、回路異常が検出されたか否かを判定する（Ｓ６３）。回路異常が検出されていない場合（S63:NO）、キャッシュメモリ１４へのデータ転送は正常に終了する。回路異常が検出された場合（S63:YES）または有効なエントリ数が１ではない場合（S62:NO）、キャッシュメモリ１４のデータ転送は異常終了する。異常終了の場合、ホスト３０は、再びライトコマンドを発行し、ライトデータを送信する。
【０１７７】
このように構成される本実施例も第１実施例と同様の効果を奏する。さらに、本実施例では、キャッシュメモリ１４に転送されたデータのアドレスをログバッファ１３１で管理し、キャッシュメモリ１４に記憶されたデータのアドレスの連続性とデータサイズとに基づいて、データの整合性をチェックする。従って、第１実施例よりも高い信頼性で、データの整合性を判定することができる。また、第２実施例のようにビットマップでデータの受信の有無を管理する場合に比べて、ログバッファ１３１のサイズを小さくすることができる。
【０１７８】
ログバッファ１３１のエントリ数は、アウトオブオーダの発生頻度に応じて設定することができる。例えば、一つの例としては、１６個程度のエントリを予め用意する。アウトオブオーダが１６回以上発生した場合、そのデータ転送は失敗したものとして異常終了させ、ホスト３０にリトライさせればよい。
【実施例４】
【０１７９】
図２１に基づいて本発明の第４実施例を説明する。本実施例は、第３実施例の具体例に該当する。本実施例では、第３実施例で述べたログアドレスの管理をハードウェア回路によって実現する。
【０１８０】
この回路は、例えば、一致箇所判定回路３００と、一致判定回路３１１と、アドレスバッファ３１２と、更新回路３１３と、エントリ数チェック回路３１６等とを含んで構成される。
【０１８１】
一致箇所判定回路３００は、図２０中のＳ５６に対応する回路である。一致箇所判定回路３００は、転送回路１１０Ｂに入力されたデータのアドレス（転送アドレス）と、アドレスバッファ３１２に記憶されたアドレスとを比較し、両アドレスが不一致であるか、両アドレスが一カ所で一致するか、両アドレスが２カ所で一致するか、を判定する。
【０１８２】
各アドレスバッファ３１２には、開始アドレスまたは終了アドレスのいずれかが記憶される。開始アドレス（ＳＡＤＲ０）と終了アドレス（ＥＡＤＲ０）はペアとなり、一つのエントリを構成する。同様に、開始アドレス（ＳＡＤＲ１）と終了アドレス（ＳＡＤＲ１）、開始アドレス（ＳＡＤＲｎ）と終了アドレス（ＥＡＤＲｎ）も、それぞれ一つずつのエントリを構成する。
【０１８３】
一致判定回路３１１は、アドレスバッファ３１２に記憶されているログアドレスと、新たに入力されたデータのアドレス（転送アドレス）とが一致するか否かを判定する回路である。一致した場合、更新すべき旨の指示が経路Ｐ３２を介して更新回路３１３に入力される。
【０１８４】
転送アドレスとログアドレスとが完全に不一致の場合、更新指示が、経路Ｐ３１を介して、所定のアドレスバッファ３１２の更新回路３１３に入力される。具体的には、空いているエントリの各アドレスバッファに、受信データの開始アドレス（新ＳＡＤＲ）と終了アドレス（新ＥＡＤＲ）とを格納させるべく、指示がＰ３１に出力される。この指示は、空いているアドレスバッファ３１２の更新回路３１３に入力される。
【０１８５】
転送アドレスとログアドレスとが二カ所で一致する場合、更新指示が経路Ｐ３０を介して終了アドレス選択部３１４に入力される。これにより、受信データの開始アドレス（新ＳＡＤＲ）と一致する終了アドレスは、終了アドレス選択部３１４により選択された終了アドレス３１５で更新される。
【０１８６】
エントリ数チェック回路３１６は、図２０中のＳ６２に相当する。このエントリ数チェック回路３１６は、有効なエントリの数を確認する。有効なエントリの数は、各エントリの開始アドレスが有効か否かを確認することにより、検出できる。
【０１８７】
このように構成される本実施例は、第３実施例と同様の効果を奏する。本実施例では、ログアドレスに基づく整合性チェックをハードウェア回路で実現するため、より高速に転送処理を行うことができる。
【実施例５】
【０１８８】
図２２，図２３に基づいて第５実施例を説明する。本実施例では、キャッシュメモリ１４からデータを読み出す場合を例に挙げて説明する。ホスト３０は、リードコマンドを発行することにより、記憶制御装置１０からデータを読み出すことができる。
【０１８９】
リード要求されたデータがキャッシュメモリ１４に記憶されている場合には、キャッシュメモリ１４に記憶されたデータがホスト３０に送信される。リード要求されたデータがキャッシュメモリ１４に記憶されていない場合、論理ボリューム２２からデータが読み出されて、キャッシュメモリ１４に記憶される。
【０１９０】
キャッシュメモリ１４に記憶されたデータは、データ転送制御回路１５及びホスト通信制御部１１を介して、ホスト３０に送信される。このリード処理時においても、キャッシュメモリ１４から読み出されたデータがホスト３０に正常に転送されたか否かを判定することができる。
【０１９１】
転送回路１１０Ｃは、例えば、キャッシュデータ保証回路１４０と、リードデータ保証回路１５０と、比較回路１６０と、転送長カウンタ１１４とを備える。キャッシュデータ保証回路１４０は、キャッシュメモリ１４から読み出されるデータが正しいことを保証するための回路である。リードデータ保証回路１５０は、ホスト３０に向けて転送されるデータ（リードデータ）が正しいことを保証するための回路である。
【０１９２】
キャッシュデータ保証回路１４０は、ＢＣＣチェック回路１４１と、ＢＣＣバッファ１４２とを備える。ＢＣＣバッファ１４２には、キャッシュメモリ１４から読み出されるデータのＢＣＣが記憶される。
【０１９３】
キャッシュメモリ１４からデータを読み出す場合、ＢＣＣチェック回路１４１は、読み出されたキャッシュデータから各論理ブロック毎のＢＣＣを改めて算出し、ＢＣＣバッファ１４２に格納されているＢＣＣと比較する。両方のＢＣＣが一致している場合、キャッシュメモリ１４からキャッシュデータが正しく読み出されたと判定される。
【０１９４】
キャッシュメモリ１４から読み出されたデータは、経路Ｐ２０を介して、ホスト通信制御部１１に転送される。リードデータ保証回路１５０のＢＣＣ生成回路１５１は、ホスト３０に向けて転送されるデータのＢＣＣをリード転送サイズの分だけ演算し、その演算結果をＢＣＣバッファ１５２に記憶する。
【０１９５】
比較回路１６０は、リードコマンドで指定されたサイズのデータの転送が完了すると、ＢＣＣバッファ１４２に記憶されているＢＣＣとＢＣＣバッファ１５２に記憶されているＢＣＣとを比較する。両方のＢＣＣが一致する場合、重複や脱落等を生じること無く、リードデータが正常に転送されたと判定される。
【０１９６】
図２３は、リード処理時におけるデータ転送処理を示すフローチャートである。転送回路１１０Ｃは、転送パラメータをセットし、キャッシュメモリ１４に記憶されたＢＣＣをＢＣＣバッファ１４２に転送させる（Ｓ７０）。また、転送回路１１０Ｃは、ＢＣＣバッファ１５２を初期化する（Ｓ７０）。
【０１９７】
転送回路１１０Ｃは、リード要求を受信したか否かを判定する（Ｓ７１）。リード要求を受信した場合（S71:YES）、転送回路１１０Ｃは、リード要求されたデータのブロック番号を算出し、その算出された論理ブロックのデータをキャッシュメモリ１４から読み出す（Ｓ７２）。次に、キャッシュデータ保証処理（Ｓ７３，Ｓ７４）とリードデータ保証処理（Ｓ７５，Ｓ７６）とが並列的に実行される。
【０１９８】
キャッシュデータ保証処理では、キャッシュメモリ１４から読み出される論理ブロックについてＢＣＣが算出される（Ｓ７３）。算出されたＢＣＣは、ＢＣＣバッファ１４２に記憶されているＢＣＣと比較される（Ｓ７４）。もしも、この時点でＢＣＣが一致しない場合、転送失敗として終了させる。
【０１９９】
リードデータ保証処理では、リード要求されたサイズの分だけＢＣＣを算出し（Ｓ７５）、算出されたＢＣＣをＢＣＣバッファ１５２に記憶させる（Ｓ７６）。
【０２００】
転送長カウンタ１１４は、カウント値を更新する。リードコマンドで指定されたサイズのデータが読み出されるまで、転送回路１１０Ｃは、Ｓ７１〜Ｓ７７のステップを繰り返し実行する（Ｓ７８）。転送長カウンタ１１４の値が指定サイズに達すると（S78:YES）、転送回路１１０Ｃは、ＢＣＣバッファ１４２（図中、ＢＣＣバッファ１）に記憶されているＢＣＣと、ＢＣＣバッファ１５２（図中、ＢＣＣバッファ２）に記憶されているＢＣＣとを比較する（Ｓ７９）。
【０２０１】
両方のＢＣＣが一致する場合（S79:YES）、転送回路１１０Ｃは、回路異常が生じたか否かを判定する（Ｓ８０）。回路異常が検出されなかった場合（S80:NO）、データ転送は正常に終了する。
【０２０２】
これに対し、ＢＣＣバッファ１４２のＢＣＣとＢＣＣバッファ１５２のＢＣＣとが不一致の場合（S79:NO）、または、回路異常が検出されていた場合（S80:YES）のいずれかの場合、データ転送は異常終了する。ホスト３０は、リードコマンドを再び発行することにより、所望のデータを要求することができる。
【０２０３】
このように構成される本実施例も第１実施例と同様の効果を奏する。さらに、本実施例では、キャッシュメモリ１４からデータを読み出す場合にもデータの整合性をチェックすることができ、より一層使い勝手や信頼性が向上する。
【０２０４】
なお、本発明は、上述した実施形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。当業者であれば、前記各実施例を適宜組み合わせることもできる。また、例えば、第１データ転送回路を中心に説明したが、第２データ転送回路にもデータの整合性をチェックするための機能を設けることができる。
【図面の簡単な説明】
【０２０５】
【図１】本発明の実施形態の全体概念を示す説明図である。
【図２】記憶制御装置を含む情報処理システムの全体構成図である。
【図３】ホスト通信制御部の概略構成を示すブロック図である。
【図４】データ転送回路の概略構成を示すブロック図である。
【図５】データ転送処理のフローチャートである。
【図６】ライトデータがキャッシュメモリに格納される様子を示す説明図である。
【図７】図６に続く説明図である。
【図８】図７に続く説明図である。
【図９】図８に続く説明図である。
【図１０】第２実施例に係るデータ転送回路の構成を示すブロック図である。
【図１１】ビットマップの構成を示す説明図である。
【図１２】ライトコマンドに応じてビットマップバッファに格納させるビットマップを切り換える様子を示す説明図である。
【図１３】データ転送処理のフローチャートである。
【図１４】図１３のＳ３９に示すデータチェック処理のフローチャートである。
【図１５】第３実施例に係るデータ転送回路の構成を示すブロック図である。
【図１６】ライトコマンドに応じてログバッファに格納させるログアドレスを切り換える様子を示す説明図である。
【図１７】受信データの到着に応じてログアドレスが更新される様子を示す説明図である。
【図１８】受信データの到着順序が入れ替わった場合にログアドレスが更新される様子を示す説明図である。
【図１９】データ転送処理のフローチャートである。
【図２０】図１９に続くフローチャートである。
【図２１】第４実施例に係るログアドレス更新回路及びログバッファの具体的一例をそれぞれ示す回路図である。
【図２２】第５実施例に係るデータ転送回路の構成を示すブロック図である。
【図２３】データ転送処理のフローチャートである。
【符号の説明】
【０２０６】
１：データ転送制御装置、２：キャッシュメモリ、２Ａ：受信データ記憶領域、２Ｂ：検査用データ記憶領域、２Ｃ：判定用データ記憶領域、３：ホスト、４：検査用データ生成部、５：検査用データ記憶部、６：整合性判定部、７Ａ：検査用データ生成部、７Ｂ：検査用データ比較部、８Ａ：ビットマップ生成部、８Ｂ：ビットマップ記憶部、８Ｃ：ビットマップ検査部、９Ａ：ログアドレス管理部、９Ｂ：ログアドレス記憶部、９Ｃ：ログアドレス検査部、１０：記憶制御装置、１１：ホスト通信制御部、１１Ａ：通信プロトコル回路、１１Ｂ：受信バッファ、１１Ｃ：ＤＭＡ回路、１１Ｄ：送信バッファ、１１Ｅ：通信インターフェース回路、１２：ディスク通信制御部、１３：マイクロプロセッサ制御部、１４：キャッシュメモリ、１５：データ転送制御回路、１６：データ転送経路、２０：記憶ドライブ搭載部、２１：記憶ドライブ、２２：論理ボリューム、３０：ホスト、１１０，１１０Ａ，１１０Ｂ，１１０Ｃ：データ転送回路、１１１：ＢＣＣ生成回路、１１２：ＢＣＣバッファ、１１３：データチェック回路、１１３１：ＢＣＣ生成回路、１１３２：ＢＣＣ比較回路、１１４：転送長カウンタ、１２０：ビットマップ制御回路、１２１：ビットマップバッファ、１２２：ビットマップ監視回路、１３０：ログアドレス更新回路、１３１：ログバッファ、１３２：ログ監視回路、１４０：キャッシュデータ保証回路、１４１：ＢＣＣチェック回路、１４２：ＢＣＣバッファ、１５０：リードデータ保証回路、１５１：ＢＣＣ生成回路、１５２：ＢＣＣバッファ、１６０：比較回路、１７０：データ転送回路、１８０：キャッシュコントローラ、３００：一致箇所判定回路、３１１：一致判定回路、３１２：アドレスバッファ、３１３：更新回路、３１４：終了アドレス選択部、３１６：エントリ数チェック回路。
【図１】
2009199266.tif 000003
【図２】
2009199266.tif 000004
【図３】
2009199266.tif 000005
【図４】
2009199266.tif 000006
【図５】
2009199266.tif 000007
【図６】
2009199266.tif 000008
【図７】
2009199266.tif 000009
【図８】
2009199266.tif 000010
【図９】
2009199266.tif 000011
【図１０】
2009199266.tif 000012
【図１１】
2009199266.tif 000013
【図１２】
2009199266.tif 000014
【図１３】
2009199266.tif 000015
【図１４】
2009199266.tif 000016
【図１５】
2009199266.tif 000017
【図１６】
2009199266.tif 000018
【図１７】
2009199266.tif 000019
【図１８】
2009199266.tif 000020
【図１９】
2009199266.tif 000021
【図２０】
2009199266.tif 000022
【図２１】
2009199266.tif 000023
【図２２】
2009199266.tif 000024
【図２３】
2009199266.tif 000025