(57)【要約】【課題】メッセージ構築に伴うオーバヘッドによって別のプロセッサを採用する利益が低減しないようにする。【解決手段】本発明の方法および装置は、プロセッサ間のハードウェア支援通信を実行する。第１のプロセッサからの命令に応じて、第１のコプロセッサはミラーメモリの第１のブロックに情報を書き込む。ミラーメモリは維持され、第２のコプロセッサがミラーメモリの第２のブロックから情報を読み出すことができるようになる。情報は第２のプロセッサがアクセス可能なメモリに保存される。情報は第２のプロセッサによってアクセスされる。【選択図】図６
2004054916.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ間のハードウェア支援通信を実行する方法であって、
第１のプロセッサからの指令に応じて、第１のコプロセッサを使用してミラーメモリの第１のブロックに情報を書き込み、
ミラーメモリを維持し、
第２のコプロセッサを用いて、ミラーメモリの第２のブロックから前記情報を読み出し、
第２のプロセッサにアクセス可能なメモリに前記情報を保存し、
前記第２のプロセッサを用いて前記情報にアクセスすることを含む方法。
【請求項２】
プロセッサとコプロセッサとＡＳＩＣとをそれぞれ含む複数のグループが作業を共有するように構成する方法であって、
ＡＳＩＣが接続されたバスを使用して、各コプロセッサとグループ化されている前記ＡＳＩＣを介してコプロセッサ間で情報を転送し、
前記コプロセッサが単一プロデューサであり前記プロセッサが単一コンシューマである単一プロデューサ／単一コンシューマ待ち行列を各グループについて構成し、
前記単一プロデューサ／単一コンシューマ待ち行列から情報を取り出し、
各プロセッサで動作するように構成されたソフトウェアを使用して前記情報を処理することを含む方法。
【請求項３】
前記待ち行列からの作業の取出しは、
各ＡＳＩＣが、ミラーメモリの複数のセクションの各々に関連付けられている複数のＡＳＩＣ間で情報を渡すことによりミラーメモリを維持することと、
ミラーメモリを使用してコプロセッサ間で情報を転送することであって、前記情報が、第１のコプロセッサによってミラーメモリの第１のセクションに保存される前にマーシャリングされ、第２のコプロセッサによってミラーメモリの第２のセクションから読み出された後にデマーシャリングされることを含む、請求項２に記載の方法。
【請求項４】
各プロセッサにおいて動作するように構成された前記ソフトウェアが、
入出力プロセッサの動作を制御するように構成されたフロント・コード、
ＲＡＩＤ装置の動作を制御するように構成されたミドル・コード、
ディスクドライブ動作を制御するように構成されたバック・コード、
からなるグループの中から選択される、請求項２に記載の方法。
【請求項５】
リモートに配置された第１のプロセッサと第２のプロセッサとの間で作業を共有するためのプロセッサ実行可能命令を含むプロセッサ読取可能媒体であって、前記プロセッサ実行可能命令は、
循環バッファを使用して、前記第１のプロセッサから第１のコプロセッサに対してアドレスとコマンド・タイプとを含むコマンドを発行し、
前記第１のコプロセッサを使用して、前記アドレスに関連し前記コマンド・タイプに従った情報をマーシャリングし、
前記第１のコプロセッサを使用して、マーシャリングされた情報をミラーメモリの第１のブロックにコピーし、
第２のコプロセッサに対し、デマーシャリング・ジョブが入手可能であることを通知し、
前記デマーシャリング・ジョブをミラーメモリの第２のブロックから前記第２のコプロセッサに読み込み、
前記第２のコプロセッサを用いて前記デマーシャリング・ジョブを実行して、デマーシャリングされた情報を取得し、
前記デマーシャリングされた情報を待ち行列に書き込んで、入手可能なジョブに関する情報を前記第２のプロセッサに提供する命令を含む、プロセッサ読取可能媒体。
【請求項６】
前記デマーシャリングされた情報を前記待ち行列に書き込むことは、前記第２のプロセッサによって動作されるように構成されたオペレーティング・システムによって使用されるローカル・メモリに、前記入手可能なジョブに関する情報を配置することを含む、請求項５に記載のプロセッサ読取可能媒体。
【請求項７】
前記マーシャリングされたメモリのコピーは、
ミラーメモリ内に構成された循環バッファに書き込み、
前記リモート・コプロセッサが前記デマーシャリング・ジョブを読み出した後に、前記循環バッファ内のメモリを逆割り当てする命令をさらに含む、請求項５に記載のプロセッサ読取可能媒体。
【請求項８】
前記第２のプロセッサによる完了後にのみ、前記第１のプロセッサにコマンド進捗を通知する命令をさらに含む、請求項５に記載のプロセッサ読取可能媒体。
【請求項９】
複数のディスクと、
ディスク及びクライアントＩ／Ｏを管理するように構成された複数のコントローラ・カードと、を含むＲＡＩＤシステムであって、
各コントローラ・カードが、
（ａ）ローカル・メモリと、
（ｂ）前記ローカル・メモリと通信するプロセッサと、
（ｃ）前記ローカル・メモリ内に定義され前記プロセッサによって空にされるように構成された単一プロデューサ／単一コンシューマ待ち行列と、
（ｄ）前記待ち行列に作業を転送する支援エンジンであって、
（ｄ１）ローカル・ミラーメモリ・ブロックとローカル・アレイＡＳＩＣとを備え、他のコントローラ・カード上のミラーメモリ・ブロックについて前記ローカル・ミラーメモリ・ブロックを維持するミラーメモリと、
（ｄ２）前記ローカル・ミラーメモリ・ブロックに情報をマーシャリング及び書き込みし、該ローカル・ミラーメモリ・ブロックから取得された情報を読み出し及びデマーシャリングするように構成された、コプロセッサと、
を含む支援エンジンと、
を含む、ＲＡＩＤシステム。
【請求項１０】
入出力プロセッサの動作を制御するように構成されたフロント・コードと、前記ＲＡＩＤシステムの動作を制御するように構成されたミドル・コードと、ディスクドライブ動作を制御するように構成されたバック・コードと、を備え、前記プロセッサ上で動作するように構成されたソフトウェアをさらに含む、請求項９記載のＲＡＩＤシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、プロセッサ間のハードウェア支援通信を有するＲＡＩＤ（ｒｅｄｕｎｄａｎｔ　ａｒｒａｙ　ｏｆ　ｉｎｅｘｐｅｎｓｉｖｅ　ｄｉｓｋｓ）装置に関する。
【０００２】
【従来の技術】
大量のデータ記憶という増大し続けるニーズを満たすべく、ＲＡＩＤ装置の採用が増えている。従来、ＲＡＩＤ装置内において、多数のディスクを動作させるために、それぞれが少なくとも１つのプロセッサを有する大量のコントローラ・カードを必要とした。マルチプロセッサ・アプリケーションに関連する共通の課題の１つは、第１のプロセッサから第２のプロセッサに作業を転送するのに時間がかかることに関連する性能に与える影響である。
【０００３】
【発明が解決しようとする課題】
対称型マルチプロセッシング（ＳＭＰ）の概念に基づいて構築されたシステムでは、すべてのプロセッサが同じメモリのビューを見る。ＳＭＰシステムでは、プロセッサは、メモリ内容をメッセージの形態にパッキングして他のプロセッサに渡すために時間を費やす必要がない。しかし、各プロセッサの状態を追跡するために、およびメモリがコヒーレントな状態を維持することを保証するために、特別なハードウェア要素がＳＭＰシステムに追加される。結果として、これらのシステムは非常に高価となり、また構築が困難となる。ＳＭＰシステムは、プロセスが追加されるに従って、ますます複雑で高価で非効率となる。例えば、２つまたは４つのプロセッサに関連する困難は、８つ以上のプロセッサを有するシステムの困難には複雑さにおいて到底及ばない。従って、ＳＭＰテクノロジでは、コヒーレンシ動作に関連したシステム全体に渡ってのボトルネックが発生し、より多くのプロセッサをシステムに追加することで実現される全般的な利益が低減する。従って、すべてのプロセッサが同一のメモリのビューを有することを可能にするマルチプロセッサ・システムは、複雑で費用がかかる場合がある。さらに、これらの欠点は、プロセッサの数の増加に従って増大する可能性がある。
【０００４】
マルチプロセッサ・アーキテクチャの他の形態では、協調（ｃｏｏｐｅｒａｔｉｎｇ）プロセッサは共通のメモリのビューを共有しない。例えばＵＮＩＸ環境では、メッセージは「リモートシェル」の形態で構成されプロセッサ間で伝送される。「リモートシェル」が全体のパフォーマンスの向上に役立つためには、メッセージを小さくかつ迅速に構成する必要があるが、大量の作業を伴う必要もある。転送される作業の量は、メッセージの構築に必要な作業よりずっと多くなるに違いない。このテクノロジによって構築されたシステムが成功するためには、メッセージの形成に伴うオーバヘッドによって別のプロセッサを採用する利益が低減しないように注意を払う必要がある。
【０００５】
【課題を解決するための手段】
本発明の方法および装置は、プロセッサ間のハードウェア支援通信を実行する。第１のプロセッサからの命令に応じて、第１のコプロセッサは、ミラーメモリ（ｍｉｒｒｏｒｅｄ　ｍｅｍｏｒｙ）の第１のブロックに情報を書き込む。ミラーメモリは維持され、第２のコプロセッサがミラーメモリの第２のブロックから情報を読み出すことができるようになる。情報は、第２のプロセッサがアクセス可能なメモリに保存される。情報は、第２のプロセッサによってアクセスされる。
【０００６】
【発明の実施の形態】
本発明の方法および装置は、プロセッサ間のハードウェア支援通信を実行する。第１のプロセッサからの命令に応じて、第１のコプロセッサは、ミラーメモリの第１のブロックに情報を書き込む。ミラーメモリは維持され、第２のコプロセッサがミラーメモリの第２のブロックから情報を読み出すことができるようになる。情報は、第２のプロセッサがアクセス可能なメモリに保存される。情報は、第２のプロセッサによってアクセスされる。
【０００７】
図１は、ホスト１０４によってサポートされるＲＡＩＤ装置１０２がネットワーク１０８を介してクライアント１０６にサービスする環境１００を示す。ＲＡＩＤ装置は、ハードウェア支援プロセッサ間通信によって複数のプロセッサがより効率的に協調することを可能にするアーキテクチャを採用する。
【０００８】
図２は、例示的なＲＡＩＤ装置１０２のエンクロージャ２０２内の詳細を示す。第１および第２のコントローラ・カード２０４、２０６が、ファイバ・チャネルまたは同様のテクノロジによる情報導線（ｃｏｎｄｕｃｔｏｒ）２１０、２１２を使用して、複数のディスクドライブ２０８の動作を制御する。図３から分かるように、ミラーバス２１４と追加の通信バス２１６、２１８により、各コントローラ・カード内に含まれるアレイＡＳＩＣは、コントローラ・カードに含まれるミラーメモリを維持することができる。オン・オフ制御および電源切換ライン２２０、２２２により、ＲＡＩＤ装置の動作に対する制御が可能となる。電源および冷却モジュール２２４、２２６は、ＲＡＩＤ装置のエンクロージャ内の装置に対し５ボルト（２２８）および１２ボルト（２３０）を供給する。
【０００９】
図３は、ＲＡＩＤ装置内に位置するコントローラ・カード２０４内の詳細を示す拡大ブロック図である。特定の技術は図３に示すバス、メモリ技術等の特定のコンポーネントと同一視されるが、多くの環境において、別のコンポーネントおよび別の技術で代替することができる。
【００１０】
ＰＣＩバス３０２は、プロセッサ３０４と、コプロセッサ３０６と、アレイＡＳＩＣ３０８との間の通信を容易にする。アレイＡＳＩＣ３０８は、さらにミラーメモリ３１０と通信する。バス３０３は、プロセッサ３０４と、フラッシュメモリ３１２と、ローカル・メモリ３１４との間の通信を容易にする。
【００１１】
多くの異なる装置を利用して、ＡＳＩＣ（特定用途向け集積回路）またはフィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）等のコプロセッサ機能を提供することができる。ミラーメモリは、ＮＶＲＡＭ（不揮発性ＲＡＭ）技術を利用することができる。ローカル・メモリ３１４は、ＥＣＣ　ＳＤＲＡＭ（誤り訂正符号同期ダイナミックＲＡＭ）を利用できる。
【００１２】
アレイＡＳＩＣ３０８は、ミラーバス２１４と通信バス２１６、２１８によって、他のコントローラ・カード内に位置する同様に配置されたアレイＡＳＩＣと通信する。アレイＡＳＩＣは、ＰＣＩバス３１６によって、ホストコンピュータ（図１のホスト１０４等）と通信するファイバ・チャネルＩ／Ｏプロセッサ３１８、３２０と通信し、また、ディスク２０８（図２に示す）と通信するファイバ・チャネル・ポート・バイパス３２２と通信することができる。
【００１３】
アレイＡＳＩＣ３０８は、他のコントローラ・カードに位置する同様に配置されたアレイＡＳＩＣと通信することができるので、ミラーメモリを維持することができる。ミラーメモリの維持には、ミラーメモリ３１０の任意のブロックに対して行われた変更をミラーメモリ３１０の他のすべてのブロックに対して行うことが含まれる。典型的に、ミラーメモリの１つのブロックに関連するアレイＡＳＩＣ３０８は、ミラーメモリに対して変更が行われた（アレイＡＳＩＣ自体による等）ことを認識し、その変更を、ミラーメモリの別のブロックにそれぞれ関連付けられている他のアレイＡＳＩＣに通信する。そして、他のアレイＡＳＩＣは、ミラーメモリのそれぞれのブロックにおいてその変更を行う。従って、複数のブロックを含むミラーメモリが維持される。
【００１４】
図４は、ローカル・メモリ３１４に含まれコントローラ・カード上のプロセッサ３０４（図３）によって実行される、例示的なソフトウェア構造を示すブロック図（４００）である。ＲＡＩＤ環境において、プロセッサ３０４は、Ｉ／Ｏプロセッサ３１８から情報を受け取る。このＩ／Ｏメッセージはリモート・クライアントによって開始することができる。このリモート・クライアントは、ＲＡＩＤ装置と通信するホスト・コンピュータに対して要求を送信する。多くの場合、プロセッサ３０４上で動作するフロント・ソフトウェア４０２は、Ｉ／Ｏ要求を、ＲＡＩＤ装置内の別のコントローラ・カードに関連するディスクに関する情報に関連するものとして識別する。従って、フロント・ソフトウェア４０２は、Ｉ／Ｏ要求をパッケージングし、それをＲＡＩＤ装置内の適当なコントローラ・カード上の適当なプロセッサに送信する。こうして、ホスト・コンピュータは、クライアント・コンピュータからＩ／Ｏ要求を受け取ると、ＲＡＩＤ装置内の都合のよいコントローラ・カードに対してＩ／Ｏ要求を送信する。受信側コントローラ・カードは、フロント・ソフトウェア４０２を使用して、Ｉ／Ｏ要求を正しいコントローラ・カードに転送する。
【００１５】
ミドル・ソフトウェア４０４は、ＲＡＩＤストライプを操作（すなわち、セグメント内の関連データを複数のディスクに渡って分散させて、セグメントを同時に読み出し／書き込みできるようにする）したり、消失データをミラーディスクから再構築するタスクを処理する等の、ＲＡＩＤ装置の動作に関連するタスクを実行する。
【００１６】
バック・ソフトウェア４０６は、低レベル読み出し／書き込みタスクを処理する。例えば、バック・ソフトウェアは、特定のディスクの特定のセクタに行くこと、データを読み出すこと、そのデータを特定のメモリ位置に置くことといったタスクの実施をサポートする。
【００１７】
図５は、図３のコントローラ・カードのような単一のコントローラ・カード上の重要なコンポーネントの関係（５００）を示す。この図では、第１のコントローラ・カードと第２のコントローラ・カードの間の情報の転送に関連する種々のソフトウェア構造が追加されている。（図２に示したような）ＲＡＩＤ環境内では、複数のコントローラ・カードが通信する。通信の間、情報は支援エンジンによって第１のコントローラ・カードに配置された第１のプロセッサから第２のコントローラ・カードに配置された第２のプロセッサに転送される。各コントローラ・カード上のコプロセッサとミラーメモリとを含む支援エンジンは、受信側プロセッサに対してローカルなメモリ内に定義された待ち行列内の宛先に情報を再配置する。支援エンジンの動作には第１および第２のコプロセッサが含まれ、これらのプロセッサは協働して、ミラーメモリ内に置かれた情報をマーシャリング（ｍａｒｓｈａｌｉｎｇ）およびデマーシャリングすることによってコントローラ・カード間で情報を移動させる。図２および図３に示したようなミラーメモリは、アレイＡＳＩＣ３０８によって更新され維持される。
【００１８】
第１のプロセッサ３０４は、ローカル・メモリ３１４内に定義された循環バッファ５０２を使用して、第１のコプロセッサ３０６に対しコマンドを発行するように構成される。コプロセッサとミラーメモリは、コントローラ・カード内およびコントローラ間で情報を転送する支援エンジンを形成する。コプロセッサは、２つの主要な機能、すなわち情報の送信と受信をサポートする。情報送信機能はプロセッサからのコマンドの受信をサポートし、これはアドレス・ポインタ５０４とコマンド・タイプ５０６を含むことができる。コマンド・タイプは、アドレス・ポインタによってそのコマンドに関連付けられた情報をマーシャリングする方法をコプロセッサに命令する。コプロセッサは、マーシャリングをすると、その情報をミラーメモリ３１０に配置された循環バッファ５０８に転送する。
【００１９】
ミラーメモリがアレイＡＳＩＣ３０８によってミラーリングされるので、ミラーメモリの１つのブロックに書込まれた情報を、ミラーメモリの別のブロックを見ているＲＡＩＤ装置内の他のコントローラ・カードに配置されたコプロセッサが見ることができる。従って、受信側のコプロセッサ、すなわち情報が向けられたコプロセッサは、その情報受信機能を呼び出し、ミラーメモリから情報をコピーする。次に、受信側コプロセッサは適宜情報をデマーシャリングし、これによってローカル・プロセッサを考慮したタスクを形成する。タスクは、ローカル・プロセッサのオペレーティング・システム５１２によって管理される待ち行列５１０内に配置される。間隔を置いて、受信側プロセッサのオペレーティング・システム内のディスパッチャ・ソフトウェアは、ローカル・プロセッサの注意のために待ち行列から作業を取り出す。
【００２０】
上述したように、第１のコントローラ・カード上のコプロセッサ３０６は、複数のコプロセッサが見ることができるミラーメモリ３１０内に情報を渡すことにより、第２のコントローラ・カード上の同様のコプロセッサと通信することができる。代替的に、第１のコントローラ・カード上の第１のコプロセッサ３０６は、第１のコントローラ・カード上のアレイＡＳＩＣ３０８に情報を渡すことにより、第２のコントローラ・カード上の第２のコプロセッサと通信することができる。そして、Ｍ−Ｂｕｓまたは同様の機能により第２のコントローラ・カード上の第２のアレイＡＳＩＣに情報を渡すことができる。その後、第２のアレイＡＳＩＣは、第２のコプロセッサに情報を渡すことができる。このようにして、コプロセッサはミラーメモリを使用せずに通信することができる。
【００２１】
図６のフローチャートは、第１のプロセッサと第２のプロセッサの間で情報を転送する方法６００を示す。ここでは、第１および第２のプロセッサは、ＲＡＩＤ装置内の第１および第２のコントローラ・カードにそれぞれ配置されている。本方法の要素は、ディスク、ＲＯＭまたは他のメモリ装置等のプロセッサ読取可能媒体上に定義されたプロセッサ読取可能命令の実行等の、任意の望ましい方法で実行可能である。また、どのブロックに記述された動作も他のブロックに記述された動作と並列に実行したり、交互に実行したり、または複数の他のブロックに関連するアクションと一緒に分布させたりすることができる。
【００２２】
ブロック６０２で、第１のプロセッサからの命令に応じて、第１のコプロセッサを使用してミラーメモリの第１のブロックに情報が書き込まれる。一般的なアプリケーションでは、情報は第２のプロセッサによって実行されるタスクを含む。望ましい場合、第１のコプロセッサにより任意の望ましい様式に情報をマーシャリングすることができる。多くの場合、情報はミラーメモリ内に構築された循環バッファに書き込まれる。
【００２３】
ブロック６０４で、アレイＡＳＩＣをミラーメモリの各ブロックに関連付けることによってミラーメモリが維持される。各アレイＡＳＩＣは、ミラーメモリの他のブロックに関連するアレイＡＳＩＣと通信する。従って、ミラーメモリの１つのブロックが変更されると、関連するアレイＡＳＩＣは他のアレイＡＳＩＣに変更を伝え、他のアレイＡＳＩＣはミラーメモリのそれぞれの領域を更新する。
【００２４】
ブロック６０６で、第２のコプロセッサは、関連するアレイＡＳＩＣによって更新されたミラーメモリの第２のブロックから情報を読み出す。第１のコプロセッサが情報をマーシャリングした場合、第２のコプロセッサは情報をデマーシャリングする。
【００２５】
ブロック６０８で、第２のプロセッサに対してローカルなメモリに定義された待ち行列に情報が保存される。待ち行列は、図５のオペレーティング・システム５１２内に含まれるディスパッチャ・コードに関連する待ち行列等、第２のプロセッサのオペレーティング・システム内に存在することができ、またはそれによって管理されることが可能である。
【００２６】
ブロック６１０で、第２のコプロセッサは待ち行列プロデューサ（ｐｒｏｄｕｃｅｒ：生産者）であるように構成され、第２のプロセッサは待ち行列コンシューマ（ｃｏｎｓｕｍｅｒ：消費者）であるように構成される。待ち行列は、コプロセッサが待ち行列に書き込み可能でありかつプロセッサが待ち行列から読み出し可能であるように、オペレーティング・システムによって管理されたメモリ内に構成される。
【００２７】
ブロック６１２で、第２のプロセッサにより情報がアクセスされる。このアクセスは、第２のプロセッサによって実行されるオペレーティング・システム・コード内に存在するディスパッチャ・コードを使用することによって実行することができる。
【００２８】
図７のフローチャートは、作業を共有するために、プロセッサ、コプロセッサおよびＡＳＩＣをそれぞれ含む複数のグループを構成する方法７００を示す。例えば、図５は、プロセッサ３０４、コプロセッサ３０６およびＡＳＩＣ３０８を含むこのようなグループを示しており、これは図２および図３に示したようなコントローラ・カード２０４に保持することができる。本方法の要素は、ディスク、ＲＯＭまたは他のメモリ装置等のプロセッサ読取可能媒体上に定義されたプロセッサ読取可能命令の実行等の、任意の望ましい方法で実行可能である。また、どのブロックに記述された動作も他のブロックに記述された動作と並列に実行したり、交互に実行したり、または複数の他のブロックに関連するアクションと一緒に分布させたりすることができる。
【００２９】
ブロック７０２で、１つのコントローラ・カード内に含まれるミラーメモリの１つのブロックにおける変更が、ＲＡＩＤ装置内の他のコントローラ・カード内に含まれるミラーメモリのブロックに反映されるように、ミラーメモリが維持される。ミラーメモリは、複数のアレイＡＳＩＣ間で情報を渡すことによって維持され、各アレイＡＳＩＣは、ミラーメモリの複数のセクションの各々と関連付けられる。これによって、アレイＡＳＩＣは、ミラーメモリの１つのブロックに対して行われた変更をミラーメモリの他のすべてのブロックに伝えることができる。
【００３０】
ブロック７０４で、ミラーメモリを使用してコプロセッサ間で情報が転送される。ミラーメモリの１つのブロックに書き込まれた情報は他のブロックに伝えられるため、各コプロセッサは、ミラーメモリを通して他のコプロセッサと通信することができる。通信をより組織化するべく、第１のコプロセッサによりミラーメモリの第１のセクションに保存される前に情報をマーシャリングし、第２のコプロセッサによりミラーメモリの第２のセクションから読み出された後に情報をデマーシャリングすることも可能である。
【００３１】
ブロック７０６で、ブロック７０２および７０４に示したコントローラ・カード間で情報を転送する方法に加えてまたは代替的に、ＡＳＩＣが接続されたバスを使用して、各コプロセッサとグループ化されたＡＳＩＣを通してコプロセッサ間で情報を転送することができる。
【００３２】
従って、コプロセッサ及びコプロセッサとグループ化されたＡＳＩＣとの間で渡された情報は、ＡＳＩＣが接続されたバスを使用して、第２のＡＳＩＣ及び第２のＡＳＩＣに関連付けられたコプロセッサに転送することができる。例えば、図５において、コプロセッサ３０６とＡＳＩＣ３０８の間で通信を確立できることが分かる。ＡＳＩＣはＭ−Ｂｕｓによって通信できるので、各コプロセッサとグループ化されたＡＳＩＣを通して、コプロセッサ間の通信をサポートすることができる。
【００３３】
ブロック７０８で、指示された場合、情報は、ミラーメモリ無しにＡＳＩＣを通してコプロセッサ間で転送することができる。図５の説明から分かるように、ミラーメモリの使用を避けるために、第１のコプロセッサ３０６は、アレイＡＳＩＣに情報を渡すことによって第２のコプロセッサと通信することができる。次に、情報はバスを介して第２のコントローラ・カード上のアレイＡＳＩＣに渡され、そこから第２のコプロセッサに渡される。このステップは、ミラーメモリの使用の回避を希望する場合に有用である。
【００３４】
ブロック７１０で、プロセッサ／コプロセッサのペアに対して、単一プロデューサ／単一コンシューマの待ち行列が構成される。待ち行列内では、コプロセッサは、待ち行列上に作業をおく単一プロデューサであり、プロセッサは、待ち行列から作業を取り出す単一コンシューマである。待ち行列は、プロセッサとコプロセッサに対してローカルなメモリ内に構成される。
【００３５】
ブロック７１２で、待ち行列から作業が取り出される。作業の取出しは、プロセッサの動作用に構成されたオペレーティング・システム・コード５１２内に存在するディスパッチャ・コードによって実行することができる。ディスパッチャ・コードは、間隔を置いて実行され、これによってジョブ取出しプロセスに対しての制御が可能になる。
【００３６】
ブロック７１４で、待ち行列から取り出された作業は、各プロセッサにおける動作用に構成されたソフトウェアを使用して処理される。このようなソフトウェアは、種々の異なる目的に適合させることができる。待ち行列から取り出されたタスクを実行する際にプロセッサによって実行されるソフトウェアの例には、入出力プロセッサの動作を制御するように構成されたフロント・コードと、ＲＡＩＤ装置の動作を制御するように構成されたミドル・コードと、ディスクドライブ動作を制御するように構成されたバック・コードとが含まれる。
【００３７】
図８のフローチャートは、特にＲＡＩＤ環境での使用に適合させた、リモートに配置された第１のプロセッサと第２のプロセッサとの間での作業の共有を可能にする方法８００を示す。本方法の要素は、ディスク、ＲＯＭまたは他のメモリ装置等のプロセッサ読取可能媒体上に定義されたプロセッサ読取可能命令の実行等の、任意の望ましい方法で実行可能である。また、どのブロックに記述された動作も他のブロックに記述された動作と並列に実行したり、交互に実行したり、または複数の他のブロックに関連するアクションと一緒に分布させたりすることができる。
【００３８】
ブロック８０２で、ローカル・メモリ内に定義された循環バッファを使用して、第１のプロセッサから第１のコプロセッサに対してコマンドが発行される。一実施例では、コマンドはアドレスとコマンド・タイプとを含む。
【００３９】
ブロック８０４で、第１のコプロセッサが、アドレスとコマンド・タイプとを使用して情報をマーシャリングする。多くのアプリケーションでは、マーシャリングされる情報はアドレスによって決まり、情報がマーシャリングされる方法はコマンドによって決まる。
【００４０】
ブロック８０６で、コプロセッサはマーシャリングされた情報をミラーメモリにコピーする。コピープロセスには、ミラーメモリ内に構成された循環バッファに書き込むことと、リモート・コプロセッサがデマーシャリング・ジョブを読み出した後に循環バッファ内のメモリを逆割り当て（ｄｅ−ａｌｌｏｃａｔｉｎｇ）することが含まれる。
【００４１】
ブロック８０８で、第２のコプロセッサに対して、デマーシャリング・ジョブが入手可能であることが通知される。通常、通知は第１のコプロセッサから発生する。
【００４２】
ブロック８１０で、第２のコプロセッサは、ミラーメモリの第２のブロックからデマーシャリング・ジョブを読み出す。一般に、ミラーメモリの第２のブロックは、第１のコプロセッサに関してリモートの位置にある。
【００４３】
ブロック８１２で、第２のコプロセッサはデマーシャリング・ジョブを実行し、これによってデマーシャリングされた情報を取得する。
【００４４】
ブロック８１４で、入手可能なジョブに関連するデマーシャリングされた情報が待ち行列に書き込まれる。デマーシャリングされた情報は、待ち行列に入ると、入手可能なジョブに関して第２のプロセッサによって実行されるタスクとなる。デマーシャリングされた情報の書き込みは、情報を待ち行列に配置することによって実行することができる。待ち行列はローカル・メモリ内に定義され、第２のプロセッサによって動作されるように構成されたオペレーティング・システムによって使用される。
【００４５】
ブロック８１６で、第１のプロセッサに対し、通常はコマンド完了の後にのみ、コマンド実行に関する進捗が通知される。
【００４６】
結論として、ハードウェア支援プロセッサ間通信により、第１のプロセッサと第２のプロセッサの間の命令およびデータ等の情報の転送が可能になる。第１のプロセッサは、コプロセッサに対し、ミラーメモリの第１のブロックに情報を書き込むように命令するよう構成される。ミラーメモリの各ブロックは、同様に位置するＡＳＩＣと通信する関連ＡＳＩＣによって維持される。第２のコプロセッサは、ミラーメモリの第２のブロックから情報を読み出す。情報は、第２のプロセッサに対してローカルなメモリに定義された待ち行列に保存される。
【００４７】
構造的特徴および／または方法ステップに特有の用語で本発明を説明したが、本発明は説明した特定の特徴またはステップに限定されないことを理解されたい。むしろ、特定の特徴およびステップは、この開示を実施する例示的な形態である。例えば、本発明の一形態では、リモート・プロセッサのオペレーティング・システム内のディスパッチャ・コードを使用して、待ち行列から作業が取り出される。代替的に、オペレーティング・システムの外部に配置された外部待ち行列を構成することができ、外部待ち行列から作業を取り出すように適当なコードを設計することができる。
【００４８】
さらに、フローチャートとブロックによって１つまたは複数の方法を開示したが、ブロックは必ずしも提示された順序で実行される必要はなく、別の順序でも同様の利点を得られることを理解されたい。
【図面の簡単な説明】
【図１】ハードウェア支援プロセッサ間通信を有するＲＡＩＤ装置の実施環境を示す図である。
【図２】例示的なＲＡＩＤ装置の詳細を示すブロック図である。
【図３】ＲＡＩＤ装置に存在するコントローラ・カードの詳細を示す拡大ブロック図である。
【図４】コントローラ・カード上のプロセッサによって実行されるソフトウェア構造を示すブロック図である。
【図５】コントローラ・カード上の重要なコンポーネントの関連を示す図である。
【図６】第１および第２のコントローラ・カードにそれぞれ配置された第１のプロセッサと第２のプロセッサとの間で情報を転送する方法を説明するフローチャートである。
【図７】複数のプロセッサ／コプロセッサのペアによる作業の共有を可能とする方法を説明するフローチャートである。
【図８】ＲＡＩＤ環境内で遠隔に配置された第１のプロセッサと第２のプロセッサとの間で作業を共有可能とする方法を説明するフローチャートである。
【符号の説明】
１０２　ＲＡＩＤ
１０４　ホスト
１０６　クライアント
１０８　ネットワーク
３０４　プロセッサ
３０６　コプロセッサ
３０８　アレイＡＳＩＣ
３１０　ミラーメモリ
３１４　ローカル・メモリ
５０２　循環バッファ
５０４　アドレス
５０６　タイプ
５１０　待ち行列
５１２　オペレーティング・システム
【図１】
2004054916.tif 000003
【図２】
2004054916.tif 000004
【図３】
2004054916.tif 000005
【図４】
2004054916.tif 000006
【図５】
2004054916.tif 000007
【図６】
2004054916.tif 000008
【図７】
2004054916.tif 000009
【図８】
2004054916.tif 000010