(57)【要約】  方法及びシステムは、ファースト−イン−ファースト−アウト（ＦＩＦＯ）ストレージからバラバラの順序で返信メッセージを処理し、ＦＩＦＯストレージにおいて受信した順序において他のメッセージを処理するために提供される。システムは、返信メッセージをサーチしながら第１のＦＩＦＯから取り出された任意のメッセージを格納する第２のＦＩＦＯストレージを提供する。
2015536063.tif 000002
【特許請求の範囲】
【請求項１】
第１のファースト−イン−ファースト−アウト（ＦＩＦＯ）ストレージを有する通信リンクを用いてメッセージを取り出し及び処理するための方法であって、
前記第１のＦＩＦＯストレージからメッセージを取り出すステップと、
前記第１のＦＩＦＯストレージから取り出された他のメッセージを処理する前に、返信メッセージを処理するステップと、
前記第１のＦＩＦＯストレージにおいて受信された順序において前記他の取り出されたメッセージを処理するステップと、
を含む、前記方法。
【請求項２】
（ａ）前記第１のＦＩＦＯストレージからメッセージを取り出すステップと、
（ｂ）前記取り出されたメッセージが前記返信メッセージではなく、かつ通知メッセージではない場合、前記取り出されたメッセージを第２のＦＩＦＯストレージに追加するステップと、
（ｃ）前記取り出されたメッセージが通知メッセージである場合、前記取り出されたメッセージを破棄するステップと、
（ｄ）前記返信メッセージが取り出されるまで、ステップ（ａ）乃至（ｃ）を繰り返すステップと、
をさらに含む、請求項１に記載の方法。
【請求項３】
（ｅ）前記返信メッセージを取り出し、前記第１のＦＩＦＯストレージが空であり、かつ前記第２のＦＩＦＯストレージが少なくとも１つのメッセージを含むと判定すると、通知メッセージを前記第１のＦＩＦＯストレージに送信するステップと、
（ｆ）前記通知メッセージを送信した後に、前記他のメッセージの取り出し及び処理を再開するステップと、
をさらに含む、請求項２に記載の方法。
【請求項４】
前記他の取り出されたメッセージの処理は、前記第１のＦＩＦＯストレージからのメッセージを取り出す前に、処理のために前記第２のＦＩＦＯストレージからの全てのメッセージを取り出すことを含む、請求項１に記載の方法。
【請求項５】
（ｇ）前記返信メッセージを取り出し、前記第１のＦＩＦＯストレージが少なくとも１つのメッセージを含むこと、及び前記第２のＦＩＦＯストレージが空であること、のうちの少なくとも１つを判定すると、前記他のメッセージの取り出し及び処理を再開するステップをさらに含む、請求項２に記載の方法。
【請求項６】
第２のＦＩＦＯストレージを提供するステップと、
前記第１のＦＩＦＯストレージ及び前記第２のＦＩＦＯストレージのうちの１つに前記他のメッセージを格納するステップと、
をさらに含む、請求項１に記載の方法。
【請求項７】
他のメッセージが前記第１のＦＩＦＯストレージ及び前記第２のＦＩＦＯストレージのうちのいずれかから直ちに取り出される準備ができていることを通知するために、前記第１のＦＩＦＯストレージからメッセージプロセッサに信号を提供するステップをさらに含む、請求項６に記載の方法。
【請求項８】
処理のためにメッセージを取り出すシステムであって、
メッセージルータと、
前記メッセージルータからメッセージを受信するように構成された第１のストレージと、
前記第１のストレージからメッセージを取り出すように構成されたメッセージプロセッサであって、前記メッセージプロセッサは、第２のストレージにメッセージを格納し、前記第２のストレージからメッセージを取り出すようにさらに構成され、前記第１のストレージ及び前記第２のストレージの両方は、ファースト−イン−ファースト−アウト（ＦＩＦＯ）ストレージである、システム。
【請求項９】
前記メッセージプロセッサは、前記第１のストレージから少なくとも１つのメッセージを取り出して、前記少なくとも１つのメッセージが以前に送信された同期メッセージに対する返信であるかどうかを判定し、及び前記少なくとも１つのメッセージが前記返信ではなく、かつ通知メッセージではない場合、後続の取り出し及び処理のために前記第２のストレージにおいて前記少なくとも１つのメッセージを格納するように構成された、請求項８に記載のシステム。
【請求項１０】
前記メッセージプロセッサは、前記返信を取り出し、前記第１のストレージが空であり、かつ前記第２のストレージが空ではないと判定すると、通知メッセージを前記第１のストレージに送信するようにさらに構成された、請求項９に記載のシステム。
【請求項１１】
前記メッセージプロセッサは、前記少なくとも１つのメッセージが前記通知メッセージである場合、前記第１のストレージから取り出された前記少なくとも１つのメッセージを破棄するようにさらに構成された、請求項９に記載のシステム。
【請求項１２】
前記第２のストレージ内に格納された全てのメッセージは、前記メッセージプロセッサが前記以前に送信された同期メッセージに対する前記返信をサーチしている期間中、前記メッセージプロセッサによって前記第１のストレージから取り出されたメッセージである、請求項９に記載のシステム。
【請求項１３】
前記第１のＦＩＦＯストレージは、信号を前記メッセージプロセッサに提供して、他のメッセージが前記第１のＦＩＦＯストレージ及び前記第２のＦＩＦＯストレージのいずれかから直ちに取り出される準備ができていることを通知するようにさらに構成された、請求項８に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２０１２年９月１３日に出願された米国仮出願番号６１／７００８１２、「ファースト−イン−ファースト−アウトトランスポート機構からのランダムアクセスメッセージ検索の方法」及び２０１２年９月１４日に出願された米国仮出願番号６１／７０１５０７、「ファースト−イン−ファースト−アウトトランスポート機構からのランダムアクセスメッセージ検索の方法」の優先権を主張するものである。両者は、それらの全体を言及することにより本明細書に組み込まれる。
【０００２】
本発明は、ファースト−イン−ファースト−アウト（ＦＩＦＯ）ストレージから１又は複数のメッセージのランダム検索を提供する一方で適切なＦＩＦＯの順序において送付されるべき他のメッセージを維持するための方法及びシステムに関する。
【背景技術】
【０００３】
通信ネットワークにおいて交換されるメッセージは、同期又は非同期である。非同期メッセージは、受信者からの応答を必要せずに送信されるメッセージである。同期メッセージは、送信され、処理が継続され得る前に返信が期待されるメッセージである。同期メッセージ交換の間、たとえ他のメッセージが同期メッセージに対する返信の到着の前に受信されたとしても、同期メッセージに対する返信は、如何なる他の受信されたメッセージの前に処理されなければならない。
【０００４】
非同期メッセージが、それらが送信されたと同じ順番で処理されることを確実にすることはしばしば重要である。結果として、非同期及び同期メッセージ交換の両方を含む通信ネットワークにおいて、同期メッセージ返信が他の受信したメッセージの順序に影響を及ぼすことなく順序がバラバラで処理されることができることを確実にすることは必要な場合がある。
【０００５】
ＵＮＩＸ（登録商標）を使用するネットワーク環境若しくはアーキテクチャにおいて、又はより一般的には、受信したメッセージがファースト−イン−ファースト−アウト（ＦＩＦＯ）を介してバッファリングされる任意の通信機構において、ランダムアクセスメッセージ検索又は挿入のための機構がない。結果として、所望の同期メッセージ返信が検索されるまで、メッセージはソケット又はＦＩＦＯバッファから連続的に検索されなければならない。望まない（すなわち、返信メッセージではない）メッセージを元のＦＩＦＯバッファに単純に書き込んで戻すことは不可能である。なぜなら、これはバッファにおけるメッセージの順序を変える場合があるからである。
【０００６】
メッセージを受信及び処理するデバイスはしばしば複数のタスクを実行することを必要とする。それ故、いつメッセージが読み出され、処理されるのに利用可能であるかを通知されることは、デバイスにとって有益である。複数のアーキテクチャにおいて用いられる簡単な通知方法は、データがトランスポート機構のＦＩＦＯバッファにおいて利用可能なときに通知することである。例えば、トランスポート機構としてソケットを用いるシステムにおいて、この通知はＰＯＳＩＸ．１−２００１によって定められたselect()関数によって提供されることができる。しかしながら、単一のＦＩＦＯ入力ソースからの順序がバラバラな返信検索を可能にする既存の解決方法は、デバイスが定期的に新しいメッセージに対するポーリングを行うことを必要とし、より複雑な通知機構を要求するか、又は通知機構全体を取り除くかのいずれかである。
【発明の概要】
【０００７】
本原理の実施形態は、ファースト−イン−ファースト−アウト（ＦＩＦＯ）受信バッファを有するネットワーク環境において順序がバラバラな検索及び応答メッセージの処理（例えば同期メッセージへの返信）を可能にする一方で、全ての他のメッセージがＦＩＦＯの順序で配信されることを確実にする。より詳細には、２つのＦＩＦＯストレージの位置は、処理のために受信されたメッセージを格納するために提供される。（返信が期待される）同期メッセージが送信された後に、メッセージが第１のＦＩＦＯストレージから検索され、それが意図された返信であるかどうかについて調査される。検索されたメッセージが意図された返信ではなく、特別な通知メッセージでもない場合、検索されたメッセージは第２のＦＩＦＯストレージにおいて待ち行列に入れられる。
【０００８】
検索されたメッセージが意図された返信であり、第１のＦＩＦＯストレージは空（empty）であるが第２のＦＩＦＯストレージにおいて少なくとも１つのメッセージがあると判定された場合、通知メッセージ、例えば「ノーオペレーション」（ＮＯＯＰ）メッセージが第１のストレージに書き込まれる。このＮＯＯＰメッセージは、第２のＦＩＦＯストレージにおいて読み取り及び処理可能な少なくとも１つのメッセージがあることをシステムに通知する。第２のＦＩＦＯストレージにおける以前の待ち行列に入れられたメッセージは、その後、第１のＦＩＦＯストレージにおいて最初に受信したのと同じ順序において読み取られ、処理される。
【０００９】
本原理のある実施形態は、第１のファースト−イン−ファースト−アウト（ＦＩＦＯ）ストレージを用いた通信リンクを使用してメッセージを検索及び処理する方法であって、第１のＦＩＦＯストレージからメッセージを検索するステップと；第１のＦＩＦＯストレージから検索された他のメッセージを処理する前に返信メッセージを処理するステップと；第１のＦＩＦＯストレージにおいて受信された順序で他の検索されたメッセージを処理するステップと；を含む方法を提供する。
【００１０】
他の実施形態は、処理するためにメッセージを検索するシステムであって、メッセージルータと；メッセージルータからのメッセージを受信するように構成された第１のストレージと；第１のストレージからのメッセージを検索するように構成されたメッセージプロセッサと；を含み、メッセージプロセッサは、第２のストレージにメッセージを格納し、第２のストレージからメッセージを検索するようにさらに構成され、第１のストレージ及び第２のストレージは、ファースト−イン−ファースト−アウト（ＦＩＦＯ）ストレージである、システムを提供する。
【図面の簡単な説明】
【００１１】
本発明の教示は、添付の図面と併せて以下の詳細な説明を考慮することによって直ちに理解することができる。
【図１】本原理のある実施形態によるメッセージを扱うためのプロセスのフローチャートを示す図である。
【図２】図１の処理を実装するために用いることができる、ネットワークトポロジのダイアグラムを示す図である。
【図３】宛先アドレス、ソースアドレス、メッセージタイプ及びメッセージボディからなる例示的なメッセージを示す図である。
【図４】エンドポイントの内部の既存のメッセージングフレームワークを示す図である。
【図５】修正されたエンドポイントを有する本発明のある実施形態を示す図である。
【発明を実施するための形態】
【００１２】
本原理は、データ又はメッセージが検索に利用可能であることを示すシンプルな通知を提供する一方で、さらに単一のＦＩＦＯ入力ソースからの順序がバラバラな返信検索を可能とし、受信された順序で他のメッセージが配信されることを確実にする。
【００１３】
本原理の実施形態は、以下の属性を有するメッセージングフレームワークにおける実装のためによく適合する。
１．返信が期待されるメッセージを送信及び受信する能力、ここで、返信は、待機している場合がある処理されるべき任意の他のメッセージの前に処理されるべきである。
２．メッセージングフレームワークが、ランダムアクセス検索又はメッセージ挿入を許容しないトランスポート機構を使用する。代わりに、最初でのメッセージ挿入及び終わりでのメッセージ検索のみを可能にする。一例は、スタンダードネットワークソケットであるだろうが、本原理はこれらの特性を有する他のトランスポート機構に適用することもできるであろう。
３．メッセージを処理するデバイス（すなわちメッセージプロセッサ）は、メッセージがトランスポート機構によって提供されるデータの存在を示すシンプルな通知機構を用いて読み込む及び処理するために利用可能であるときを通知される。
【００１４】
本原理の一態様は、第１のＦＩＦＯストレージを有する通信リンク又はトランスポート機構を使用してメッセージを検索及び処理する方法を提供する。ここで、同期トランザクション又はメッセージ交換における返信メッセージは、第１のＦＩＦＯストレージからバラバラの順序で処理される。すなわち、ＦＩＦＯストレージから検索された他のメッセージを処理する前に処理され、当該他の検索されたメッセージは、メッセージングフレームワークにおけるこれらの他のメッセージの順序の影響を与えることなく、第１のＦＩＦＯストレージにおいて受信された順序で処理される。より詳細には、２つのストレージの位置がまだ処理されていないメッセージのために使用される。第１のストレージの位置は、トランスポート機構自体であり、又は例えばソケットバッファなど、トランスポート機構の部分とすることができる。第１のストレージの位置は、ＦＩＦＯキューなど、最初での挿入及び終わりでの検索のみを可能にする。ランダム検索又は挿入はできない。第２のストレージの位置は、ＦＩＦＯキューとして構成され、又は使用されることができる任意のストレージ機構（例えばハードディスク、ランダムアクセスメモリをとりわけ含む）とすることができる。
【００１５】
本原理のコンテキストにおいて、メッセージを処理することは、とりわけ、他のノード若しくは受信部に向けることなどの、メッセージを操作すること、又は１もしくは複数の指示に従って特定のメッセージにあるアクションを実行すること、を意味する。しかしながら、ＦＩＦＯストレージのいずれかからのメッセージを検索若しくは読み込むこと、又は第２のＦＩＦＯストレージにメッセージを書き込む若しくは向けることは、メッセージを処理することとして考慮されないであろう。
【００１６】
さらに、本議論において、検索及び読み込みは、特定のコンテキストに依存して、互いに関連して用いられ、互いに置換可能とすることができる。メッセージを読み込むことは、読み込まれるべきメッセージボディのコンテンツを必要とせずに、（例えば、返信メッセージであるか、又は通知メッセージであるかなど、）メッセージのタイプ又は特質を判定するためのメッセージヘッダを少なくとも読み込むことを意味することができる。
【００１７】
図１は、本原理のある実施形態によるメッセージを扱うためのプロセス１００のフローチャートを示す。より詳細には、プロセス１００は、返信が期待される第１のメッセージが送信された時、通信システムにおいてメッセージを検索及び処理するための様々なステップを示す。
【００１８】
プロセス１００は、ブロック１０２で開始する。ブロック１０２は、通信エンドポイント又はノードから意図された宛先に、返信が期待又は要求される第１のメッセージを送信することを示す。すなわち、第１のメッセージは同期メッセージである。ブロック１０４において、メッセージは、トランスポート機構自身、又はトランスポート機構の一部とすることができる第１のストレージから一度に検索され又は読み込まれる。第１のストレージから検索又は読み込まれるべきメッセージは、ＦＩＦＯキューにおいて次のメッセージである。
【００１９】
ブロック１０６において、読み込まれたメッセージがブロック１０２において送信された第１のメッセージへの返信として意図されるかどうかを確かめるために判定がなされる。読み込まれたメッセージが意図された返信ではない場合、プロセスはその後ブロック１１２に進んで、通知メッセージであるかどうか、例えばＮＯＯＰメッセージすなわち更なる動作又は状態の修正を要求しない「ノーオペレーション」メッセージであるかどうかをチェックする。そうである場合、プロセスは、第１のストレージから次のメッセージを検索又は読み込むためにブロック１０４に戻る。
【００２０】
しかしながら、（ブロック１１２において）読み込まれたメッセージがＮＯＯＰメッセージではないと判定された場合、すなわち追加の動作及び／又は処理を要求する場合、ブロック１１４に示されるように、キューに置かれて第２のストレージに書き込まれる。第２のストレージにおけるキューはまた、ＦＩＦＯキューである。
【００２１】
ブロック１０６に戻って参照すると、意図された返信が（ブロック１０４において）第１のストレージから検索された場合、メッセージプロセッサ５０６によって処理され（例えば、他のノード若しくは受信部に向けられ、又は１又は複数の指示に従って返信に関する操作を行う、など）、第１のストレージからのメッセージ検索又はトランスポート機構が停止する。換言すると、プロセスはブロック１１２又はブロック１１４を介してブロック１０４に戻らないであろう。代わりに、プロセスはブロック１０８に進み、トランスポート機構又は第１のストレージが空であり、及び第２のストレージが少なくとも１つのメッセージを含むかどうかについて判定がなされる。回答が「はい」である場合、すなわちトランスポート機構又は第１のストレージが空であるが、第２のストレージが空ではない場合、その後、少なくとも１つのメッセージを含むように単一のＮＯＯＰメッセージが第１のストレージに書き込まれる。プロセス１００は、ブロック１１０で終了する。
【００２２】
しかしながら、第１のメッセージに対する意図された返信が（ブロック１０６で判定されたように）検索されたが、問い合わせに対する回答が「いいえ」である場合（すなわち、以下の少なくとも１つが真である場合：トランスポートストレージが空ではない、二次ストレージが空である、又は両方が真である）、その後プロセス１００はまたブロック１１０で終了する。
【００２３】
通常の操作、例えば検索又は読み込み、並びに非同期及び同期メッセージを含む他のメッセージの処理は、プロセス１００の最後で再開（resume）する。メッセージを検索及び処理するこの方法は、第１のＦＩＦＯにおいて存在し及び処理を係属中の他のメッセージが処理される前、及び通常の操作が再開される前に、返信メッセージが処理されることを確実にする。第１の同期メッセージがエンドポイント（ブロック１０２）においてメッセージプロセッサによって送信された後は、第２の同期メッセージは第１のメッセージに対する返信が受信及び処理されるまで同じエンドポイントによって送信されることができないことに留意すべきである。非同期メッセージは、しかしながら、プロセッサが同期メッセージへの返信をサーチしている期間、依然として送信されることができる。
【００２４】
通常の操作中、すなわちエンドポイント又はノードが以前に送信されたメッセージに対する返信を待機していない場合、エンドポイントでのメッセージプロセッサは、トランスポート機構（又は第１のストレージ）が少なくとも１つのメッセージを含むという通知信号を受信するまで待機する。アプリケーションは、空になるまで第２のストレージの位置からのメッセージを読み込み、次に空になるまで第１のストレージからのメッセージを読み込む。ブロック１１６において説明した特別なＮＯＯＰメッセージが第１のストレージから読み込まれるとき、ＮＯＯＰメッセージはユーザに配信されることなくドロップ又は破棄され、次のメッセージが（もしあれば）第１のストレージから読み込まれる。
【００２５】
上記の議論は、ソケットの使用など、ある特定の特徴を言及したが、他のより包括的又は一般的な実装も受容可能である。従って、本原理の様々な態様が以下の図２−５においてさらに例示及び議論される。
【００２６】
図２は、図１のプロセス１００を実装するために用いられることができるネットワークトポロジのダイアグラムを示す。ネットワークは、２以上のエンドポイント又はノードと、エンドポイント間のメッセージを通過させるために用いられるメッセージルータとを含む。メッセージルータは、双方向性通信パスを介して各エンドポイントに結合される。本明細書で用いられるように、エンドポイントは携帯デバイスなどの物理的コンポーネントのことを言う場合もあり、ソフトウェアアプリケーション又はプロセスのことを言う場合もある。ある実施形態では、複数のエンドポイントは同じデバイスの複数の処理であり、通信は同じ物理的デバイス上を常駐する複数のアプリケーション間で生じることができる。代替的には、各エンドポイントは別個のデバイスとすることもできる。
【００２７】
図３は、宛先アドレス、ソースアドレス、メッセージタイプ及びメッセージボディを有する例示的なメッセージを示す。エンドポイントはメッセージをメッセージルータに送信する。メッセージルータは次に、メッセージにおける宛先アドレスを調査し、宛先アドレスに基づいてエンドポイント又は意図された受信部にメッセージを転送する。
【００２８】
図２のエンドポイントの内側のメッセージングフレームワークは図４−５に関してさらに議論される。
【００２９】
図４は、図２の各エンドポイントの内部の既存のメッセージングフレームワークを示し、対応するコンポーネント間のメッセージフローの連結及び方向を示す矢印を有する。矢印４１２によって示されるように、メッセージルータ４０２からエンドポイントに送信される全てのメッセージは、受信バッファ４０４に入る。受信バッファ４０４は、ファースト−イン−ファースト−アウト（ＦＩＦＯ）バッファであり、ある構成において、ＵＮＩＸ（登録商標）ソケットによって提供される。受信バッファ４０４はまた、メッセージプロセッサ４０６とも結合し、受信バッファ４０４が空ではないときにプロセッサ４０６に指示又は信号４１０を提供する。バッファの状態の信号及び通知は、ハードウェア又はソフトウェアを用いて、適切に、異なる手法によって実装することができる。
【００３０】
メッセージルータ４０２がメッセージをエンドポイントの受信バッファ４０４に伝送するとき、メッセージプロセッサ４０６は、もはや空ではない受信バッファ４０４によって通知される。この通知４１０は、メッセージプロセッサ４０６に（矢印４１４によって示される）受信バッファ４０４からの次のメッセージを検索させ、任意の必要な処理を実行させる。
【００３１】
エンドポイントがメッセージを送信したいとき、メッセージプロセッサ４０６はメッセージを構築し、（矢印４１６に示されるように）メッセージルータ４０２に送信する。メッセージルータ４０２は次に、メッセージ内の宛先アドレスに基づいてメッセージを意図された宛先に送信する。
【００３２】
このメッセージングフレームワークでは、しかしながら、メッセージプロセッサ４０６がメッセージを送信し、（例えば返信が同期メッセージ交換又はトランザクションにおいて期待又は要求されるとき）返信を待機する必要があるときに問題が生じ得る。このメッセージングフレームワークは受信バッファ４０４からのメッセージをバラバラな順序で検索するための機構を提供しない。このアーキテクチャを用いて他のメッセージを処理する前に同期メッセージ返信を処理する唯一の方法は、受信バッファ４０４から連続してメッセージを読み込むこと、及び任意の所望しないメッセージをメッセージルータ４０２に戻して伝送することであり、その後それらは再び受信バッファ４０４に挿入される。
【００３３】
この手順は、（エンドポイントへの返信ではない）他のメッセージが喪失しないことを確実にするが、メッセージルータ４０２を通して多くの不要なトラフィックを生成し、これらの読み込まれたメッセージが受信バッファのキューの終端に戻される前に受信バッファ４０４に到達することができる他のメッセージに関してこれらのメッセージの順序を変更する可能性も有する。
【００３４】
図５は、本原理によるメッセージングフレームワークの一実施形態を示す。エンドポイント内の設計は、図４で上述した問題を解決するように修正される。より詳細には、ＦＩＦＯキュー５０８は、メッセージプロセッサ５０６がエンドポイントによって以前に送信された同期メッセージに対する意図された返信を探す又はサーチしているときの期間中、受信バッファ４０４（またＦＩＦＯキュー）から検索されたメッセージを格納するために提供される。この例では、受信バッファ５０４は、図１に関連して説明された第１のストレージ又はトランスポート機構（若しくはトランスポート機構の一部）に対応する。ＦＩＦＯキュー５０８は、図１に関連して説明された第２のストレージに対応又は位置付けられる。ある実施形態では、受信バッファ又は第１のストレージ５０４は、ＵＮＩＸ（登録商標）ソケットによって提供される。ＦＩＦＯキュー又は第２のストレージ５０８は、リンク付けられたリストデータ構造を用いて実装される。特定のアプリケーションに依存して、しかしながら、他の実装も受容可能である。例えば、第１のストレージ５０４は、とりわけ、フィールド−プログラマブルゲートアレイ（ＦＰＧＡ）又は特定用途向け集積回路（ＡＳＩＣ）において実装されるＦＩＦＯなどの、専用ハードウェアデバイスとすることもできる。代替的には、例えば受信されたメッセージのいくつかのＦＩＦＯバッファリングを提供するトランシーバなどより大きなハードウェアデバイスの一部とすることもできる。第２のストレージ５０８は、例えば、ハードディスク、又はＦＰＧＡ若しくはＡＳＩＣにおいて実装されるＦＩＦＯなどの他の専用ハードウェアデバイスを含む、ＦＩＦＯバッファとして用いられることができる任意のストレージ機構とすることもできる。
【００３５】
図５に示されるように、受信バッファ又は第１のストレージ５０４は、メッセージルータ５０２及びメッセージプロセッサ５０６に結合される。矢印５１２によって示されるように、ルータ５０２からエンドポイントに送信されたメッセージは、第１のストレージに入る。矢印５１４によって示されるように、メッセージプロセッサ５０６は、空ではない状態のインジケータ又は信号５１０を受信し、同様に第１のストレージ５０４からメッセージを受信するように構成される。一実施形態では、プロセッサ５０６を起動又は通知してメッセージ検索及び処理が開始するために、ストレージ５０４において少なくとも１つのメッセージがあるときに、第１のストレージはプロセッサ５０６に信号５１０を送信する。
【００３６】
メッセージプロセッサ５０８は、第２のストレージ５０８とも結合する。第２のストレージ５０６は、プロセッサ５０６からメッセージを受信し（矢印５２２）、空ではない状態を示す信号５２０を提供し、メッセージをプロセッサ５０６に提供する（矢印５２４）ように構成される。
【００３７】
信号５１０とは異なり、信号５２０はプロセッサ５０６を起動するための通知として第２のストレージ５０８により送信されない。代わりに、メッセージプロセッサ５０６は、第２のストレージ５０８が空か否かを判定するために、（図１のプロセス１００における）ステップ１０８でこの信号の状態を単に読み込む。また、第１のストレージ５０４からのメッセージを読み込むことを開始する前に、ストレージ５０８から読み込まれる必要がある任意のより多くのメッセージがあるかどうかを決定するために、通常の操作中に状態を読み込む。
【００３８】
例として、図５の全てのブロックが個別のハードウェアデバイスである場合、信号５１０及び５２０は、空のときは低論理レベルを表し、空ではないときは高論理レベルを表すことができる。受信バッファ又は第１のストレージ５０４が空ではない状態から空の状態へ移行するとき通知されることが必要であるため、信号５１０はプロセッサ５０６上のＩＲＱ入力（すなわち、割り込み要求）に接続することができる。プロセッサ５０６は、状態を読み込むことができる必要があるにすぎず、ストレージ５０８の空又は空ではない状態における変更を通知される必要がないため、信号５２０はプロセッサ５０６上のＧＰＩＯ（汎用入出力）入力に接続することができる。
【００３９】
図５における全てのブロックがソフトウェアにおいて実装される状況において、論理的行動は、ハードウェア実装に関して上述したのと同様である。
【００４０】
エンドポイントから非同期メッセージを送信することは、図４と同様に振舞うが、メッセージを受信することは異なる。メッセージを受信する通常の操作の間（すなわち、メッセージプロセッサ５０６が以前に送信されたメッセージへの返信を期待又は待機していないとき）、空になるまでメッセージが第２のストレージ５０８から読み込まれる。第２のストレージ５０８から全てのメッセージを読み込んだ後、メッセージプロセッサは第１のストレージ５０４からメッセージを読み込むことを開始する。メッセージプロセッサ５０６が（メッセージにおいてメッセージタイプフィールドとして示されるような）ＮＯＯＰメッセージを検索する場合、メッセージプロセッサは、処理せずにメッセージを破棄し、第１のストレージ５０４から次の利用可能なメッセージを検索する。（図１のブロック１１６におけるトランスポート機構へのＮＯＯＰメッセージの書き込みに対応する）第１のストレージ５０４におけるＮＯＯＰメッセージを提供する目的は、以下でさらに説明される。
【００４１】
メッセージプロセッサ５０６がメッセージを送信して返信を待機したいとき、メッセージをメッセージルータ５０２に送信する。この状況において、メッセージプロセッサ５０６は、効果的に「メッセージを送信し、返信を得る」という特別な機能を提供する。「送信及び返信を得る」操作が進行中であるときに他の通常のメッセージ処理は生じない。その時点で、プロセッサ５０６は、返信メッセージを受信するまで、受信バッファ又は第１のストレージ５０４からメッセージを検索又は読み込むことを開始する（すなわち、ＦＩＦＯキュー又は第２のストレージ５０８にある可能性のある任意の古いメッセージは、依然として無視される）。返信メッセージではなく、ＮＯＯＰメッセージではない、受信バッファ５０４から受信した任意のメッセージは、第２のストレージに書き込まれ、格納される。返信メッセージが第１のストレージ５０４から検索された後、第１のストレージが空であって第２のストレージ５０８が空ではない場合（すなわち、図１におけるブロック１０８への回答が「はい」）、その後、メッセージプロセッサ５０６は単一のＮＯＯＰメッセージを構築して、宛先アドレスとしてメッセージプロセッサ自身のアドレスをセットしたメッセージルータ５０２に送信する。これによって、メッセージルータ５０２に第１のストレージ５０４に対してＮＯＯＰメッセージを書き込ませ又は送信させる（例えば、図１のブロック１１６）。
【００４２】
受信バッファ又は第１のストレージ５０４におけるＮＯＯＰメッセージの存在は、メッセージが処理のために読み込まれ又は検索されることを利用可能であるかどうかを判定するために要求される論理を簡略化する。以前に言及したように、通常の操作中、第１のストレージからのメッセージが読み込まれ又は検索される前に、全てのメッセージが処理のために第２のストレージ５０８から検索される。従って、第１のストレージ５０４が空である場合、第２のストレージ５０８も空でなければならない。これは、メッセージプロセッサ５０６を起動してメッセージの読み込み及び処理を開始するために、システムが信号５１０のみに依拠することを可能にする。メッセージが読み込み及び処理に利用可能かどうかを判定するために受信バッファ５０４及びＦＩＦＯキュー５０８の両方から集約された状態を要求する代わりに、ＮＯＯＰメッセージの存在は、メッセージが読み込み及び処理に利用可能であるかを判定するために（信号５１０を介して）受信バッファ５０４によって提供される状態のみに依拠することを可能にする。上記議論は通知メッセージとしてＮＯＯＰメッセージを使用するが、異なるタイプのメッセージが適切な状況下で通知メッセージとして機能することもできることが可能である。
【００４３】
メッセージが読み込み及び処理に利用可能であるときを示すためのシンプルな通知システムを有することは、共有ハードウェア上でのメッセージ読み込み及び処理に加えて他の操作を実行するシステムにとって望ましい。共有ハードウェアリソースは、メッセージが利用可能となるまで他の目的でも使用可能である。（受信バッファ５０４によって提供された空ではない状態によって示されるような）メッセージが読み込み及び処理に利用可能であるとき、他の処理要素は共有ハードウェアリソースを開放することができ、メッセージプロセッサが利用可能なメッセージを読み込み及び処理することを可能にする。（空であることを示す受信バッファ５０４によって示されるように）メッセージ読み込み及び処理が完了したとき、共有ハードウェアリソースはメッセージ読み込み及び処理以外の目的に再び用いられることができる。これは、他の処理要素の設計を、これらの要素がメッセージングプロセッサによって使用されたＦＩＦＯキュー５０８の存在を認識している必要がないように、簡略化する。他の処理要素は、メッセージが読み込み及び処理に利用可能であるときを決定するために受信バッファ５０４によって提供される空の状態にもっぱら依拠することができる。
【００４４】
図５の例では、もはや空ではない受信バッファ５０４からの通知は、例えば、受信バッファ５０４及びプロセッサ５０６の間の割り込み線のような、純粋なハードウェア実装において実装することができる。代替的には、例えばバッファがデータを有するまでselect()コールを用いてブロックするなど、ソフトウェアにおいても実装することができる。
【００４５】
本原理の他の態様によると、持続性コンピュータ可読媒体（例えばメモリ、ストレージデバイス、リムーバブル媒体、等）は、格納されるプログラム命令を提供され、プロセッサによって実行されるとき、方法が、例えば図１に関連して議論された方法又は変形など、本原理の１又は複数の実施形態に従って上述されたように実装されることになるであろう。
【００４６】
前述した内容は、本発明の様々な実施形態に向けられる一方で、本発明の他の実施形態がそれらの基本的な範囲から逸脱せずに考え出すことができる。例えば、上記の例において説明された１又は複数の機能は、異なる組み合わせにおいて、修正、省略及び／又は用いられることができる。従って、本発明の適切な範囲は、以下の特許請求の範囲に従って決定されるべきである。
【図１】
2015536063.tif 000003
【図２】
2015536063.tif 000004
【図３】
2015536063.tif 000005
【図４】
2015536063.tif 000006
【図５】
2015536063.tif 000007
【国際調査報告】
2015536063.tif 000008
2015536063.tif 000009