(57)【要約】【課題】  受信側プロセッサにとって負担が少ない方法で、プロセッサ間での情報の授受が行えるようにする。【解決手段】  情報処理装置（１００）は、複数のプロセッサを用いて情報を処理する装置であって、１又は複数のローカルメモリ（５６０）を有する１以上の第１プロセッサ（５５０）と、ターゲットの第１プロセッサ（５５０）が有するローカルメモリ（５６０）にライト情報を直接ライトする１以上の第２プロセッサ（３６０）とを備える。第２プロセッサ（３６０）は、第１プロセッサ（５５０）についてのローカルメモリアドレスが記録されたアドレスマップを記憶しており、そのアドレスマップからローカルメモリアドレスを取得し、その取得したローカルメモリアドレスにライト情報をライトする。【選択図】図１
2005157830.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサを用いて情報を処理する装置において、
１又は複数の第１ローカルメモリを有する１以上の第１プロセッサと、
ターゲットの第１プロセッサが有するターゲット第１ローカルメモリにライト情報を直接ライトする、及び／又は、前記ターゲット第１ローカルメモリからリード情報を直接リードする１以上の第２プロセッサと
を備える情報処理装置。
【請求項２】
前記１以上の第１プロセッサの各々についての第１ローカルメモリアドレスが記録された第１アドレスマップを記憶する第１アドレスマップ記憶手段を更に備え、
前記１以上の第２プロセッサの各々が、前記第１アドレスマップから前記ターゲット第１プロセッサの第１ローカルメモリアドレスを取得し、前記取得した第１ローカルメモリアドレスに前記ライト情報をライトする、及び／又は、前記取得した第１ローカルメモリアドレスから前記リード情報をリードする、
請求項１記載の情報処理装置。
【請求項３】
前記１以上の第２プロセッサの各々が持つ１又は複数の第２ローカルメモリと、
前記１以上の第１プロセッサの各々についての第１ローカルメモリアドレスが記録された第１アドレスマップを記憶する第１アドレスマップ記憶手段と、
前記１以上の第２プロセッサの各々についての第２ローカルメモリアドレスが記録された第２アドレスマップを記憶する第２アドレスマップ記憶手段と
を更に備え、
前記１以上の第２プロセッサの各々が、前記ターゲット第１ローカルメモリのどこにライトするかの第１ローカルメモリライトアドレスを前記第１アドレスマップから取得し、前記取得した第１ローカルメモリライトアドレスにライト情報をライトし、
前記ターゲット第１プロセッサが、前記第１ローカルメモリライトアドレスにライトされた前記ライト情報がリードコマンドの場合、前記リードコマンドに応答して、前記リードコマンドの発行元のターゲット第２プロセッサの第２ローカルメモリライトアドレスを前記第２アドレスマップから取得し、前記取得した第２ローカルメモリライトアドレスに、前記第１ローカルメモリ内の情報を読み出してライトする、
請求項１記載の情報処理装置。
【請求項４】
前記第２プロセッサ側から前記ライト情報を受けて前記ターゲット第１プロセッサ側に転送する中継デバイスを備え、
前記中継デバイスは、中継メモリを備え、前記ライト情報の転送を行う場合、該ライト情報を前記中継メモリに一時的に格納してから前記転送を行うことと、該ライト情報を前記中継メモリに格納せずに前記転送を行うこととを選択的に実行する、
請求項１記載の情報処理装置。
【請求項５】
前記１以上の第１プロセッサを有する１又は複数の第１デバイスを備え、
前記中継デバイスは、前記１又は複数の第１デバイスに接続され、前記受信したライト情報を、前記１又は複数の第１デバイスにそれぞれ送信する１又は複数の送信部を更に備え、或る第２デバイスから受信したライト情報を、前記ターゲット第１プロセッサを有するターゲット第１デバイスに送信する場合、そのライト情報を送信するターゲット送信部がビジー状態でなければ、前記受信したライト情報を前記中継メモリに格納せずに前記ターゲット送信部から前記ターゲット第１デバイスに送信し、前記ターゲット送信部がビジー状態であれば、前記ライト情報を前記中継メモリに一時的に格納し、前記ターゲット送信部のビジー状態が解除された場合に、前記中継メモリからライト情報を読み出して前記ターゲット送信部から前記ターゲット第１デバイスに送信する、
請求項４記載の情報処理装置。
【請求項６】
前記中継メモリには、１以上の送信元又は送信先にそれぞれ対応した１以上のライト情報格納領域が用意されており、
前記中継デバイスは、受信した前記ライト情報を前記中継メモリに一時的に格納する場合、そのライト情報を、それの送信元又は送信先に対応したターゲットライト情報格納領域に格納し、その場合に、前記ターゲットライト情報格納領域に蓄積された情報量が第１の閾値を超えたならば、その旨を表す第１閾値超過通知を所定の第２デバイスに送信し、
前記第１閾値超過通知を受けた第２デバイスは、前記ターゲットローカルメモリ又は前記ターゲット第１プロセッサに対するライト情報の発行頻度又は情報量を減らす、
請求項４記載の情報処理装置。
【請求項７】
前記中継メモリには、１以上の送信元又は送信先にそれぞれ対応した１以上のライト情報格納領域が用意されており、
前記中継デバイスは、受信した前記ライト情報を前記中継メモリに一時的に格納する場合、該ライト情報を、それの送信元又は送信先に対応したターゲットライト情報格納領域に格納し、その場合に、前記ターゲットライト情報格納領域に蓄積された情報量が第２の閾値を超えたならば、その旨を表す第２閾値超過通知を所定の第２デバイスに送信し、
前記第２デバイスは、前記ライト情報を前記ターゲットローカルメモリに直接ライトする直接ライト方式と、前記ライト情報を前記中継メモリに格納し前記ターゲット第１プロセッサが前記中継メモリから前記ライト情報を取得できるようにする間接ライト方式とを選択的に実行するようになっており、前記第２閾値超過通知を受けない場合は、前記直接ライト方式で前記ライト情報を送信し、前記第２閾値超過通知を受けた場合は、前記間接ライト方式で前記ライト情報を送信する、
請求項４記載の情報処理装置。
【請求項８】
前記中継デバイスは、前記ターゲットライト情報格納領域に蓄積された情報量が、前記第１の閾値よりも大きい第２の閾値を超えたならば、その旨を表す第２閾値超過通知を前記第２デバイスに送信し、
前記第２デバイスは、前記ライト情報を前記ターゲットローカルメモリに直接ライトする直接ライト方式と、前記ライト情報を前記中継メモリに格納し前記ターゲット第１プロセッサが前記中継メモリから前記ライト情報を取得できるようにする間接ライト方式とを選択的に実行するようになっており、前記第１閾値超過通知を受けても前記第２閾値超過通知を受けない場合は、前記直接ライト方式で前記ライト情報を送信し、前記第２閾値超過通知を受けた場合は、前記直接ライト方式を止めて前記間接ライト方式で前記ライト情報を送信する、
請求項６記載の情報処理装置。
【請求項９】
前記第２閾値超過通知を受けた第２デバイスが前記間接ライト方式を選択した後、以下の（１）及び（２）の場合、
（１）前記ターゲットライト情報格納領域の情報量が前記第２の閾値よりも小さい第３の閾値以下になった場合、
（２）前記間接ライト方式が選択されている状態が一定時間経過した場合
の少なくとも１つの場合に、該第２デバイスは前記間接ライト方式を止めて前記直接ライト方式を選択する、
請求項７記載の情報処理装置。
【請求項１０】
前記１以上の第１プロセッサを有する１又は複数の第１デバイスと、
前記１以上の第２プロセッサを有する１又は複数の第２デバイスと、
前記第２デバイスから前記ターゲット第１プロセッサを有する前記第１デバイスに前記ライト情報を中継する中継デバイスと
を備え、
前記中継デバイスは、
前記１又は複数の第１デバイスにそれぞれ情報を送信する１又は複数の送信部と、
前記１又は複数の第２デバイスからそれぞれ情報を受信する１又は複数の受信部と
を備え、前記１又は複数の送信部の各々と、前記１又は複数の受信部の各々とが互いに独立して動作する、
請求項１記載の情報処理装置。
【請求項１１】
前記１以上の第１プロセッサの各々のローカルメモリには、前記１以上の第２プロセッサにそれぞれ対応した１以上のローカル格納領域が用意されており、
前記１以上の第２プロセッサの各々は、その第２プロセッサに対応した前記ローカル格納領域のローカルメモリアドレスが各第１プロセッサ毎に記録されたアドレスマップを記憶しており、前記ライト情報をターゲットの第１プロセッサのローカルメモリに書き込む場合、前記アドレスマップから前記ターゲット第１プロセッサに対応したローカルメモリアドレスを取得し、前記取得したローカルメモリアドレスに前記ライト情報をライトする、
請求項１記載の情報処理装置。
【請求項１２】
前記ターゲット第１プロセッサのローカルメモリアドレスを有する前記ライト情報を前記第２プロセッサ側から受信して前記ターゲット第１プロセッサ側に転送する中継デバイスを備え、
前記１以上の第２プロセッサの各々は、前記中継デバイスを介して、論理的な又は物理的な１以上のパスでそれぞれ前記１以上の第１プロセッサと通信可能に接続されており、
前記中継デバイスは、前記１以上のパスにそれぞれ対応付けられた１以上のローカルメモリアドレスを各第２プロセッサ毎に記憶しており、前記受信したライト情報の転送を行う場合、そのライト情報に含まれている前記ローカルメモリアドレスに対応したターゲットパスを特定し、特定されたターゲットパスを介して前記ライト情報を前記ターゲット第１プロセッサ側に転送する、
請求項１記載の情報処理装置。
【請求項１３】
複数のマイクロプロセッサと物理的又は論理的な記憶装置とを備え、前記複数のマイクロプロセッサを用いて、上位装置からの情報を前記記憶装置に記憶させることの記憶制御を行う記憶制御装置において、
１又は複数の第１ローカルメモリを有する１以上の第１マイクロプロセッサと、
１以上の第２マイクロプロセッサと、
前記１以上の第１マイクロプロセッサの各々についての第１ローカルメモリアドレスが記録された第１アドレスマップを記憶する第１アドレスマップ記憶部と
を備え、
前記１以上の第２マイクロプロセッサの各々が、ターゲット第１ローカルメモリのどこにライトするかの第１ローカルメモリライトアドレスを前記第１アドレスマップから取得し、前記取得した第１ローカルメモリライトアドレスにライト情報をライトする、
記憶制御装置。
【請求項１４】
前記１以上の第１マイクロプロセッサを搭載した１又は複数の第1デバイスと、
前記１以上の第２マイクロプロセッサを搭載した１又は複数の第２デバイスと、
前記１又は複数の第１デバイスと前記１又は複数の第２デバイスと間の通信を中継する中継デバイスと
を備え、
前記第１ローカルメモリには、前記１以上の第２マイクロプロセッサにそれぞれ対応した１以上のローカル格納領域が用意されており、
前記第１アドレスマップには、前記１以上の第１マイクロプロセッサにそれぞれ対応した１以上のローカル格納領域の第１ローカルメモリアドレスが記録されており、
前記１以上の第２マイクロプロセッサの各々は、前記中継デバイスを介して、論理的な又は物理的な１以上のパスでそれぞれ前記１以上の第１マイクロプロセッサと接続可能であり、前記ライト情報を出力する際、前記第１アドレスマップから前記ターゲット第１プロセッサに対応した第１ローカル格納領域の第１ローカルメモリアドレスを取得して、前記取得した第１ローカルメモリアドレスを含んだ第１送信先情報を有するライト情報を出力し、
前記中継デバイスは、前記１以上のパスにそれぞれ対応付けられた１以上の第２送信先情報を記憶しており、前記受信したライト情報の転送を行う場合、前記第１と第２の送信先情報に基づいてターゲットパスを特定し、特定されたターゲットパスを介して前記ライト情報を前記ターゲット第１デバイスに転送し、
前記ターゲット第1デバイスは、前記中継デバイスから受信したライト情報を、そのライト情報に含まれている前記第１ローカルメモリアドレスに書き込む、
請求項１３記載の記憶制御装置。
【請求項１５】
前記中継デバイスは、中継メモリを備え、前記ライト情報の転送を行う場合、そのライト情報を前記中継メモリに一時的に格納してから前記転送を行うことと、そのライト情報を前記中継メモリに格納せずに前記転送を行うこととを選択的に実行する、
請求項１４記載の記憶制御装置。
【請求項１６】
前記中継デバイスは、前記１又は複数の第１デバイスに通信可能に接続され、前記受信したライト情報を前記１又は複数の第１デバイスにそれぞれ送信する１又は複数の送信部を更に備え、或る第２デバイスから受信したライト情報を、前記ターゲット第１デバイスに送信する場合、前記ターゲットパスがビジー状態でなければ、前記受信したライト情報を前記中継メモリに格納せずに前記ターゲットパスを介して前記ターゲット第１デバイスに送信し、前記ターゲットパスがビジー状態であれば、前記ライト情報を前記中継メモリに一時的に格納し、前記ターゲットパスのビジー状態が解除された場合に、前記中継メモリからライト情報を読み出して前記ターゲットパスを介して前記ターゲット第１デバイスに送信する、
請求項１４記載の記憶制御装置。
【請求項１７】
前記中継メモリには、ライト情報の１以上の送信元又は送信先にそれぞれ対応した１以上のライト情報格納領域が用意されており、
前記中継デバイスは、受信した前記ライト情報を前記中継メモリに一時的に格納する場合、そのライト情報を、それの送信元又は送信先に対応したターゲットライト情報格納領域に格納し、その場合に、前記ターゲットライト情報格納領域に蓄積された情報量が第１の閾値を超えたならば、その旨を表す第１閾値超過通知を所定の第２デバイスに送信し、
前記第１閾値超過通知を受けた第２デバイスは、前記ターゲットローカルメモリ又は前記ターゲット第１マイクロプロセッサに対するライト情報の発行頻度又は情報量を減らす、
請求項１５記載の記憶制御装置。
【請求項１８】
前記中継デバイスは、
前記１又は複数の第１デバイスにそれぞれ情報を送信する１又は複数の送信部と、
前記１又は複数の第２デバイスからそれぞれ情報を受信する１又は複数の受信部と
を備え、前記１又は複数の送信部の各々と、前記１又は複数の受信部の各々とが互いに独立して動作する、
請求項１４記載の記憶制御装置。
【請求項１９】
前記中継デバイスは、前記中継メモリとは別の受信バッファを備えており、
前記１又は複数の受信部の各々は、前記第２デバイスから受信したライト情報を一旦前記受信バッファに格納する、
請求項１８記載の記憶制御装置。
【請求項２０】
複数のマイクロプロセッサと物理的又は論理的な記憶装置とを備え、前記複数のマイクロプロセッサを用いて、上位装置からの情報を前記記憶装置に記憶させることの記憶制御を行う記憶制御装置において、
１又は複数の第１ローカルメモリを有する１以上の第１マイクロプロセッサと、
１又は複数の第２ローカルメモリを有する１以上の第２マイクロプロセッサと、
前記１以上の第１マイクロプロセッサの各々についての第１ローカルメモリアドレスが記録された第１アドレスマップを記憶する第１アドレスマップ記憶手段と、
前記１以上の第２マイクロプロセッサの各々についての第２ローカルメモリアドレスが記録された第２アドレスマップを記憶する第２アドレスマップ記憶手段と
を備え、
前記１以上の第２マイクロプロセッサの各々が、ターゲット第１ローカルメモリのどこにライトするかの第１ローカルメモリライトアドレスを前記第１アドレスマップから取得し、前記取得した第１ローカルメモリライトアドレスにリードコマンドをライトし、
前記ターゲット第１マイクロプロセッサが、前記第１ローカルメモリライトアドレスにライトされた前記リードコマンドに応答して、前記リードコマンドの発行元のターゲット第２マイクロプロセッサの第２ローカルメモリライトアドレスを前記第２アドレスマップから取得し、前記取得した第２ローカルメモリライトアドレスに、前記第１ローカルメモリ内のリード情報を読み出してライトする、
記憶制御装置。
【請求項２１】
複数のプロセッサを用いて情報を処理する方法において、
１以上の第２プロセッサの各々が、１又は複数のローカルメモリを有する１以上の第１プロセッサの各々についてのローカルメモリアドレスが記録されたアドレスマップから、ターゲット第１プロセッサのローカルメモリアドレスを取得するステップと、
前記１以上の第２プロセッサの各々が、前記取得したローカルメモリアドレスにライト情報をライトする、及び／又は、前記取得したローカルメモリアドレスからリード情報をリードするステップと
を有する情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサを用いて情報処理を行うための技術に関し、具体的には、例えば、ＲＡＩＤ（Redundant Array of Independent Inexpensive Disks）システムに備えられる記憶制御装置に関する。
【背景技術】
【０００２】
複数のプロセッサを用いて情報処理を行う装置の一つに、例えば、アレイ状に配列された複数の物理ディスクを有する記憶装置に対するホスト装置からのアクセスを制御する記憶制御装置がある。記憶制御装置には、例えば、ホスト装置と通信するための２以上のチャネルアダプタと、記憶装置と通信するための２以上のディスクアダプタとが備えられており、各アダプタには、１又は複数のマイクロプロセッサ（以下、「ＭＰ」と略記する）が備えられている。
【０００３】
チャネルアダプタに搭載されているＭＰ（以下、「チャネルＭＰ」と言う）と、ディスクアダプタに搭載されているＭＰ（以下、「ディスクＭＰ」と言う）との間では制御情報がやり取りされる。例えば特許文献１に開示の技術によれば、チャネルＭＰ１７とディスクＭＰ２１との間での制御情報のやり取りは、共有メモリ３２を介して行われる。具体的には、例えば、チャネルＭＰ１７がディスクＭＰ２１に制御情報を送る場合、チャネルＭＰ１７が、共有メモリ３２の所定の領域に制御情報をライトし、一方、ディスクＭＰ２１が、共有メモリ３２の所定領域を定期的にポーリングし、その所定領域に制御情報があれば、その所定領域から制御情報を取得する。
【０００４】
【特許文献１】特開2001-306265（例えば段落４４）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上述した従来技術によれば、ＭＰ間での制御情報のやり取りは、共有メモリを介して行われており、受信側のＭＰが、共有メモリの所定領域を定期的にポーリングする。共有メモリをポーリングすることは、受信側ＭＰにとって少なからず負担となる。また、共有メモリを複数ＭＰが頻繁にリードを繰り返すことは、ＭＰ数が多くなるほど、共有メモリの性能ボトルネック、共有メモリパスの性能ボトルネックが発生しやすく、それ故、装置全体の性能を低下させてしまう可能性がある。
【０００６】
従って、本発明の目的は、受信側プロセッサにとって負担が少ない方法で、プロセッサ間での情報の授受が行えるようにすることにある。
【０００７】
本発明の別の目的は、装置全体の性能を低下させること無く、プロセッサ間での情報の授受が行えるようにすることにある。
【０００８】
本発明の他の目的は、後述の説明から明らかになるであろう。
【課題を解決するための手段】
【０００９】
本発明の第１の側面に従う情報処理装置は、１又は複数のローカルメモリを有する１以上の第１プロセッサと、ターゲットの第１プロセッサが有するローカルメモリにライト情報を直接ライトする、及び／又は、前記ターゲット第１ローカルメモリからリード情報（リード対象の情報）を直接リードする１以上の第２プロセッサとを備える。
【００１０】
ここで、「プロセッサ」とは、例えば、演算処理を行うモジュール、具体例としては、ＣＰＵ（Central Processing Unit）或いはＭＰ（Micro Processor）がある。
【００１１】
また、「ローカルメモリ」とは、第１プロセッサのみが使用可能なメモリであって、例えば、ＣＰＵが利用するＲＡＭ等のメモリ、或いは、ＭＰの内部又は外部に搭載されたメモリ（ＲＡＭ或いはそれとは別のキャッシュメモリ）等がある。
【００１２】
また、「ライト情報」は、例えば、ターゲット第１プロセッサに対するメッセージ、又は、その第１プロセッサのローカルメモリから情報をリードすることを要求するリードコマンドである。
【００１３】
この発明の第１の好適な実施形態では、前記１以上の第１プロセッサの各々についてのローカルメモリアドレスが記録されたアドレスマップを記憶するアドレスマップ記憶手段を更に備え、前記１以上の第２プロセッサの各々が、前記アドレスマップから前記ターゲット第１プロセッサのローカルメモリアドレスを取得し、前記取得したローカルメモリアドレスに前記ライト情報をライトする、及び／又は、前記取得した第１ローカルメモリアドレスから前記リード情報をリードする。
【００１４】
この発明の第２の好適な実施形態では、前記１以上の第２プロセッサの各々が持つ１又は複数の第２ローカルメモリと、前記１以上の第１プロセッサの各々についての第１ローカルメモリアドレスが記録された第１アドレスマップを記憶する第１アドレスマップ記憶手段（これは、例えば、第２プロセッサが有しても良い）と、前記１以上の第２プロセッサの各々についての第２ローカルメモリアドレスが記録された第２アドレスマップを記憶する第２アドレスマップ記憶手段（これは、例えば、第１プロセッサが有しても良い）とが更に備えられる。前記１以上の第２プロセッサの各々が、前記ターゲット第１ローカルメモリのどこにライトするかの第１ローカルメモリライトアドレスを取得し（例えば、更に、前記ターゲット第１ローカルメモリのどこからリードするかの第１ローカルメモリリードアドレスを前記第１アドレスマップから取得し）、前記取得した第１ローカルメモリライトアドレスに所定のリードコマンド（例えば、前記取得した第１ローカルメモリリードアドレスを指定するリードコマンド）をライトする。前記ターゲット第１プロセッサが、前記第１ローカルメモリライトアドレスにライトされた前記リードコマンドに応答して、前記リードコマンドの発行元のターゲット第２プロセッサの第２ローカルメモリライトアドレスを前記第２アドレスマップから取得し、前記取得した第２ローカルメモリライトアドレスに、前記第１ローカルメモリ内の情報（例えば、前記リードコマンドから識別される前記第１ローカルメモリリードアドレス内の情報）をライトする。
【００１５】
この発明の第３の好適な実施形態では、情報処理装置が、記第２プロセッサ側から前記ライト情報を受けて前記ターゲット第１プロセッサ側に転送する中継デバイスを備える。前記中継デバイスは、中継メモリを備え、前記ライト情報の転送を行う場合、該ライト情報を前記中継メモリに一時的に格納してから前記転送を行うことと、該ライト情報を前記中継メモリに格納せずに前記転送を行うこととを選択的に実行する。
【００１６】
この発明の第４の好適な実施形態では、情報処理装置が、前記１以上の第１プロセッサを有する１又は複数の第１デバイスを備える。前記中継デバイスは、前記１又は複数の第１デバイスに通信可能に接続され、前記受信したライト情報を前記１又は複数の第１デバイスにそれぞれ送信する１又は複数の送信部を更に備え、或る第２デバイスから受信したライト情報を、前記ターゲット第１プロセッサを有するターゲット第１デバイスに送信する場合、そのライト情報を送信するターゲット送信部がビジー状態でなければ、前記受信したライト情報を前記中継メモリに格納せずに前記ターゲット送信部から前記ターゲット第１デバイスに送信し、前記ターゲット送信部がビジー状態であれば、前記ライト情報を前記中継メモリに一時的に格納し、前記ターゲット送信部のビジー状態が解除された場合に、前記中継メモリからライト情報を読み出して前記ターゲット送信部から前記ターゲット第１デバイスに送信する。
【００１７】
ここで、「送信部」とは、受信したライト情報を前記ターゲット第1デバイスに送信することができるものならどのようなものでも良く、例えば、通信ポート或いはパスが考えられる。
【００１８】
この発明の第５の好適な実施形態では、前記第３の好適な実施形態において、前記中継メモリには、ライト情報の１以上の送信元又は送信先にそれぞれ対応した１以上のライト情報格納領域が用意されており、前記中継デバイスは、受信した前記ライト情報を前記中継メモリに一時的に格納する場合、そのライト情報を、それの送信元又は送信先に対応したターゲットライト情報格納領域に格納し、その場合に、前記ターゲットライト情報格納領域に蓄積された情報量が第１の閾値を超えたならば、その旨を表す第１閾値超過通知を所定の第２デバイスに送信する。前記第１閾値超過通知を受けた第２デバイスは、前記ターゲットローカルメモリ又は前記ターゲット第１プロセッサに対するライト情報の発行頻度又は情報量を減らす。
【００１９】
ここで、「送信元」とは、例えば、ライト情報を出力する第２プロセッサ又はそれを搭載した第２デバイスであり、「送信先」とは、例えば、ライト情報の格納先となるローカルメモリ又はそれを有する第１プロセッサである。
【００２０】
「ライト情報の発行頻度又は情報量を減らす」方法として、例えば、以下の２つの方法がある。
【００２１】
（１）前記中継デバイスが、前記ライト情報送信元の第２プロセッサ、又はそれを含む全ての第２プロセッサに対して所定の第1割り込み信号を送信し、その第１割込み信号を受けた第２プロセッサそれ自身が、前記ターゲット第１プロセッサに対するライト情報の発行頻度又は情報量を減らす。
【００２２】
（２）前記第１閾値超過通知を受けた第２プロセッサそれ自身は、前記ターゲット第１プロセッサに対するライト情報の発行頻度又は情報量を減らさず、前記１以上の第２プロセッサを搭載した第２デバイスにおける情報送信制御部が、第２プロセッサから出力されたライト情報を受け、そのライト情報が、前記ターゲット第1プロセッサのローカルメモリを宛先とするものであれば、そのライト情報を前記中継デバイスに送信することを中止或いは中断し、一方、そのライト情報が、前記ターゲット第1プロセッサのローカルメモリを宛先とするものでなければ、そのライト情報を前記中継デバイスに送信する。
【００２３】
この発明の第６の好適な実施形態では、前記第３の好適な実施形態において、前記中継メモリには、前記１以上の送信元又は送信先にそれぞれ対応した１以上のライト情報格納領域が用意されており、
前記中継デバイスは、受信した前記ライト情報を前記中継メモリに一時的に格納する場合、該ライト情報を、それの送信元又は送信先に対応したターゲットライト情報格納領域に格納し、その場合に、前記ターゲットライト情報格納領域に蓄積された情報量が第２の閾値を超えたならば、その旨を表す第２閾値超過通知を所定の第２デバイスに送信する。前記第２デバイスは、前記ライト情報を前記ターゲットローカルメモリに直接ライトする直接ライト方式と、前記ライト情報を前記中継メモリに格納し前記ターゲット第１プロセッサが前記中継メモリから前記ライト情報を取得できるようにする間接ライト方式とを選択的に実行するようになっており、前記第２閾値超過通知を受けない場合は、前記直接ライト方式で前記ライト情報を送信し（例えば、前記ターゲット第１プロセッサのローカルメモリアドレスを含んだライト情報を送信し）、前記第２閾値超過通知を受けた場合は、前記間接ライト方式で前記ライト情を送信する（例えば、前記中継メモリにおける前記ターゲット第１格納領域に対応した中継メモリアドレスを含んだライト情報を送信する）。
【００２４】
この発明の第７の好適な実施形態では、前記第５の好適な実施形態において、前記中継デバイスは、前記ターゲットライト情報格納領域に蓄積された情報量が、前記第１の閾値よりも大きい第２の閾値を超えたならば、その旨を表す第２閾値超過通知を前記第２デバイスに送信する。前記第２デバイスは、前記ライト情報を前記ターゲットローカルメモリに直接ライトする直接ライト方式と、前記ライト情報を前記中継メモリに格納し前記ターゲット第１プロセッサが前記中継メモリから前記ライト情報を取得できるようにする間接ライト方式とを選択的に実行するようになっており、前記第１閾値超過通知を受けても前記第２閾値超過通知を受けない場合は、前記直接ライト方式で前記ライト情報を送信し、前記第２閾値超過通知を受けた場合は、前記直接ライト方式を止めて前記間接ライト方式で前記ライト情報を送信する。
【００２５】
この発明の第８の好適な実施形態では、前記第６の好適な実施形態において、前記第２閾値超過通知を受けた第２デバイスが前記間接ライト方式を選択した後、以下の（１）及び（２）の場合、
（１）前記ターゲットライト情報格納領域の情報量が前記第２の閾値よりも小さい第３の閾値以下になった場合、
（２）前記間接ライト方式が選択されている状態が一定時間経過した場合
の少なくとも１つの場合に、該第２デバイスは前記間接ライト方式を止めて前記直接ライト方式を選択する。
【００２６】
この発明の第９の好適な実施形態では、情報処理装置は、前記１以上の第１プロセッサを有する１又は複数の第１デバイスと、前記１以上の第２プロセッサを有する１又は複数の第２デバイスと、前記第２デバイスから前記ターゲット第１プロセッサを有する前記第１デバイスに前記ライト情報を中継する中継デバイスとを備える。前記中継デバイスは、前記１又は複数の第１デバイスにそれぞれ情報を送信する１又は複数の送信部と、前記１又は複数の第２デバイスからそれぞれ情報を受信する１又は複数の受信部とを備える。前記１又は複数の送信部の各々と、前記１又は複数の受信部の各々とは、互いに独立して動作する。例えば、１又は複数の送信部と１又は複数の受信部との間に、１以上の記憶デバイス（例えば揮発性又は不揮発性メモリ）が用意され、１又は複数の送信部と１又は複数の受信部との間でやり取りされる情報が前記１以上の記憶デバイスに格納されることにより、上記互いに独立した動作が可能となる。
【００２７】
この発明の第１０の好適な実施形態では、前記１以上の第１プロセッサの各々のローカルメモリには、前記１以上の第２プロセッサにそれぞれ対応した１以上のローカル格納領域が用意されている。前記１以上の第２プロセッサの各々は、その第２プロセッサに対応した前記ローカル格納領域のローカルメモリアドレスが各第１プロセッサ毎に記録されたアドレスマップを記憶しており、前記ライト情報をターゲットの第１プロセッサのローカルメモリに書き込む場合、前記アドレスマップから前記ターゲット第１プロセッサに対応したローカルメモリアドレスを取得し、前記取得したローカルメモリアドレスに前記ライト情報をライトする。
【００２８】
この発明の第１１の好適な実施形態では、情報処理装置は、前記ターゲット第１プロセッサのローカルメモリアドレスを含んだ前記ライト情報を前記第２プロセッサ側から受信して前記ターゲット第１プロセッサ側に転送する中継デバイスを備える。前記１以上の第２プロセッサの各々は、前記中継デバイスを介して、論理的な又は物理的な１以上のパスでそれぞれ前記１以上の第１プロセッサと通信可能に接続されている。前記中継デバイスは、前記１以上のパスにそれぞれ対応付けられた１以上のローカルメモリアドレスを各第２プロセッサ毎に記憶しており、前記受信したライト情報の転送を行う場合、そのライト情報に含まれている前記ローカルメモリアドレスに対応したターゲットパスを特定し、特定されたターゲットパスを介して前記ライト情報を前記ターゲット第１プロセッサ側に転送する。
【００２９】
本発明の第２の側面に従う記憶制御装置は、複数のマイクロプロセッサと物理的又は論理的な記憶装置とを備え、前記複数のマイクロプロセッサを用いて、上位装置からの情報を前記記憶装置に記憶させることの記憶制御を行う記憶制御装置であって、１又は複数の第１ローカルメモリを有する１以上の第１マイクロプロセッサと、１以上の第２マイクロプロセッサと、前記１以上の第１マイクロプロセッサの各々についての第１ローカルメモリアドレスが記録された第１アドレスマップを記憶する第１アドレスマップ記憶手段とを備える。前記１以上の第２マイクロプロセッサの各々が、前記ターゲット第１ローカルメモリのどこにライトするかの第１ローカルメモリライトアドレスを取得し、前記取得した第１ローカルメモリライトアドレスにライト情報をライトする。
【００３０】
この発明の第１の好適な実施形態では、前記１以上の第１マイクロプロセッサを搭載した１又は複数の第1デバイスと、前記１以上の第２マイクロプロセッサを搭載した１又は複数の第２デバイスと、前記１又は複数の第１デバイスと前記１又は複数の第２デバイスと間の通信を中継する中継デバイスとが更に備えられる。前記第１ローカルメモリには、前記１以上の第２マイクロプロセッサにそれぞれ対応した１以上のローカル格納領域が用意されている。前記第１アドレスマップには、前記１以上の第１マイクロプロセッサにそれぞれ対応した１以上のローカル格納領域の第１ローカルメモリアドレスが記録されている。前記１以上の第２マイクロプロセッサの各々は、前記中継デバイスを介して、論理的な又は物理的な１以上のパスでそれぞれ前記１以上の第１マイクロプロセッサと通信可能に接続されていて、前記ライト情報を出力する際、前記第１アドレスマップから前記ターゲット第１プロセッサに対応した第１ローカル格納領域の第１ローカルメモリアドレスを取得して、前記取得した第１ローカルメモリアドレスを含んだ第１送信先情報（例えば、ローカルメモリアドレスのみ、或いは更にライト情報の宛先マイクロプロセッサ識別情報を含んだ情報）を有するライト情報を出力する。前記中継デバイスは、前記１以上のパスにそれぞれ対応付けられた１以上の第２送信先情報（例えばローカルメモリアドレス又はそれに対応付けられた宛先マイクロプロセッサ識別情報）を記憶しており、前記受信したライト情報の転送を行う場合、前記第１と第２の送信先情報に基づいてターゲットパスを特定し、特定されたターゲットパスを介して前記ライト情報を前記ターゲット第１デバイスに転送する。前記ターゲット第1デバイスは、前記中継デバイスから受信したライト情報を、そのライト情報に含まれている前記第１ローカルメモリアドレスに書き込む。
【００３１】
この発明の第２の好適な実施形態では、前記中継デバイスは、中継メモリを備え、前記ライト情報の転送を行う場合、そのライト情報を前記中継メモリに一時的に格納してから前記転送を行うことと、そのライト情報を前記中継メモリに格納せずに前記転送を行うこととを選択的に実行する。
【００３２】
この発明の第３の好適な実施形態では、第２の好適な実施形態において、前記中継デバイスは、前記１又は複数の第１デバイスに通信可能に接続され、前記受信したライト情報を前記１又は複数の第１デバイスにそれぞれ送信する１又は複数の送信部を更に備え、或る第２デバイスから受信したライト情報を、前記ターゲット第１デバイスに送信する場合、前記ターゲットパスがビジー状態でなければ、前記受信したライト情報を前記中継メモリに格納せずに前記ターゲットパスを介して前記ターゲット第１デバイスに送信し、前記ターゲットパスがビジー状態であれば、前記ライト情報を前記中継メモリに一時的に格納し、前記ターゲットパスのビジー状態が解除された場合に、前記中継メモリからライト情報を読み出して前記ターゲットパスを介して前記ターゲット第１デバイスに送信する。
【００３３】
この発明の第４の好適な実施形態では、第２の好適な実施形態において、前記中継メモリには、ライト情報の１以上の送信元又は送信先にそれぞれ対応した１以上のライト情報格納領域が用意されている。前記中継デバイスは、受信した前記ライト情報を前記中継メモリに一時的に格納する場合、そのライト情報を、それの送信元又は送信先に対応したターゲットライト情報格納領域に格納し、その場合に、前記ターゲットライト情報格納領域に蓄積された情報量が第１の閾値を超えたならば、その旨を表す第１閾値超過通知を所定の第２デバイスに送信する。前記第１閾値超過通知を受けた第２デバイスは、前記ターゲットローカルメモリ又は前記ターゲット第１マイクロプロセッサに対するライト情報の発行頻度又は情報量を減らす。
【００３４】
ここで、「送信元」とは、例えば、ライト情報を出力する第２マイクロプロセッサ又はそれを搭載した第２デバイスであり、「送信先」とは、例えば、ライト情報の格納先となるローカルメモリ又はそれを有する第１マイクロプロセッサである。
【００３５】
この発明の第５の好適な実施形態では、第２の好適な実施形態において、前記中継デバイスは、前記１又は複数の第１デバイスにそれぞれ情報を送信する１又は複数の送信部と、前記１又は複数の第２デバイスからそれぞれ情報を受信する１又は複数の受信部とを備え、前記１又は複数の送信部の各々と、前記１又は複数の受信部の各々とが互いに独立して動作する。
【００３６】
この発明の第６の好適な実施形態では、第５の好適な実施形態において、前記中継デバイスは、前記中継メモリとは別の受信バッファを備えており、前記１又は複数の受信部の各々は、前記第２デバイスから受信したライト情報を一旦前記受信バッファに格納する。
【００３７】
本発明の第３の側面に従う記憶制御装置は、複数のマイクロプロセッサと物理的又は論理的な記憶装置とを備え、前記複数のマイクロプロセッサを用いて、上位装置からの情報を前記記憶装置に記憶させることの記憶制御を行う記憶制御装置であって、１又は複数の第１ローカルメモリを有する１以上の第１マイクロプロセッサと、１又は複数の第２ローカルメモリを有する１以上の第２マイクロプロセッサと、前記１以上の第１マイクロプロセッサの各々についての第１ローカルメモリアドレスが記録された第１アドレスマップを記憶する第１アドレスマップ記憶手段と、前記１以上の第２マイクロプロセッサの各々についての第２ローカルメモリアドレスが記録された第２アドレスマップを記憶する第２アドレスマップ記憶手段とを備える。前記１以上の第２マイクロプロセッサの各々が、ターゲット第１ローカルメモリのどこにライトするかの第１ローカルメモリライトアドレスを前記第１アドレスマップから取得し、前記取得した第１ローカルメモリライトアドレスにリードコマンドをライトする。前記ターゲット第１マイクロプロセッサが、前記第１ローカルメモリライトアドレスにライトされた前記リードコマンドに応答して、前記リードコマンドの発行元のターゲット第２マイクロプロセッサの第２ローカルメモリライトアドレスを前記第２アドレスマップから取得し、前記取得した第２ローカルメモリライトアドレスに、前記第１ローカルメモリ内のリード情報を読み出してライトする。
【００３８】
なお、上述した「ライト情報」又は「リード情報」は、例えば、プロセッサ間でやり取りされるデータ固定長（又はデータ可変長の）メッセージ（換言すれば制御情報）であっても良いし、ユーザに指定された書き込み対象又は読み出し対象のユーザ所望情報（例えば、アプリケーションソフト等によって作成されたファイル）であっても良い。
【発明の効果】
【００３９】
本発明に従う情報処理装置及び記憶制御装置によれば、第２プロセッサが、ターゲットの第１プロセッサが有するローカルメモリにライト情報を直接ライトする、及び／又は、そのローカルメモリからリード情報を直接リードする。例えば、直接ライトの場合、ターゲット第１プロセッサは、自分が持つローカルメモリをポーリングすることで、第２プロセッサから出力されたライト情報を取得することができる。第１プロセッサがローカルメモリをリードする時間長は、共有メモリをリードする時間長に比べて短い（例えば１０分の１以下程度である）。このため、第１プロセッサは、負担少なく、第２プロセッサから出力されたライト情報を取得することができる。換言すれば、従来のような共有メモリの定期リードによるプロセッサ、共有メモリ及び共有メモリパスの性能の低下を防止することができる。
【発明を実施するための最良の形態】
【００４０】
以下、図面を参照して、本発明の一実施形態に係る情報処理装置が適用されたディスクアレイ制御装置について説明する。
【実施例１】
【００４１】
図１は、本発明の第一実施例に係るディスクアレイ制御装置の構成を示す。
【００４２】
この図に示すディスクアレイ制御装置１００は、例えば、ＲＡＩＤ（Redundant Array of Independent Inexpensive Disks）装置であり、この装置１００には、１又は複数のホストコンピュータ２００と、複数の物理ディスク群９とが接続される。
【００４３】
ホストコンピュータ（以下、適宜「ホスト」と略記）２００は、例えば、パーソナルコンピュータやワークステーション等であり、ＣＰＵ（Central Processing Unit）やメモリ等を備えたコンピュータマシンである。ホスト２００のＣＰＵが各種プログラムを実行することにより、種々の機能が実現される。ホスト２００は、例えば、ＬＡＮ等の通信ネットワークを介して、ディスクアレイ制御装置１００に対し、所望のデータを物理ディスク群９（例えば論理デバイス又は論理ユニットと呼ばれる論理記録領域）にライトするライトコマンドや、所望のデータを物理ディスク群９からリードするリードコマンドをディスクアレイ制御装置１００に送信する。
【００４４】
物理ディスク群９は、アレイ状に配設された複数のディスク型記憶装置６００を有する。物理ディスク群９上には、物理的な記憶領域又は論理的な記憶領域（例えば論理デバイス又は論理ユニットと呼ばれる論理記録領域）が設けられ、各記憶領域に、ホストコンピュータ２００からのデータがライトされる。なお、ディスク型記憶装置６００としては、例えば、ハードディスク装置、フレキシブルディスク装置、半導体記憶装置等の種々のデバイスを用いることができる。
【００４５】
ディスクアレイ制御装置１００は、ホストコンピュータ２００の複数の物理ディスク群９に対するアクセスを制御するための装置である。具体的には、ディスクアレイ制御装置１００は、ホストコンピュータ２００からリード要求を受けて、リード要求されたデータを物理ディスク群９（例えば所定の論理記憶領域）から取得してそれをホストコンピュータ２００に転送したり、ホストコンピュータ２００からライトデータと共にライト要求を受けて、そのライトデータを物理ディスク群９に格納したりする。ディスクアレイ制御装置１００には、複数（又は１つ）のホストアダプタ３００と、複数（又は１つ）のディスクアダプタ５００と、複数のホストアダプタ３００と複数のディスクアダプタ５００とに接続される中継アダプタ４００とが備えられる。
【００４６】
各ホストアダプタ３００には、１又は複数台のホストコンピュータ２００とＬＡＮ等の通信ネットワークを介して通信可能に接続され、且つ、中継アダプタ４００に所定の通信インターフェースを介して通信可能に接続される（例えばスター接続される）。各ホストアダプタ３００は、ハードウェア回路（又は、ソフトウェア或いはそれらの組み合わせ）で構成することができ、このディスクアレイ制御装置１００とそれに接続されているホストコンピュータ２００との間の通信を制御する。各ホストアダプタ３００は、接続されているホスト２００と通信を行うための通信インターフェースを有し、また、ホスト２００から受信した各種コマンドを解釈して処理するためのコマンドプロセッサ機能も有する。具体的には、各ホストアダプタ３００は、１又は複数のマイクロプロセッサ（以下、「ホスト側ＭＰ」と言う）３６０と、各ホスト側ＭＰ３６０に専用の１以上（例えば１つの）のローカルメモリ（以下、「ホスト側ＬＭ」と言う）３５０と、各ホスト側ＭＰ３６０と中継アダプタ４００とを通信可能に接続するためのホストハブ（換言すれば、例えば、ホスト側ＭＰ３６０の中継アダプタ４００に対するアダプタ）３１０とを備える。
【００４７】
各ディスクアダプタ５００には、１台（又は複数台）の物理ディスク群９と所定の通信インターフェース（例えばＳＡＮ（Storage Area Network）等の通信ネットワーク）を介して通信可能に接続され、且つ、中継アダプタ４００に所定の通信インターフェースを介して通信可能に接続される（例えばスター接続される）。各ディスクアダプタ５００は、ハードウェア回路（又は、ソフトウェア或いはそれらの組み合わせ）で構成することができ、このディスクアレイ制御装置１００とそれに接続されている物理ディスク群９との間の通信を制御する。具体的には、各ディスクアダプタ５００は、１又は複数のマイクロプロセッサ（以下、「ディスク側ＭＰ」と言う）５５０と、各ディスク側ＭＰ５５０に専用の１以上のローカルメモリ（以下、「ディスク側ＬＭ」と言う）５６０と、各ディスク側ＭＰ５５０と中継アダプタ４００とを通信可能に接続するためのディスクハブ（換言すれば、例えば、ディスク側ＭＰ５５０の中継アダプタ４００に対するアダプタ）５１０とを備える。
【００４８】
中継アダプタ４００は、複数のアダプタ３００、５００間の通信を制御するためのポートコントローラ４１０と、複数のＭＰ３６０、５５０間で共有可能な共有メモリ（以下、Shared Memoryを略して「ＳＭ」と言う）４７０とを備える。ＳＭ４７０には、直接ＬＭライト方式のときにメッセージが一時的に格納されるバッファ領域と、間接ＬＭライト方式のときにメッセージが格納されるキャッシュ領域とが含まれている。なお、バッファ領域及びキャッシュ領域のうち少なくともバッファ領域には、各ＭＰ３６０及び５５０毎に対応したサブバッファ領域が用意されている。このため、例えば、或るホスト側ＭＰ３６０が直接ＬＭライト方式で出力したメッセージが一時的にＳＭ４７０に格納される場合、メッセージ送信元のホスト側ＭＰ３６０に対応したサブバッファ領域にメッセージが格納される。なお、上述した「直接ＬＭライト方式」とは、メッセージの送信側ＭＰ３６０（又は５５０）が、受信側ＭＰ５５０（又は３６０）の介在無しに、そのＭＰ５５０（又は３６０）が有するＬＭ５６０（３５０）にメッセージをライトする方式を言う。一方、「間接ＬＭライト方式」とは、実質的には共有メモリ方式のことであり、送信側ＭＰ３６０（又は５５０）がＳＭ４７０のキャッシュ領域にメッセージをライトし、受信側ＭＰ５５０（又は３６０）がそのキャッシュ領域をポーリングすることにより、その受信側ＭＰ５５０（又は３６０）がメッセージを取得し自分のＬＭ５６０（３５０）にライトする方式を言う。
【００４９】
以上のような構成の下で、ホスト側ＭＰ３６０が、ディスク側ＭＰ５５０の介在無しで、中継アダプタ４００のポートコントローラ４１０を経由して、所定の又は所望のディスク側ＬＭ５６０にメッセージ（ＭＰ間でやり取りされる制御情報）を直接書き込むことができる。同様に、ディスク側ＭＰ５５０が、ホスト側ＭＰ３６０の介在無しで、中継アダプタ４００のポートコントローラ４１０を経由して、所望のホスト側ＬＭ３５０にメッセージを直接書き込むことができる。これを可能とした一つの工夫として、各ＭＰ３６０、５５０に、少なくとも１つの他のＭＰ３６０又は５５０が有する少なくとも１つのＬＭ３５０又は５６０のアドレス（以下、「ＬＭアドレス」と言う）が記録されたアドレスマップが格納されていることが挙げられる。それにより、各ＭＰ３６０、５５０は、そのアドレスマップから、所望の又は所定のＬＭアドレスを取得し、そのＬＭアドレスに、中継アダプタ４００のポートコントローラ４１０を介してメッセージを書き込むことができる。以下、この点について具体的に説明する。
【００５０】
図２は、各ＭＰ３６０（及び５５０）に格納されているアドレスマップの一例を示す。
【００５１】
各ＭＰ３６０（及び５５０）、例えば、ＭＰ識別情報（「ＭＰ＃」と図示）が「００」であるホストＭＰ３６０に格納されているアドレスマップ４には、種々の情報が記録されているが、主要な情報の例として、送信時ＳＭアドレス情報、受信時ＳＭアドレス情報、他ＭＰのＬＭアドレス情報、及び自ＭＰのＬＭアドレス情報がある。
【００５２】
送信時ＳＭアドレス情報は、ホスト側ＭＰ３６０が間接ＬＭライト方式で他のＭＰ５５０（又は３６０）にメッセージを送信する場合に、ＳＭ４７０のどのアドレスにメッセージを格納すべきかを示す情報である。送信時ＳＭアドレス情報は、例えば、所定の１又は複数の他ＭＰ５５０（又は３６０）の識別情報と、それら１又は複数の他ＭＰにそれぞれ対応した１又は複数のＳＭアドレス範囲（１又は複数のＳＭアドレス）を含んでいる。
【００５３】
受信時ＳＭアドレス情報は、他ＭＰ５５０（又は３６０）から間接ＬＭライト方式でメッセージを受信する場合に、ＳＭ４７０のどのアドレスをリードすべきかを示す情報である。受信時ＳＭアドレス情報は、例えば、所定の１又は複数の他ＭＰ５５０（又は３６０）の識別情報と、それら１又は複数の他ＭＰにそれぞれ対応した１又は複数のＳＭアドレス範囲（１又は複数のＳＭアドレス）を含んでいる。
【００５４】
他ＭＰのＬＭアドレス情報は、所定の１又は複数の他ＭＰがそれぞれ有するＬＭのアドレスを含んだ情報（図示のように、自ＭＰのＬＭアドレスが含まれていても良い）である。具体的には、例えば、他ＭＰのＬＭアドレス情報には、図２に示すように、１以上（例えば８個）のアダプタ３００及び５００の識別情報（例えばアダプタ名）と、１以上のアダプタ３００、５００に搭載されている１以上（例えばＭＰ＃「００」を除いた１５個）の他ＭＰ５５０（又は３６０）の識別情報と、それら１以上の他ＭＰ５５０（又は３６０）が有する１以上のＬＭ５６０（又は３５０）のＬＭアドレス範囲（直接ライトすることが可能な１又は複数のＬＭアドレス）とが含まれている。
【００５５】
自ＭＰのＬＭアドレス情報は、自分が有する１以上のＬＭ３５０（又は５６０）のＬＭアドレス範囲（１又は複数のＬＭアドレス）を含んだ情報である。具体的には、例えば、図示のように、ＭＰ＃「００」のホスト側ＭＰ３６０のメッセージの宛先となるディスク側ＭＰ５５０（例えばＭＰ＃「０８」）の自ＭＰのＬＭアドレス情報には、１以上の送信元ＭＰ３６０又は５５０にそれぞれ対応したＬＭアドレス範囲（１又は複数のＬＭアドレス）が含まれている。
【００５６】
以上のように、各ＭＰ３６０、５５０のプログラムアドレス空間に、上記のようなアドレスマップ４を記録しておく。これにより、そのＭＰ３６０（又は５５０）のマイクロプログラムの処理によって、任意のターゲットＭＰ５５０（又は３６０）のＬＭアドレスにライト命令を実行すると、ターゲットＭＰ５５０（又は３６０）のＬＭ５６０（又は３５０）にメッセージが書き込まれる。すなわち、ＭＰ３６０（又は５５０）は、宛先ＭＰ５５０（又は３６０）の介在無しで、中継アダプタ４００のポートコントローラ４１０を経由して、所定の又は所望のディスク側ＬＭ５６０にメッセージを直接書き込むことができる。具体的には、例えば、ＭＰ＃「００」のホスト側ＭＰ３６０がＭＰ＃「０８」のディスク側ＭＰ５５０にメッセージを発行する場合、そのホスト側ＭＰ３６０は、自分が有するアドレスマップ４から、ＭＰ＃「０８」のディスク側ＭＰ５５０に対応したＬＭアドレスを取得し、そのＬＭアドレスと所望メッセージとを含んだ後述の直接ライトコマンドを生成して、中継アダプタ４００に送信する。すると、その直接ライトコマンドは、中継アダプタ４００から、ＭＰ＃「０８」のディスク側ＭＰ５５０を有するディスクアダプタ５００に転送される。そして、その直接ライトコマンドに含まれるメッセージは、ＭＰ＃「０８」のディスク側ＭＰ５５０のディスク側ＬＭ５６０の、送信元ホスト側ＭＰ３６０（ＭＰ＃「００」のＭＰ）に対応したＬＭアドレスに格納される。
【００５７】
なお、図示のベースアドレスは、ＬＭ５６０（又は３５０）のオフセットを示したもので、ターゲットＭＰ５５０（又は３６０）が搭載されているアダプタ５００（又は３００）のハブ５１０（又は３１０）の所与の設定値で、あらかじめターゲットＭＰ５５０（又は３６０）がマイクロプログラムにより設定しておくものである。
【００５８】
以下、ホスト側ＭＰ３６０が所望のディスク側ＬＭ５６０に対するメッセージを発行する場合を例に、ホストアダプタ３００、中継アダプタ４００及びディスクアダプタ５００の構成及び機能について詳細に説明する。
【００５９】
図３は、ホストアダプタ３００の機能及び構成を詳細に示すブロック図である。図４は、中継アダプタ４００の機能及び構成を詳細に示すブロック図である。図５は、ディスクアダプタ５００の機能及び構成を詳細に示すブロック図である。図３、４及び５を横に並べて見ることで、アダプタ３００、４００及び５００の繋がりが分かるようになっている。
【００６０】
図３に示すように、ホストアダプタ３００には、１以上（例えば２つ）のホスト側ＭＰ３６０Ａ、３６０Ｂと、それら１以上のホスト側ＭＰ３６０Ａ、３６０Ｂにそれぞれ対応した１以上（例えば２つ）のホスト側ＬＭ３５０Ａ、３５０Ｂが搭載されている。ホストアダプタ３００では、所定のプロセッサバス（例えばＰＣＩ−Ｘバス）２を介して、１以上のホスト側ＭＰ３６０Ａ、３６０Ｂ、ホスト側ＬＭ３５０Ａ、３５０Ｂ、及びホストハブ３１０が通信可能に接続されている。ホストハブ３１０には、ＭＰパス制御部３１１、アクセス制御部３１６、１以上のホスト側ＭＰ３６０Ａ、３６０Ｂにそれぞれ対応した１以上（例えば２つ）のホストポート２００Ａ、２００Ｂ、ステータス判定部３１７、ＳＭバッファ閾値テーブル３１４、ＳＭバッファフルテーブル３１５、割込み制御部３１３及びリセット制御部３１２が備えられている。
【００６１】
ＭＰパス制御部３１１は、ＬＭアドレス及びメッセージを含むコマンド（以下、「直接ライトコマンド」と言う）やＳＭアドレス及びメッセージを含むコマンド（以下、「間接ライトコマンド」と言う）をホスト側ＭＰ３６０Ａ、３６０Ｂから受信し、そのコマンドをアクセス制御部３１６に送信する。また、ＭＰパス制御部３１１は、後述するリセット命令をホスト側ＭＰ３６０から受信した場合、そのリセット命令をリセット制御部３１２に通知する。
【００６２】
アクセス制御部３１６は、ＭＰパス制御部３１１から受信したライトコマンドを、その送信元のホスト側ＭＰ３６０Ａ又は３６０Ｂに対応したホストポート２００Ａ又は２００Ｂに転送する。その際、アクセス制御部３１６は、ＳＭバッファ閾値テーブル３１４及びＳＭバッファフルテーブル３１５に書かれている情報に基づいて、ＭＰパス制御部３１１から受けたコマンドをホストポート２００Ａ又は２００Ｂに送るか否かを制御する。具体的には、例えば、アクセス制御部３１６は、ＳＭバッファフルテーブル３１５にバッファフルが記録されていないホスト側ＭＰ３６０Ａからの直接ライトコマンドはホストポート３６０Ａに送信するが、バッファフルが記録されているホスト側ＭＰ３６０Ｂからの直接ライトコマンドはホストポート３６０Ｂに送信せずに止める。
【００６３】
各ホストポート２００Ａ、２００Ｂには、送信制御部３１８と受信制御部３１９とが含まれている。
【００６４】
送信制御部３１８は、アクセス制御部３１６から受信したコマンドを所定のフォーマットに変換して中継アダプタ４００のポートコントローラ４１０に送信する。フォーマット変換後のコマンドは、図６に示す通りである。すなわち、送信制御部３１８からポートコントローラ４１０に送られるコマンドは、アドレス情報、コマンド種別、ライトデータ及びＣＲＣを含んでいる。アドレス情報は、例えば、ＬＭアドレス又はＳＭアドレスである。コマンド種別には、例えば、共有メモリにメッセージをライトすることを意味する「共有メモリライト」、共有メモリからメッセージをリードすることを意味する「共有メモリリード」、及び、メッセージを直接ＬＭにライトすることを意味する「ＬＭライト」がある（更に、メッセージのデータ長などが含まれていても良い）。ライトデータは、送信元ＭＰ３６０又は５５０で生成されたメッセージである。ＣＲＣは、このコマンドフォーマットのデータ保証コードを示す。
【００６５】
受信制御部３１９は、ポートコントローラ４１０からステータス情報を受信し、ステータス判定部３１７に渡す。ステータス情報は、例えば図７に示す通りである。すなわち、ステータス情報には、種々の情報が含まれているが、主要な情報の例として、宛先ＭＰ情報、バッファフル情報及びバッファ閾値オーバー情報がある。宛先ＭＰ情報は、例えば、このステータス情報が送信される起因となったメッセージの宛先のＭＰ５５０の識別情報である。バッファフル情報は、宛先ＭＰ５５０に対応したＳＭ４７０上のサブバッファ領域で後述するバッファフル（換言すれば、例えば重度の警告）が発生したか否かを表す情報である。バッファ閾値オーバー情報は、宛先ＭＰ５５０に対応したＳＭ４７０上でのサブバッファ領域で後述するバッファ閾値オーバー（換言すれば、例えば軽度の警告）が発生したか否かを表す情報である。
【００６６】
ＳＭバッファ閾値テーブル３１４には、全てのＭＰ３６０、５５０の各々について、それに対応するサブバッファ領域に存在する直接ライトコマンドの蓄積量が第１閾値を超えたか否か（換言すれば、バッファ閾値オーバーが発生したか否か）が記録される。具体的には、例えば、或る宛先ＭＰ５５０に対応したサブバッファ領域で第１閾値を超えていない場合には、ＳＭバッファ閾値テーブル３１４における、そのＭＰ５５０に対応したビットはオフになっており、そのサブバッファ領域で第１閾値を超えた場合には、ステータス判定部３１７によって、そのＭＰ５５０に対応したビットはオンにされる。このとき、その旨がＳＭバッファ閾値テーブル３１４から割り込み制御部３１３及びアクセス制御部３１６に通知される。
【００６７】
また、ＳＭバッファ閾値テーブル３１４には、閾値登録代表ビットが備えられる。閾値登録代表ビットは、全てのＭＰ３６０及び５５０にそれぞれ対応した全てのビットがオフであれば、オフであるが、少なくとも１つのＭＰ３６０又は５５０に対応したビットがオンになればオンになる。
【００６８】
ＳＭバッファフルテーブル３１５には、全てのＭＰ３６０、５５０の各々について、それに対応するサブバッファ領域に存在する直接ライトコマンドの蓄積量が第１閾値よりも大きい第２閾値を超えたか否か（換言すれば、バッファフルが発生したか否か）が記録される。具体的には、例えば、或る宛先ＭＰ５５０に対応したサブバッファ領域で第２閾値を超えていない場合には、ＳＭバッファフルテーブル３１５における、そのＭＰ５５０に対応したビットはオフになっており、そのサブバッファ領域で第２閾値を超えた場合には、ステータス判定部３１７によって、そのＭＰ５５０に対応したビットはオンにされる。このとき、その旨がＳＭバッファフルテーブル３１５から割り込み制御部３１３及びアクセス制御部３１６に通知される。
【００６９】
ＳＭバッファフルテーブル３１５には、閾値登録代表ビットが備えられる。閾値登録代表ビットは、全てのＭＰ３６０及び５５０にそれぞれ対応した全てのビットがオフであれば、オフであるが、少なくとも１つのＭＰ３６０又は５５０に対応したビットがオンになればオンになる。
【００７０】
ステータス制御部３１７は、受信制御部３１９から受けたステータス情報（図７参照）の宛先ＭＰ情報、バッファフル情報及びバッファ閾値オーバー情報に基づいて、ＳＭバッファ閾値テーブル３１４及びＳＭバッファフルテーブル３１５を更新する。具体的には、例えば、ステータス判定部３１７は、バッファフル情報がバッファフルを示していれば、宛先ＭＰ情報が示すＭＰ５５０についてのＳＭバッファフルテーブル３１５上のビットをオフからオフにする。同様に、例えば、ステータス判定部３１７は、バッファ閾値オーバー情報が閾値オーバーを示していれば、宛先ＭＰ情報が示すＭＰ５５０についてのＳＭバッファ閾値テーブル３１４上のビットをオフからオフにする。
【００７１】
割込み制御部３１３は、２種類のテーブル３１４及び３１５にそれぞれ記録されている各ＭＰ３６０，５５０毎の情報に基づいて、各ＭＰ３６０に割り込み信号を出力するか否か、出力するのであればどのような割り込み信号を出力するかを制御する。具体的には、例えば、割込み制御部３１３は、或るディスク側ＭＰ５５０について閾値オーバーが発生した旨の通知をＳＭバッファ閾値テーブル３１４から受けた場合、この割込み制御部３１３が搭載されているホストアダプタ３００上にあるメッセージ送信元ＭＰ（又は、全てのＭＰ）３６０Ａ及び／又は３６０Ｂに正常割込み信号を送信する。また、例えば、割込み制御部３１３は、或るディスク側ＭＰ５５０についてバッファフルが発生した旨の通知をＳＭバッファフルテーブル３１５から受けた場合、この割込み制御部１３が搭載されているホストアダプタ３００上にあるメッセージ送信元ＭＰ（又は、全てのＭＰ）３６０Ａ及び／又は３６０Ｂに障害割込み信号を送信する。なお、正常割込み信号を受けたＭＰ３６０Ａ又は３６０Ｂのマイクロプログラムは、上記ディスク側ＭＰ５５０についての閾値オーバーをリセットするための閾値オーバーリセット命令をリセット制御部３１２に発行する。また、障害割込み信号を受けたＭＰ３６０のマイクロプログラムは、所定のイベントが発生するまで（例えば、バッファフルが解除された旨の通知をポートコントローラ４１０から受けるまで）、上記ディスク側ＭＰ５５０を宛先としたメッセージの発行頻度を減らすか、或いは、直接ＬＭライト方式から間接ＬＭライト方式に切り替えて上記ディスク側ＭＰ５５０を宛先とするメッセージを発行し、所定のイベントが発生したら（例えば間接ＬＭライト方式を実行してから一定時間が経過したら）、通常通りに直接ＬＭライト方式でその宛先にメッセージを発行する。
【００７２】
リセット制御部３１２は、ホスト側ＭＰ３６０からＭＰパス制御部３１１を介して閾値オーバーリセット命令を受け、命令されたＭＰ５５０（又は３６０）についてのＳＭバッファ閾値テーブル３１４のビットをオンからオフにする（すなわち、そのＭＰ５５０についての閾値オーバー状態を解除する）。また、リセット制御部３１２は、後述する方法によって、或るＭＰ５５０（又は３６０）についてのバッファフルリセット命令を受け、そのＭＰ５５０（又は３６０）についてのＳＭバッファフルテーブル３１５のビットをオンからオフにする（すなわち、そのＭＰ５５０（又は３６０）についてのバッファフル状態を解除する）。
【００７３】
さて、次に、図４を参照して中継アダプタ４００について説明する。
【００７４】
中継アダプタ４００には、前述したように、ポートコントローラ４１０とＳＭ４７０とが備えられる。ポートコントローラ４１０には、１以上のホストアダプタ３００がそれぞれ接続される１以上のホスト側ポートセット４２０と、１以上のディスクアダプタ５００がそれぞれ接続される１以上のディスク側ポートセット４３０と、ポート選択制御部４４０とが備えられる。また、ポートコントローラ４１０には、リモート直接ＬＭライト制御部４５０と、メモリ制御部４６０とが備えられる。
【００７５】
ホスト側ポートセット４２０には、各ホストアダプタ３００の１以上のポート２００Ａ、２００Ｂにそれぞれ接続される１以上（例えば２つ）のホスト側ポート４２０Ａ、４２０Ｂが備えられる。ホスト側ポート４２０Ａ、４２０Ｂは、ホストアダプタ３００と通信するための通信インターフェースである。ホスト側ポート４２０Ａ、４２０Ｂには、接続先ホストポート２００Ａ、２００Ｂの送信制御部３１８からフォーマット変換されたコマンドを受信する受信制御部４２１と、後述する方法で作成されたステータス情報を接続先ホストポート２００Ａ、２００Ｂの受信制御部３１９に送信する送信制御部４２２とが備えられる。
【００７６】
ディスク側ポートセット４３０には、各ディスクアダプタ５００の１以上のディスクポート５２０Ａ、５２０Ｂにそれぞれ接続される１以上（例えば２つ）のディスク側ポート４３０Ａ、４３０Ｂが備えられる。ディスク側ポート４３０Ａ、４３０Ｂは、ディスクアダプタ５００と通信するための通信インターフェースである。ディスク側ポート４３０Ａ、４３０Ｂには、ホスト側ポート４２０Ａ又は４２０Ｂからポート選択制御部４４０を介して受信したコマンドを接続先ディスクポート５２０Ａ、５２０Ｂの受信制御部に送信する等を行う送信制御部４３２と、接続先ディスクポート５２０Ａ、５２０Ｂの送信制御部からコマンドを受信する受信制御部とが備えられる。その送信制御部が出力するコマンドのフォーマットは、例えば図８に示すようになっている。すなわち、そのコマンドは、アドレス情報（例えばＬＭアドレス）と、コマンド種別と、宛先ＭＰのＬＭにライトすべきライトデータ（すなわち宛先ＭＰへのメッセージ）とが含まれている。なお、例えば、送信制御部４３２は、送信するコマンドにＬＭアドレスを含める際、そのＬＭアドレスの上位Ｎビットを取り除いても良い。その場合、例えば、上位Ｎビットが除かれたＬＭアドレスは、ディスクハブ５１０において、ＬＭ５６０のベースアドレスを使用して正確なＬＭアドレスに復元される。
【００７７】
ポート選択制御部４４０は、例えば、ホストアダプタ３００から直接ライトコマンドを受信したとき、そのコマンドに含まれているＬＭアドレスから、そのコマンドをどのディスク側ポート４３０を介して送信すれば良いのかを識別する。そして、その際、ポート選択制御部４４０は、識別されたディスク側ポート４３０が使用中か否か（具体的には、例えば、ディスク側ポート４３０Ａが別のコマンドを送信中である又は受信であるか否か）を判断し、使用中でなければ、直接ライトコマンドをそのポート４３０Ａを介してディスクアダプタ５００に送信し、使用中であれば、直接ライトコマンドをＳＭ４７０上のサブバッファ領域に一時保存するために、直接ライトコマンドのＬＭアドレスをアドレスデコーダ４５１に通知し、且つ、直接ライトコマンド内のＬＭアドレス及びライトデータをデータとしてメモリ制御部４６０に送信する。また、ポート選択制御部４４０は、使用中であったポート４３０Ａが未使用になった場合に、ポート４３０Ａからリード要求を受け、リード要求元のポート４３０Ａを特定することで、リードすべきメッセージの宛先ＭＰの識別情報（例えば宛先ＭＰの番号）を識別し、その識別情報をアドレスデコーダ４５１に通知する。
【００７８】
図９は、ポート選択制御部４４０の概要を示す。この図を参照して、ポート選択制御部４４０を詳細に説明する。
【００７９】
ポート選択制御部４４０は、１以上のバッファ６０１Ａ〜６０１ｎと、ポート管理テーブル６００と、パス切替制御部６５０とを備える。
【００８０】
１以上のバッファ６０１Ａ〜６０１ｎは、１以上のホスト側ポート４２０Ａ〜４２０ｎ（又は１以上のディスク側ポート４３０Ａ〜４３０ｎ）にそれぞれ対応したバッファである。各バッファ６０１Ａ〜６０１ｎには、そのバッファに対応したホスト側ポート（又はディスク側ポート）が受信した直接ライトコマンドが一時的に格納される。具体的には、例えば、バッファ６０１Ａには、ホスト側ポート４２０Ａがホストアダプタ３００から受信した直接ライトコマンド、及び、或るディスク側ポートからホスト側ポート４２０Ａに転送される直接ライトコマンドが格納される。
【００８１】
ポート管理テーブル６００には、１以上のホスト側ポート４２０Ａ〜４２０ｎ及び１以上のディスク側ポート４３０Ａ〜４３０ｎの各々毎に、そのポートが受信した直接ライトコマンドをどのポートに転送するのかに関するポート制御情報が登録されている。ポート制御情報は、例えば、１以上のポート４３０Ａ〜４３０ｎ及び４２０Ａ〜４２０ｎの識別情報にそれぞれ対応した１以上の格納先ＬＭアドレス範囲（及びＭＰ識別情報）を含んでいる。
【００８２】
パス切替制御部６５０は、各ポート４２０Ａ〜４２０ｎ及び４３０Ａ〜４３０ｎから受信した直接ライトコマンドを別のポートから出力するためのハードウェア回路である（ソフトウェア又はそれらの組合せであっても良い）。パス切替制御部６５０は、例えば以下の（１）〜（３）の処理、
（１）各ポート４２０Ａ〜４２０ｎ及び４３０Ａ〜４３０ｎから受信された直接ライトコマンドを、そのポートに対応したバッファ６０１Ａ〜６０１ｎに格納する処理、
（２）そのバッファに格納された直接ライトコマンドを読出し、そのコマンドに含まれているＬＭアドレスに対応したポートから出力する処理、
（３）出力先ポートが使用中であれば、直接ライトコマンドをＳＭ４７０上のサブバッファ領域に一時保存するために、直接ライトコマンドのＬＭアドレスをアドレスデコーダ４５１に通知し、且つ、直接ライトコマンド内のＬＭアドレス及びライトデータをデータとしてメモリ制御部４６０に送信する処理、
を行えるのであればどのような構成であっても良い。具体例として、例えば、図１０に示すような構成を採用しても良い。すなわち、パス切替制御部６５０は、１以上のディスク側ポート４３０Ａ〜４３０ｎにそれぞれ対応した１以上のポートパス制御部６０２Ａ〜６０２ｎと、ＳＭパス制御部６０３とを備えても良い。１以上のポートパス制御部６０２Ａ〜６０２ｎの各々は、１以上のバッファ６０１Ａ〜６０１ｎと、自分に対応したディスク側ポートとの間の通信を制御するハードウェア機器（例えばセレクタ）である。ＳＭパス制御部６０３は、１以上のバッファ６０１Ａ〜６０１ｎと、アドレスデコーダ４５１及びメモリ制御部４６０との間の通信を制御するハードウェア機器（例えばセレクタ）である。
【００８３】
図１０に示した構成では、例えば以下の処理が行われる。
【００８４】
ポート管理テーブル６００には、各ディスク側ポート４３０Ａ〜４３０ｎに対応した各ポートパス制御部６０２Ａ〜６０２ｎの識別情報や、ＳＭパス制御部６０３の識別情報が記録されており、それ故、各ホスト側ポート４２０Ａ〜４２０ｎが、このテーブル６００を参照することにより、受信した直接ライトコマンド中のＬＭアドレスに基づきどのポートパス制御部６０２Ａ〜６０２ｎとアービトレイトすれば良いかを識別したり、ＳＭパス制御部６０３を識別してそれとアービトレイトしたりすることができるようになっている。
【００８５】
ホスト側ポート４２０Ｂは、受信した直接ライトコマンドをバッファ６０１Ｂに格納し、且つ、そのコマンド中のＬＭアドレスと、ポート管理テーブル６００とに基づいて、アービトレイト先となるポートパス制御部６０２Ａを識別し、そのポートパス制御部６０２Ａとアービトレイトする。
【００８６】
アービトレイションの結果、ポートパス制御部６０２Ａが使用中でなければ（例えば、その制御部６０２Ａから直接ライトコマンドを出力することができる状態であれば）、ポートパス制御部６０２Ａが、バッファ６０１Ｂに蓄積された直接ライトコマンドを読み出し、それをディスク側ポート４３０Ａに送信する。
【００８７】
一方、上記アービトレイションの結果、ポートパス制御部６０２Ａが使用中であれば、ホスト側ポート４２０Ｂは、ＳＭパス制御部６０３とアービトレイトする。その結果、ＳＭパス制御部６０３が、バッファ６０１Ｂに蓄積された直接ライトコマンドを読み出し、そのコマンド内のＬＭアドレス及びライトデータをデータとしてメモリ制御部４６０へ転送し、且つ、そのコマンド内のＬＭアドレスをアドレスデコーダ４５１に通知する。
【００８８】
以上が、ポート制御部４４０についての説明である。上述の通り、ポート制御部４４０には、ホスト側ポート４２０Ａ〜４２０ｎとディスク側ポート４３０Ａ〜４３０ｎとの間にバッファが介在し、各ポート４２０Ａ〜４２０ｎ及び４３０Ａ〜４３０ｎが受信した直接ライトコマンドは一旦バッファに蓄積される。それにより、直接ライトコマンドを受信した各ポート４２０Ａ〜４２０ｎ及び４３０Ａ〜４３０ｎは、そのコマンドを所定のバッファに格納してしまいさえすれば、そのコマンドが所定の出力先ポートから出力されなくても、次に別のコマンドを受けることができる。換言すれば、ホスト側ポート４２０Ａ〜４２０ｎとディスク側ポート４３０Ａ〜４３０ｎは独立して動作することができる。
【００８９】
再び図４を参照する。
【００９０】
リモート直接ＬＭライト制御部４５０は、直接ライトコマンドをＳＭ４７０上のサブバッファ領域に格納することを制御するものである。リモート直接ＬＭライト制御部４５０は、スタックポインタテーブル４５３と、アドレスデコーダ４５１と、アドレス制御部４５６と、閾値判定部４５５と、バッファフル判定部４５４と、ステータス生成部４５２とを備える。
【００９１】
スタックポインタテーブル４５３には、メッセージの宛先となる各ＭＰ５５０（及び／又は３６０）毎にスタックポインタが登録されている。そのスタックポインタは、ＳＭ４７０上の上記バッファ領域（直接ライトコマンドが格納される領域）における、１以上のＭＰにそれぞれ対応した１以上のサブバッファ領域を指し示すものであって、具体的には、例えば、ＳＭ４７０のベースアドレスからのオフセットを示す。各宛先ＭＰ５５０のスタックポインタには、コマンドのライト位置を示すライトポインタと、コマンドのリード位置を示すリードポインタとがある。スタックポインタテーブル４５３は、アドレスデコーダ４５１から或る宛先ＭＰ５５０についてライト要求を受けたときは、そのＭＰ５５０のライトポインタを１インクリメントし、そのＭＰ５５０についてリード要求を受けたときは、リードポインタ及びライトポインタを１デクリメントし、更新後のライトポインタ又はリードポインタと、ポインタの更新対象となったＭＰ５５０の識別情報とを、アドレス制御部４５６、バッファフル判定部４５４及び閾値判定部４５５に送信する。この実施例では、各サブバッファ領域においてデータが溢れそうか否かは、ライトポインタの値から判別することができる。
【００９２】
アドレスデコーダ４５１は、１以上の格納先ＬＭアドレス範囲にそれぞれ対応した１以上のＭＰ識別情報が記録された図示しないテーブルを記憶している。アドレスデコーダ４５１は、ポート選択制御部４４０からＬＭアドレスが通知された場合、そのＬＭアドレスと上記テーブルからメッセージの宛先ＭＰ５５０（又は３６０）を識別し、識別されたＭＰ５５０に対応するスタックポインタを選択し、スタックポインタテーブル４５３に対し、そのＭＰ５５０についてのライト要求を送信する。また、アドレスデコーダ４５１は、ポート選択制御部４４０から宛先ＭＰの識別情報を受けたときは、その識別情報を持つＭＰ５５０に対応するスタックポインタを選択し、スタックポインタテーブル４５３に対し、そのＭＰ５５０についてのリード要求を送信する。
【００９３】
アドレス制御部４５６は、ＳＭ４７０上のサブバッファ領域に対するＳＭアドレスを設定する機能を持つ。具体的には、例えば、アドレス制御部４５６は、スタックポインタテーブル４５３から受けるライトポインタ又はリードポインタの値と、ポートコントローラ４１０内に予め設定されているＳＭ４７０のベースアドレスとに基づいて、ＳＭ４７０のどこにデータを格納すべきかを示すＳＭライトアドレス、又は、ＳＭ４７０のどこからデータをリードすべきかを示すＳＭリードアドレスを算出する。アドレス制御部４５６は、算出されたＳＭライトアドレス又はＳＭリードアドレスをメモリ制御部４６０に通知する。
【００９４】
閾値判定部４５５は、スタックポインタテーブル４５３から通知されたスタックポインタ（ライトポインタ）が第１閾値を超えたか否かを判定し、超えていれば、閾値オーバーが発生した旨と、それが発生した宛先ＭＰ５５０の識別情報とをステータス生成部４５２に送信する。
【００９５】
バッファフル判定部４５４は、スタックポインタテーブル４５３から通知されたスタックポインタ（ライトポインタ）が第１閾値よりも大きい第２閾値を超えたか否かを判定し、超えていれば、バッファフルが発生した旨と、それが発生した宛先ＭＰ５５０の識別情報とをステータス生成部４５２に送信する。なお、その第２閾値は、ＳＭ４７０上のサブバッファ領域でのデータの蓄積量がそのバッファ領域の記憶容量を超えないようにするための閾値であって、そのバッファ領域の容量以下でその容量に近い値となっており、第１閾値は、その値よりも所定値だけ小さい値となっている。
【００９６】
ステータス生成部４５２は、閾値判定部４５５から閾値オーバー発生の通知及びそれが発生した宛先ＭＰの識別情報を受けた場合、その宛先ＭＰ識別情報と閾値オーバーの発生を示すコードとを含んだステータス情報を生成する。また、ステータス生成部４５２は、バッファフル判定部４５４からバッファフル発生の通知及びそれが発生した宛先ＭＰの識別情報を受けた場合、その宛先ＭＰ識別情報とバッファフルの発生を示すコードとを含んだステータス情報を生成する。ステータス生成部４５２は、生成したステータス情報を、ポート選択制御部４４０及び所定のポート４２０（及び／又は４３０）を介して、所定のＭＰ３６０、５５０（例えば、全てのＭＰ３６０、５５０又はメッセージの送信元のホスト側ＭＰ３６０）に送信する。具体的には、例えば、ステータス生成部４５２がステータス情報をポート選択制御部４４０に送信した場合、ポート選択制御部４４０は、そのステータス情報を、そのステータス情報が生成される起因となった直接ライトコマンドを受信したホスト側ポートから出力する。それにより、そのステータス情報は、その直接ライトコマンドを出力したホストポートが受信し、ホストアダプタ３００では、そのホストポートから、どのホスト側ＭＰ３６０Ａ、３６０Ｂに対して正常割込み或いは障害割込みを発行すれば良いかが識別される。
【００９７】
メモリ制御部４６０は、アドレス制御部４５６からＳＭライトアドレスを受けた場合、そのＳＭライトアドレスに、ポート選択制御部４４０から受けたデータ、すなわち、ＬＭアドレス及びメッセージを格納する。これにより、そのメッセージの宛先ＭＰ５５０に対応したＳＭ４７０上のサブバッファ領域に、そのメッセージ及びそれのＬＭアドレスが格納される。メモリ制御部４６０は、アドレス制御部４５６からＳＭリードアドレスを受けた場合、そのＳＭリードアドレスにあるデータ（換言すれば、サブバッファ領域に格納されているＬＭアドレス及びメッセージのセット）を読み出す。
【００９８】
さて、次に、図５を参照してディスクアダプタ５００について詳細に説明する。
【００９９】
図５に示すように、ディスクアダプタ５００では、所定のプロセッサバス（例えばＰＣＩ−Ｘバス）６を介して、１以上（例えば２つ）のディスク側ＭＰ５５０Ａ、５５０Ｂ、１以上のディスク側ＬＭ５６０Ａ、５６０Ｂ、及びディスクハブ５１０が通信可能に接続されている。ディスクハブ５１０には、中継アダプタ４００のディスク側ポート４３０Ａ、４３０にそれぞれ接続されるディスクポート５２０Ａ、５２０Ｂと、ＬＭベースアドレス設定部５１３と、ＬＭアドレス制御部５１４と、ＭＰパス制御部５１５とが備えられる。各ディスクポート５２０Ａ、５２０Ｂには、受信制御部５１６と送信制御部５１２とが備えられている。
【０１００】
受信制御部５１６は、ポートコントローラ４１０のディスク側ポートの送信制御部４３２から、図８に示したフォーマットのコマンド（すなわち、ＬＭアドレス及びメッセージを含んだコマンド）を受信し、それをＬＭアドレス制御部５１４に送る。
【０１０１】
ＬＭベースアドレス設定部５１３は、各ＬＭ５６０のベースアドレスを記憶している記憶装置（例えば不揮発性のメモリ）である。
【０１０２】
ＬＭアドレス制御部５１４は、受信制御部５１６から受けたＬＭアドレスと、ＬＭベースアドレス設定部５１３が記憶しているベースアドレスとを用いて正確なＬＭアドレスを算出し、そのＬＭアドレスと、受信制御部５１６から受けたメッセージとをＭＰパス制御部５１５に渡す。
【０１０３】
ＭＰパス制御部５１５は、プロセッサバス６を介して、ＬＭアドレス制御部５１４から受けたＬＭアドレスに、そのＬＭアドレス制御部５１４から受けたメッセージを書き込む。
【０１０４】
送信制御部５１２は、ディスク側ＭＰ５５０Ａから出力されたコマンドを受けて中継アダプタ４００に出力する。
【０１０５】
以上が、ホストアダプタ３００、中継アダプタ４００及びディスクアダプタ５００についての説明である。
【０１０６】
なお、上述の説明では、ホスト側ＭＰ３６０がディスク側ＭＰ５１０に対するメッセージを発行する場合を例にとっているが、ディスク側ＭＰ５１０がホスト側ＭＰ３６０に対するメッセージを発行する場合もあるので、ホストハブ３１０とディスクハブ５１０は、上述したホストハブ３１０の機能及び構成と、上述したディスクハブ５１０の機能及び構成との両方を備えている。すなわち、例えば、ホストハブ３１０は、ディスクハブ５１０と同様のＬＭアドレス制御部５１４等を備えているし、ディスクハブ５１０は、ホストハブ３１０と同様の割込み制御部３１３等を備えている。
【０１０７】
また、上述の説明では、ホスト側ＭＰ３６０がディスク側ＭＰ５１０に対するメッセージを発行する場合を例にとっているが、ホスト側ＭＰ３６０は、自分以外のホスト側ＭＰ３６０にメッセージを発行しても良いし、同様に、ディスク側ＭＰ５５０は、自分以外のディスク側ＭＰ５５０にメッセージを発行してもよい。なお、その場合、メッセージは、中継アダプタ４００のポートコントローラ４１０を介してやり取りされても良い。
【０１０８】
以下、上述したホストアダプタ３００、中継アダプタ４００及びディスクアダプタ５００の間で行われるデータ処理の流れを説明する。
【０１０９】
本実施例では、各ＭＰ３６０、５５０は、他のＭＰ５５０、３６０に対するメッセージを発行する場合、原則として、直接ＬＭライト方式のメッセージを送信する（換言すれば、ＬＭアドレス、コマンド種別「ＬＭライト」及びメッセージを有するコマンドを発行する）。以下、メッセージの送信元ＭＰをホスト側ＭＰ３６０Ａとし、メッセージの宛先ＭＰをディスク側ＭＰ５５０Ａとして、アダプタ３００、４００及び５００が行うデータのやり取りの流れを説明する。
【０１１０】
（１）第１ケース：直接ＬＭライト方式のメッセージが送信される場合であって、そのメッセージがＳＭ４７０のサブバッファ領域に一時格納されることが無い場合。
【０１１１】
この第１ケースにおいてアダプタ３００、４００及び５００が行うデータのやり取りの流れを図１１に示す。以下、この第１ケースについての流れについて、図１１、図３〜図５及び図９を参照して説明する。
【０１１２】
ホスト側ＭＰ３６０Ａは、自分が記憶するアドレスマップ４から、メッセージの格納先ＬＭアドレスであって、宛先ＭＰに対応したＬＭアドレスを取得し、取得したＬＭアドレスと、そのＬＭアドレスにライトすべきメッセージとを含んだライト命令をＭＰバス２に出力する（ステップＳ１）。すると、そのライト命令は、ＭＰパス制御部３１１及びアクセス制御部３１６を介して、自ＭＰ３６０Ａに対応したホストポート２００Ａの送信制御部３１８に送信される。送信制御部３１８は、そのコマンドを所定のフォーマットに変換し、フォーマット変換後のコマンド（すなわち、ＬＭアドレス、コマンド種別「直接ＬＭライト」及びメッセージを含んだコマンド）を、ホストポート２００Ａの接続先のホスト側ポート４２０Ａが有する受信制御部４２１に送信する（Ｓ２）。
【０１１３】
ポートコントローラ４１０のホスト側ポート４２０Ａが有する受信制御部４２１は、ホストポート２００Ａの送信制御部３１８から受信したコマンドを、ポート選択制御部４４０内の所定バッファ６０１Ａに一時格納する。また、その受信制御部４２１は、そのコマンドに含まれているＬＭアドレスとポート管理テーブル６００とに基づいて、どのディスク側ポート４３０Ａ〜４３０ｎを使用するべきかを識別し、識別されたターゲットポート４３０Ａ（つまり、格納先ＬＭアドレスに対応したディスク側ポート）に対して、所定のリクエスト信号を送信する（Ｓ３）。ホスト側ポート４２０Ａが、そのリクエスト信号に応答して、ターゲットポート４３０Ａ（又はそれに対応したポートパス制御部６０２Ａ）から使用中で無い旨を表す信号（「not busy」と図示）を受けた場合（Ｓ４）、すなわち、ターゲットポート４３０が未使用である場合、バッファ６０１Ａ内のコマンドが読み出されてターゲットポート４３０Ａの送信制御部４３２を介してディスクアダプタ５００に転送される（Ｓ５、Ｓ６）。また、ホスト側ポート４２０Ａの送信制御部４４２は、コマンドの転送が完了したことを表す通知を、接続先ホストポート２００Ａの受信制御部３１９に送信する（それにより、ホストアダプタ３００において、出力したコマンドの転送が終了したことを認識することができる）（Ｓ７）。
【０１１４】
中継アダプタ４００からコマンドを受けたディスクポート５２０Ａの受信制御部５１６は、そのコマンド（すなわち、ＬＭアドレス及びメッセージを含んだコマンド）をＬＭアドレス制御部５１４に送る。
【０１１５】
ＬＭアドレス制御部５１４は、受信制御部５１６から受けたＬＭアドレスと、ＬＭベースアドレス設定部５１３が記憶しているベースアドレスとを用いて正確なＬＭアドレスを算出し、そのＬＭアドレスと、受信制御部５１６から受けたメッセージとをＭＰパス制御部５１５に渡す。
【０１１６】
ＭＰパス制御部５１５は、プロセッサバス６を介して、ＬＭアドレス制御部５１４から受けたＬＭアドレスに、そのＬＭアドレス制御部５１４から受けたメッセージを書き込む（Ｓ８）。
【０１１７】
ディスク側ＭＰ５５０は、自分が記憶しているアドレスマップの自ＭＰのＬＭアドレス情報に基づいて、自分が有するＬＭ５６０のうち送信元ＭＰ３６０に対応したＬＭアドレスをポーリングする（すなわち、そのＬＭアドレスを定期的にリードする）（Ｓ９、Ｓ１０）。その場合、そのＬＭアドレスにメッセージがあれば、ディスク側ＭＰ５５０は、そのＬＭアドレスからメッセージを取得する（Ｓ１１、Ｓ１２）。
【０１１８】
以上の一連の流れにより、ホスト側ＭＰ３６０が発行したメッセージがディスク側ＬＭ５６０に直接ライトされ、直接ライトされたメッセージがディスク側ＭＰ５５０に伝えられる。
【０１１９】
（２）第２ケース：直接ＬＭライト方式のメッセージが送信される場合であって、そのメッセージがＳＭ４７０のサブバッファ領域に一時格納される場合。
【０１２０】
この第２ケースにおいてアダプタ３００、４００及び５００が行うデータのやり取りの流れを図１２に示す。以下、この第２ケースについての流れについて、図１２、図３〜図５及び図９を参照して説明する。
【０１２１】
ホスト側ポート４２０Ａの受信制御部４２１は、上記第１ケースと同様の流れで直接ライトコマンドを受信して（Ｓ２１、Ｓ２２）、所定バッファ６０１Ａに一時格納し、そのコマンドに含まれているＬＭアドレスとポート管理テーブル６００とに基づいてターゲットポート４３０Ａを識別し、そのターゲットポート４３０Ａに対して所定のリクエスト信号を送信する（Ｓ２３）。ホスト側ポート４２０Ａは、そのリクエスト信号に応答して、ターゲットポート４３０Ａから使用中である旨を表す信号（「busy」と図示）を受けた場合（Ｓ２４）、すなわち、ターゲットポート４３０が使用中である場合、パス切替制御部６５０が、受信したコマンド中のＬＭアドレスをアドレスデコーダ４５１に通知し、且つ、受信したコマンドに含まれているメッセージ及びＬＭアドレスをデータαとしてメモリ制御部４６０に送信する（Ｓ２５）。その後、ホスト側ポート４２０Ａは、コマンドの転送が完了したことを表す通知を、ホストポート２００Ａの受信制御部３１９に送信する（Ｓ２６）。
【０１２２】
アドレスデコーダ４５１は、ポート選択制御部４４０からＬＭアドレスが通知された場合、そのＬＭアドレスからメッセージの宛先ＭＰ５５０を識別して、識別されたＭＰ５５０に対応するスタックポインタを選択し、スタックポインタテーブル４５３に対し、そのＭＰ５５０についてのライト要求を送信する。
【０１２３】
スタックポインタテーブル４５３は、アドレスデコーダ４５１から或る宛先ＭＰ５５０についてライト要求を受けたときは、そのＭＰ５５０のライトポインタを１インクリメントし、更新後のライトポインタの値と、ポインタの更新対象となったＭＰ５５０の識別情報とを、アドレス制御部４５６、バッファフル判定部４５４及び閾値判定部４５５に送信する。
【０１２４】
アドレス制御部４５６は、スタックポインタテーブル４５３から受けるライトポインタの値と、ポートコントローラ４１０内に予め設定されているＳＭ４７０のベースアドレスとに基づいて、ＳＭ４７０のどこにデータを格納すべきかを示すＳＭライトアドレスを算出する。アドレス制御部４５６は、算出されたＳＭライトアドレスをメモリ制御部４６０に通知する。
【０１２５】
メモリ制御部４６０は、アドレス制御部４５６からＳＭライトアドレスを受けた場合、そのＳＭライトアドレスに、ポート選択制御部４４０から受けたデータα、すなわち、ＬＭアドレス及びメッセージを格納する。
【０１２６】
その後、ターゲットポート４３０Ａは、未使用中になると、ポート選択制御部４４０に対して、ＳＭ４７０上のサブバッファ領域に格納されたメッセージを含むデータαのリード要求（換言すれば、図１１に示したコマンドの発行）を、自発的に行うか、或いは、ポート選択制御部４４０からの定期的な問い合わせに応答して行う。
【０１２７】
ポート選択制御部４４０のパス切替制御部６５０は、そのリード要求の発行元のポート４３０Ａとポート管理テーブル６００から、そのポート４３０Ａに対応した宛先ディスク側ＭＰ５５０のＭＰ識別情報を把握し、そのＭＰ識別情報をアドレスデコーダ４５１に通知する。
【０１２８】
アドレスデコーダ４５１は、ポート選択制御部４４０からＭＰ識別情報を受けたときは、その識別情報を持つＭＰ５５０に対応するスタックポインタを選択し、スタックポインタテーブル４５３に対し、そのＭＰ５５０についてのリード要求を送信する。
【０１２９】
スタックポインタテーブル４５３は、そのＭＰ５５０についてリード要求を受けたときは、リードポインタ及びライトポインタを１デクリメントし、更新後のポインタの値と、ポインタの更新対象となったＭＰ５５０の識別情報とを、アドレス制御部４５６、バッファフル判定部４５４及び閾値判定部４５５に送信する。
【０１３０】
アドレス制御部４５６は、スタックポインタテーブル４５３から受けたリードポインタの値と、ポートコントローラ４１０内に予め設定されているＳＭ４７０のベースアドレスとに基づいて、ＳＭ４７０のどこからデータをリードすべきかを示すＳＭリードアドレスを算出する。アドレス制御部４５６は、算出されたＳＭリードアドレスをメモリ制御部４６０に通知する（Ｓ２７）。
【０１３１】
メモリ制御部４６０は、アドレス制御部４５６からＳＭリードアドレスを受けた場合、そのＳＭリードアドレスにあるデータα（すなわち、サブバッファ領域に格納されているＬＭアドレス及びメッセージのセット）を読み出し（Ｓ２８）、それを、ポート選択制御部４４０を介して、上記リード要求の発行元のターゲットポート４３０Ａに渡す。それにより、そのデータαが、ターゲットポート４３０Ａの送信制御部４３２によって、所定フォーマットに変換されて（例えば、ＬＭアドレス、コマンド種別として「ＬＭライト」、及びライトデータを含んだコマンドに変換されて）、ディスクポート５２０Ａの受信制御部５１６に送信される（Ｓ２９、Ｓ３０）。
【０１３２】
その後、上記ケース１と同様の流れで、ディスク側ＭＰ５５０Ａ宛のメッセージが、そのＭＰ５５０Ａを介在することなく、そのＭＰ５５０ＡのＬＭ５６０Ａにライトされ、ＭＰ５５０Ａの自分のＬＭ５６０Ａに対するポーリングにより、ＭＰ５５０Ａは、自分宛のメッセージを取得することができる（Ｓ３１〜Ｓ３４）。
【０１３３】
なお、この流れでは、スタックポインタテーブル４５３のライトポインタの値が更新される都度に、更新後のライトポインタの値が閾値判定部４５５及びバッファフル判定部４５４に通知される。
【０１３４】
閾値判定部４５５は、スタックポインタテーブル４５３から通知されたライトポインタが第１閾値を超えたか否かを判定し、超えていれば、閾値オーバーが発生した旨と、それが発生した宛先ＭＰ５５０Ａの識別情報とをステータス生成部４５２に送信する。
【０１３５】
バッファフル判定部４５４は、スタックポインタテーブル４５３から通知されたライトポインタが第１閾値よりも大きい第２閾値を超えたか否かを判定し、超えていれば、バッファフルが発生した旨と、それが発生したＭＰ５５０Ａの識別情報とをステータス生成部４５２に送信する。
【０１３６】
ステータス生成部４５２は、閾値判定部４５５から閾値オーバー発生の通知及びそれが発生したＭＰ５５０Ａの識別情報を受けた場合、そのＭＰ識別情報と閾値オーバーの発生を示すコードとを含んだステータス情報を生成する。また、ステータス生成部４５２は、バッファフル判定部４５４からバッファフル発生の通知及びそれが発生したＭＰ５５０Ａの識別情報を受けた場合、そのＭＰ識別情報とバッファフルの発生を示すコードとを含んだステータス情報を生成する。ステータス生成部４５２は、生成したステータス情報を、ポート選択制御部４４０及び所定のポート４２０（及び／又は４３０）を介して、所定のＭＰ３６０、５５０（例えば、全てのホスト側ＭＰ３６０又はメッセージの送信元のホスト側ＭＰ３６０Ａ）に送信する。
【０１３７】
ステータス情報を受けたポート、例えばホストポート２００Ａの受信制御部３１９は、受信したステータス情報をステータス判定部３１７に渡す。
【０１３８】
ステータス判定部３１７は、受信制御部３１９から受けたステータス情報の宛先ＭＰ情報、バッファフル情報及びバッファ閾値オーバー情報に基づいて、ＳＭバッファ閾値テーブル３１４及びＳＭバッファフルテーブル３１５を更新する。具体的には、例えば、ステータス判定部３１７は、バッファフル情報がバッファフルを示していれば、宛先ＭＰ情報が示すＭＰ５５０ＡについてのＳＭバッファフルテーブル３１５上のビットをオフからオフにする。同様に、例えば、ステータス判定部３１７は、バッファ閾値オーバー情報が閾値オーバーを示していれば、宛先ＭＰ情報が示すＭＰ５５０ＡについてのＳＭバッファ閾値テーブル３１４上のビットをオフからオフにする。
【０１３９】
ＳＭバッファ閾値テーブル３１４は、或るＭＰ５５０Ａに対応したビットがオンにされた場合、その旨を割り込み制御部３１３及びアクセス制御部３１６に通知する。
【０１４０】
また、ＳＭバッファフルテーブル３１５は、或るＭＰ５５０Ａに対応したビットがオンにされた場合、その旨を割り込み制御部３１３及びアクセス制御部３１６に通知する。
【０１４１】
割込み制御部３１３は、或るディスク側ＭＰ５５０Ａについて閾値オーバーが発生した旨の通知をＳＭバッファ閾値テーブル３１４から受けた場合、この割込み制御部１３が搭載されているホストアダプタ３００上にある全てのＭＰ３６０（又は、メッセージの送信元ＭＰ３６０Ａのみ）に正常割込み信号を送信する。また、割込み制御部３１３は、或るディスク側ＭＰ５５０Ａについてバッファフルが発生した旨の通知をＳＭバッファフルテーブル３１５から受けた場合、この割込み制御部１３が搭載されているホストアダプタ３００上にある全てのＭＰ３６０（又は、メッセージの送信元ＭＰ３６０Ａのみ）に障害割込み信号を送信する。
【０１４２】
正常割込み信号を受けたＭＰ３６０Ａのマイクロプログラムは、上記ディスク側ＭＰ５５０についての閾値オーバーをリセットするための閾値オーバーリセット命令をリセット制御部３１２に発行する。その場合、リセット制御部３１２は、その閾値オーバーリセット命令に応答して、命令されたＭＰ５５０についてのＳＭバッファ閾値テーブル３１４のビットをオンからオフにする（すなわち、そのＭＰ５５０についての閾値オーバー状態を解除する）。ＳＭバッファ閾値テーブル３１４は、ビットがオンからオフにリセットされた旨とそのリセットの対象となったＭＰ識別情報を、アクセス制御部３１６に通知する。これにより、閾値オーバーが発生した宛先ＭＰ５５０Ａに対して各ＭＰ３６０からメッセージが送信されても、アクセス制御部３１６を介して中継アダプタにそのメッセージが送信される。なお、ＭＰ３６０Ａは、正常割込み信号を受けた場合は、閾値オーバーが発生したＭＰ５５０Ａを宛先とするメッセージの発行量又は発行頻度を減らすようにしても良い。
【０１４３】
障害割込み信号を受けたＭＰ３６０のマイクロプログラムは、所定のイベントが発生するまで（例えば、バッファフルが解除された旨の通知をポートコントローラ４１０から受けるまで）、上記ディスク側ＭＰ５５０Ａを宛先としたメッセージの発行頻度又は発行量を減らすか、或いは、直接ＬＭライト方式から間接ＬＭライト方式に切り替えて上記ディスク側ＭＰ５５０Ａを宛先とするメッセージを発行し、所定のイベントが発生したら、通常通りに直接ＬＭライト方式でその宛先にメッセージを発行する（マクロプログラムは、通常通りに直接ＬＭライト方式のメッセージを発行し、アクセス制御部３１６が、そのメッセージを中継アダプタ４００側へスルーすることを止めても良い）。
【０１４４】
なお、バッファフルがＳＭバッファフルテーブル３１５に登録された場合、そのバッファフルは例えば以下の方法で解除される。
【０１４５】
すなわち、バッファフル判定部４５４が、スタックポインタテーブル４５３から受けた更新後のライトポインタの値が、バッファフルの基準となる第２閾値よりも所定値小さい第３閾値に達した場合に、その旨をステータス生成部４５２に通知し、ステータス生成部４５２が、バッファフル解除を表すコードとバッファフル解除対象のＭＰの識別情報とを含んだステータス情報を送信する。そのステータス情報は、所定のルートを経由してホストハブ３１０のステータス判定部３１７が受信し、ステータス判定部３１７が、そのステータス情報の内容をリセット制御部３１２に通知する。リセット制御部３１２は、通知された内容から、バッファフル解除対象のＭＰの識別情報を特定し、そのＭＰについてのＳＭバッファフルテーブル３１５のビットをオンからオフにリセットすることで、そのＭＰについてのバッファフルを解除する。ＳＭバッファフルテーブル３１５は、ビットがオンからオフにリセットされた旨とそのリセットの対象となったＭＰ識別情報を、アクセス制御部３１６に通知する。これにより、例えば、バッファフルが発生したＭＰ５５０を宛先としたメッセージがアクセス制御部３１６において止められていた場合に、それが解消されて、そのＭＰ５５０を宛先とするメッセージがアクセス制御部３１６を介して中継アダプタに送信されるようになる。
【０１４６】
また、ＳＭバッファフルテーブル３１５でバッファフルがリセットされた場合、その旨が割込み制御部３１３に通知され、割込み制御部３１３から、バッファフルのリセットに対応した種類の割込み信号が各ホスト側ＭＰ３６０に送信されても良い。その場合、その割込み信号を受けたホスト側ＭＰ３６０は、バッファフルが発生したＭＰ５５０を宛先とするメッセージを間接ＬＭライト方式（つまり共有メモリ方式）に従って送信していたならば、それを止めて、そのＭＰ５５０に対して直接ＬＭライト方式に従ってメッセージを送信することに戻しても良い。
【０１４７】
以下、これらについての具体例を説明する。
【０１４８】
図１３は、アクセス制御部３１６がＳＭバッファフルテーブル３１５の情報に基づいてコマンドの送信を制御する場合の処理流れを示す。
【０１４９】
ホストアダプタ３００上のアクセス制御部３１６は、ＳＭバッファフルテーブル３１５の閾値登録代表ビットを参照し、それがオンかオフであるかを判定する（Ｓ５１）。
【０１５０】
Ｓ５１の結果、閾値登録代表ビットがオフであれば（Ｓ５１でＹ）、どの宛先ＭＰについてもバッファフルが生じておらず、直接ライトコマンドがＳＭ４７０上のどのサブバッファ領域に蓄積されてもバッファフルが生じないことを意味するので、アクセス制御部３１６は、直接ライトコマンドが送信されるようにする。
【０１５１】
一方、Ｓ５１の結果、閾値登録代表ビットがオンであれば（Ｓ５１でＮ）、少なくとも１つの宛先ＭＰについてバッファフルが生じていることを意味するので、アクセス制御部３１６は、ＳＭバッファフルテーブル３１５において、コマンドの宛先ＭＰに対応したビットがオンかオフかを判定する（Ｓ５３）。Ｓ５３の結果、アクセス制御部３１６は、そのビットがオフであれば、直接ライトコマンドが送信されるようにし（Ｓ５２）、一方、そのビットがオンであれば、間接ライトコマンドが送信されるようにする（例えば、コマンド送信元ＭＰ３６０Ａに対して、そのコマンドのＬＭアドレスをＳＭアドレスに代えた間接コマンドを送信させる）（Ｓ５４）。
【０１５２】
図１４は、ＳＭバッファフルテーブル３１５でバッファフルがリセットされる場合の処理流れを示す。
【０１５３】
中継アダプタ４００のバッファフル判定部４５４が、定期的に、バッファフルになったＭＰのライトポインタをリードする（Ｓ６１）。
【０１５４】
Ｓ６１の結果、そのライトポインタが、バッファフルの基準となる第２閾値よりも所定値小さい第３閾値以上でなければ（Ｓ６１でＮ）、バッファフル判定部４５４は、バッファフルの解除の旨をステータス生成部４５２に通知する。それにより、上述した処理が行われて、ホストアダプタ３００上のＳＭバッファフルテーブル３１５において、バッファフルのためオンであったビットがオフにされる（Ｓ６２）。
【０１５５】
また、Ｓ６１の結果、リードされたライトポインタが上記第３閾値以上であっても、バッファフルが発生してから一定時間長経過した場合には（Ｓ６３でＹ）、バッファフル判定部４５４は、バッファフルの解除の旨をステータス生成部４５２に通知し、それにより、バッファフルのためオンであったビットがオフにされる（Ｓ６２）。
【０１５６】
以上、上述した第１実施例によれば、送信側ＭＰが発行したメッセージが、受信側ＭＰを介在することなくそのＭＰが有するＬＭに直接ライトされる。受信側ＭＰは、自分が持つＬＭをポーリングすることで、自分宛のメッセージを取得する。ＬＭをリードする時間長は、ＳＭ４７０をリードする時間長に比べて短い（例えば１０分の１以下程度である）。このため、受信側ＭＰは、負担少なく、送信側ＭＰから出力されたメッセージを取得することができる。
【０１５７】
具体的には、例えば、各ＭＰの共有メモリへのポーリングの頻度を「5μsec」に１回とし、共有メモリのパス数を「32」とすると、「32」個のＭＰがあると、ＭＰや共有メモリにとって負担大となり、システムの性能の低下につながる。このとき、各ＭＰと共有メモリ制御部間のパス（個別部）アクセス時間は800nsec、共有メモリ制御部と共有メモリ（共通部）のアクセス時間は200nsec、従って、個別パスが飽和するには、800nsec＋200nsec×32MP＝7200nsecとなる。7200nsec以内の間隔で各MPが共有メモリをポーリングするとパスが飽和してしまい、アクセス時間は、急激に長くなりシステム性能を大幅に劣化させる。
【０１５８】
上述した第１実施例によれば、このような負担を軽減し、処理速度の高いディスクアレイ制御装置１００を提供することが図れる。
【０１５９】
また、上述した第１実施例によれば、中継アダプタ４００は、ＳＭ４７０を備え、そのＳＭ４７０には、バッファ領域が用意される。直接ＬＭライト方式のメッセージは、受信側アダプタに対応したポートの使用状況に応じて、そのバッファ領域に格納せずにそのアダプタに転送されたり、そのバッファ領域に一時的に格納されてから転送されたりする。すなわち、送信対象のメッセージが直接ＬＭライト方式のメッセージの場合は、受信側アダプタに対応したポートの使用状況に応じて、ＳＭ４７０のバッファ領域を経由して受信側アダプタに転送される第１転送モードと、そのバッファ領域を経由せずにダイレクトに転送される第２転送モードとが選択的に行われる。これにより、送信側ＭＰ（例えばホスト側ＭＰ３６０）と受信側ＭＰ（例えばディスク側ＭＰ５５０）との間のメッセージの転送効率の向上が図れる。
【０１６０】
また、上述した第１実施例によれば、中継アダプタ４００を介してメッセージを転送する際に、ホスト側ポート４２０とディスク側ポート４３０は独立して動作することが可能である。例えば、或るターゲットディスク側ポート４３０を経由すべきメッセージを或るホスト側ポート４２０が受信中であっても、そのターゲットディスク側ポート４３０は、ディスクハブ５１０に対して通信状態を維持する必要は無い。これにより、送信側ＭＰ（例えばホスト側ＭＰ３６０）と受信側ＭＰ（例えばディスク側ＭＰ５５０）との間のメッセージの転送効率の向上が図れる。
【０１６１】
なお、第1実施例では、下記のような幾つかの変形例が考えられる。
【０１６２】
例えば、各MP３６０は、アクセス制御部３１６に対し、SMアドレスとLMアドレスの双方を含んだコマンドを送信しても良い。その場合、アドレス制御部３１６は、各テーブル３１４、３１５の情報に基づき、直接LMライト方式を選択する場合は、受信したコマンドからSMアドレスを削除した新たなコマンドを生成して出力し、一方、間接LMライト方式を選択する場合は、上記受信したコマンドからLMアドレスを削除した（或いは削除せずにそのまま残した）コマンドを出力するようにしても良い。
【０１６３】
また、例えば、ホスト側ポート４２０Ａ〜４２０ｎ及びディスク側ポート４３０Ａ〜４３０ｎの各々は、ＬＭアドレス範囲に代えて又は加えて、宛先ＭＰ識別情報に対応付けられ、その対応関係がポート管理テーブル６００に登録されても良い。また、直接ライトコマンド及び間接ライトコマンドには、各ＭＰが記憶するアドレスマップ４から把握可能な宛先ＭＰ識別情報が含まれても良い。すなわち、中継アダプタ４００では、受信したコマンドを転送する際、そのコマンドに含まれている宛先ＭＰ識別情報から、出力先のポートが選択されても良い。
【０１６４】
また、例えば、各アダプタ３００、４００及び／又は５００上にある１以上のポートは、物理的に分離していても良いし、物理的には分離していなくても論理的に分離していても良い。同様に、同一ポート内にある送信制御部及び受信制御部も、物理的に分離していても良いし、物理的には分離していなくても論理的に分離していても良い。
【実施例２】
【０１６５】
上述した第１実施例では、コマンドを転送する中継アダプタがマスタ、そのコマンドを受ける受信側アダプタ（例えばディスクアダプタ５００）がスレーブとなる中継部マスタ方式でコマンド転送が行われるが、これから説明する第２実施例では、中継アダプタがスレーブ、受信側アダプタがマスタとなる受信側マスタ方式でコマンド転送が行われる。以下、詳述する。
【０１６６】
図１５は、本発明の第２実施例におけるディスクアダプタの構成例である。なお、この図において、図５に示したディスクアダプタ５００と同様の機能を有するものについては同一の参照番号を付す。また、以下の説明では、第1実施例と重複した部分については、説明を簡略或いは省略する。
【０１６７】
この第２実施例に係るディスクアダプタ９００の各ディスクポート９０１Ａ、９０１Ｂには、中継アダプタからパス割込み信号を受けるパス割込制御部９０３が備えられる。
【０１６８】
パス割込制御部９０３は、パス割込み信号の立ち下がり（或いは立ち上がり）を検出した場合に、同一ポート９０１Ａ又は９０１Ｂ内の送信制御部９０４に、パス割込み有り（換言すれば、直接ライトコマンド有り）を通知する。
【０１６９】
送信制御部９０４は、パス割込み有りを受けた場合、中継アダプタ４００に、図１６に例示するようなリード割込みコマンド、すなわち、割込みアドレス（「ＩＮＴアドレス」と図示）とコマンド種別として「共有メモリリード」とを含んだコマンドを送信する。それにより、受信制御部５１６が、中継アダプタ４００から、図１７に示すようなデータ、すなわち、ＬＭアドレスとライトデータとを含んだデータを受信する。なお、ＩＮＴアドレスは、ＳＭ４７０のサブバッファ領域に格納されたデータ又はポート選択制御部４４０のバッファ内に格納されたデータの格納場所を割出すことができるものであれば、どのようなものでも良い（例えば、各ポートに固有に割り当てられたアドレスであっても良い）。
【０１７０】
図１８は、第２実施例において、ＳＭ４７０上の所定サブバッファ領域に直接ライトコマンドが格納される場合の、直接ライトコマンドのやり取りの流れを示す。図１９は、その場合のコマンド送受信のタイミングチャートを示す。
【０１７１】
中継アダプタの或るホスト側ポート４２０Ａが、直接ライトコマンド（ＬＭアドレス、コマンド種別「ＬＭライト」、ライトデータを含んだコマンド）を受信したら（Ｓ７１、Ｓ７２）、そのコマンドに含まれているＬＭアドレスとポート管理テーブル６００とに基づいてターゲットポート４３０Ａを識別し、そのターゲットポート４３０Ａに対して所定のリクエスト信号を送信する（Ｓ７３）。また、ポートコントローラ４１０内では、受信した直接ライトコマンド内のＬＭアドレスに基づいてＳＭアドレスが算出され、そのＳＭアドレスと、データα（ＬＭアドレス及びライトデータ）とがメモリ制御部４６０に取込まれ（Ｓ７４）、メモリ制御部４６０によって、データαがＳＭ４７０上の所定サブバッファ領域に格納される。
【０１７２】
また、ホスト側ポート４２０Ａは、直接ライトコマンドを受信した旨のステータスを接続先ホストポート２００Ａに送信する（Ｓ７５）。
【０１７３】
ターゲットポート４３０Ａは、ホスト側ポート４２０Ａからのリクエスト信号に応答して、接続先ディスクポート９０１Ａのパス割込制御部９０３へのパス割込み信号を立ち上げる（Ｓ７６）。そして、ターゲットポート４３０Ａは、上記データαがＳＭ４７０に格納された後、そのパス割込み信号を立ち下げる。
【０１７４】
パス割込制御部９０３は、パス割込み信号の立下りを検出したら、パス割込み有りを送信制御部９０４に通知する。
【０１７５】
パス割込み有りが通知された送信制御部９０４は、上述したリード割込みコマンド（ＩＮＴアドレスとコマンド種別「共有メモリリード」とを含んだコマンド）を、ターゲットポート４３０Ａに送信する（Ｓ７７）。その結果、リード割込みコマンド内のＩＮＴアドレスから一意にＳＭアドレスが識別され（例えば１以上のＩＮＴアドレスと１以上のＳＭアドレスとが対応付けられたテーブルから所定ＳＭアドレスが識別され）、識別されたＳＭアドレスからデータαが読み出され（Ｓ７８、Ｓ７９）、読み出されたデータαが、ディスクアダプタ９００に送信される（Ｓ８０）。そして、そのデータα内のＬＭアドレスに、そのデータα内のライトデータが直接ライトされ（Ｓ８１）、宛先ＭＰ５５０Ａが自分のＬＭ５６０の所定ＬＭアドレスをポーリングすることにより、そのライトされたライトデータを取得することができる（Ｓ８２〜Ｓ８５）。
【０１７６】
以上が、第２実施例についての説明である。なお、この第２実施例では、直接ライトコマンドは、必ずＳＭ４７０のサブバッファ領域に一旦格納されてから宛先ＭＰ側に転送されても良いし、格納されずに宛先ＭＰ側に転送されても良い。後者の場合は、例えば以下の流れで転送が行われても良い。すなわち、中継アダプタ４００において直接ライトコマンドの受信後、ターゲットポート４３０Ａが、接続先ディスクポート９０１Ａのパス割込制御部９０３へのパス割込み信号を立ち上げ、その時点から所定時間経過後、そのパス割込み信号を立ち下げる。その場合、送信制御部９０４が、上述したリード割込みコマンドを、ターゲットポート４３０Ａに送信し、それに応答して、受信制御部５１６が、ポート選択制御部４４０内の所定バッファから読み出された直接ライトコマンドを受信しても良い。
【０１７７】
また、例えば、図１５では、ディスクアダプタを示したが、メッセージは、ディスクアダプタからホストアダプタに転送される場合もあるので、ホストアダプタの各ポートも図１５に示したディスクアダプタの各ポートと同様の構成になっていても良い。
【実施例３】
【０１７８】
次に、本発明の第３実施例について説明する。
【０１７９】
この第３実施例では、各ＭＰ（例えばホストＭＰ３６０Ａ）は、直接ＬＭライト方式や間接ＬＭライト方式でリードコマンドを所望格納先ＬＭ（例えばディスク側ＬＭ５５０Ａ）に格納することで、そのＬＭからリードされたメッセージを受ける。
【０１８０】
この第３実施例は、上述した第１実施例の応用例である。すなわち、リードコマンドのコマンド送信側ＭＰが、直接ＬＭライト方式又は間接ＬＭライト方式でコマンド受信側ＭＰのコマンド受信側ＬＭにそのリードコマンドをライトすると、コマンド受信側ＭＰが、そのリードコマンドに応答して、コマンド受信側ＬＭから、コマンド送信側ＭＰを宛先とするメッセージを取得し、そのメッセージを、直接ＬＭライト方式又は間接ＬＭライト方式で、コマンド送信側ＭＰのコマンド送信側ＬＭに格納する。、その後、コマンド送信側ＭＰが、そのコマンド送信側ＬＭをポーリングしてメッセージを取得する。これにより、コマンド送信側ＭＰが、コマンド受信側ＬＭからメッセージを取得したことになる。
【０１８１】
すなわち、第１実施例では、メッセージ送信元ＭＰは、リードコマンドを受けることなく能動的にメッセージを所定格納先ＬＭに発行するが、第３実施例では、自ＬＭにメッセージを格納しておき、他ＭＰからリードコマンドを受けたときに、それに応答して、自ＬＭからメッセージを読み出し、それを、そのコマンド送信元の他ＭＰのＬＭに送信する。
【０１８２】
以下、この第３実施例について詳細に説明する。なお、以下の説明において、第１実施例と重複する部分については説明を省略又は簡略する。
【０１８３】
図２０は、第３実施例において、各ＭＰ３６０（及び５５０）に格納されているアドレスマップの一例を示す。
【０１８４】
各ＭＰ３６０（及び５５０）、例えば、ＭＰ識別情報（「ＭＰ＃」と図示）が「００」であるホストＭＰ３６０に格納されているアドレスマップ１２には、種々の情報が記録されているが、主要な情報の例として、第１実施例で説明した送信時ＳＭアドレス情報及び受信時ＳＭアドレス情報の他に、自ＭＰのＬＭリード／ライトアドレス情報、他ＭＰのＬＭライトアドレス情報及び他ＭＰのＬＭリードアドレス情報がある。
【０１８５】
自ＭＰのＬＭリード／ライトアドレス情報は、自分が有する１以上のＬＭ３５０（又は５６０）におけるＬＭアドレス範囲であって、自ＭＰ３６０に対するリードコマンドが格納されるＬＭリードアドレス範囲（１又は複数のＬＭアドレス）と、他ＭＰ５５０に対するメッセージの格納先となるＬＭライトアドレス範囲（１又は複数のＬＭアドレス）とを含んだ情報である。ＬＭリードアドレス範囲もＬＭライトアドレス範囲も、各他ＭＰ毎（及び／又は各他ＬＭ毎）に用意される（例えば、各他ＭＰのＭＰ＃に対応付けられている）。すなわち、１以上の他ＭＰにそれぞれ対応した１以上のＬＭリードアドレス範囲の各々は、それに対応した他ＭＰにとっては、その他ＭＰが発行するリードコマンドの格納先ＬＭライトアドレス範囲である。また、１以上の他ＭＰにそれぞれ対応した１以上のＬＭライトアドレス範囲の各々は、それに対応した他ＭＰにとっては、その他ＭＰのメッセージのリード先となるＬＭリードアドレス範囲である。
【０１８６】
他ＭＰのＬＭライトアドレス情報は、他ＭＰが有する他ＬＭにおけるＬＭアドレス範囲であって、自ＭＰ３６０が発行したリードコマンドの格納先ＬＭライトアドレス範囲（１又は複数のＬＭアドレス）を表す情報である。このＬＭライトアドレス範囲は、図示のように、各他ＭＰ毎に用意される（例えば、各他ＭＰのＭＰ＃に対応付けられている）。すなわち、１以上の他ＭＰにそれぞれ対応した１以上のＬＭライトアドレス範囲の各々は、それに対応した他ＭＰにとっては、その他ＭＰのポーリングによるリード先となるＬＭリードアドレス範囲である。
【０１８７】
他ＭＰのＬＭリードアドレス情報は、他ＭＰが有する他ＬＭにおけるＬＭアドレス範囲であって、自ＭＰ３６０のリード先であるＬＭリードアドレス範囲（１又は複数のＬＭアドレス）を表す情報である。このＬＭリードアドレス範囲は、図示のように、各他ＭＰ毎に用意される（例えば、各他ＭＰのＭＰ＃に対応付けられている）。すなわち、１以上の他ＭＰにそれぞれ対応した１以上のＬＭリードアドレス範囲の各々は、それに対応した他ＭＰにとっては、その他ＭＰの上記自ＭＰに対するメッセージの格納先となるＬＭライトアドレス範囲である。
【０１８８】
以上のように、各ＭＰ３６０、５５０のプログラムアドレス空間に、上記のようなアドレスマップ１２を記録しておく。これにより、そのＭＰ３６０（又は５５０）のマイクロプログラムの処理によって、任意のターゲットＭＰ５５０（又は３６０）のＬＭライトアドレスに、任意のＬＭリードアドレスを指定したリードコマンドが任意のＬＭライトアドレスにライトされる。
【０１８９】
以下、この第３実施例において、コマンド送信側ＭＰがホスト側ＭＰ３６０Ａ、コマンド受信側ＭＰがディスク側ＭＰ５５０Ａである場合を例に採り、直接ＬＭリード方式でメッセージが読み出される場合の流れについて、以下の２つのケースに場合分けして説明する。
【０１９０】
（１）第１ケース：直接ＬＭライト方式のリードコマンドがＳＭ４７０のサブバッファ領域に一時格納されることが無い場合。
【０１９１】
この第１ケースにおいてアダプタ３００、４００及び５００が行うデータのやり取りの流れを図２１に示す。
【０１９２】
ホスト側ＭＰ３６０Ａは、自分が記憶するアドレスマップ１２から、所望相手ＭＰ５５０Ａに対応したＬＭリードアドレス（どこからデータを読むかを示すアドレス）及びＬＭライトアドレス（リードコマンドの格納先）を取得して、取得したＬＭリードアドレスを指定するリードコマンドと、取得したＬＭライトアドレスとを含んだリード命令をＭＰバス２に出力する。すると、そのリード命令は、ＭＰパス制御部３１１及びアクセス制御部３１６を介して、自ＭＰ３６０Ａに対応したホストポート２００Ａの送信制御部３１８に送信される。送信制御部３１８は、そのリード命令を所定のフォーマットに変換し、フォーマット変換後のコマンド群（すなわち、ＬＭライトアドレスと、コマンド種別「直接ＬＭリード」を表す上記リードコマンド）を、ホストポート２００Ａの接続先のホスト側ポート４２０Ａが有する受信制御部４２１に送信する（Ｓ１０２）。
【０１９３】
ポートコントローラ４１０のホスト側ポート４２０Ａが有する受信制御部４２１は、ホストポート２００Ａの送信制御部３１８から受信したコマンド群を、ポート選択制御部４４０内の所定バッファ６０１Ａに一時格納する。また、その受信制御部４２１は、そのコマンド群に含まれているＬＭライトアドレスとポート管理テーブル６００とに基づいて、どのディスク側ポート４３０Ａ〜４３０ｎを使用するべきかを識別し、識別されたターゲットポート４３０Ａ（つまり、格納先ＬＭアドレスに対応したディスク側ポート）に対して、所定のリクエスト信号を送信する（Ｓ１０３）。ホスト側ポート４２０Ａが、そのリクエスト信号に応答して、ターゲットポート４３０Ａ（又はそれに対応したポートパス制御部６０２Ａ）から使用中で無い旨を表す信号（「not busy」と図示）を受けた場合（Ｓ１０４）、すなわち、ターゲットポート４３０が未使用である場合、バッファ６０１Ａ内のコマンド群が読み出されてターゲットポート４３０Ａの送信制御部４３２を介してディスクアダプタ５００に転送される（Ｓ１０５、Ｓ１０６）。また、ホスト側ポート４２０Ａの送信制御部４４２は、コマンド群の転送が完了したことを表す通知を、接続先ホストポート２００Ａの受信制御部３１９に送信する（それにより、ホストアダプタ３００において、出力したコマンド群の転送が終了したことを認識することができる）（Ｓ１０７）。
【０１９４】
中継アダプタ４００からコマンド群を受けたディスクポート５２０Ａの受信制御部５１６は、そのコマンド群（すなわち、ＬＭライトアドレス及びリードコマンド）をＬＭアドレス制御部５１４に送る。
【０１９５】
ＬＭアドレス制御部５１４は、受信制御部５１６から受けたＬＭライトアドレスと、ＬＭベースアドレス設定部５１３が記憶しているベースアドレスとを用いて正確なＬＭアドレスを算出し、そのＬＭライトアドレスと、受信制御部５１６から受けたリードコマンドとをＭＰパス制御部５１５に渡す。
【０１９６】
ＭＰパス制御部５１５は、プロセッサバス６を介して、ＬＭアドレス制御部５１４から受けたＬＭライトアドレス（換言すれば、ディスク側ＭＰ５５０Ａが記憶しているアドレスマップの自ＭＰのＬＭリード／ライトアドレス情報における、ＬＭ５６０Ａのうち送信元ＭＰ３６０に対応したＬＭリードアドレス）に、そのＬＭアドレス制御部５１４から受けたリードコマンドを書き込む（Ｓ１０８）。
【０１９７】
ディスク側ＭＰ５５０Ａは、例えば、自ＬＭ５６０Ａにおける自ＭＰライトアドレス情報のうち、送信元ＭＰ３６０に対応したＬＭライトアドレスに、送信元ＭＰ３６０に対するメッセージを書き込んでおく。
【０１９８】
ディスク側ＭＰ５５０Ａは、自分が記憶しているアドレスマップの自ＭＰのＬＭリード／ライトアドレス情報に基づいて、自分が有する自ＬＭ５６０Ａのうち送信元ＭＰ３６０に対応したＬＭリードアドレスをポーリングする（すなわち、そのＬＭリードアドレスを定期的にリードする）。その場合、そのＬＭリードアドレスにリードコマンドがあれば、ディスク側ＭＰ５５０は、そのリードコマンドに指定されるＬＭリードアドレスからメッセージを取得し、そのメッセージを、直接ＬＭライト方式又は間接ＬＭライト方式で、リードコマンド送信元であるホスト側ＭＰ３６０Ａに送信する（ここで取得され送信されるメッセージは、アドレスマップの構成により、必ず、リードコマンドの送信元ＭＰに対するメッセージになっている）。なお、そのメッセージがどのような流れでホスト側ＬＭ３５０Ａに格納されるのかということについては説明を省略するが、それについては、第１実施例の説明から理解することができる。
【０１９９】
（２）第２ケース：直接ＬＭライト方式のリードコマンドが送信される場合であって、そのリードコマンドがＳＭ４７０のサブバッファ領域に一時格納される場合。
【０２００】
この第２ケースにおいてアダプタ３００、４００及び５００が行うデータのやり取りの流れを図２２に示す。
【０２０１】
ホスト側ポート４２０Ａの受信制御部４２１は、上記第１ケースと同様の流れで上記コマンド群（ＬＭライトアドレス及びリードコマンド）を受信して（Ｓ１２１、Ｓ１２２）、所定バッファ６０１Ａに一時格納し、そのコマンドに含まれているＬＭアドレスとポート管理テーブル６００とに基づいてターゲットポート４３０Ａを識別し、そのターゲットポート４３０Ａに対して所定のリクエスト信号を送信する（Ｓ１２３）。ホスト側ポート４２０Ａは、そのリクエスト信号に応答して、ターゲットポート４３０Ａから使用中である旨を表す信号（「busy」と図示）を受けた場合（Ｓ１２４）、すなわち、ターゲットポート４３０が使用中である場合、パス切替制御部６５０が、受信したコマンド中のＬＭライトアドレスをアドレスデコーダ４５１に通知し、且つ、受信したコマンド群に含まれているＬＭライトアドレス及びリードコマンドをデータαとしてメモリ制御部４６０に送信する（Ｓ１２５）。その後、ホスト側ポート４２０Ａは、コマンド群の転送が完了したことを表す通知を、ホストポート２００Ａの受信制御部３１９に送信する（Ｓ１２６）。
【０２０２】
アドレスデコーダ４５１は、ポート選択制御部４４０からＬＭライトアドレスが通知された場合、そのＬＭライトアドレスからリードコマンドの宛先ＭＰ５５０Ａを識別して、識別されたＭＰ５５０Ａに対応するスタックポインタを選択し、スタックポインタテーブル４５３に対し、そのＭＰ５５０Ａについてのライト要求を送信する。
【０２０３】
スタックポインタテーブル４５３は、アドレスデコーダ４５１から或る宛先ＭＰ５５０Ａについてライト要求を受けたときは、そのＭＰ５５０Ａのライトポインタを１インクリメントし、更新後のライトポインタの値と、ポインタの更新対象となったＭＰ５５０の識別情報とを、アドレス制御部４５６、バッファフル判定部４５４及び閾値判定部４５５に送信する。
【０２０４】
アドレス制御部４５６は、スタックポインタテーブル４５３から受けるライトポインタの値と、ポートコントローラ４１０内に予め設定されているＳＭ４７０のベースアドレスとに基づいて、ＳＭ４７０のどこにデータを格納すべきかを示すＳＭライトアドレスを算出する。アドレス制御部４５６は、算出されたＳＭライトアドレスをメモリ制御部４６０に通知する。
【０２０５】
メモリ制御部４６０は、アドレス制御部４５６からＳＭライトアドレスを受けた場合、そのＳＭライトアドレスに、ポート選択制御部４４０から受けたデータα、すなわち、ＬＭライトアドレス及びリードコマンドを格納する。
【０２０６】
その後、ターゲットポート４３０Ａは、未使用中になると、ポート選択制御部４４０に対して、ＳＭ４７０上のサブバッファ領域に格納されたメッセージを含むデータαのリード要求（換言すれば、図１１に示したコマンドの発行）を、自発的に行うか、或いは、ポート選択制御部４４０からの定期的な問い合わせに応答して行う。
【０２０７】
ポート選択制御部４４０のパス切替制御部６５０は、そのリード要求の発行元のポート４３０Ａとポート管理テーブル６００から、そのポート４３０Ａに対応した宛先ディスク側ＭＰ５５０ＡのＭＰ識別情報を把握し、そのＭＰ識別情報をアドレスデコーダ４５１に通知する。
【０２０８】
アドレスデコーダ４５１は、ポート選択制御部４４０からＭＰ識別情報を受けたときは、その識別情報を持つＭＰ５５０Ａに対応するスタックポインタを選択し、スタックポインタテーブル４５３に対し、そのＭＰ５５０についてのリード要求を送信する。
【０２０９】
スタックポインタテーブル４５３は、そのＭＰ５５０Ａについてリード要求を受けたときは、リードポインタ及びライトポインタを１デクリメントし、更新後のポインタの値と、ポインタの更新対象となったＭＰ５５０Ａの識別情報とを、アドレス制御部４５６、バッファフル判定部４５４及び閾値判定部４５５に送信する。
【０２１０】
アドレス制御部４５６は、スタックポインタテーブル４５３から受けたリードポインタの値と、ポートコントローラ４１０内に予め設定されているＳＭ４７０のベースアドレスとに基づいて、ＳＭ４７０のどこからデータをリードすべきかを示すＳＭリードアドレスを算出する。アドレス制御部４５６は、算出されたＳＭリードアドレスをメモリ制御部４６０に通知する（Ｓ１２７）。
【０２１１】
メモリ制御部４６０は、アドレス制御部４５６からＳＭリードアドレスを受けた場合、そのＳＭリードアドレスにあるデータα（すなわち、サブバッファ領域に格納されているＬＭライトアドレス及びメッセージのセット）を読み出し（Ｓ１２８）、それを、ポート選択制御部４４０を介して、上記リード要求の発行元のターゲットポート４３０Ａに渡す。それにより、そのデータαが、ターゲットポート４３０Ａの送信制御部４３２によって、所定フォーマットに変換されて（例えば、ＬＭライトアドレス及びリードコマンドを含んだコマンド群に変換されて）、ディスクポート５２０Ａの受信制御部５１６に送信される（Ｓ１２９）。
【０２１２】
その後、上記ケース１と同様の流れで、ディスク側ＭＰ５５０Ａ宛のリードコマンドが、そのＭＰ５５０Ａを介在することなく、そのＭＰ５５０ＡのＬＭ５６０Ａにライトされ（Ｓ１３０）、ＭＰ５５０Ａの自分のＬＭ５６０Ａに対するポーリングにより、ＭＰ５５０Ａは、自分宛のリードコマンドを取得することができる。なお、その後は、上記第１ケースと同様の流れで、そのリードコマンドから認識されるＬＭリードアドレス内のメッセージが、リードコマンドの送信元ＭＰ３６０ＡのＬＭ３５０Ａに格納される。
【０２１３】
以上が、本発明の第３実施例についての説明である。
【０２１４】
なお、この第３実施例において、もし、コマンド受信側ＬＭにおいて、コマンド送信側ＭＰから発行されたリードコマンドから認識されるＬＭリードアドレスにメッセージが存在しない場合には、そのＬＭリードアドレスにメッセージが格納された後、直ちにメッセージが読み出されてコマンド送信側ＬＭに向けて送信されても良い。
【０２１５】
また、説明は省略したが、ＳＭバッファ閾値テーブル３１４やＳＭバッファフルテーブル３１５に対する監視は、リードコマンドがＳＭ４７０に格納された場合にも同様に行なわれても良い。すなわち、この第３の実施例でも、その監視結果に基づいて所定のステータスがコマンド送信側アダプタに発行され、そのステータスに基づいて、コマンド送信側アダプタにおいて、リードコマンドの発行頻度や発行量が制限される等の処理を行うことが可能である。
【０２１６】
また、第３実施例において、例えば、アドレスマップ１２は、どの自ＬＭリードアドレスにリードコマンドが格納されたときにはどの自ＬＭライトアドレスに格納したメッセージを返信するかを、そのアドレスマップ１２を記憶するＭＰが認識することができるように作られていても良い。その場合は、リードコマンドに、ＬＭリードアドレスは含まれなくても良い。
【０２１７】
また、第３実施例において、コマンド送信側ＭＰからコマンド受信側ＬＭにリードコマンドが格納されること、及び／又は、コマンド受信側ＬＭから読み出された、コマンド送信側ＭＰにとってのリード情報（コマンド送信先にとってはライト情報）がコマンド送信側ＬＭに格納されることは、上述した中継部マスタ方式で行われても良いし、第２実施例で説明した受信側マスタ方式で行われても良い。
【０２１８】
以上、本発明の好適な幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【０２１９】
例えば、第１〜３実施例では、ホストコンピュータ２００が出力したライト対象データ（例えば、ユーザに指定されたデータファイル）が、ホストアダプタ３００、中継アダプタ４００及びディスクアダプタ５００を介して、物理ディスク群９上の物理的又は論理的な記憶領域に書き込まれたり、その記憶領域からリードされたリード対象データが、ディスクアダプタ５００、中継アダプタ４００及びホストアダプタ３００を介して（厳密には、ＳＭ４７０、又は、ディスクアダプタ５００とホストアダプタ３００との間に備えられる別のメモリ（例えばキャッシュメモリ）を介して）、ホストコンピュータ２００に送信されたりするが、ＬＭに直接ライトされる情報は、ＭＰ間で受け渡しされる上記メッセージに限らず、上記ライト対象データやリード対象データであっても良い。その場合、通常、そのライト対象データやリード対象データのデータサイズはデータ毎に異なるが、ＭＰ間で受け渡しされる際には、所定サイズ毎に分割されてから受け渡しされても良い（所定サイズに満たない場合には、ダミーデータを追加して所定サイズにされても良い）。また、その際、例えば、直接ＬＭライト方式として、上記別のメモリ（例えばキャッシュメモリ）を介さずにライト対象データ又はリード対象データが受け渡しされても良いし、関節ＬＭライト方式として、上記別のメモリ（例えばキャッシュメモリ）に一時ライト対象データ又はリード対象データを格納した上で、ライト対象データ又はリード対象データが受け渡しされても良い。
【０２２０】
また、例えば、上述したホストアダプタ３００とディスクアダプタ５００とをどのように接続するかには種々の接続バリエーションが考えられる。例えば、第１の接続バリエーションでは、図２３に示すように、分離したモジュール（例えばディスクアレイ制御装置）１０００、９１０、９２０にあるアダプタ３００と５００とが、中継アダプタ４００を介して接続される。また、例えば、第２の接続バリエーションでは、図２４に示すように、ｎ枚のアダプタ３００又は５００を有する分離した複数のモジュールが、中継装置９６０を介して通信可能に接続される。また、例えば、第３の接続バリエーションでは、図２５に示すように、１以上のホストアダプタ３００と中継アダプタ４００とを有する第１モジュール（例えばディスクアレイ制御装置）と、１以上のディスクアダプタ５００と中継アダプタ４００とを有する第２モジュール（例えばディスクアレイ制御装置）とがあり、複数のモジュールにそれぞれ搭載の複数の中継アダプタ４００同士が接続される。
【０２２１】
また、例えば、ディスクアレイ装置１００では、第１実施例のように、各ＭＰが能動的に他ＭＰにライト情報（例えば、メッセージ、リード対象データ又はライト対象データ）を送信する第１モードと、第３実施例のように、各ＭＰが他ＭＰからのリードコマンドに応答してライト情報を送信する第２モードとが選択的に行われるようにしても良い。それら２種類のモードのうちのいずれを採用するかは、手動で又は自動で、所定タイミングに設定されても良い。
【図面の簡単な説明】
【０２２２】
【図１】本発明の第一実施例に係るディスクアレイ制御装置の構成を示す。
【図２】各ＭＰ３６０（及び５５０）に格納されているアドレスマップの一例を示す。
【図３】ホストアダプタ３００の機能及び構成を詳細に示すブロック図である。
【図４】中継アダプタ４００の機能及び構成を詳細に示すブロック図である。
【図５】ディスクアダプタ５００の機能及び構成を詳細に示すブロック図である。
【図６】ホストハブ３１０からポートコントローラ４１０に送られるコマンドの構成例を示す。
【図７】ポートコントローラ４１０からホストハブ３１０が受信するステータス情報の構成例を示す。
【図８】ポートコントローラ４１０からディスクハブ５１０が受信するコマンドの構成例を示す。
【図９】ポート選択制御部４４０の概要を示す。
【図１０】ポート選択制御部４４０の具体例を示す。
【図１１】直接ＬＭライト方式のメッセージが送信される場合であって、そのメッセージがＳＭ４７０のサブバッファ領域に一時格納されることが無い場合に、アダプタ３００、４００及び５００が行うデータのやり取りの流れを示す。
【図１２】直接ＬＭライト方式のメッセージが送信される場合であって、そのメッセージがＳＭ４７０のサブバッファ領域に一時格納される場合に、アダプタ３００、４００及び５００が行うデータのやり取りの流れを示す。
【図１３】アクセス制御部３１６がＳＭバッファフルテーブル３１５の情報に基づいてコマンドの送信を制御する場合の処理流れを示す。
【図１４】ＳＭバッファフルテーブル３１５でバッファフルがリセットされる場合の処理流れを示す。
【図１５】本発明の第2実施例におけるディスクアダプタの構成例である。
【図１６】リード割込みコマンドの構成例を示す。
【図１７】受信側アダプタからのリード割込みコマンドに応答して中継アダプタから出力されるデータの構成例を示す。
【図１８】第２実施例において、ＳＭ４７０上の所定サブバッファ領域に直接ライトコマンドが格納される場合の、直接ライトコマンドのやり取りの流れを示す。
【図１９】図１８におけるコマンド送受信のタイミングチャートを示す。
【図２０】本発明の第３実施例におけるアドレスマップの一例。
【図２１】第３実施例において、直接ＬＭライト方式のリードコマンドがＳＭ４７０のサブバッファ領域に一時格納されることが無い場合に行なわれるデータのやり取りの流れを示す。
【図２２】第３実施例において、直接ＬＭライト方式のリードコマンドが送信される場合であって、そのリードコマンドがＳＭ４７０のサブバッファ領域に一時格納される場合に行なわれるデータのやり取りの流れを示す図。
【図２３】ホストアダプタ３００とディスクアダプタ５００の第１の接続バリエーションの一例を示す図。
【図２４】ホストアダプタ３００とディスクアダプタ５００の第２の接続バリエーションの一例を示す図。
【図２５】ホストアダプタ３００とディスクアダプタ５００の第３の接続バリエーションの一例を示す図。
【符号の説明】
【０２２３】
１００  ディスクアレイ制御装置
２００  ホストコンピュータ
６００  磁気ディスク装置
３００  ホストアダプタ
３６０  ホスト側マイクロプロセッサ
３５０  ホスト側ローカルメモリ
３１０  ホストハブ
５００  ディスクアダプタ
５５０  ディスク側マイクロプロセッサ
５６０  ディスク側ローカルメモリ
５１０  ディスクハブ
４００  中継アダプタ
４１０  ポートコントローラ
４７０  共有メモリ
【図１】
2005157830.tif 000003
【図２】
2005157830.tif 000004
【図３】
2005157830.tif 000005
【図４】
2005157830.tif 000006
【図５】
2005157830.tif 000007
【図６】
2005157830.tif 000008
【図７】
2005157830.tif 000009
【図８】
2005157830.tif 000010
【図９】
2005157830.tif 000011
【図１０】
2005157830.tif 000012
【図１１】
2005157830.tif 000013
【図１２】
2005157830.tif 000014
【図１３】
2005157830.tif 000015
【図１４】
2005157830.tif 000016
【図１５】
2005157830.tif 000017
【図１６】
2005157830.tif 000018
【図１７】
2005157830.tif 000019
【図１８】
2005157830.tif 000020
【図１９】
2005157830.tif 000021
【図２０】
2005157830.tif 000022
【図２１】
2005157830.tif 000023
【図２２】
2005157830.tif 000024
【図２３】
2005157830.tif 000025
【図２４】
2005157830.tif 000026
【図２５】
2005157830.tif 000027