(57)【要約】      （修正有）【課題】プラットフォームに依存しないプロセス間の高速通信を容易にする。【解決手段】このシステムは、ユーザのアドレス空間からキューをアンマップする。キュー内容は状態を初期化するためリセットされる。キューに供給された要素はプッシュされる。キュー先入れ／先出し（ＦＩＦＯ）のための要素はポップされる。キューからの要素は、キュー状態に影響を与えることなく返される。キュー内の要素内容はそのとき更新される。キューは、その後、排他的アクセスのためロックされる。このロックは解除され、キューへの変更が可能になる。システムは、また、キュー内の要素カウントと、プロセス間通信キューの論理名とを与える。各プロセス間通信キューによって保持される共有メモリベースのヘッダは、キューのクライアントのすべてが単一ソースからキュー情報へアクセスすることを可能にする。【選択図】図１
2005135382.tif 000002
【特許請求の範囲】
【請求項１】
ピアベースのプロセス間通信用システムであって、
前記システムは複数のピアプロセスを備え、
各プロセスは、前記複数のピアプロセスのうちの第１のプロセスと第２のプロセスとの間で選択的にデータを通信するバスシステムを含み、
前記システムは、前記複数のピアプロセスのそれぞれによってアクセス可能な共有データを選択的に記憶する共有メモリを備え、
各プロセスは、前記共有メモリの内容に変更が加えられるときに、前記複数のプロセスのうちの少なくとも１つのプロセスに通知するための通知手段を含み、
各プロセスは、少なくとも１つの他のプロセスによるアクセスから共有メモリを選択的にロックするロッキング機構を含む、ピアベースのプロセス間通信用システム。
【請求項２】
各プロセスは、
そのプロセスに許容可能なフォーマットを指定するメッセージテンプレートを定義するテンプレートジェネレータと、
前記メッセージテンプレートを、前記複数のプロセスのうちの少なくとも１つの他のプロセスへ通信するための手段と、
をさらに備える、請求項１に記載のピアベースのプロセス間通信用システム。
【請求項３】
前記メッセージテンプレートは、ヘッダコンポーネントをさらに備える、請求項２に記載のピアベースのプロセス間通信用システム。
【請求項４】
前記ヘッダコンポーネントは、前記共有メモリ内の最大要素数を表す情報をさらに備える、請求項３に記載のピアベースのプロセス間通信用システム。
【請求項５】
前記ヘッダコンポーネントは、前記共有メモリに要素を追加するときに使用される次の要素を表す情報をさらに備える、請求項３に記載のピアベースのプロセス間通信用システム。
【請求項６】
前記ヘッダコンポーネントは、前記共有メモリから要素を取り出すときに使用される次の要素を表す情報をさらに備える、請求項３に記載のピアベースのプロセス間通信用システム。
【請求項７】
前記ヘッダコンポーネントは、前記共有メモリ内で使用される要素数を表す情報をさらに備える、請求項３に記載のピアベースのプロセス間通信用システム。
【請求項８】
前記共有メモリにアクセスする前記複数のプロセスの個数を判定するための手段をさらに備える、請求項１に記載のピアベースのプロセス間通信用システム。
【請求項９】
前記共有メモリを初期化するため前記共有メモリをリセットするための手段をさらに備え、前記記憶された共有データが削除される、請求項１に記載のピアベースのプロセス間通信用システム。
【請求項１０】
複数のピアプロセスを含むシステムで実行されるピアベースのプロセス間通信の方法であって、
前記複数のピアプロセスのうちの第１のプロセスと第２のプロセスとの間でデータを選択的に通信する工程と、
前記複数のプロセスのうちのそれぞれのプロセスによりアクセス可能な共有メモリに、共有データを選択的に記憶する工程と、
前記共有メモリの内容に変更が加えられるときに、前記複数のプロセスのうちの少なくとも１つのプロセスに通知する工程と、
少なくとも１つの別のプロセスによるアクセスから前記共有メモリを選択的にロックする工程と、
を備える方法。
【請求項１１】
あるプロセスに許容可能なフォーマットを指定するメッセージテンプレートを生成する工程と、
前記メッセージテンプレートを前記複数のプロセスのうちの少なくとも１つの別のプロセスに通信する工程と、
をさらに備える、請求項１０に記載のピアベースのプロセス間通信の方法。
【請求項１２】
前記メッセージテンプレートはヘッダコンポーネントをさらに備える、請求項１１に記載のピアベースのプロセス間通信の方法。
【請求項１３】
前記ヘッダコンポーネントは、前記共有メモリ内の最大要素数を表す情報をさらに備える、請求項１２に記載のピアベースのプロセス間通信の方法。
【請求項１４】
前記ヘッダコンポーネントは、前記共有メモリに要素を追加するときに使用される次の要素を表す情報をさらに備える、請求項１２に記載のピアベースのプロセス間通信の方法。
【請求項１５】
前記ヘッダコンポーネントは、前記共有メモリから要素を取り出すときに使用される次の要素を表す情報をさらに備える、請求項１２に記載のピアベースのプロセス間通信の方法。
【請求項１６】
前記ヘッダコンポーネントは、前記共有メモリ内で使用される要素数を表す情報をさらに備える、請求項１２に記載のピアベースのプロセス間通信の方法。
【請求項１７】
前記共有メモリにアクセスする前記複数のプロセスの個数を判定する工程をさらに備える、請求項１０に記載のピアベースのプロセス間通信の方法。
【請求項１８】
前記共有メモリを初期化するため前記共有メモリをリセットする工程をさらに備え、前記記憶された共有データが削除される、請求項１０に記載のピアベースのプロセス間通信の方法。
【請求項１９】
複数のピアプロセスのうちの第１のプロセスと第２のプロセスとの間でデータを選択的に通信する命令と、
前記複数のプロセスのうちのそれぞれのプロセスによりアクセス可能な共有メモリに、共有データを選択的に記憶する命令と、
前記共有メモリの内容に変更が加えられるときに、前記複数のプロセスのうちの少なくとも１つのプロセスに通知する命令と、
少なくとも１つの別のプロセスによるアクセスから前記共有メモリを選択的にロックする命令と、
を備える、ピアベースのプロセス間通信の命令を記憶した、コンピュータ読み取り可能な媒体。
【請求項２０】
あるプロセスに許容可能なフォーマットを指定するメッセージテンプレートを生成する命令と、
前記メッセージテンプレートを前記複数のプロセスのうちの少なくとも１つの別のプロセスに通信する命令と、
をさらに備える、請求項１９に記載のピアベースのプロセス間通信の命令を記憶した、コンピュータ読み取り可能な媒体。
【請求項２１】
前記メッセージテンプレートはヘッダコンポーネントをさらに備える、請求項２０に記載のピアベースのプロセス間通信の命令を記憶した、コンピュータ読み取り可能な媒体。
【請求項２２】
前記ヘッダコンポーネントは前記共有メモリ内の最大要素数を表す情報をさらに備え、請求項２１に記載のピアベースのプロセス間通信の命令を記憶した、コンピュータ読み取り可能な媒体。
【請求項２３】
前記ヘッダコンポーネントは、前記共有メモリに要素を追加するときに使用される次の要素を表す情報をさらに備える、請求項２１に記載のピアベースのプロセス間通信の命令を記憶した、コンピュータ読み取り可能な媒体。
【請求項２４】
前記ヘッダコンポーネントは、前記共有メモリから要素を取り出すときに使用される次の要素を表す情報をさらに備える、請求項２１に記載のピアベースのプロセス間通信の命令を記憶した、コンピュータ読み取り可能な媒体。
【請求項２５】
前記ヘッダコンポーネントは、前記共有メモリ内で使用される要素数を表す情報をさらに備える、請求項２１に記載のピアベースのプロセス間通信の命令を記憶した、コンピュータ読み取り可能な媒体。
【請求項２６】
前記共有メモリにアクセスする前記複数のプロセスの個数を判定する命令をさらに備える、請求項１９に記載のピアベースのプロセス間通信の命令を記憶した、コンピュータ読み取り可能な媒体。
【請求項２７】
前記共有メモリを初期化するため前記共有メモリをリセットする命令をさらに備え、前記記憶された共有データが削除される、請求項１９に記載のピアベースのプロセス間通信の命令を記憶した、コンピュータ読み取り可能な媒体。
【請求項２８】
複数のピアプロセスを含むシステムで実行される、ピアベースのプロセス間通信のため、コンピュータにより実施される方法であって、
前記複数のピアプロセスのうちの第１のプロセスと第２のプロセスとの間で、データを選択的に通信する工程と、
前記複数のプロセスのうちのそれぞれのプロセスによりアクセス可能な共有メモリに、共有データを選択的に記憶する工程と、
前記共有メモリの内容に変更が加えられるときに、前記複数のプロセスのうちの少なくとも１つのプロセスに通知する工程と、
少なくとも１つの別のプロセスによるアクセスから、前記共有メモリを選択的にロックする工程と、
を備える方法。
【請求項２９】
あるプロセスに許容可能なフォーマットを指定するメッセージテンプレートを生成する工程と、
前記メッセージテンプレートを、前記複数のプロセスのうちの少なくとも１つの別のプロセスに通信する工程と、
をさらに備える、請求項２８に記載のピアベースのプロセス間通信のため、コンピュータにより実施される方法。
【請求項３０】
前記メッセージテンプレートはヘッダコンポーネントをさらに備える、請求項２９に記載のピアベースのプロセス間通信のため、コンピュータにより実施される方法。
【請求項３１】
前記ヘッダコンポーネントは前記共有メモリ内の最大要素数を表す情報をさらに備え、請求項３０に記載のピアベースのプロセス間通信のため、コンピュータにより実施される方法。
【請求項３２】
前記ヘッダコンポーネントは、前記共有メモリに要素を追加するときに使用される次の要素を表すため適合した手段をさらに備える、請求項３０に記載のピアベースのプロセス間通信のため、コンピュータにより実施される方法。
【請求項３３】
前記ヘッダコンポーネントは、前記共有メモリから要素を取り出すときに使用される、次の要素を表すため適合した手段をさらに備える、請求項３０に記載のピアベースのプロセス間通信のため、コンピュータにより実施される方法。
【請求項３４】
前記ヘッダコンポーネントは、前記共有メモリ内で使用される要素数を示すため適合した手段をさらに備える、請求項３０に記載のピアベースのプロセス間通信のため、コンピュータにより実施される方法。
【請求項３５】
前記共有メモリにアクセスする前記複数のプロセスの個数を判定する工程をさらに備える、請求項２８に記載のピアベースのプロセス間通信のため、コンピュータにより実施される方法。
【請求項３６】
前記共有メモリを初期化するため前記共有メモリをリセットする工程をさらに備え、前記記憶された共有データが削除される、請求項２８に記載のピアベースのプロセス間通信のため、コンピュータにより実施される方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プラットフォームに依存しない高速通信を容易にするシステムおよび方法に関する。より詳細には、本発明は、あらゆるプラットフォームでできるだけ最高速の通信を容易にするための、共有メモリベースのプロセス間通信（「ＩＰＣ」）キューテンプレートに関する。
【背景技術】
【０００２】
共有メモリは、１つ以上のプロセスがそれらの仮想アドレス空間のすべてに現れるメモリを介して通信することを可能にさせる。仮想メモリのページは、共有プロセスのページテーブルのそれぞれのページテーブルエントリにより参照される。それは、すべてのプロセスの仮想メモリ内で同じアドレスでなくても構わない。共有メモリ領域へのアクセスは、キーおよびアクセス権照合により制御される。一旦メモリが共有されると、プロセスがどのように共有メモリを使用しているかはチェックされない。プロセスは他の機構に頼らざるを得ない。２つのプロセスが同じ共有メモリセグメントをアタッチするとき、それらは、オペレーティングシステムに対し、それらのアドレス空間の一部を同じメモリへマッピングすることにより正常な制限を緩和することを伝える。ＩＰＣメッセージキューは一時的なメモリ領域であり、典型的に基礎にあるオペレーティングシステムによって与えられ、クライアントとサーバとの間の通信のため使用される。
【０００３】
セマフォは、リソースが現在他のスレッドまたはプロセスによって使用されているかどうかをチェックするために使用されるフラグである。その最も簡単な形式において、セマフォは、２つ以上のプロセスによってテストされ設定される値を有するメモリ内のロケーションである。テストおよび設定演算は、各プロセスに関する限り妨げられることがなく、すなわち自律的であり、一旦開始されると、それを止めることは不可能である。テストおよび設定演算の結果は、セマフォの現在値と設定値の加算であり、正と負のどちらにもなり得る。テストおよび設定演算の結果に応じて、あるプロセスは、別のプロセスによってセマフォの値が変更されるまでスリープ状態にならなければならない。例えば、あるプロセスがプリンタを使用したい場合、そのプロセスは、最初に、セマフォが設定されているかどうかを調べるためチェックすることにより、プリンタが使用可能であることを確認する必要がある。セマフォが設定されているならば、このプロセスは、現在プリンタを取得しているプロセスが終了するまで待たなければならない。しかし、プリンタが空いているならば、プロセスはセマフォを設定し、プリンタを使用開始し、そのプロセスが終了するまですべての他のプロセスへのアクセスを阻止する。
【０００４】
セマフォは、コードの重要なセクションが２つ以上のスレッドによって同時に実行されることを防止する、典型的な技術である。セマフォはモニタの一般形である。モニタは１つのスレッドだけが同時にオブジェクトをロックすることを可能にさせる。セマフォはＮ個のプロセスを許可する。ほぼ排他的な使用のためセマフォを取るプロセスは、ロックするごとに減少しアンロックするごとに増加するカウントダウン整数が組み込まれているので、セマフォのダウンオペレーションと呼ばれる。セマフォが完全に占有されているならば、セマフォを使用しようとする新しいスレッドは、あるスレッドがセマフォを加算することによりそのロックを解放するまで待機するであろう。セマフォを正常に機能させるため、フルのチェックと減算はすべて１つの妨げられないアトミック命令で実行されなければならない。Ｊａｖａ（登録商標）仮想マシン（「ＪＶＭ」）のモニタ命令は、セマフォをシミュレートするため必要なハードウェアサポートを提供する。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
したがって、共有メモリマネージャにおいて、プロセス間通信キューテンプレートを使用するプロセス間で、高速通信を行うシステムおよび方法が必要である。
【課題を解決するための手段】
【０００６】
本発明は、プラットフォーム非依存の高速プロセス間通信のためのシステムおよび方法を対象とする。
【０００７】
本発明のシステムは、共有メモリベースのプロセス間通信キューを使用する。キュー内のデータは完全に保護され、すなわち、キューは、２つ以上のプロセスがキュー要素の内容を変更しようとするとき、各キュー要素の自動ロックを行う。このオペレーションは、プロセスとスレッドを通じて共有リソースを管理することからキューのクライアントを完全に解放する。システムは、また、トランスミッタとレシーバとの間で簡単に役割を逆転することができる。送信側と受信側の役割の逆転は、付加的なリソースを作成することなく実現される。システムは、さらに、イベントベースの通知スキームを使用する。プロセス間の通信のため、テンプレートは、要素のプッシュ／プル関数を待ち受け、これにより、キューの状態の変化を瞬時的に配信することができる。すなわち、この通知方法は、キューが望ましいプロセスが利用可能になるまでクライアントを待機させることができる。一旦利用可能になると、その望ましいプロセスのリソースは待機中のクライアントのため有効にされる。
【０００８】
システムは、また、システムクラッシュからの自動復旧の能力を含む。キューは、そのキューがサービスを提供しているクライアントに関する情報を常に保有する。いずれかのプロセスがクラッシュするか、または、キューの状態に影響する場合、自動検知能力はプロセスがシステムを動かなくすることを防止する。この検知は、共有セグメントにアタッチされたプロセスの数をチェックすることにより実現される。
【０００９】
システムは、供給された数の要素およびキューヘッダを保持するために必要なサイズの共有セグメントを作成することから始める。システムは、次に、ユーザのアドレス空間からキューをアンマップする。キュー内容は状態を初期化するためリセットされる。供給されたキューの要素はプッシュされる。キュー先入れ／先出し（ＦＩＦＯ）のための要素はポップされる。キューからの要素はキュー状態に影響を与えることなく返される。このキュー内の要素内容は次に更新される。キューはその後に排他的アクセスのためロックされる。このロックは適切に解除され、キューへの変更が可能になる。さらに、システムは、キュー内の要素数と、プロセス間通信キューの論理名を与える。各プロセス間通信キューにより保持される共有メモリベースのヘッダは、キューのすべてのクライアントが単一ソースからキュー情報へアクセスできるようにする。
【００１０】
本発明によれば、ピアベースのプロセス間通信のシステムが提供される。このシステムは複数のピアプロセスを含む。システムの各プロセスは、ピアプロセスのうちの２つのプロセス間で選択的なデータの通信を可能にするバスシステムを組み込む。システムは、また、共有データを選択的に記憶し、いずれのプロセスからもアクセス可能な共有メモリを含む。各プロセスは、共有メモリの内容に変更が加えられるときに少なくとも１つの他のプロセスに通知するため適合した手段を含む。その上、各プロセスは、他のプロセスによるアクセスから共有メモリを選択的にロックするための、ロッキング機構を具備する。
【００１１】
好ましい一実施形態によれば、システムの各プロセスはテンプレートジェネレータをさらに含み、テンプレートジェネレータは、そのプロセスに許容可能なフォーマットを指定するメッセージテンプレートを定義する。このプロセスは、また、メッセージテンプレートを少なくとも１つの他のプロセスへ通信するために適合した手段を含む。
【００１２】
さらに、本発明によれば、複数のピアプロセスを含むシステムで実行される、ピアベースのプロセス間通信の方法が提供される。この方法は、第１のプロセスと第２のプロセスとの間でデータを選択的に通信することにより始まる。次に、共有データは、いずれのプロセスからもアクセス可能な共有メモリに選択的に記憶される。１つ以上のプロセスは、その後に、共有メモリの内容に変更が加えられるときに通知される。共有メモリは、次に、プロセスのうちの１つによるアクセスから選択的にロックされる。
【００１３】
好ましい一実施形態では、この方法は、さらに、プロセスに許容可能なフォーマットを指定するメッセージテンプレートを生成する工程を含む。この方法は、また、メッセージテンプレートを複数のプロセスのうちの少なくとも１つの別のプロセスに通信する工程を含む。
【００１４】
本発明のさらに別の利点、態様、および特徴は、本発明を実施するため最も適したベストモードの一例としてのみ、本発明の好ましい実施形態が示され記載された以下の説明から、当業者に容易に理解されるであろう。本発明はその他の異なる実施形態が可能であり、そのいくつかの細部は、本発明の範囲から逸脱することなく、種々の明白な態様を変更可能であることが理解されるであろう。したがって、図面および解説は、本質的に例示であり、限定ではないとして考えられるであろう。
【発明を実施するための最良の形態】
【００１５】
対象となる発明は、添付図面と併せて明らかにされ、発明の一部分を形成し、発明を限定することを目的としていない、特定の部分、および、部分への配置に関して説明されている。
【００１６】
本発明は、プロセス間の高速通信を容易にするためプロセス間通信（ＩＰＣ）キューテンプレートに基づく共有メモリマネージャを提供するシステムおよび方法を対象とする。
【００１７】
ユーザ、送信側および受信側を有するシステムにおいて、ＩＰＣキューテンプレートに基づく共有メモリマネージャは、プロセス間の高速通信を実現し易くする。キューをテンプレート形式にすることにより、任意のメッセージフォーマットが使用できる。ユーザは、ユーザがテンプレートからメッセージを作成する時点で送信側と受信側の両方に知られている、メッセージフォーマットを提供する。テンプレートの使用は、キュー状態変化の瞬時的な通知および瞬時的な配信を行う。以下に記載されるテンプレートを使用して、共有メモリマネージャは、従来可能な方式よりも高速、効率的な方式で重要なオペレーションを実行する。
【００１８】
本発明によって考えられたＩＰＣキューテンプレートは、複数の重要なオペレーションを実行する能力を備えている。図１を参照すると、対象となる発明で利用されるＩＰＣキューテンプレートの主要なオペレーションを記述する階層的なフローチャートが示されている。これらの主要なオペレーションは、（１）キュー作成１０２と、（２）キュー削除１０４と、（３）要素プッシュ１０６と、（４）要素ポップ１０８と、（５）キュースロットのピーク１１０である。これらの主要なオペレーションは、最上位レベル階層として表現され、説明のためのフローがそこから下に記載されている。
【００１９】
キュー作成１０２のため、すなわち、キュー作成テンプレート１０２のため、テンプレートは、ステップ１１２でユーザから受信したパラメータを最初に検証するため構成されなければならない。ステップ１１２で有効なパラメータが存在しない場合、キュー作成１０２テンプレートは機能しない。ステップ１１２でパラメータが承認および検証の少なくとも一方をされたとき、キュー作成テンプレート１０２は、ステップ１１４でキュー要素を記憶するため共有セグメントを作成／ロックする。セグメントサイズは、キュー要素サイズおよび最大キュー要素数により決められる。キュー要素は、次に、キュー発見のため共有セグメントキュー名にリンクされる。キュー作成テンプレート１０２は、次に、ステップ１１６で共有セグメントヘッダを初期化する。共有セグメントヘッダは、次のプッシュスロット、次のポップスロット、キューサイズ、キュー名、要素数、および、類似した項目のための値を格納する。この共有セグメントは、キュー要素マネージメントのためリングバッファのような機能を果たす。
【００２０】
共有セグメントヘッダの初期化に続いて、キュー作成テンプレート１０２は、次に、ステップ１１４の作成／ロックが成功したかどうかをステップ１１８で判定することが必要である。ステップ１１８でロック成功であれば、キュー作成テンプレート１０２は、ステップ１２０へ進み、最大キューサイズおよび利用可能スロットが初期化される。キュー作成テンプレート１０２は、次に、ステップ１１２のキューパラメータの発信側に問い合わせ、ステップ１２２で発信側が最初のクライアントであるか否かを判定する。発信側が最初のクライアントであるならば、キュー作成テンプレート１０２はステップ１２６へ進み、クライアント数が１に設定される。発信側が最初のクライアントではない場合、キュー作成テンプレート１０２はステップ１２４へ進み、キュークライアント数が増加される。
【００２１】
再度図１の最上位レベルを参照すると、主要なオペレーションであるキュー削除テンプレート１０４の機能を説明するフローチャートが示されている。ＩＰＣテンプレートによって実行されるこの単純化したオペレーションには２つのステップが含まれる。第１のステップ１２８は、コネクションまたはクライアント数のリセットである。一旦リセットされると、キュー削除テンプレート１０４は、次に、ステップ１３０で、キュー名とリンクされた共有セグメントを削除可能である。
【００２２】
次に、対応したＩＰＣキューテンプレートの要素プッシュ１０６オペレーションを参照すると、要素プッシュ１０６は、キューの状態、すなわち、キューがフル状態であるか否かをステップ１３２で判定することから始まる。キューがフル状態である場合、要素プッシュは、要素がポップされるまでステップ１３４で待機する。ステップ１３２でキューがフル状態ではないと判定されると、要素プッシュ１０６テンプレートは、ステップ１３６へ進み、第１の利用可能なキュースロットを識別する。この第１の利用可能なキュースロットの識別は、共有セグメントベースのリングバッファによって実現される。次に、ステップ１３８で、要素はユーザ空間からキュースロットへコピーされる。次のプッシュスロット番号は、要素のキュースロットへの追加を反映させて、対応して増加される。このように要素をプッシュすると、要素プッシュ１０６テンプレートは、次に、同じキューを待つ任意のクライアントに通知するためステップ１４０で信号を発する。この信号は、キュー共有セグメントに発生し、要素をポップするため同じキューにアクセスすることを待っている任意のクライアントに通知する。
【００２３】
要素のポップには、キュースロットからユーザ空間への要素の除去が含まれる。１０８を参照すると、要素ポップ１０８テンプレートのフローチャートが示されている。このプロセスは、まずキューの状態、すなわち、キューエンプティ状態１４２を判定する。キューがエンプティ状態である場合、要素ポップ１０８テンプレートは、ステップ１４４で、要素がプッシュされるまで待機する。すなわち、要素ポップ１０８テンプレートは、キューがフル状態であり、オープン状態のキュースロットがなくなるまで待機する。ステップ１４２においてキューがエンプティ状態ではない（キューがフル状態である）場合、要素ポップ１０８テンプレートはステップ１４６へ進み、共有セグメントベースのリングバッファの先頭を識別する。次に、要素は、ステップ１４８でキュースロットからユーザ空間へコピーされる。次のポップスロット番号は、その後に増加され、ステップ１４８で生じる状態の変化に対応する。次のスロットポップ番号を増加させた後、ポップ要素１０８テンプレートはステップ１５０へ進み、要素がキューからポップされたことを任意のクライアントにも通知するため信号を発する。この信号はキュー共有セグメントで生じ、キューからポップされる要素を待機している任意のクライアントに、実際に要素がキューからポップされた旨を通知する。
【００２４】
ここで検討されているＩＰＣキューテンプレートの最後の基本オペレーションは、キュースロットのピーク１１０オペレーションテンプレートである。本質的に、スロットピーク１１０テンプレートは、ユーザが、もしあれば参照キュースロットの内容をその内容に影響を与えることなく見ることを可能にする。このテンプレートは、ステップ１５２で、リングバッファに有効なスロットが存在するか否かを簡単に判定する。有効なスロットが存在する場合、キュースロットのピーク１１０テンプレートは、キュー要素がユーザ空間へコピーされるステップ１５６へ進むように指示する。これに対して、ユーザがキューに無効なスロットを指定した場合、このテンプレートは、ステップ１５４でエラーリターンを指示する。
【００２５】
本発明の本実施形態に固有の幾つかの主要なオペレーションを説明したので、次に、上記の主要なオペレーションのＩＰＣキューテンプレートに基づく共有メモリマネージャの階層構造が示されている、図２を参照する。共有メモリマネージャは、種々のプロセス間およびクライアント間で通信を容易に実現させるため多数のオペレーションを実行する能力を備えている。したがって、当業者は、以下の主要なオペレーションおよび添付のフローチャートが、本共有メモリマネージャを示された６例に限定するものではないことがわかるであろう。
【００２６】
最初に、インスタンス取得２０２オペレーションを参照すると、共有メモリマネージャは次のように動作する。共有メモリマネージャは、ステップ２１４で、呼び出し元に、共有メモリマネージャクラスのシングルトンインスタンスのリファレンスを供給する。呼び出し元に要求されたリファレンスが与えられると、共有メモリマネージャは、次に、ステップ２１６で、マネージャオブジェクトが既に作成されたかどうかを判定しなければならない。マネージャオブジェクトが予め作成されている場合、インスタンス取得２０２は、ステップ２１８へ進み、共有メモリマネージャリファレンスが返却される。インスタンス取得２０２オペレーションがマネージャオブジェクトは未だ作成されていないと判定した場合、インスタンス取得２０２オペレーションはステップ２２０で新しいインスタンスを作成する。共有メモリマネージャオブジェクトの作成中に、以下の属性、すなわち、セグメント名、ＩＰＣキー、ユーザ数、セマフォ名、セマフォキーを収容する要素タイプＳＴａＳｍｍＴａｂｌｅをもつＩＰＣキューが作成される。
【００２７】
共有メモリマネージャがＩＰＣキューテンプレートを使用して実行する第２のオペレーションは、共有セグメント作成２０４オペレーションである。ユーザが共有セグメントを作成するため、オペレーション２０４は、最初にステップ２２２でセグメント名から固有キーを生成しなければならない。共有セグメント作成２０４オペレーションは、次に、ステップ２２４で該当するセグメントの状態を判定しなければならない。セグメントが既に作成されている場合、セグメントサイズはステップ２２８で初期化される。一方、セグメントが未だ作成されていない場合、オペレーション２０４はステップ２２６へ進み、セグメントセマフォおよびミューテックスが初期化される。セグメントに対するセマフォおよびミューテックスの初期化に続いて、このオペレーションは、セグメントサイズが初期化されるステップ２２８で終了する。
【００２８】
図２に例示されている第３のオペレーションは、共有セグメントプッシュ２０６オペレーションである。このオペレーションは、最初に、ステップ２３０で共有セグメントリファレンスおよびＩＰＣキュー名を格納するパラメータを承認する。ステップ２３０における承認後、オペレーション２０６は、ステップ２３２でＩＰＣキュー名をＩＰＣキューオブジェクトに変換する。共有メモリマネージャは、要求されたすべてのＩＰＣキューのキャッシュを保持し、変換速度を高速化することができる。変換に続いて、共有セグメントプッシュ２０６オペレーションは、ステップ２３４でＩＰＣキューリクエスト要素を生成する。このリクエスト要素は、セグメントサイズ、セグメント名、セグメントキー、および共有セグメント内の開始点を格納する。オペレーション２０６は、次に、ステップ２３６でリクエスト要素をリクエストキューへプッシュする。これは、次に、同じＩＰＣキュー上の要求の処理を待機している任意のクライアントのための通知を生じさせる。
【００２９】
図２で検討されている第４のオペレーションは、共有セグメントポップ２０８オペレーションである。このオペレーションはステップ２３８でユーザからのパラメータを承認することから始まる。これらのパラメータは、典型的にＩＰＣキュー名を含む。承認に続いて、オペレーション２０８は、ステップ２４０でＩＰＣキュー名をＩＰＣキューオブジェクトに変換する。これは、共有メモリマネージャが、より高速な変換を可能にするため要求されたすべてのＩＰＣキューのキャッシュを保持する点で、上記の共有セグメントプッシュ２０６オペレーションと類似する。このオペレーション２０８は、ステップ２４２へ進み、ＩＰＣキュー上のポップ要求を発行する。しかし、キューに要素が存在しない場合、キューのポップ要求は、ステップ２４４へ進む前に、要素が同じキューにプッシュされるまで待機する。ステップ２４４において、要素のポップが処理される。これは、必然的に共有セグメント名および共有セグメントサイズの、共有セグメントオブジェクトへの変換を伴う。共有セグメントは、将来の共有セグメントポップ２０８オペレーションの間に、共有セグメントオブジェクトをより高速に生成できるようにするため、その共有セグメントに関連したすべてのプロセスのメモリマップを保持する。ユーザが簡単にアクセスできるようにするため、本発明によって考えられた共有メモリマネージャは、ステップ２４６で共有セグメントをユーザ空間にアタッチする。
【００３０】
ＩＰＣキューテンプレートの、検討されている共有メモリマネージャへの組み込みによって可能になった第５のオペレーションは、共有セグメントの待機２１０オペレーションである。このオペレーションは、ステップ２４８で、共有セグメントに関連付けられたマップされたセマフォを識別することから始まる。一般的に、このオペレーションは、クライアントがサーバによるクライアントの要求の実行を待っているときに利用される。マップされたセマフォを識別した後、オペレーション２１０は、ステップ２５０へ進み、共有セグメントセマフォを待つ。
【００３１】
ＩＰＣキューテンプレートの使用によって可能にされた第６のオペレーションは、共有セグメント通知２１２のオペレーションである。オペレーション２１２は、最初に、ステップ２５２で共有セグメントに関連付けられたマップされたセマフォを識別する。典型的に、このオペレーション２１２は、サーバが要求を受信し、クライアントにその要求の完了を通知しようとするときに使用される。マップされたセマフォを識別した後、共有セグメントセマフォは、ステップ２５４でクライアント通知のためシグナル操作される。
【００３２】
本発明は、ソースコード形式、オブジェクトコード形式、ソースコードとオブジェクトコードの中間コード形式（例えば、部分的にコンパイルされた形式）、または、本発明を実施する際に使用するために適したその他の形式のコンピュータプログラムに拡張される。コンピュータプログラムは、好適には、スタンドアロンのアプリケーション、ソフトウェアコンポーネント、スクリプト、または他のアプリケーションへのプラグインである。本発明を組み込むコンピュータプログラムは、有利には、コンピュータプログラムを搬送する能力を備えた任意のエンティティまたはデバイスである担体、例えば、ＲＯＭ若しくはＲＡＭのような記憶媒体、ＣＤ−ＲＯＭのような光学式記録媒体、或いは、フロッピー（登録商標）ディスクのような磁気記録媒体に具現化される。担体は、電気若しくは光ケーブルによって、又は無線によって、或いは、その他の手段によって搬送可能な、電気若しくは光信号のような任意の伝送可能な担体である。コンピュータプログラムは、好適には、サーバからインターネット経由でダウンロードされる。コンピュータプログラムは、また、集積回路に組み込むことも可能である。上述の本発明の原理を実質的にコンピュータに実行させるコードを収容するあらゆるこのような実施形態は、本発明の範囲に含まれる。
【００３３】
好ましい実施形態では、本発明はソフトウェアで実現されるが、当業者が容易に認めるように、本発明は、ハードウェアで実現してもよく、或いは、ソフトウェアとハードウェアの組み合わせで実現してもよい。好ましい実施形態を詳細に説明したが、添付の特許請求の範囲に定義されるような本発明の精神および範囲を逸脱することなく、様々の変更、置換、および修正をなし得る。本発明の本質を説明するために記載され、例示された部品の細部、素材および配列の様々な変更は、添付の特許請求の範囲に記載されるような本発明の原理および範囲内で当業者によってなされることが可能である。
【図面の簡単な説明】
【００３４】
【図１】本発明によって考えられたプロセス間通信テンプレートを説明するフローチャートである。
【図２】本発明によって考えられたプロセス間通信テンプレートを利用する共有メモリマネージャを説明するフローチャートである。
【図１】
2005135382.tif 000003
【図２】
2005135382.tif 000004
【外国語明細書】
2005135382000001.pdf