(57)【要約】【課題】ＣＡとＣＭのＭＰＵ間の通信を高速化するとともに、両ＭＰＵの負荷を軽減すること。【解決手段】ＣＡ−メモリとＣＭ−メモリに同一構成のリングバッファを設け、ＣＭＩ１１０に送信用リングバッファのメッセージ書き込み位置を指定するＴＯＰポインタを格納するＴＯＰポインタ格納レジスタ１１１と送信用リングバッファのメッセージ読み出し位置および受信用リングバッファの書き込み位置を指定するＢＴＭポインタを格納するＢＴＭポインタ制御レジスタ１１２を設け、ＴＯＰ／ＢＴＭ比較部１１４がＴＯＰポインタとＢＴＭポインタを比較して値が異なる場合に、メッセージリングバッファリードモジュール１１６が送信用リングバッファからＢＴＭポインタで指定されるメッセージを読み出して受信用リングバッファのＢＴＭポインタで指定される位置に書き込むよう構成する。【選択図】        図２
2006190257.tif 000002
【特許請求の範囲】
【請求項１】
データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送装置であって、
転送されるデータを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データを書き込んだ際に更新する書込ポインタを記憶する書込ポインタ記憶手段と、
送信リングバッファから当該データ転送装置が送信データを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタを記憶する読出ポインタ記憶手段と、
前記書込ポインタ記憶手段により記憶された書込ポインタと前記読出ポインタ記憶手段により記憶された読出ポインタの値が同一であるか否かを判定するポインタ比較手段と、
前記ポインタ比較手段により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納されたデータを読み出して受信メモリに転送し、受信データを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に書き込むメモリ間転送手段と、
前記メモリ間転送手段による受信リングバッファへのデータの書き込みが完了すると、前記読出ポインタ記憶手段により記憶された読出ポインタを更新する読出ポインタ更新手段と、
を備えたことを特徴とするデータ転送装置。
【請求項２】
受信リングバッファに転送されたデータのうち受信演算処理装置が受信処理を完了したデータの次のデータの位置を受信リングバッファの位置との相対値で指定し、受信演算処理装置が受信処理を完了した際に更新する完了ポインタを記憶する完了ポインタ記憶手段と、
前記完了ポインタ記憶手段により記憶された完了ポインタおよび前記書込ポインタ記憶手段により記憶された書込ポインタに基づいて受信リングバッファに空があるか否かを判定する空状況判定手段と、
をさらに備えたことを特徴とする請求項１に記載のデータ転送装置。
【請求項３】
データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送装置であって、
転送されるデータの格納アドレスを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データの格納アドレスを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データの格納アドレスを書き込んだ際に更新する書込ポインタを記憶する書込ポインタ記憶手段と、
送信リングバッファから当該データ転送装置が送信データの格納アドレスを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタを記憶する読出ポインタ記憶手段と、
前記書込ポインタ記憶手段により記憶された書込ポインタと前記読出ポインタ記憶手段により記憶された読出ポインタの値が同一であるか否かを判定するポインタ比較手段と、
前記ポインタ比較手段により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納アドレスが格納されたデータを読み出して受信メモリに転送し、受信データを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に書き込むメモリ間転送手段と、
前記メモリ間転送手段による受信リングバッファへのデータの書き込みが完了すると、前記読出ポインタ記憶手段により記憶された読出ポインタを更新する読出ポインタ更新手段と、
を備えたことを特徴とするデータ転送装置。
【請求項４】
データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送装置のデータ転送方法であって、
転送されるデータを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データを書き込んだ際に更新する書込ポインタと、送信リングバッファから当該データ転送装置が送信データを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタの値が同一であるか否かを判定するポインタ比較工程と、
前記ポインタ比較工程により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納されたデータを読み出して受信メモリに転送し、受信データを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に書き込むメモリ間転送工程と、
前記メモリ間転送工程による受信リングバッファへのデータの書き込みが完了すると、前記読出ポインタを更新する読出ポインタ更新工程と、
を含んだことを特徴とするデータ転送方法。
【請求項５】
データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送方法であって、
転送されるデータの格納アドレスを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データの格納アドレスを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データの格納アドレスを書き込んだ際に更新する書込ポインタと、送信リングバッファから当該データ転送装置が送信データの格納アドレスを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタの値が同一であるか否かを判定するポインタ比較工程と、
前記ポインタ比較工程により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納アドレスが格納されたデータを読み出して受信メモリに転送し、受信データを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に書き込むメモリ間転送工程と、
前記メモリ間転送工程による受信リングバッファへのデータの書き込みが完了すると、前記読出ポインタを更新する読出ポインタ更新工程と、
を含んだことを特徴とするデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送装置およびデータ転送方法に関し、特に、送信演算処理装置と受信演算処理装置との間での送受信アドレスの授受を不要とし、データ転送速度を向上するとともに、送信演算処理装置および受信演算処理装置の負荷を軽減することができるデータ転送装置およびデータ転送方法に関するものである。
【背景技術】
【０００２】
ディスクアレイ装置では、ホストとのインタフェースとして動作するチャネルアダプタ（ＣＡ：Channel Adapter）とキャッシュの管理を行なうキャッシュ制御部（ＣＭ：Cash Manager）との間で制御情報などの転送を行なう必要がある。
【０００３】
図８は、ディスクアレイ装置の構成を示す図である。同図に示すように、ディスクアレイ装置７は、ファイバーチャネルリンク３を介してホスト２と接続され、ＣＡ７０と、複数のＣＭ８０と、ディスク９０とを有する。また、ＣＡ７０とＣＭ８０はＰＣＩバスで接続され、その間には幾つかのブリッジやスイッチが介在している。
【０００４】
ＣＡ７０は、演算処理装置であるＣＡ−ＭＰＵ７１と、付随するＣＡ−メモリ７２と、ＣＡ７０とＣＭ８０との間でＤＭＡ（Direct Memory Access）によってデータを転送するＤＭＡエンジンを含むＬＳＩ７００とを有する。ＣＭ８０は、演算処理装置であるＣＭ−ＭＰＵ８１と、付随するＣＭ−メモリ８２とを有する。また、ＣＡ７０とＣＭ８０との間では、ＤＭＡ転送の前などに８バイト〜５１２バイトの制御情報のデータ転送が行なわれる。
【０００５】
図９は、ＣＭ８０からＣＡ７０への従来のデータ転送シーケンス（リードシーケンス）を説明するための説明図である。同図に示すように、ＣＭ８０からＣＡ７０へのデータ転送では、ＣＭ−ＭＰＵ８１は、ＣＭ−メモリ８２に転送するデータであるメッセージ（図中ＭＳＧ）と、メッセージを格納したメモリアドレス（図中ＡＤＲ）をそれぞれ格納する。そして、ＬＳＩ７００が、ＣＭ８０が転送可能状態であることをたまにリードし、確認する（図中※）。
【０００６】
その結果、転送可能状態であれば、ＣＭ−ＭＰＵ８１が、転送メッセージ（図中ＭＳＧ）が格納されているアドレス（図中ＡＤＲ）をＣＡ−メモリ７２に格納(ライト)する（１）。そして、ＣＭ−ＭＰＵ８１が、ＡＤＲを格納したＣＡ−メモリ７２のアドレス（図中ＷＰ）をＬＳＩ７００にライトし、ＬＳＩ７００は、ＷＰが存在する事をＣＡ−ＭＰＵ７１へ通知する（図中破線、（２））。
【０００７】
そして、ＣＡ−ＭＰＵ７１は、ＬＳＩ７００からの通知で、割込み要因をリードしてＬＳＩ７００にＷＰがあることを検出し、ＬＳＩ７００上のＷＰを読んで(リード)、ＷＰで指定されるＣＡ−メモリ７２からメッセージの格納されているＡＤＲを読み出す（３）。
【０００８】
そして、ＣＡ−ＭＰＵ７１は、ＡＤＲ情報をＬＳＩ７００へ通知し、ＬＳＩ７００を起動する（４）。起動されたＬＳＩ７００は、ＡＤＲで指定されるＣＭ−メモリ８２上のメッセージをＣＡ−メモリ７２上へ転送する（５）。
【０００９】
また、図１０は、ＣＡ７０からＣＭ８０への従来のデータ転送シーケンス（ライトシーケンス）を説明するための説明図である。同図に示すように、ＣＡ７０からＣＭ８０へのデータ転送では、ＣＡ−ＭＰＵ７１がＬＳＩ７００のＤＭＡ機能を使い、ＣＭ−メモリ８２へメッセージ(図中ＭＳＧ)をライトする（１）。
【００１０】
そして、ＣＡ−ＭＰＵ７１がメッセージを格納したアドレスをＬＳＩ７００のレジスタ上へライトし（２）、ＬＳＩ７００はＣＭ−ＭＰＵ８１へ割込みによりアドレスの存在を通知する（３）。すると、割込みを受けたＣＭ−ＭＰＵ８１は、割込み要因のリードとアドレスのリードを行なう（４）。そして、ＣＭ−ＭＰＵ８１は、メッセージの受信を完了した事を示すために、ＬＳＩ７００に処理の終了したメッセージのアドレスを通知(ライト)する（５）。
【００１１】
なお、プロセッサ間のメッセージ転送については、例えば、特許文献１にシェアードＲＡＭを用いてＣＰＵ間でメッセージの転送を行なう技術が開示されている。
【００１２】
【特許文献１】特開平３−１７４６４５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
図９に示したリードシーケンスでは、送信メッセージを格納したＣＭ−メモリ８２のアドレスはＣＭ−ＭＰＵ８１が決定するため、このアドレスをＤＭＡ起動の前にＣＭ−ＭＰＵ８１がＣＡ−ＭＰＵ７１に通知する必要がある。また、図１０に示したライトシーケンスでは、送信先アドレスはＣＡ−ＭＰＵ７１が決定するためＤＭＡ起動前のＭＰＵ間の通信は不要であるが、ＤＭＡ起動後に送信先アドレスをＣＡ−ＭＰＵ７１がＣＭ−ＭＰＵ８１に通知する必要がある。
【００１４】
すなわち、いずれのシーケンスにおいてもＭＰＵ間でアドレス情報を通信する必要があるが、ＭＰＵ間の通信では、ＣＡ７０とＣＭ８０がＰＣＩバスやスイッチなどで接続されているため、通信に時間がかかるとともに、ＭＰＵに多大な負荷がかかるという問題がある。
【００１５】
また、特許文献１に記載されたＣＰＵ間のメッセージ転送では、シェアードＲＡＭが必要となるという問題がある。
【００１６】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、送信演算処理装置と受信演算処理装置との間での送受信アドレスの授受を不要とし、データ転送速度を向上するとともに、送信演算処理装置および受信演算処理装置の負荷を軽減することができるデータ転送装置およびデータ転送方法を提供することを目的とする。
【課題を解決するための手段】
【００１７】
上述した課題を解決し、目的を達成するため、請求項１の発明に係るデータ転送装置は、データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送装置であって、転送されるデータを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データを書き込んだ際に更新する書込ポインタを記憶する書込ポインタ記憶手段と、送信リングバッファから当該データ転送装置が送信データを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタを記憶する読出ポインタ記憶手段と、前記書込ポインタ記憶手段により記憶された書込ポインタと前記読出ポインタ記憶手段により記憶された読出ポインタの値が同一であるか否かを判定するポインタ比較手段と、前記ポインタ比較手段により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納されたデータを読み出して受信メモリに転送し、受信データを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に書き込むメモリ間転送手段と、前記メモリ間転送手段による受信リングバッファへのデータの書き込みが完了すると、前記読出ポインタ記憶手段により記憶された読出ポインタを更新する読出ポインタ更新手段と、を備えたことを特徴とする。
【００１８】
この請求項１の発明によれば、書込ポインタと読出ポインタの値が同一であるか否かを判定し、値が異なると判定した場合に、送信リングバッファの読出ポインタで指定された位置に格納されたデータを読み出して受信メモリに転送し、受信リングバッファの読出ポインタで指定される位置に書き込み、データの書き込みが完了すると、読出ポインタを更新するよう構成したので、送信演算処理装置と受信演算処理装置との間での送受信アドレスの授受を不要とすることができる。
【００１９】
また、請求項２の発明に係るデータ転送装置は、請求項１の発明において、受信リングバッファに転送されたデータのうち受信演算処理装置が受信処理を完了したデータの次のデータの位置を受信リングバッファの位置との相対値で指定し、受信演算処理装置が受信処理を完了した際に更新する完了ポインタを記憶する完了ポインタ記憶手段と、前記完了ポインタ記憶手段により記憶された完了ポインタおよび前記書込ポインタ記憶手段により記憶された書込ポインタに基づいて受信リングバッファに空があるか否かを判定する空状況判定手段と、をさらに備えたことを特徴とする。
【００２０】
この請求項２の発明によれば、受信リングバッファに転送されたデータのうち受信演算処理装置が受信処理を完了したデータの次のデータの位置を受信リングバッファの位置との相対値で指定し、受信演算処理装置が受信処理を完了した際に更新する完了ポインタおよび書込ポインタに基づいて受信リングバッファに空があるか否かを判定するよう構成したので、受信データが受信演算処理装置によって処理される前に別のデータで上書きされてしまうことを防ぐことができる。
【００２１】
また、請求項３の発明に係るデータ転送装置は、データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送装置であって、転送されるデータの格納アドレスを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データの格納アドレスを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データの格納アドレスを書き込んだ際に更新する書込ポインタを記憶する書込ポインタ記憶手段と、送信リングバッファから当該データ転送装置が送信データの格納アドレスを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタを記憶する読出ポインタ記憶手段と、前記書込ポインタ記憶手段により記憶された書込ポインタと前記読出ポインタ記憶手段により記憶された読出ポインタの値が同一であるか否かを判定するポインタ比較手段と、前記ポインタ比較手段により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納アドレスが格納されたデータを読み出して受信メモリに転送し、受信データを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に書き込むメモリ間転送手段と、前記メモリ間転送手段による受信リングバッファへのデータの書き込みが完了すると、前記読出ポインタ記憶手段により記憶された読出ポインタを更新する読出ポインタ更新手段と、を備えたことを特徴とする。
【００２２】
この請求項３の発明によれば、書込ポインタと読出ポインタの値が同一であるか否かを判定し、値が異なると判定した場合に、送信リングバッファの読出ポインタで指定された位置に格納アドレスが格納されたデータを読み出して受信メモリに転送し、受信リングバッファの読出ポインタで指定される位置に書き込み、データの書き込みが完了すると、読出ポインタを更新するよう構成したので、送信演算処理装置と受信演算処理装置との間での送受信アドレスの授受を不要とすることができる。
【００２３】
また、請求項４の発明に係るデータ転送方法は、データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送装置のデータ転送方法であって、転送されるデータを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データを書き込んだ際に更新する書込ポインタと、送信リングバッファから当該データ転送装置が送信データを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタの値が同一であるか否かを判定するポインタ比較工程と、前記ポインタ比較工程により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納されたデータを読み出して受信メモリに転送し、受信データを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に書き込むメモリ間転送工程と、前記メモリ間転送工程による受信リングバッファへのデータの書き込みが完了すると、前記読出ポインタを更新する読出ポインタ更新工程と、を含んだことを特徴とする。
【００２４】
この請求項４の発明によれば、書込ポインタと読出ポインタの値が同一であるか否かを判定し、値が異なると判定した場合に、送信リングバッファの読出ポインタで指定された位置に格納されたデータを読み出して受信メモリに転送し、受信リングバッファの読出ポインタで指定される位置に書き込み、データの書き込みが完了すると、読出ポインタを更新するよう構成したので、送信演算処理装置と受信演算処理装置との間での送受信アドレスの授受を不要とすることができる。
【００２５】
また、請求項５の発明に係るデータ転送方法は、データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送方法であって、転送されるデータの格納アドレスを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データの格納アドレスを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データの格納アドレスを書き込んだ際に更新する書込ポインタと、送信リングバッファから当該データ転送装置が送信データの格納アドレスを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタの値が同一であるか否かを判定するポインタ比較工程と、前記ポインタ比較工程により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納アドレスが格納されたデータを読み出して受信メモリに転送し、受信データを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に書き込むメモリ間転送工程と、前記メモリ間転送工程による受信リングバッファへのデータの書き込みが完了すると、前記読出ポインタを更新する読出ポインタ更新工程と、を含んだことを特徴とする。
【００２６】
この請求項５の発明によれば、書込ポインタと読出ポインタの値が同一であるか否かを判定し、値が異なると判定した場合に、送信リングバッファの読出ポインタで指定された位置に格納された格納アドレスのデータを読み出して受信メモリに転送し、受信リングバッファの読出ポインタで指定される位置に書き込み、データの書き込みが完了すると、読出ポインタを更新するよう構成したので、送信演算処理装置と受信演算処理装置との間での送受信アドレスの授受を不要とすることができる。
【発明の効果】
【００２７】
請求項１、３、４および５の発明によれば、送信演算処理装置と受信演算処理装置との間での送受信アドレスの授受を不要とするので、データ転送速度を向上するとともに、送信演算処理装置および受信演算処理装置の負荷を軽減することができるという効果を奏する。
【００２８】
また、請求項２の発明によれば、受信データが受信演算処理装置によって処理される前に別のデータで上書きされてしまうことを防ぐので、確実にデータ転送を行なうことができるという効果を奏する。
【発明を実施するための最良の形態】
【００２９】
以下に添付図面を参照して、この発明に係るデータ転送装置およびデータ転送方法の好適な実施例を詳細に説明する。
【実施例１】
【００３０】
まず、本実施例１に係るディスクアレイ装置によるＣＡからＣＭへのデータ転送方式について説明する。図１−１は、本実施例１に係るディスクアレイ装置によるＣＡからＣＭへのデータ転送方式を説明するための説明図である。
【００３１】
同図に示すように、このディスクアレイ装置１では、送信メッセージを格納する送信用リングバッファ１２ａをＣＡ−メモリ１２に用意し、受信メッセージを格納する受信用リングバッファ２２ａをＣＭ−メモリ２２に用意する。
【００３２】
そして、送信用リングバッファ１２ａと受信用リングバッファ２２ａは、同じ構成のリングバッファとし、送信用リングバッファ１２ａと受信用リングバッファ２２ａのポインタを同期化する。すなわち、送信用リングバッファ１２ａのポインタＡで指定される位置に格納されたメッセージは、受信用リングバッファ２２ａのポインタＡで指定される位置に転送される。
【００３３】
したがって、送信先アドレスが受信用リングバッファ２２ａのアドレスにポインタ分のアドレスを加えたものとして算出することができ、メッセージ転送ごとに送信先アドレスをＭＰＵ間で通信する必要がなくなる。
【００３４】
このため、ＬＳＩ１００でＣＡ−メモリ１２とＣＭ−メモリ２２との間でＤＭＡによるメッセージ転送を行なう機能部であるＣＭＩ（CoMmunication Interface）１１０にＴＯＰポインタ、ＢＴＭポインタおよびＣＭＰポインタの三つのポインタを用意する。
【００３５】
ここで、ＴＯＰポインタは、送信用リングバッファ１２ａに送信メッセージを書き込む位置を指定し、ＢＴＭポインタは、送信用リングバッファ１２ａから読み出すメッセージの位置および受信用リングバッファ２２ａにメッセージを格納する位置を指定する。
【００３６】
また、ＣＭＰポインタは、受信用リングバッファ２２ａからＣＭ２０のＭＰＵが受信メッセージを読み出す位置を指定する。すなわち、ＣＭＰポインタは、受信用リングバッファ２２ａの中でＣＭ２０のＭＰＵの処理が完了したメッセージの次の位置を指定する。
【００３７】
なお、ポインタは、メッセージの格納場所の番号を示す。ポインタをメッセージの格納場所のアドレスではなく番号とすることによって、ポインタの情報量を減らし、ポインタの読み出しや書き込みを高速化することができる。
【００３８】
ＣＡ１０のＭＰＵが送信用リングバッファ１２ａに送信メッセージを格納してＴＯＰポインタを更新し、更新したＴＯＰポインタをＣＭＩ１１０に書き込むと、ＣＭＩ１１０がＴＯＰポインタとＢＴＭポインタが異なることから送信メッセージがあると判定する。
【００３９】
そして、ＣＭＩ１１０は、送信メッセージを送信用リングバッファ１２ａのＢＴＭポインタで指定される位置から読み出してＣＭ−メモリ２２へ転送し、受信用リングバッファ２２ａのＢＴＭポインタで指定される位置に書き込む。また、ＣＭＩ１１０は、ＢＴＭポインタをＣＭ−メモリ２２に書き込み、ＢＴＭポインタを更新する。
【００４０】
また、ＣＭ２０のＣＰＵは、受信したメッセージをＣＭ−メモリ２２のＣＭＰポインタを用いて読み出し、読み出したメッセージの処理を終了するとＣＭＰポインタを更新してＣＭＩ１１０のＣＭＰポインタに書き込みを行なうことによってメッセージ処理の終了をＣＭＩ１１０に通知する。
【００４１】
例えば、図１−１では、送信用リングバッファ１２ａに三つのメッセージＭＳＧ0、ＭＳＧ1およびＭＳＧ2がＣＡ１０のＭＰＵによって準備され、ＴＯＰポインタがＭＳＧ2を指定している。また、ＭＳＧ1が転送中であることから、ＢＴＭポインタがＭＳＧ1を指定し、ＭＳＧ0は転送が終了してＣＭ２０のＭＰＵによる処理が未完であることから、ＣＭＰポインタがＭＳＧ0を指定している。
【００４２】
なお、転送シーケンスとポインタとの関係は以下のようになる。初期値としてＴＯＰポインタ、ＢＴＭポインタおよびＣＭＰポインタは「０」の状態にあり、ＣＡ１０のＭＰＵが転送する二つのメッセージＭＳＧ0およびＭＳＧ1を送信用リングバッファ１２ａに格納してＴＯＰポインタを「２」に更新する。この時、ＴＯＰポインタ＝２、ＢＴＭポインタ＝０、ＣＭＰポインタ＝０となる。
【００４３】
そして、ＣＭＩ１１０は、ＴＯＰポインタ≠ＢＴＭポインタであることを検出し、ＭＳＧ0の転送を開始する。そして、ＭＳＧ0の転送を終了すると、ＣＭ２０のＭＰＵへ割込みを上げ、ＢＴＭポインタをインクリメントする。この時、ＴＯＰポインタ＝２、ＢＴＭポインタ＝１、ＣＭＰポインタ＝０となる。
【００４４】
一方、ＣＭ２０のＭＰＵは、ＣＭＩ１１０からの割込みによってメッセージが届いていることを認識し、受信用リングバッファ２２ａのＣＭＰポインタで指定された位置からＭＳＧ0を読み出して処理する。そして、ＭＳＧ0の処理が完了するとＣＭＰポインタをインクリメントするとともにＣＭＩ１１０に書き込み、ＭＳＧ0の受信が正常に終了したことをＣＭＩ１１０に通知する。この時、ＴＯＰポインタ＝２、ＢＴＭポインタ＝１、ＣＭＰポインタ＝１となる。
【００４５】
また、ＣＭＩ１１０は、ＴＯＰポインタ＝ＢＴＭポインタとなるまでメッセージの転送とＢＴＭポインタの更新を繰り返す。なお、ＣＭＩ１１０は、ＣＭ２０のＭＰＵによるＣＭＰポインタの更新を待つことなくメッセージの転送とＢＴＭポインタの更新を行なう。
【００４６】
このように、本実施例１によるディスクアレイ装置では、ＣＡ−メモリ１２とＣＭ−メモリ２２に同じ構成のリングバッファを設け、ＣＭＩ１１０にＴＯＰポインタ、ＢＴＭポインタおよびＣＭＰポインタを設け、これらのリングバッファとポインタを用いてＣＭＩ１１０がＣＡ−メモリ１２からＣＭ−メモリ２２にメッセージを転送することとしたので、ＣＡ１０のＭＰＵとＣＭ２０のＭＰＵとの間でアドレス情報を通信する必要がなく、メッセージの転送を高速に行なうともに、両ＭＰＵの負荷を軽減することができる。
【００４７】
特に、ＣＭ２０とＣＡ１０の間には、スイッチやルータといった汎用デバイスが入るため、ＣＭ２０のＭＰＵからＣＭＩ１１０の情報をリードするとリード完了までに時間がかかりＣＭ２０のＭＰＵの負荷が大きくなる。これを避けるため、ＣＡ１０のＭＰＵからＣＭ２０のＭＰＵへのメッセージ送信では、ＣＭＩ１１０は、ＣＭ−メモリ２２にＢＴＭポインタを書き込むことによって受信用リングバッファ２２ａの書き込み位置をＣＭ２０のＭＰＵに通知する。これによって、ＣＭ２０のＭＰＵは、ＣＭＩ１１０のレジスタをリードすることなく受信メッセージの格納場所を取得することができる。
【００４８】
なお、ここでは、ＣＡ１０からＣＭ２０へメッセージを転送する場合について説明したが、送信用リングバッファをＣＭ−メモリ２２に設け、受信用リングバッファをＣＡ−メモリ１２に設けることによって、同様の方式でＣＭ２０からＣＡ１０へメッセージを転送することができる。
【００４９】
また、ここでは、送信用リングバッファおよび受信用リングバッファにメッセージを格納する場合について説明したが、リングバッファにはメッセージの格納先のアドレスを格納することもできる。
【００５０】
図１−２は、メッセージの代わりにメッセージ格納アドレスを送信用リングバッファに格納する場合を示す図である。同図に示すように、送信用リングバッファ１２ｂには、ＭＳＧ0、ＭＳＧ1、ＭＳＧ2などの格納先のアドレスであるａｄｒ0、ａｄｒ1、ａｄｒ2などが格納される。
【００５１】
次に、本実施例１に係るＣＭＩ１１０の構成について説明する。図２は、本実施例１に係るＣＭＩ１１０の構成を示す機能ブロック図である。なお、ここでは、ＣＡ１０からＣＭ２０へメッセージを転送する場合について説明する。
【００５２】
同図に示すように、このＣＭＩ１１０は、ＴＯＰポインタ格納レジスタ１１１と、ＢＴＭポインタ制御レジスタ１１２と、ＣＭＰポインタ格納レジスタ１１３と、ＴＯＰ／ＢＴＭ比較部１１４と、ＴＯＰ／ＣＭＰ比較部１１５と、メッセージリングバッファリードモジュール１１６と、通知制御部１１７と、ＰＣＩバス制御部１１８および１１９とを有する。
【００５３】
ＴＯＰポインタ格納レジスタ１１１は、ＴＯＰポインタを格納するレジスタであり、ＣＡ１０のＭＰＵが送信用リングバッファ１２ａにメッセージを書き込んだ際に、このＴＯＰポインタ格納レジスタ１１１のＴＯＰポインタを更新する。
【００５４】
ＢＴＭポインタ制御レジスタ１１２は、ＢＴＭポインタを格納するレジスタであり、ＣＡ−メモリ１２からＣＭ−メモリ２２へのメッセージ転送の終了をメッセージリングバッファリードモジュール１１６から通知されるとＢＴＭポインタをインクリメントする。
【００５５】
ＣＭＰポインタ格納レジスタ１１３は、ＣＭＰポインタを格納するレジスタであり、ＣＭ２０のＭＰＵが受信メッセージに対する処理を完了すると、このＣＭＰポインタ格納レジスタ１１３のＣＭＰポインタを更新する。
【００５６】
ＴＯＰ／ＢＴＭ比較部１１４は、ＴＯＰポインタ格納レジスタ１１１に格納されたＴＯＰポインタとＢＴＭポインタ制御レジスタ１１２に格納されたＢＴＭポインタとを比較し、ＴＯＰポインタ≠ＢＴＭポインタであるときにメッセージリングバッファリードモジュール１１６にメッセージ転送開始を指示する処理部である。
【００５７】
ＴＯＰ／ＣＭＰ比較部１１５は、ＣＭ−メモリ２２の受信用リングバッファ２２ａに空領域があるか否かをＴＯＰポインタとＣＭＰポインタを比較して判定する処理部であり、受信用リングバッファ２２ａが空の状態でなく、ＴＯＰポインタとＣＭＰポインタの値が等しい場合には、受信用リングバッファ２２ａに空領域がないと判定する。
【００５８】
メッセージリングバッファリードモジュール１１６は、ＴＯＰ／ＢＴＭ比較部１１４からメッセージ転送開始指示を受け、ＴＯＰ／ＣＭＰ比較部１１５が受信用リングバッファ２２ａに空領域があると判定した場合に、ＣＡ−メモリ１２の送信用リングバッファ１２ａのＢＴＭポインタで指定される位置からメッセージを読み出してＣＭ−メモリ２２の受信用リングバッファ２２ａのＢＴＭポインタで指定される位置に送信する処理部である。また、このメッセージリングバッファリードモジュール１１６は、メッセージ転送が終了すると、転送終了をＢＴＭポインタ制御レジスタ１１２および通知制御部１１７へ通知する。
【００５９】
通知制御部１１７は、メッセージの転送終了をメッセージリングバッファリードモジュール１１６から通知されると、ＣＭ２０のＭＰＵへ割込みを発生して未処理メッセージが受信用リングバッファ２２ａにあることを通知する処理部である。
【００６０】
ＰＣＩバス制御部１１８は、ＣＡ１０のＭＰＵやＣＡ−メモリ１２と接続するＰＣＩバスを制御する制御部であり、ＰＣＩバス制御部１１９は、ＣＭ２０のＭＰＵやＣＭ−メモリ２２と接続するＰＣＩバスを制御する制御部である。
【００６１】
なお、図２では、送信用リングバッファ１２ａにメッセージを格納する場合のＣＭＩ１１０の構成を示したが、送信用リングバッファ１２ｂにメッセージ格納アドレスを格納する場合には、ＣＭＩの構成が異なってくる。
【００６２】
図３は、送信用リングバッファ１２ｂにメッセージ格納アドレスを格納する場合のＣＭＩの構成を示す機能ブロック図である。なお、ここでは説明の便宜上、図２に示した各部と同様の役割を果たす機能部については同一符号を付すこととしてその詳細な説明を省略する。
【００６３】
図３に示すように、このＣＭＩ１２０は、図２に示したＣＭＩ１１０と比較するとメッセージリングバッファリードモジュール１１６に代えてアドレスリングバッファリードモジュール１１６ａと、メッセージリードモジュール１１６ｂとを有する。
【００６４】
アドレスリングバッファリードモジュール１１６ａは、送信用リングバッファ１２ｂからメッセージ格納アドレスを読み出してメッセージリードモジュール１１６ｂに渡す処理部である。
【００６５】
メッセージリードモジュール１１６ｂは、アドレスリングバッファリードモジュール１１６ａから受け取ったメッセージ格納アドレスで指定されるＣＡ−メモリ１２からメッセージを読み出してＣＭ−メモリ２２の受信用リングバッファ２２ａの対応する位置に送信する処理部である。
【００６６】
このように、メッセージリングバッファリードモジュール１１６の代わりにアドレスリングバッファリードモジュール１１６ａと、メッセージリードモジュール１１６ｂを設けることによって、送信用リングバッファ１２ｂに格納アドレスが格納されたメッセージを転送することができる。
【００６７】
次に、ＣＡ１０からＣＭ２０へのメッセージ転送の動作シーケンスについて図４〜図６を用いて説明する。図４は、ＣＡ１０からＣＭ２０へ単一メッセージを転送する場合の動作シーケンスを説明するための説明図である。なお、ここでは、送信用リングバッファ１２ｂにメッセージ格納アドレスを格納する場合について説明する。
【００６８】
同図に示すように、このメッセージ転送では、ＣＡ１０のＭＰＵであるＣＡ−ＭＰＵ１１がＣＭＰポインタをＣＭＩ１２０のＣＭＰポインタ格納レジスタ１１３から読み出し、ＣＡ−メモリ１２に格納したＴＯＰポインタと比較して受信用リングバッファ２２ａに空領域があるか否かを調べる（１）。
【００６９】
具体的には、受信用リングバッファ２２ａが空でなく、ＣＭＰポインタとＴＯＰポインタが等しい場合には、受信用リングバッファ２２ａに空領域がないと判定する。なお、後述するように、受信用リングバッファ２２ａに空領域がない場合には、ＣＭＩ１２０が受信用リングバッファ２２ａへのメッセージの転送を行なわないため、この部分は省略することもできる。
【００７０】
そして、ＣＡ−ＭＰＵ１１は、受信用リングバッファ２２ａに空領域がある場合には、送信メッセージであるＭＳＧ0が格納されているアドレスｍｅｍａ0を送信用リングバッファ１２ｂに書き込み（２）、ＣＡ−メモリ１２のＴＯＰポインタを更新するとともに、ＣＭＩ１２０のＴＯＰポインタを更新する（３）。
【００７１】
すると、ＴＯＰポインタが更新されたＣＭＩ１２０は、ＣＭ２０がｅｎａｂｌｅ状態（メッセージ受信可能状態）であればＴＯＰポインタとＢＴＭポインタを比較し（４）、両者が異なるので、ｍｅｍａ0およびＭＳＧ0を読み出す（５）。
【００７２】
そして、読み出したＭＳＧ0を受信用リングバッファ２２ａのＢＴＭポインタが指定する位置に格納し、ＣＭ−メモリ２２のＢＴＭポインタを更新するとともにＣＭ２０のＭＰＵに割込みを発生する（６）。そして、ＢＴＭポインタ制御レジスタ１１２に格納されたＢＴＭポインタを更新し（７）、ＣＡ−ＭＰＵ１１に割込みを発生する（８）。
【００７３】
一方、割込みを受け取ったＣＭ２０のＭＰＵは、受信用リングバッファ２２ａの受信メッセージを処理するとＣＭＰポインタ格納レジスタ１１３に格納されたＣＭＰポインタを更新し（９）、受信メッセージの処理が完了したことをＣＭＩ１２０に通知する。
【００７４】
このように、ＣＭＩ１２０が、ＴＯＰポインタとＢＴＭポインタが異なる場合に、送信用リングバッファ１２ｂのＢＴＭポインタで指定される場所からメッセージ格納アドレスを読み出し、ＣＡ−メモリ１２のメッセージ格納アドレスで指定される領域に格納されたメッセージを受信用リングバッファ２２ａのＢＴＭポインタで指定される位置に転送することによって、ＣＡ１０とＣＭ２０のＭＰＵ間でアドレス情報を通信することなくメッセージを転送することができる。
【００７５】
図５は、ＣＡ１０からＣＭ２０へ二つのメッセージを転送する場合の動作シーケンスを説明するための説明図である。同図において、（１）〜（８）のシーケンスまでは、二つのメッセージ格納アドレスｍｅｍａ0およびｍｅｍａ1を送信用リングバッファ１２ｂに格納することとＴＯＰポインタとＢＴＭポインタの差が「２」であること以外は図４に示したシーケンスと同様である。
【００７６】
シーケンス（８）でＣＡ−ＭＰＵ１１に割込みを発生した後、ＣＭＩ１２０は、二つ目のメッセージＭＳＧ1を読み出す（９）。そして、読み出したＭＳＧ1を受信用リングバッファ２２ａのＢＴＭポインタが指定する位置に転送し、ＣＭ−メモリ２２のＢＴＭポインタを更新するとともにＣＭ２０のＭＰＵに割込みを発生する（１０）。そして、ＢＴＭポインタ制御レジスタ１１２に格納されたＢＴＭポインタを更新し（１１）、ＣＡ−ＭＰＵ１１に割込みを発生する（１２）。
【００７７】
一方、割込みを受け取ったＣＭ２０のＭＰＵは、受信リングバッファ２２ａの受信メッセージＭＳＧ0およびＭＳＧ1を処理するとＣＭＰポインタ格納レジスタ１１３に格納されたＣＭＰポインタを更新し（１３）、受信メッセージＭＳＧ0およびＭＳＧ1の処理が完了したことをＣＭＩ１２０に通知する。
【００７８】
そして、受信メッセージＭＳＧ0およびＭＳＧ1の処理が完了したことを通知されたＣＭＩ１２０は、ＣＡ−ＭＰＵ１１に割込みを発生する（１４）。また、ＣＭＩ１２０は、ＣＭＰポインタとＢＴＭポインタを比較し、両者が異なることから二つのメッセージの受信処理がＣＭ２０のＭＰＵによって行なわれたことを認識し、ＣＭ２０のＭＰＵに割込みを発生する（１５）。
【００７９】
そして、ＣＭ２０のＭＰＵがＣＭＰポインタ格納レジスタ１１３に格納されたＣＭＰポインタを更新し（１６）、ＣＭＰポインタが更新されたＣＭＩ１２０は、ＣＡ−ＭＰＵ１１に割込みを発生する（１７）。
【００８０】
このように、受信メッセージの処理が完了したことを通知されたＣＭＩ１２０が、ＣＭＰポインタとＢＴＭポインタを比較し、両者が異なる場合には複数のメッセージの受信処理がＣＭ２０のＭＰＵによって行なわれたことを認識し、ＣＭ２０のＭＰＵに割込みを発生し、ＣＭ２０のＭＰＵがＣＭＰポインタ格納レジスタ１１３に格納されたＣＭＰポインタを更新することによって、複数の受信メッセージの処理がまとめてＣＭ２０のＭＰＵで行なわれた場合にも、ＣＭＰポインタを正しく更新することができる。
【００８１】
なお、この例では、二つの受信メッセージの処理がまとめてＣＭ２０のＭＰＵで行なわれた場合について説明したが、二つ目のメッセージＭＳＧ1が受信用リングバッファ２２ａに書き込まれる前にＭＳＧ0の処理が終了してＣＭ２０のＭＰＵがＣＭＰポインタ格納レジスタ１１３に格納されたＣＭＰポインタを更新する場合もある。
【００８２】
図６は、ＣＡ１０からＣＭ２０へメッセージを転送するときに受信用リングバッファ２２ａがフルになった場合の動作シーケンスを説明するための説明図である。同図において、二つのメッセージＭＳＧ2およびＭＳＧ3のうちＭＳＧ2の受信用リングバッファ２２ａの書き込みまでは、図５に示した動作シーケンスと同様なシーケンスで行なわれる。
【００８３】
ただし、ここでは、ＭＳＧ3を書き込む領域は未処理のメッセージがあるため受信用リングバッファ２２ａがバッファフルの状態となる。また、シーケンスの最初にＣＡ−ＭＰＵ１１によって行なわれる受信用リングバッファ２２ａに空領域があるかないかの判定は省略されている。
【００８４】
受信用リングバッファ２２ａにＭＳＧ2を書き込んだＣＭＩ１２０は、ＣＭＰポインタとＢＴＭポインタの差が「１」であることから受信用リングバッファ２２ａがバッファフルの状態になったことを認識し、ＭＳＧ3の転送を停止してＣＡ−ＭＰＵ１１に割込みを発生する（７）。
【００８５】
その後、ＣＭ２０のＭＰＵにより受信メッセージの処理が終了して受信用リングバッファ２２ａに一つ空ができると、ＣＭ２０のＭＰＵは、ＣＭＰポインタ格納レジスタ１１３に格納されたＣＭＰポインタを更新する（８）。
【００８６】
すると、ＣＭＩ１２０は、メッセージの受信処理がＣＭ２０のＭＰＵによって行なわれたことを認識し、ＣＡ−ＭＰＵ１１に割込みを発生する（９）。また、ＣＭＩ１２０は、ＭＳＧ3をＣＡ−メモリ１２から読み出し（１０）、受信用リングバッファ２２ａに書き込んでＣＭ−メモリ２２のＢＴＭポインタを更新するとともにＣＭ２０のＭＰＵに割込みを発生する（１１）。そして、ＣＭＩ１２０は、ＣＡ−ＭＰＵ１１に割込みを発生する（１２）。
【００８７】
このように、ＣＭＩ１２０が受信用リングバッファ２２ａがバッファフルの状態にある場合に空領域ができるまでメッセージの転送を停止することによって、受信用リングバッファ２２ａの受信メッセージが処理前に上書きされてしまうことを防ぐことができる。
【００８８】
次に、ＣＭ２０からＣＡ１０へのメッセージ転送の動作シーケンスについて説明する。図７は、ＣＭ２０からＣＡ１０へのメッセージ転送の動作シーケンスを説明するための説明図である。なお、ここでは、ＣＭ−メモリ２２内の送信用リングバッファ２２ｃに送信メッセージを格納し、ＣＡ−メモリ１２内の受信用リングバッファ１２ｃに受信メッセージを格納する場合について説明する。
【００８９】
同図に示すように、このメッセージ転送では、ＣＭ２０のＭＰＵが送信メッセージであるＭＳＧ0およびＭＳＧ1を送信用リングバッファ２２ｃに書き込み、ＣＭ−メモリのＴＯＰポインタを更新するとともに、ＣＭＩ１１０のＴＯＰポインタを更新する（１）。
【００９０】
すると、ＴＯＰポインタが更新されたＣＭＩ１１０は、ＣＡ１０がｅｎａｂｌｅ状態（メッセージ受信可能状態）であれば、ＴＯＰポインタとＢＴＭポインタを比較し（２）、両者が異なるので、送信用リングバッファ２２ｃからＭＳＧ0を読み出して受信用リングバッファ１２ｃのＢＴＭポインタで指定される領域に書き込む（３）。
【００９１】
そして、ＢＴＭポインタ制御レジスタ１１２に格納されたＢＴＭポインタを更新するとともに、ＣＭ−メモリ２２のＢＴＭポインタを更新し、ＣＭ２０のＭＰＵに割込みを発生する（４）。また、ＣＡ−ＭＰＵ１１へ割込みを発生し、ＣＡ−ＭＰＵ１１がＢＴＭポインタ制御レジスタ１１２に格納されたＢＴＭポインタを読み出してＣＡ−メモリ１２内のＢＴＭポインタを更新する（５）。
【００９２】
そして、ＴＯＰポインタとＢＴＭポインタを比較すると、両者が異なるので、送信用リングバッファ２２ｃからＭＳＧ1を読み出して受信用リングバッファ１２ｃのＢＴＭポインタで指定される領域に書き込む（６）。そして、ＢＴＭポインタ制御レジスタ１１２に格納されたＢＴＭポインタを更新するとともに、ＣＭ−メモリ２２のＢＴＭポインタを更新し、ＣＭ２０のＭＰＵに割込みを発生する（７）。
【００９３】
また、ＣＡ−ＭＰＵ１１へ割込みを発生し、ＣＡ−ＭＰＵ１１がＢＴＭポインタ制御レジスタ１１２に格納されたＢＴＭポインタを読み出してＣＡ−メモリ１２内のＢＴＭポインタを更新する（８）。
【００９４】
その後、ＣＡ−ＭＰＵ１１が受信メッセージの処理を終了するとＣＭＰポインタ格納レジスタ１１３に格納されたＣＭＰポインタを更新する（９）。そして、ＣＭＩ１１０が、ＣＭＰポインタとＢＴＭポインタを比較すると両者が等しくないので、ＣＡ−ＭＰＵ１１の割込みを発生する（１０）。
【００９５】
このように、ＣＭＩ１１０が、ＴＯＰポインタとＢＴＭポインタが異なる場合に、送信用リングバッファ２２ｃのＢＴＭポインタで指定される場所からメッセージを読み出し、受信用リングバッファ１２ｃのＢＴＭポインタで指定される領域に転送することによって、ＣＡ１０とＣＭ２０のＭＰＵ間でアドレス情報を通信することなくＣＭ２０からＣＡ１０へメッセージを転送することができる。
【００９６】
上述してきたように、本実施例１では、ＣＡ−メモリ１２とＣＭ−メモリ２２に同一構成のリングバッファを設け、ＣＭＩ１２０にＴＯＰポインタを格納するＴＯＰポインタ格納レジスタ１１１とＢＴＭポインタを格納するＢＴＭポインタ制御レジスタ１１２を設け、ＴＯＰ／ＢＴＭ比較部１１４がＴＯＰポインタとＢＴＭポインタを比較して値が異なる場合に、アドレスリングバッファリードモジュール１１６ａが送信用リングバッファ１２ｂからＢＴＭポインタで指定されるメッセージ格納アドレスを読み出し、メッセージリードモジュール１１６ｂがメッセージ格納アドレスで指定されるＣＡ−メモリ１２からメッセージを読み出して受信用リングバッファ２２ａのＢＴＭポインタで指定される位置に書き込むこととしたので、ＣＡ１０とＣＭ２０のＭＰＵ間でアドレス情報を通信することなくメッセージを転送することができ、メッセージ通信を高速化するとともに、ＭＰＵの負荷を軽減することができる。
【００９７】
なお、ＰＣＩバス（特にＰＣＩ−Ｅｘｐｒｅｓｓ）においては、割込み通知が割込み専用線によってではなく、単純なライトによって行なわれる場合がある（ＭＳＩ：Message Signaled Interrupt）。この場合、様々な理由によって割込みライト転送が消失すると、メッセージそのものの送信が完了していてもＭＰＵがそれを認識できない。
【００９８】
そこで、このような割込みロストを検出できるように、ＣＭＩにメッセージの送信から受信完了通知（ＣＭＰのライト）までを監視するタイマを設け、所定の時間が経過すると異常が発生したことをＣＰＵに通知することによってメッセージ通信の信頼性を高めることもできる。
【００９９】
また、本実施例１では、ディスクアレイ装置１においてＣＡとＣＭのＭＰＵ間でメッセージを転送する場合について説明したが、本発明はこれに限定されるものではなく、他の装置のＭＰＵ間でメッセージを転送する場合にも同様に適用することができる。
【０１００】
また、本実施例１では、ＭＰＵとＰＣＩバスで接続する場合について説明したが、本発明はこれに限定されるものではなく、他の接続方式でＭＰＵと接続する場合にも同様に適用することができる。
【実施例２】
【０１０１】
ところで、上記実施例１では、ＣＡとＣＭとの間でメッセージ転送が正しく行なわれたか否かを確認するためには、別途エラーチェックを行なう必要がある。例えば、ＣＡからＣＭにメッセージを転送した場合、ＣＡのメモリからデータを読み出した際にパリティエラーが発生したか否かを確認するためには、ＣＭのＭＰＵはＣＡに別途エラーに関する情報を問い合わせる必要がある。このため、メッセージ転送が正しく行なわれたか否か確認するための処理時間が長くなる。
【０１０２】
そこで、本実施例２では、メッセージ転送が正しく行なわれたか否か確認するための処理時間を短縮するＣＭＩについて説明する。なお、本実施例２では、ＣＡからＣＭへメッセージ転送を行なう場合について説明する。また、ＣＡ−メモリ内の送信用リングバッファにはメッセージのアドレスが格納されるものとする。
【０１０３】
まず、本実施例２に係るＣＭＩによるステータス情報およびエラー情報のＣＭへの通知方法について説明する。ここで、ステータス情報は、メッセージ転送に関する状態についての情報であり、エラー情報をメッセージ転送に関して発生した異常についての情報である。
【０１０４】
図１１は、本実施例２に係るＣＭＩによるステータス情報およびエラー情報のＣＭへの通知方法を説明するための説明図である。同図に示すように、本実施例２に係るＣＡ３０は、ＣＡ−ＭＰＵ１１と、ＣＡ−メモリ１２と、ＬＳＩ２００とを有し、ＬＳＩ２００は、ＤＭＡによるメッセージ転送を行なうＣＭＩ２２０を有する。そして、ＣＭＩ２２０は、ＢＴＭポインタにステータス情報とエラー情報を追加して保持し、ＣＭ−メモリ２２内のＢＴＭポインタの更新時にこれらの情報をＣＭ−メモリ２２に書き込む。
【０１０５】
なお、メッセージ転送の際に発生するエラーとしては、ＣＡ−メモリ１２からメッセージまたはアドレスを読み出してＬＳＩ２００が受信するまでのパリティエラー、ＣＡ３０内部やＣＡ３０とＣＭ２０との間のバスエラー（タイムアウト、アボートなど）、指示されたメッセージ長と実際に転送したメッセージ長の不一致、ＣＭ側の受信用リングバッファフルによるデータ転送待ち、ＣＡ−ＭＰＵ１１によるメッセージ転送強制終了などがある。
【０１０６】
このように、本実施例２に係るＣＭＩは、ＢＴＭポインタにステータス情報とエラー情報を追加して保持し、ＣＭ−メモリ２２内のＢＴＭポインタの更新時にこれらの情報をＣＭ−メモリ２２に書き込むことによって、ＣＭ２０は、メッセージの内容が正常であるか異常であるかをこれらの追加情報を用いて確認することができ、確認のための処理時間を短縮することができる。
【０１０７】
次に、本実施例２に係るＣＭＩの構成について説明する。図１２は、本実施例２に係るＣＭＩの構成を示す機能ブロック図である。なお、ここでは説明の便宜上、図３に示した各部と同様の役割を果たす機能部については同一符号を付すこととしてその詳細な説明を省略する。
【０１０８】
図１２に示すように、このＣＭＩ２２０は、図３に示したＣＭＩ１２０と比較して、ＢＴＭポインタ制御レジスタ１１２の代わりにＢＴＭポインタ制御レジスタ２１２を有し、アドレスリングバッファリードモジュール１１６ａの代わりにアドレスリングバッファリードモジュール２１６ａを有し、メッセージリードモジュール１１６ｂの代わりにメッセージリードモジュール２１６ｂを有する。
【０１０９】
ＢＴＭポインタ制御レジスタ２１２は、ＢＴＭポインタに加えてステータス情報およびエラー情報を格納するレジスタである。図１３は、ＢＴＭポインタ制御レジスタ２１２の構成を示す図である。同図に示すように、このＢＴＭポインタ制御レジスタ２１２は、エラーが発生したか否かを示すエラー有／無と、ＢＴＭポインタと、エラーを特定するためのエラーコードと、メッセージ転送に関する状態を示すステータスコードとを有する。
【０１１０】
アドレスリングバッファリードモジュール２１６ａは、送信用リングバッファからメッセージ格納アドレスを読み出してメッセージリードモジュール２１６ｂに渡す処理部であり、メッセージ格納アドレスを読み出す際にパリティエラーやバスエラーなどが発生すると、ＢＴＭポインタ制御レジスタ２１２のエラー有／無をエラー有に設定し、エラーコードおよびステータスコードに、発生したエラーに対応するコードを設定する。
【０１１１】
メッセージリードモジュール２１６ｂは、ＣＡ−メモリ１２からメッセージを読み出してＣＭ−メモリ２２の受信用リングバッファの対応する位置に書き込む処理部であり、ＣＡ−メモリ１２からメッセージを読み出して受信用リングバッファに書き込む際にパリティエラー、バスエラー、転送長不一致、受信用リングバッファフルなどが発生すると、ＢＴＭポインタ制御レジスタ２１２のエラー有／無をエラー有に設定し、エラーコードおよびステータスコードに、発生したエラーに対応するコードを設定する。
【０１１２】
また、このメッセージリードモジュール２１６ｂは、メッセージを受信用リングバッファに書き込むと、ＣＭ−メモリ２２内のＢＴＭポインタ、エラー有／無、エラーコードおよびステータスコードを更新するとともに、転送終了をＢＴＭポインタ制御レジスタ２１２および通知制御部１１７に通知する。
【０１１３】
このように、ＢＴＭポインタ制御レジスタ２１２にエラー有／無、エラーコード、ステータスコードを設け、メッセージ転送中にエラーが発生した場合には、アドレスリングバッファリードモジュール２１６ａやメッセージリードモジュール２１６ｂがＢＴＭポインタ制御レジスタ２１２にエラーに対応する情報を書き込み、メッセージリードモジュール２１６ｂがＣＭ−メモリ２２内のＢＴＭポインタおよびこれらの追加情報を更新することによって、ＣＭ２０はメッセージ転送が正常に行なわれたか否かを容易に確認することができる。
【０１１４】
次に、本実施例２に係るディスクアレイ装置によるＣＡ３０からＣＭ２０へのメッセージ転送の動作シーケンス（エラーが発生した場合）について説明する。図１４は、本実施例２に係るディスクアレイ装置によるＣＡ３０からＣＭ２０へのメッセージ転送の動作シーケンス（エラーが発生した場合）を示す図である。
【０１１５】
同図に示すように、このメッセージ転送では、ＣＡ−ＭＰＵ１１が転送するメッセージ（ＭＳＧ0、ＭＳＧ1）をＣＡ−メモリ１２にライトし、それらの格納先を示すアドレス（ａｄｒ0、ａｄｒ1）を送信用リングバッファにライトするとともに、ＣＡ−メモリ１２およびＬＳＩ２００内のＴＯＰポインタを更新する（１）。
【０１１６】
そして、ＬＳＩ２００（ＣＭＩ２２０）は、ＴＯＰポインタが更新されると、ＴＯＰポインタとＢＴＭポインタとの比較を行ない、両者が不一致なのでメッセージ転送を開始する（２）。すなわち、ＬＳＩ２００は、送信用リングバッファのＢＴＭポインタで指定される位置からアドレス（ａｄｒ0）を読み出し、読み出したアドレスを用いてメッセージ（ＭＥＧ0）を読み出してＣＭ−メモリ２２の受信用リングバッファに書き込む（３）。
【０１１７】
そして、ＬＳＩ２００は、ＢＴＭポインタ制御レジスタ２１２を読み出し、ＢＴＭポインタの値に「１」を加えてステータス情報およびエラー情報とともにＣＭ−メモリ２２に書き込み（４）、ＣＭ−ＭＰＵ２１に一つのメッセージの転送完了を通知する（５）。
【０１１８】
また、ＬＳＩ２００は、内部のＢＴＭポインタを更新し（６）、ＣＡ−ＭＰＵ１１に一つのメッセージの転送完了を通知する（７）。そして、ＬＳＩ２００は、ＴＯＰポインタとＢＴＭポインタとの比較を行ない、両者が不一致なのでメッセージ転送を継続する（８）。すなわち、ＬＳＩ２００は、送信用リングバッファのＢＴＭポインタで指定される位置からアドレス（ａｄｒ1）を読み出し、読み出したアドレスを用いてメッセージ（ＭＳＧ1）を読み出してＣＭ−メモリ２２の受信用リングバッファに書き込む（９）。このとき、エラーが発生すると、ＬＳＩ２００は、発生したエラーに対応する情報をＢＴＭポインタ制御レジスタ２１２に書き込む。
【０１１９】
そして、ＬＳＩ２００は、ＢＴＭポインタ制御レジスタ２１２を読み出し、ＢＴＭポインタの値に「１」を加えてステータス情報およびエラー情報とともにＣＭ−メモリ２２に書き込み（１０）、ＣＭ−ＭＰＵ２１に一つのメッセージの転送完了を通知する（１１）。
【０１２０】
また、ＬＳＩ２００は、内部のＢＴＭポインタを更新し（１２）、ＣＡ−ＭＰＵ１１に一つのメッセージの転送完了を通知する（１３）。そして、ＬＳＩ２００は、ＴＯＰポインタとＢＴＭポインタとの比較を行ない、両者が一致するのでメッセージ転送を終了する（１４）。
【０１２１】
また、ＣＭ−ＭＰＵ２１は、ＣＭ−メモリ２２のステータス情報およびエラー情報をチェックし、エラーが発生したことを確認して必要なエラー処理を行なう（１５）。例えば、ＬＳＩ２００に対してデータの異常を通知し、リトライを依頼する。
【０１２２】
このように、エラーが発生した際に、ＬＳＩ２００（ＣＭＩ２２０）が、ＢＴＭポインタ制御レジスタ２１２に発生したエラーに対応するステータス情報およびエラー情報を書き込み、ＢＴＭポインタ制御レジスタ２１２のステータス情報およびエラー情報をＣＭ−メモリ２２のＢＴＭポインタの更新時にＣＭメモリ２２に書き込むことによって、ＣＭ−ＭＰＵ２１は、メッセージ転送が正常に行なわれたか否かの判定やエラー処理を短時間で行なうことができる。
【０１２３】
例えば、ＣＡ−メモリ１２が故障し、メッセージが正しく転送されない場合には、従来は、以下のような処理を行なう必要があった。
（１）ＣＭ−ＭＰＵ２１は異常を検出し、ＣＡ−ＭＰＵ１１にメッセージの再送を要求する。
（２）ＣＡ−ＭＰＵ１１は、ＣＡ３０内のＬＳＩ２００、ＣＡ−メモリ１２の状態をチェックする。
（３）ＣＡ−ＭＰＵ１１は、被疑箇所を洗い出し、ＣＭ−ＭＰＵ２１に対して情報を送る。
（４）ＣＭ−ＭＰＵ２１は、ＣＡ−ＭＰＵ１１から送信された情報に基づいてＣＡ３０が正常にデータの転送が行なえるか否かを判断し、再送か装置停止かを判断する。
【０１２４】
これに対して、本実施例２に係るディスクアレイ装置では、ＣＭＩ２２０がＢＴＭポインタとともにステータス情報およびエラー情報をＣＭ−メモリ２２に書き込むことで、上記（１）〜（３）の処理を不要とすることができる。
【０１２５】
特に、ＣＭが複数のＣＡと通信を行なう場合には、エラーが発生すると複数のＣＡから情報を取得して判断する必要があるため、本実施例２のように、各ＣＭＩがＢＴＭポインタとともにステータス情報およびエラー情報をＣＭ−メモリ２２に書き込むことでエラー処理を高速化することができる。
【０１２６】
例えば、図１５に示すように、ＣＡが二重化されたディスクアレイ装置では、本実施例２のように、各ＣＭＩがＢＴＭポインタとともにステータス情報およびエラー情報をＣＭ−メモリに書き込むことによって、片側ＣＡ停止による転送の未処理時間を少なくすることができる。
【０１２７】
上述してきたように、本実施例２では、ＢＴＭポインタ制御レジスタ２１２にＢＴＰポインタに加えてステータス情報およびエラー情報を格納する領域を設け、ＣＭ−メモリ２２のＢＴＭポインタを更新する際にこれらステータス情報およびエラー情報とともに更新することとしたので、ＣＭ−ＭＰＵ２１は、メッセージ転送が正常に行なわれたか否かの判断および異常処理を高速に行なうことができる。
【０１２８】
なお、本実施例２では、送信用リングバッファにメッセージのアドレスを格納する場合について説明したが、本発明はこれに限定されるものではなく、送信用リングバッファにメッセージを格納する場合にも同様に適用することができる。
【０１２９】
また、本実施例２では、ＣＡからＣＭにメッセージを転送する場合について説明したが、本発明はこれに限定されるものではなく、ＣＭからＣＡにメッセージを転送する場合、あるいは、二つのＭＰＵ間でリングバッファを用いてデータを転送する場合にも同様に適用することができる。
【０１３０】
（付記１）データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送装置であって、
転送されるデータを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データを書き込んだ際に更新する書込ポインタを記憶する書込ポインタ記憶手段と、
送信リングバッファから当該データ転送装置が送信データを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタを記憶する読出ポインタ記憶手段と、
前記書込ポインタ記憶手段により記憶された書込ポインタと前記読出ポインタ記憶手段により記憶された読出ポインタの値が同一であるか否かを判定するポインタ比較手段と、
前記ポインタ比較手段により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納されたデータを読み出して受信メモリに転送し、受信データを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に書き込むメモリ間転送手段と、
前記メモリ間転送手段による受信リングバッファへのデータの書き込みが完了すると、前記読出ポインタ記憶手段により記憶された読出ポインタを更新する読出ポインタ更新手段と、
を備えたことを特徴とするデータ転送装置。
【０１３１】
（付記２）受信リングバッファに転送されたデータのうち受信演算処理装置が受信処理を完了したデータの次のデータの位置を受信リングバッファの位置との相対値で指定し、受信演算処理装置が受信処理を完了した際に更新する完了ポインタを記憶する完了ポインタ記憶手段と、
前記完了ポインタ記憶手段により記憶された完了ポインタおよび前記書込ポインタ記憶手段により記憶された書込ポインタに基づいて受信リングバッファに空があるか否かを判定する空状況判定手段と、
をさらに備えたことを特徴とする付記１に記載のデータ転送装置。
【０１３２】
（付記３）前記メモリ間転送手段による受信リングバッファへのデータの書き込みが完了すると受信演算処理装置に割込みを発生する受信割込発生手段と、
前記受信割込発生手段による受信演算処理装置への割込みが発生すると時間の計測を開始する時間計測手段と、
前記時間計測手段により計測を開始された時間が所定の時間を経過したか否かを判定する監視手段と、
前記監視手段により所定の時間が経過したと判定された場合に、送信演算処理装置に対して異常を通知する異常通知手段と、
をさらに備えたことを特徴とする付記１または２に記載のデータ転送装置。
【０１３３】
（付記４）前記完了ポインタ記憶手段により記憶された完了ポインタが更新された際に前記読出ポインタ記憶手段により記憶された読出ポインタと比較し、完了ポインタと読出ポインタの値が異なる場合には受信演算処理装置により複数の受信データに対する処理が完了したと判断し、前記受信割込発生手段により受信演算処理装置に割込みを発生することによって受信演算処理装置に完了ポインタを更新させる割込再発行手段をさらに備えたことを特徴とする付記３に記載のデータ転送装置。
【０１３４】
（付記５）前記ポインタ比較手段は、受信演算処理装置がデータを受信可能な状態であるか否かを判定し、受信演算処理装置がデータを受信可能な状態である場合に書込ポインタと読出ポインタの値が同一であるか否かを判定することを特徴とする付記１〜４のいずれか一つに記載のデータ転送装置。
【０１３５】
（付記６）送信演算処理装置、送信メモリ、受信演算処理装置および受信メモリとＰＣＩバスで接続されたことを特徴とする付記１〜５のいずれか一つに記載のデータ転送装置。
【０１３６】
（付記７）ディスクアレイ装置のチャネルアダプタとキャッシュ制御装置との間でデータ転送を行ない、チャネルアダプタからキャッシュ制御装置にデータを転送する場合には送信演算処理装置と送信メモリはチャネルアダプタの演算処理装置とメモリであって受信演算処理装置と受信メモリはキャッシュ制御装置の演算処理装置とメモリであり、キャッシュ制御装置からチャネルアダプタにデータを転送する場合には送信演算処理装置と送信メモリはキャッシュ制御装置の演算処理装置とメモリであって受信演算処理装置と受信メモリはチャネルアダプタの演算処理装置とメモリであることを特徴とする付記６に記載のデータ転送装置。
【０１３７】
（付記８）データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送装置であって、
転送されるデータの格納アドレスを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データの格納アドレスを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データの格納アドレスを書き込んだ際に更新する書込ポインタを記憶する書込ポインタ記憶手段と、
送信リングバッファから当該データ転送装置が送信データの格納アドレスを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタを記憶する読出ポインタ記憶手段と、
前記書込ポインタ記憶手段により記憶された書込ポインタと前記読出ポインタ記憶手段により記憶された読出ポインタの値が同一であるか否かを判定するポインタ比較手段と、
前記ポインタ比較手段により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納アドレスが格納されたデータを読み出して受信メモリに転送し、受信データを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に書き込むメモリ間転送手段と、
前記メモリ間転送手段による受信リングバッファへのデータの書き込みが完了すると、前記読出ポインタ記憶手段により記憶された読出ポインタを更新する読出ポインタ更新手段と、
を備えたことを特徴とするデータ転送装置。
【０１３８】
（付記９）データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送装置であって、
転送されるデータを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データを書き込んだ際に更新する書込ポインタを記憶する書込ポインタ記憶手段と、
送信リングバッファから当該データ転送装置が送信データを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタを記憶する読出ポインタ記憶手段と、
前記書込ポインタ記憶手段により記憶された書込ポインタと前記読出ポインタ記憶手段により記憶された読出ポインタの値が同一であるか否かを判定するポインタ比較手段と、
前記ポインタ比較手段により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納されたデータを読み出して受信メモリに転送し、受信データの格納アドレスを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に転送先のアドレスを書き込むメモリ間転送手段と、
前記メモリ間転送手段による受信リングバッファへのデータの転送先アドレスの書き込みが完了すると、前記読出ポインタ記憶手段により記憶された読出ポインタを更新する読出ポインタ更新手段と、
を備えたことを特徴とするデータ転送装置。
【０１３９】
（付記１０）データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送装置であって、
転送されるデータの格納アドレスを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データの格納アドレスを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データの格納アドレスを書き込んだ際に更新する書込ポインタを記憶する書込ポインタ記憶手段と、
送信リングバッファから当該データ転送装置が送信データの格納アドレスを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタを記憶する読出ポインタ記憶手段と、
前記書込ポインタ記憶手段により記憶された書込ポインタと前記読出ポインタ記憶手段により記憶された読出ポインタの値が同一であるか否かを判定するポインタ比較手段と、
前記ポインタ比較手段により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納アドレスが格納されたデータを読み出して受信メモリに転送し、受信データの格納アドレスを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に転送先のアドレスを書き込むメモリ間転送手段と、
前記メモリ間転送手段による受信リングバッファへのデータの転送先アドレスの書き込みが完了すると、前記読出ポインタ記憶手段により記憶された読出ポインタを更新する読出ポインタ更新手段と、
を備えたことを特徴とするデータ転送装置。
【０１４０】
（付記１１）データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送装置のデータ転送方法であって、
転送されるデータを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データを書き込んだ際に更新する書込ポインタと、送信リングバッファから当該データ転送装置が送信データを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタの値が同一であるか否かを判定するポインタ比較工程と、
前記ポインタ比較工程により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納されたデータを読み出して受信メモリに転送し、受信データを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に書き込むメモリ間転送工程と、
前記メモリ間転送工程による受信リングバッファへのデータの書き込みが完了すると、前記読出ポインタを更新する読出ポインタ更新工程と、
を含んだことを特徴とするデータ転送方法。
【０１４１】
（付記１２）受信リングバッファに転送されたデータのうち受信演算処理装置が受信処理を完了したデータの次のデータの位置を受信リングバッファの位置との相対値で指定し、受信演算処理装置が受信処理を完了した際に更新する完了ポインタおよび前記書込ポインタに基づいて受信リングバッファに空があるか否かを判定する空状況判定工程
をさらに含んだことを特徴とする付記１１に記載のデータ転送方法。
【０１４２】
（付記１３）前記メモリ間転送工程による受信リングバッファへのデータの書き込みが完了すると受信演算処理装置に割込みを発生する受信割込発生工程と、
前記受信割込発生工程による受信演算処理装置への割込みが発生すると時間の計測を開始する時間計測工程と、
前記時間計測工程により計測を開始された時間が所定の時間を経過したか否かを判定する監視工程と、
前記監視工程により所定の時間が経過したと判定された場合に、送信演算処理装置に対して異常を通知する異常通知工程と、
をさらに含んだことを特徴とする付記１１または１２に記載のデータ転送方法。
【０１４３】
（付記１４）前記完了ポインタが更新された際に前記読出ポインタと比較し、完了ポインタと読出ポインタの値が異なる場合には受信演算処理装置により複数の受信データに対する処理が完了したと判断し、受信演算処理装置に割込みを発生することによって受信演算処理装置に完了ポインタを更新させる割込再発行工程をさらに含んだことを特徴とする付記１３に記載のデータ転送方法。
【０１４４】
（付記１５）前記ポインタ比較工程は、受信演算処理装置がデータを受信可能な状態であるか否かを判定し、受信演算処理装置がデータを受信可能な状態である場合に書込ポインタと読出ポインタの値が同一であるか否かを判定することを特徴とする付記１１〜１４のいずれか一つに記載のデータ転送方法。
【０１４５】
（付記１６）送信演算処理装置、送信メモリ、受信演算処理装置および受信メモリとＰＣＩバスで接続されたことを特徴とする付記１１〜１５のいずれか一つに記載のデータ転送方法。
【０１４６】
（付記１７）ディスクアレイ装置のチャネルアダプタとキャッシュ制御装置との間でデータ転送を行ない、チャネルアダプタからキャッシュ制御装置にデータを転送する場合には送信演算処理装置と送信メモリはチャネルアダプタの演算処理装置とメモリであって受信演算処理装置と受信メモリはキャッシュ制御装置の演算処理装置とメモリであり、キャッシュ制御装置からチャネルアダプタにデータを転送する場合には送信演算処理装置と送信メモリはキャッシュ制御装置の演算処理装置とメモリであって受信演算処理装置と受信メモリはチャネルアダプタの演算処理装置とメモリであることを特徴とする付記１６に記載のデータ転送方法。
【０１４７】
（付記１８）データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送方法であって、
転送されるデータの格納アドレスを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データの格納アドレスを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データの格納アドレスを書き込んだ際に更新する書込ポインタと、送信リングバッファから当該データ転送装置が送信データの格納アドレスを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタの値が同一であるか否かを判定するポインタ比較工程と、
前記ポインタ比較工程により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納アドレスが格納されたデータを読み出して受信メモリに転送し、受信データを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に書き込むメモリ間転送工程と、
前記メモリ間転送工程による受信リングバッファへのデータの書き込みが完了すると、前記読出ポインタを更新する読出ポインタ更新工程と、
を含んだことを特徴とするデータ転送方法。
【０１４８】
（付記１９）データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送方法であって、
転送されるデータを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データを書き込んだ際に更新する書込ポインタと、送信リングバッファから当該データ転送装置が送信データを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタの値が同一であるか否かを判定するポインタ比較工程と、
前記ポインタ比較工程により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納されたデータを読み出して受信メモリに転送し、受信データの格納アドレスを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に転送先のアドレスを書き込むメモリ間転送工程と、
前記メモリ間転送工程による受信リングバッファへのデータの転送先アドレスの書き込みが完了すると、前記読出ポインタを更新する読出ポインタ更新工程と、
を含んだことを特徴とするデータ転送方法。
【０１４９】
（付記２０）データ送信側の演算処理装置である送信演算処理装置が読み書きするメモリである送信メモリから、データ受信側の演算処理装置である受信演算処理装置が読み書きするメモリである受信メモリへデータの転送を行なうデータ転送方法であって、
転送されるデータの格納アドレスを格納するリングバッファである送信リングバッファに対して送信演算処理装置が送信データの格納アドレスを書き込む位置を送信リングバッファの位置との相対値で指定し、送信演算処理装置が送信リングバッファに送信データの格納アドレスを書き込んだ際に更新する書込ポインタと、送信リングバッファから当該データ転送装置が送信データの格納アドレスを読み出す位置を送信リングバッファの位置との相対値で指定する読出ポインタの値が同一であるか否かを判定するポインタ比較工程と、
前記ポインタ比較工程により書込ポインタと読出ポインタの値が異なると判定された場合に、送信リングバッファの読出ポインタで指定された位置に格納アドレスが格納されたデータを読み出して受信メモリに転送し、受信データの格納アドレスを格納するリングバッファである受信リングバッファの該読出ポインタで指定される位置に転送先のアドレスを書き込むメモリ間転送工程と、
前記メモリ間転送工程による受信リングバッファへのデータの転送先アドレスの書き込みが完了すると、前記読出ポインタを更新する読出ポインタ更新工程と、
を含んだことを特徴とするデータ転送方法。
【産業上の利用可能性】
【０１５０】
以上のように、本発明に係るデータ転送装置およびデータ転送方法は、ディスクアレイ装置に有用であり、特に、ＣＡおよびＣＭのＭＰＵの負荷を軽減することが必要な場合に適している。
【図面の簡単な説明】
【０１５１】
【図１−１】本実施例１に係るディスクアレイ装置によるＣＡからＣＭへのデータ転送方式を説明するための説明図である。
【図１−２】メッセージの代わりにメッセージ格納アドレスを送信用リングバッファに格納する場合を示す図である。
【図２】本実施例１に係るＣＭＩの構成を示す機能ブロック図である。
【図３】送信用リングバッファにメッセージ格納アドレスを格納する場合のＣＭＩの構成を示す機能ブロック図である。
【図４】ＣＡからＣＭへ単一メッセージを転送する場合の動作シーケンスを説明するための説明図である。
【図５】ＣＡからＣＭへ二つのメッセージを転送する場合の動作シーケンスを説明するための説明図である。
【図６】ＣＡからＣＭへメッセージを転送するときに受信用リングバッファがフルになった場合の動作シーケンスを説明するための説明図である。
【図７】ＣＭからＣＡへのメッセージ転送の動作シーケンスを説明するための説明図である。
【図８】ディスクアレイ装置の構成を示す図である。
【図９】ＣＭからＣＡへの従来のデータ転送シーケンス（リードシーケンス）を説明するための説明図である。
【図１０】ＣＡからＣＭへの従来のデータ転送シーケンス（ライトシーケンス）を説明するための説明図である。
【図１１】本実施例２に係るＣＭＩによるステータス情報およびエラー情報のＣＭへの通知方法を説明するための説明図である。
【図１２】本実施例２に係るＣＭＩの構成を示す機能ブロック図である。
【図１３】ＢＴＭポインタ制御レジスタ２１２の構成を示す図である。
【図１４】本実施例２に係るディスクアレイ装置によるＣＡからＣＭへのメッセージ転送の動作シーケンス（エラーが発生した場合）を示す図である。
【図１５】ＣＡが二重化されたディスクアレイ装置の構成を示す図である。
【符号の説明】
【０１５２】
１，７    ディスクアレイ装置
２    ホスト
３    ファイバーチャネルリンク
１０，３０，７０    ＣＡ（チャネルアダプタ）
１１，７１    ＣＡ−ＭＰＵ
１２，７２    ＣＡ−メモリ
１２ａ，１２ｂ    送信用リングバッファ
２０，８０    ＣＭ（キャッシュ制御部）
２１，８１    ＣＭ−ＭＰＵ
２２，８２    ＣＭ−メモリ
２２ａ    受信用リングバッファ
９０    ディスク
１００，２００，７００    ＬＳＩ
１１０，１２０，２２０    ＣＭＩ
１１１    ＴＯＰポインタ格納レジスタ
１１２，２１２    ＢＴＭポインタ制御レジスタ
１１３    ＣＭＰポインタ格納レジスタ
１１４    ＴＯＰ／ＢＴＭ比較部
１１５    ＴＯＰ／ＣＭＰ比較部
１１６    メッセージリングバッファリードモジュール
１１６ａ，２１６ａ    アドレスリングバッファリードモジュール
１１６ｂ，２１６ｂ    メッセージリードモジュール
１１７    通知制御部
１１８    ＰＣＩバス制御部
１１９    ＰＣＩバス制御部
【図１−１】
2006190257.tif 000003
【図１−２】
2006190257.tif 000004
【図２】
2006190257.tif 000005
【図３】
2006190257.tif 000006
【図４】
2006190257.tif 000007
【図５】
2006190257.tif 000008
【図６】
2006190257.tif 000009
【図７】
2006190257.tif 000010
【図８】
2006190257.tif 000011
【図９】
2006190257.tif 000012
【図１０】
2006190257.tif 000013
【図１１】
2006190257.tif 000014
【図１２】
2006190257.tif 000015
【図１３】
2006190257.tif 000016
【図１４】
2006190257.tif 000017
【図１５】
2006190257.tif 000018