[go: up one dir, main page]

JP2002505050A - 非同期メッセージ処理システム及び方法 - Google Patents

非同期メッセージ処理システム及び方法

Info

Publication number
JP2002505050A
JP2002505050A JP50344299A JP50344299A JP2002505050A JP 2002505050 A JP2002505050 A JP 2002505050A JP 50344299 A JP50344299 A JP 50344299A JP 50344299 A JP50344299 A JP 50344299A JP 2002505050 A JP2002505050 A JP 2002505050A
Authority
JP
Japan
Prior art keywords
message
state
pid
messages
application code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP50344299A
Other languages
English (en)
Inventor
ウィリアム・ジョセフ・オールダー
エリック・ビアマン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nortel Networks Ltd
Original Assignee
Nortel Networks Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nortel Networks Ltd filed Critical Nortel Networks Ltd
Publication of JP2002505050A publication Critical patent/JP2002505050A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04QSELECTING
    • H04Q11/00Selecting arrangements for multiplex systems
    • H04Q11/04Selecting arrangements for multiplex systems for time-division multiplexing
    • H04Q11/0428Integrated services digital network, i.e. systems for transmission of different types of digitised signals, e.g. speech, data, telecentral, television signals
    • H04Q11/0478Provisions for broadband connections

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computer And Data Communications (AREA)
  • Communication Control (AREA)

Abstract

(57)【要約】 状態とタイプによってプロセスが定義される非同期メッセージ処理システム及び方法を提供する。ネットワーク・ノードにおいて受信された入力メッセージは、入力メッセージ・キューに格納されて、到着した順に従って処理される。また、出力メッセージは、出力メッセージ・キューに格納されて、生成された順に従って宛先ネットワーク・ノードに転送される。プロセスにアドレスされた入力メッセージは、処理を完結しプロセス状態を修正する特定のメッセージ処理アプリケーション・コードを呼び出すことによって処理される。プロセス状態の修正は、完全に起こるか又は全く起きないという意味において最小単位であり、プロセス状態を部分的に修正することはない。

Description

【発明の詳細な説明】 非同期メッセージ処理システム及び方法 発明の分野 本発明は、分散型非同期メッセージ処理システム及び方法に関する。 発明の背景 分散システムの仕様や実装のための通信処理に関する様々のモデルがポピュラ ーになってきた。サスペンドした送信先が応答するまでの間は送信元もサスペン ドしてしまうような同期モデルの通信に基づいているのと同様に、既によく知ら れているシステムのほとんどは、ADAのランデブー機構から遠隔手続呼び出し に移行しつつある。このようなシステムは、実用上大きな利点を有する。何故な らば、手続呼び出しによって遠隔通信を隠すことができるので、最小限のインパ クトで既存の局所アプリケーションを分散型アプリケーションに変えることがで きるからである。 しかしながら、本質的な分散型リアクティブ・システム若しくはコマンド・アン ド・コントロール・システムでは、同期モデルには幾つかの問題点がある。特定の イベントを待ってプロセス・バックするようなシステムはいずれも、通信デッド ロックに陥りやすい。一般に、このようなデッドロックは、システム全体の状態 に依存して発生するものであるから、極端に簡素化したシステム(すなわち、極 めて少ない状態と正確な通信パターンしか持たない固定数の有限状態マシン)に よってしか解析することができない。通信をクライアント/サーバ階層として厳 重に組織化することによってデッドロックを回避することはできるが、アクティ ブなオブジェクト(すなわち自発的なメッセージ発信元)が互いに直接通信する ことができないという不器用な組織になりがちである。とりわけ、同位(pee r)プロトコル処理や、例外や失敗状態の処理は、通常の通信パターンとは逆方 向のメッセージ・フローを含むので、問題となる。 結局のところ、高速RISC(Reduced Instruction Set Computer:縮小命令 セット・コンピュータ)を以ってしても、到着したメッセージによって生じる簡 単な状態遷移や短いメッセージの伝送時間のために、コマンド・アンド・コントロ ール・システムのバルクを調整するので、ミリ秒単位のCPU時間が必要となる 。ネットワーク上の離れたノード間の遅れはミリ秒で計測され、ラウンド・トリ ップ時間はしばしば数十ミリ秒になる。離れたノード間でのメッセージ伝送時間 と局所でのメッセージ処理時間との比は、「時定比(time constant ratio)」と 呼ばれる。上記した時間間隔における時定比は、おおよそ103〜104であり、 既に極めて高い値となっている。ラウンド・トリップ時間は伝播遅延で占められ ているが、これは本質的に光の速度に依存するので減少することはない。したが って、グローバル・ネットワークかさらに成長することに伴なって、さらに10 の階乗だけ増大するであろう。しかしながら、処理時間や伝送時間は、次の数年 のうちに、少なくとも10の階乗だけ減少することが期待することができる。こ の結果、時定比の指数は105程度まで到達するであろう。 時定比は、分散システムを特徴付ける重大なパラメータである。日々の個人的 な経験から、5分間の会話を行うために5秒のテレフォン・コールを費やすので あれば好ましいが(この場合の時定比rは1/60である)、もしコールに5分を 要する(すなわち時定数rは1)ならばじれてしまうであろう。さらに、5秒間 の会話のために5分待たされてしまうと当然にして怒ってしまう(時定比rは6 0)。時定比rが1を超えると、待ち処理をサスペンドすることを意味する。も しコンテキスト・スイッチのコストがあまり高くなければ、何か他のことをする であろう。かくのごとく時定数rが高いと、プロセッサをビジー状態に保つため にいかに多くの「スレッド(thread)」が必要とされるかを考えさせられてしまう。 現在のLAN(local Area Network)及びPC(Personal Computer)の世界で は、分散アプリケーション(典型的には10〜100の時定比rを持つ)が僅か に稼動しており、同期通信モデルが実行可能である。しかしながら、時定比rが 1000、単独では時定比rが106というのはもはや適切とは言い難い。 1つの問題は、サスペンションによってスタックの実行を節約しなければなら ないので、サスペンド可能なプロセス又はスレッドを最悪のケースにおいて充分 なスタック領域に割り当てなければならない。このため、スタック領域は、通常 、 10キロ・バイトから1メガ・バイトの範囲になる。比較的多数の「オブジェクト」 が同時発生するようなシステムの場合、時定比rの大きさ次第では、過度又は実 行不可能なメモリ要求を招来してしまう。第2の問題は、現在のアプリケーショ ンでは、サスペンションによるオーバーヘッドそれ自体が、典型的な遷移時間よ りも長くなってしまうことである。 発明の概要 本発明の目的は、上述した欠点を未然に防止し若しくは緩和することにある。 本発明の第1の側面は、プロセッサとメモリを有するネットワーク・ノードに おける非同期メッセージ処理方法であって、 プロセス状態と関連するアプリケーション・コードからなりpid(process i dentifier:プロセス識別子)によって識別可能な複数のプロセスをメモリ中に 維持するステップと、 プロセッサが、受信される各メッセージに対して、メッセージの一部を構成す る宛先pidを基にして前記複数のプロセスのうちいずれに対してアドレスされ ているのかを判断し、宛先pidに関連付けられたアプリケーション・コードを 実行して該メッセージを宛先プロセスのプロセス状態のファンクションとして処 理し、必要であれば宛先プロセスのプロセス状態を変更するとともに、その間ア プリケーション・タスクは必要であれば送出メッセージを生成するステップと、 該ノードが送出メッセージを転送するステップと、 を具備することを特徴とする非同期メッセージ処理方法である。 また、本発明の第2の側面は、デジタル・ネットワークに接続するためのネッ トワーク・ノードであって、 送られてくるメッセージを受信して入力メッセージ・キューに格納するととも に、送出するメッセージを出力メッセージ・キューから読み出して転送する、デ ジタル・ネットワークとのインターフェースと、 プロセス状態と関連するアプリケーション・コードからなりpid(process i dentifier:プロセス識別子)によって識別可能な複数のプロセスをメモリ中に 維持するとともに、入力メッセージ・キューからメッセージを1度に1つずつ受 信 した順番に読み出して、メッセージの一部を構成する宛先pidを基にして前記 複数のプロセスのうちいずれに対してメッセージがアドレスされているのかを判 断し、宛先pidに関連付けられたアプリケーション・コードを実行して該メッ セージを宛先プロセスのプロセス状態のファンクションとして処理し、必要であ れば宛先プロセスのプロセス状態を変更するとともに、必要であれば出力メッセ ージ・キューの次の利用可能なバッファ位置に送出メッセージを書き込むプロセ ッサと、 を具備することを特徴とするネットワーク・ノードである。 また、本発明の第3の側面は、複数のネットワーク・ノードで構成されるデジ タル・ネットワークであって、各ネットワーク・ノードは、 送られてくるメッセージを受信して入力メッセージ・キューに格納するととも に、送出するメッセージを出力メッセージ・キューから読み出して転送する、デ ジタル・ネットワークとのインターフェースと、 プロセス状態と関連するアプリケーション・コードからなりpid(process i dentifier:プロセス識別子)によって識別可能な複数のプロセスをメモリ中に 維持するとともに、入力メッセージ・キューからメッセージを1度に1つずつ受 信した順番に読み出して、メッセージの一部を構成する宛先pidを基にして前 記複数のプロセスのうちいずれに対してメッセージがアドレスされているのかを 判断し、宛先pidに関連付けられたアプリケーション・コードを実行して該メ ッセージを宛先プロセスのプロセス状態のファンクションとして処理し、必要で あれば宛先プロセスのプロセス状態を変更するとともに、必要であれば出力メッ セージ・キューの次の利用可能なバッファ位置に送出メッセージを書き込むプロ セッサと、 を具備することを特徴とするデジタル・ネットワークである。 図面の簡単な説明 図1は、本実施例に係るネットワークの模式的なブロック図である。 図2は、図1に示したネットワーク上の1つのノードに関するブロック図であ る。 図3は、本発明の実施形態に係るノード内におけるメッセージの全体フローを 示した図である。 図4は、共有入力バッファ・リングを示した図である。 図5は、代表的なメッセージ構文を示した図である。 図6は、カーネル・データ構造の要約と状況レジスタを示した図である。 図7は、取り消しログ(トレイル)メカニズムを示した図である。 図8は、カーネル・ループを示したフローチャートである。 好ましい実施形態に関する詳細な記述 図1には、本発明の実施形態に係るシステム及び方法を実装したネットワーク・ コンテキストを示している。該ネットワーク・コンテキストは、デジタル通信ネ ットワーク20によって相互接続された複数の処理ノード10で構成されている 。通信ネットワーク20は、ローカル・エリア・ネットワーク、ワイド・エリア・ネ ットワーク、あるいは、グローバル・ネットワークであってもよい。ネットワー ク20は、いかなる処理ノード10間においても、デジタル・メッセージを適度 の最大サイズに至るまで送信する能力を有するものとする。ネットワーク20は 、コネクション指向、又は、コネクションレス・メディアのいずれであってもよ いが、メッセージ損失、データ汚染、若しくは配信故障を起こす割合が容認し得 る程度に低いことが好ましい。低層のプロトコルを用いることによって、多くの 通信技術を本発明の実現に利用し又は適用することができる。但し、代表的な具 体的な例として、本実施例では、単一セルATM(asynchronous transfer mode :非同期転送モード)を用いることを想定する。この場合には、各ノード10の ペアの間には、各方向毎に単一の仮想チャネルが存在し、また、ノード識別子を 局所仮想チャネル識別子にマップするテーブルが各ノード毎に存在するものと想 定する。さらに、提供されるサービス品質は、上位層プロトコルが必要でない程 度にメッセージ破損が生ずる可能性が充分に低いものであるとする。ノード・ストラクチャ 図2には、個々のノード10の構造を図解している。図示の通り、ノード10 は、少なくとも、高速のローカル・バス30と、プロセッサ若しくはCPU32 と、 幾つかの共有ランダム・アクセス・メモリ34と、通信ネットワーク20(図1を 参照のこと)へのアクセスを提供するインテリジェント通信アダプタ36とを備 えている。通信アダプタ36とバス30は、通信アダプタ36と共有メモリ34 内のメッセージ・バツファとの間で直接メモリ・アクセス(Direct Memory Access :DMA)が可能な構成となっている。また、メッセージ・バッファは、プロセッ サ32からもみえるものとする。本発明の好ましい実施形態では、プロセッサ3 2と通信アダプタ36との間の通常の通信は、共有メモリ34を介してのみ行わ れるものとし、考え得る例外的な条件下以外では、通信アダプタ36は割り込み を発生しないものとする。 各ノードのペア間での仮想チャネルの他に、各ノードは自分自身に対する「ル ープ・バック」チャネルを有しており、ノードは自分自身にメッセージを送信する ことができる。かかるループ・バック・チャネルは、通信アダプタ36内で実行さ れるか、プロセッサ32においてエミュレートされるか、若しくは、通信ネット ワーク経由で行われる。 各プロセッサは、標準的なOS(オペレーティング・システム)の介在なしに、 本発明の実施形態に係るランタイム環境や、幾つかのアプリケーション・コード を実行している。ランタイム環境は従来のOSのコンテキストによっても実行す ることができるが、記述が相当複雑となるという点を理解されたい。リアルタイム環境の概観 さらに、単一のノード10におけるオペレーションに関して考察しながら、本 発明の実施例を詳解することにする。プロセッサ32におけるランタイム環境は 、プロセッサ32上で周期的に若しくは継続的に実行されるカーネルによってコ ントロールされる。「周期的」というケースは、OSのコンテキストにおいて用い られるオペレーション方法であるが、継続的な実行の方が好ましいので、以下の 記述では後者を想定することにする。 各プロセット32は、カーネルによって呼び出されたアプリケーションの「プ ロセス」も実行する。各プロセスは、他のプロセスによって生成されてから自発 的に終了するまでの間の寿命を有する。本明細書中で「プロセス」という用語を 用いるときは、プロセッサ時間を時分割するとともに特定のプロセスに割り当て られた時分割の間でスタックを節約することによって他のプロセスと同時に実行 するアプリケーション・コードの継続的なストリームというような、従来の意味 とは相違する。本明細書で言う「プロセス」は、以下の事柄によって定義される 。 (1)プロセスが生成されてから終了するまでの間に存在するプロセスによって 所有される共有メモリ34内に格納される種々の状態からなるプロセス状態 (2)プロセスの振舞い(behavior)を定義するとともに種々の状態上で動作し て状態遷移を引き起こすコードによって定義されるプロセス・タイプ 繰言になるが、プロセス状態及びプロセス・タイプ定義のみがプロセスの寿命 の間で継続して存在する。 開始し終了しないという意味において、カーネルは継続的である。アプリケー ション・プロセスが実行する間、カーネルがコントロールする。カーネルは、ア プリケーション・プロセスを直接呼び出す。この意味において、カーネルは常に 実行していると言える。 広い意味では(概観的には)、カーネルは、特定のノードによって受信されたメ ッセージを1度に1つだけ取り、メッセージの予定された宛先はどのプロセスか を判断し、宛先のプロセスのプロセス・タイプで示される完了コードを実行し、 プロセス状態に従って可能な1又はそれ以上の状態に変化し、他のプロセスに送 信すべき1又はそれ以上のメッセージを出力し、最終的にカーネルに戻す。各メ ッセージ毎に処理されるこのようなステップからなるシーケンスは、1つの「状 態遷移」、又は、単に1つの「遷移」を構成するとみなされる。 カーネルは、以前のメッセージに関連する状態遷移が完了するまでは、特定の ノードによって受信された次のメッセージを処理しない。事実、カーネルは、ア プリケーション・コードからのリターンが実行して、遷移が発生するまでは、何 も行わない。特定のプロセスに関連して呼び出されたアプリケーション・コード が実行する間、プロセスは「アクティブ」モードにある。アプリケーション・タス クが完了したとき、プロセスは「インアクティブ」モードとなる。インアクティ ブの間、プロセス状態とタイプは存在し続けるが、プロセッサは、プロセスに関 連するいかなるアプリケーション・コードも実行しないし、このプロセスに起こ り得るいかなる状態の変化も発生しない。時分割も他のプロセスの介在なしにア プリケ ーション・コードの遷移が完了するので、プロセス間のコンテキスト・スイッチを 実行する必要が全くない。 状態遷移が最小単位(atomic)であることは、本発明の好ましい特徴である。 最小単位とは、状態遷移に関連するすべてのオペレーションが発生するか、又は 、いずれも発生しないことを意味する。もし何らかの理由により、状態遷移に関 連するすべてのオペレーションが完了しないならば、既に完了したいかなるオペ レーションの状態に対する効果も後退復帰する必要がある。 各プロセスの振舞いは、プロセスの状態やプロセス・タイプによって独自に決 定される。異なるプロセスの状態同士が重なり合うことはない。プロセスのプロ セス状態は、メッセージの受信とその処理によってのみ変化することができる。 プロセスの状態遷移は、直列化され、厳格なシーケンスを形成する。プロセスは 、状態データやストレージを、排他的に「所有」する(責任も負う)。プロセス・ タイプに関連するアプリケーション・コードは、状態変化と、各種の受信メッセ ージに対する送信メッセージを完全に指定する。このコードからの成功裡の返信 によって状態遷移は完了する。遷移の間、各プロセスは、インアクティブ・モー ドとなって、次のメッセージを待機する。 各遷移に対するアプリケーション・コードが完了すると、リターン・コードがカ ーネルに戻される。リターン・コードは、コードが成功裡に実行されたことを示 す「完遂(commit)」か、又は、コードの実行に成功しなかったことを示す「中止( abort)」のいずれかである。完遂リターン・コードの場合には、成功裡の状態遷移 が発生する。カーネルは、次に到来するメッセージに移行する前に、何らかの「 遷移後(post-transition)」処理を実行することになるが、この点については後 に詳解する。プロセス生成、終了、及び識別 すべてのプロセス"P"は、同一のプロセッサ上における既存のプロセス"A"の 状態遷移の副産物として生成される。Pは、Aとは独立していることを選択して いる間は存在し続ける。プロセスは、最後のメッセージを受信したときに、完遂 リターン・コードを修正することによって、終了する。このような修正は、カー ネルによって検知され、遷移後処理の間に処理される。このとき、終了処理に割 り当てられている状態ストレージが適当なメモリ・プールに戻され、プロセス・タ イプはデフォルト・タイプに戻されて、すべてのメッセージが廃棄される。また 、実現番号(incarnation number)が増分されるので、終了した処理に対する未 解決のメッセージはすべて廃棄される。プロセスの生成と終了はいずれも、最小 単位の遷移の一部である。とりわけ、Pの生成は、その生成側であるAについて の最小単位の遷移の一部である。直接的な生成は局所的にのみ(すなわち同一の 共有メモリ上で)行われるので、生成された遠隔的なプロセスを得るためには、 プロセスは既に存在するエージェント経由で間接的に稼動しなければならないが 、エージェントは、適切なセキュリティ限定を課すこともある。 一旦生成されたプロセスの各々は、宛先pid(プロセス識別子)を有してお り、他のプロセスがメッセージをプロセスにアドレスするために使用される。宛 先pidについては後述する。宛先pidをグローバルに利用可能にするために は、初期接続プロトコルが必要である。初期的には、プロセスPのpidを知る プロセスとP自身のみが局所的な生成元である。遠隔プロセスのpidを取得す る通常の方法は、周知の「ネーム・サーバ」プロセスに対して初期要求を送信す ることであり、其処からの応答には所望のpidが含まれている。このことは、 既存のプロセスと、新規に生成されたプロセスの双方に当てはまる。 周知のネーム・サーバ・プロセス(少なくとも各ノード毎に1つある)のプロセ ス名は、2通りの方法で扱うことができ、好ましくは各方法の組み合わせで使用 することである。第1の方法は、すべてのノード上で至る所にある優れたサーバ の各々に対して固定インデックス(固定又は実現番号)を与えることである。第 2の方法は、周知のプロセス・レジスタ自身を持つことに基づく一般的な分散ネ ーム・サービスに依るものである(ネーム・サーバそれ自身は、第1の方法を利用 する)。概略的なメッセージ・フロー メッセージは、プロセスが同一のノード上にあるか否かに拘らず、ノード間で 通信を行うただ1つの手段である。図3には、単一のノード上におけるメッセー ジのフローを概略的に図解している。各ノードは、回転式の入力バッファ・リン グ50と、回転式の出力バッファ・リング52を有しているが、これらバッファ・ リ ングはいずれも共有メモリ(図2を参照のこと)の一部を用いて形成される。プ ロセッサ32は、カーネル54を実行するとともに、アプリケーション・プロセ ス56の実行をコントロールする。カーネル54は、種々の機能を持つが、ここ ではディスパッチャ機能を実行するとともに、入力バッファ50からの読み出し を行う。アプリケーション・プロセス56は、出力バッファ56への書き込みを 行う。 他のすべてのノードからの順序付けられた入力ストリーム58は、単一の直列 入力ストリーム60に統合(merge)される。ATMの場合であれば、ATMネ ットワークないの何処かで統合が行われるが、他のネットワーク環境であれば、 図示のようにアダプタ36内で統合が行われる。送られてくるメッセージは、回 転式入力バッファ・リング50の次の空きスロットに挿入される。カーネル54 は、入力バッファ・リング50からメッセージを非同期的に引き出し、いかなる プロセスのスケジューリングも必要なしに適切なアプリケーション・プロセス5 6を活動化することによって、到着した順にメッセージの処理を行う。適切なア プリケーション・プロセス56の活動化については、後にさらに詳解することに する。出力メッセージは、回転式出力バッファ・リング52中の引き続くスロッ トに入力される。アダプタ36は、出力バッファ・リング52からメッセージを 順次引き出して、他のすべてのノードへの順序ストリーム64を含んだ単一の直 列出力ストリーム62中に配置する。アダプタが、種々のストリーム間でメッセ ージを並べ替えすることも可能であるが、単一のストリーム内で並べ替えを行う ことはできない。 回転式入力バッファ・リング50と回転式出力バッファ・リング52は、回転リ ング・メカニズムを利用することによって、カーネル54の明確な介在を必要と することなしに、空きバッファの自動再利用を実現するものである。リングのサ イズにより、遷移実行速度の変動を許容しなから、入力プロセス、コード実行、 及び出力プロセスを非同期化することができる。システムに対する負荷は、各バ ッファ・リング50,52の占有期間によって表すことができる。バッファの氾 濫に依拠する損失率が許容できる程度に低くなるように、バッファ・リング50 ,52のサイズは充分大きく(すなわち、他の損失メカニズムと同様の程度に) しなければならない。入力バッファ・リング 入力バッファ・リング50の記録又は個々のバッファの詳細について、図4を 参照しながら説明する。回転式入力バッファ・リング50は、通信アダプタ36 から受信されるメッセージを処理するための、共有メモリ34内のデータ構造で ある。回転式入力バッファ・リング50は、より好ましくは、固定(最大)サイ ズのメッセージ・バッファからなるリング(すなわち、環状に接続されたリスト )として、例えばノード初期化時などに静的に構成される。静的なリング構造を 使用することによって、処理期間中における動的なリスト操作を行う必要がなく なるとともに、相互排除問題や、明確なバッファ再利用管理の問題を回避するこ とができる。あるいは、プロセッサによってバッファを動的にリングに付加した り削除したりして、占有統計上の緩やかな変化に適応するようにしてもよい。 個々のメッセージ・バッファは、チェーン中の次のメッセージ・バッファのアド レスを含んでいる。これらのアドレスは、リングがメモリ中の何処に格納されて いるかをひとまとめに定義するものである。静的に構成されたリングの場合、こ れらのアドレスは一定値である。図4には、各メッセージ・バッファ中のフィー ルド(但し、次のバッファのアドレスを除く)が示されている。各メッセージ・ バッファは、後述する同期化に使用される状態ワード70を有する他、可能であ れば、幾つかの付加的制御情報(例えばATMの場合であれば仮想チャネル識別 子)を含んでもよい。各メッセージ・バッファは、メッセージの本体72(若しく はコンテンツ)を格納するスペースを有する。各バッファが持つフィールドの順 番やコンテンツは、特定のメッセージ・プロトコルやバッファリングの手法に適 合するように設定することができる。 他の実施形態では(図示しない)、メッセージ本体と、幾つかの又はすべての動 的制御/状態フィールドを、メモリの異なる領域に置いて、本体へのポインタの みをバッファ・リング中に書き込むようにしてもよい。このような変形例は、プ ロセッサによって使用される仮想メモリ・アドレスがアダプタによって使用され る物理メモリ・アドレスとは相違するようなシステムにおいて有効である。何故 ならば、この変形例によれば、それぞれが同一の(リンクしていない)メッセー ジ・バッファ上で独自の静的なリング構造のポインタを(異なるメモリ・アドレス 空間 に)持つことができるからである。 図4に示すように、メッセージ72の本体は、宛先pidフィールド74と、 発信元pidフィールド76と、データ・フィールド78とを含んでいる。メッ セージは、対応するpidをその宛先pidフィールド74に持つことによって 、個々のプロセスにアドレスされる。宛先pidフィールド74や発信元pid フィールド76のサイズや構造は、ネットワークにおけるそれぞれの特定の例に 関するアドレッシングの要求に応じて決定される。pidフィールドの一般的な 構造は、プロセスに関連するノードを識別するために利用されるノード識別子8 0と、各ノード上のプロセスを識別するための局所pid82と、特定の局所p id82を持つプロセスが生成する毎に増分される増分カウンタとして使用され る実現番号84とを含んでいる。実現番号84は、pidの再利用を制限したり 、プロセスを分散させたるするために設けられている。プロセス・タイプの特定 の実現は、プロセス・インスタンスである。 プロセス・インスタンス・テーブルは、宛先pidの局所pid82から指示さ れたプロセスに関連するアプリケーション・コードを実行するために必要とされ る情報へのマッピングを保持している。プロセス・インスタンス・テーブルには、 各局所pid82毎に1つのレコード83が用意される。レコードは、主として 、プロセス・インスタンスに対するメッセージを処理するためのアプリケーショ ン・コードを格納する共有メモリ中の位置に対するコード・ポインタ86と、プロ セス・インスタンスの状態情報に対する状態ポインタ88とで構成される。pi dの実現インデックスも、このレコードのフィールド90中に保持されている。 プロセス・タイプの包括的な属性を含んだ構造に対するポインタを含んでもよい 。デバッグ・コントロール若しくはパフォーマンス測定に関連するその他の属性 を(インスタンス毎に)さらに含んでもよい。これらの属性は、変形例や実行モー ド(例えば、シミュレーション、開発、フィールド・コンテキスト)毎に相違す る。出力バッファ・リング 出力バッファ・リングは、入力バッファ・リングと同様である。アダプタによる入力パッファオペレーション 通信アダプタ36の1つの機能は、例えば、有効な受信メッセージ(すなわち 「空(empty)」でないセル)を、入力バッファ・リング50中の状態変数inp ut_write_headによって指し示されているバッファに、(DMA経由で)転送す ることである。状態変数input_write_headは、入力バッファ・リング50中にお いて次の空のバッファを指し示すために使用される。この状態変数は、アダプタ 36専用であっても、あるいは共有メモら34上で保持されていてもよいが、ア ダプタ36のみが読み出したり再書き込みすることができるものとする(初期化 時は別として)。メッセージ転送に成功する度に、アダプタ36は、現在のバッ ファ中の状態フィールドにフラグをセットして、バッファが有効なメッセージで 占有されていることを示すようにするとともに、input_write_headをチェーンの 次のバッファに進める。例えば、他の状態変数input_read_headは、カーネル5 4によって維持され、入力バッファ・リングからのメッセージ読み出しをコント ロールするために利用されるが、この点は後に詳解する。アダプタによる出力バッファオペレーション 通信アダプタ36の他の機能は、出力バッファ・リング52に書き込まれた有 効な(すなわち「空(empty)でないセル」)メッセージを、出力通信ストリ ーム62に、(DMA経由で)転送することである。例えば、出力バッファ・リ ング52から読み出すべきメッセージを指し示すために、状態変数output_read_ headが使用される。この状態変数は、アダプタ36専用であっても、あるいは共 用メモリ34中に保持されていてもよいが、アダプタ36のみが読み出し及び再 書き込みを行うことができるものとする(但し、初期化時を除く)。メッセージ転 送に成功する度に、アタプタ36は、現在のバッファの状態フィールドにフラグ をセットして、バッファが再び利用可能になったことを示すとともに、output_r ead_headをチェーンの次のバッファに進める。例えば、出力バッファ・リング5 2へのメッセージ書き込みをコントロールするために、他の状態変数output_wri te_headがカーネル54によって保持されているが、この点は後に詳解すること にする。メッセージ構文 図5には、代表的なメッセージ構文を示している。上述したように、メッセー ジ構文は、各メッセージの先頭に宛先pid74と、発信元pid76を含んで いる。発信元pid76は、カーネル74のラン・タイム・システムによって各メ ッセージに対して自動的にスタンプされる。また、宛先pid74は、カーネル によって、メッセージ送信プリミティブ・オペレーションの一部として挿入され る。アプリケーション・コード56は、メッセージ中のこれらいずれのフィール ドにも直接アクセスすることはできないが、メッセージ発信元に対して明示コー ルとして尋ねることができる。 残りのメッセージ・コンテンツ(すなわち、データ・フィールド78)はメッセ ージ・マーシャル/デマーシャル装置に関連するものであり、理想的には、アプ リケーション・プログラミング言語と一体化されている。この詳細については本 明細書中では言及しない。典型的には、メソッド92、フォーマット・インジケ ータ94(引数96の個数や署名の圧縮タイプなど)、標準機械非依存の基本タイ プ表示(pidを含む)、及びある種のチェックサム98を符号化する。このフォ ーマットは、暗号化することもできる。カーネル・データ構造及び環境レジスタ 図6には、特定の実施形態においてラン・タイム・システムをどのように構成す るかを図解している。この実施形態では、カーネルは、システム・スタック10 0とトレイル・スタック102(後述)を維持する。また、一連の環境レジスタ は以下に示す通りである。 mi‐"mssage in"=input_read_head:入力バッファ・リング50中のメッセージ についてのメッセージ発信元pidと宛先pidにアクセスする。メッセージが 存在する場合はmi.statusは真(true)である。mi.dest.pidは、メッセージ に含まれる宛先pidである。 in‐input byte stream:コードをデマーシャルして、入力バッファ・リング5 0内でメッセージからメッセージ・フィールドを引き出すために使用される。 no‐"next out"=output_write_head:出力バッファ・リング52内で、宛先p idや発信元pidをセットするために次に利用可能な出力バッファである。 out‐output byte stream:出力バッファ・リング52内で出力メッセージをフ ォーマットするためのコードをマーシャルすることによって使用される。 pe‐process entry:プロセス・インスタンス・テーブル85経由ですべてのプ ロセス・インスタンス及びタイプ属性にアクセスする。 sp‐stack pointer:システム・スタック100の先頭 te‐trail stack end:取り消しログ・トレイル・スタック102の最後尾 pc‐program counter:実行コード中の次に実行可能なインストラクションを 指す。 以上、入力及び出力バッファ・リングに関連する変数について説明してきた。 システム・スタック及びトレイル・スタックに関する主な利点は、全システムにお いて、各プロセッサ毎にただ1つしか必要としないという点にある。 図示のメモリ・プール104は、プロセス状態ストレージのために予約された メモリ34(図2を参照のこと)中の領域である。また、コード・メモリ106 は、アプリケーション・コードを保存するための共有メモリ34中の領域である 。アクティブ・タイマ・リスト112(カーネルによって管理される)も、共有メ モリ34内に置かれている。 コード・ポインタ86は、プロセス・インスタンス・テーブル85中でpeによ って指し示されているレコードから、コード・メモリ106内のアプリケーショ ン・コードが格納されている場所を指し示すように図示されている。状態ポイン タ88は、プロセス・インスタンス・テーブル85中の同じレコードから状態メモ リ104中で当該プロセス・インスタンスに関するプロセス状態を格納した場所 を指し示すように図示されている。プロセス状態は、アクティブ・タイマ・リスト 112中のタイマに対する1又はそれ以上のタイマ・ポインタ114を含んでも よい。取り消しログ・メカニズム 状態遷移の最小単位を実装するには、幾つかの方法が挙げられる。ほとんどの メッセージによってごく僅かな状態しか更新されず、且つ、旧い状態を回復する 現実的な必要性は極めて稀であるという前提の下で、図7に図解するように、変 化したすべての状態変数の旧い値についてのログをとることに基づいた、ソフト ウェアによる効率的な実装を行うことができる。 この目的のためには、トレイル・スタック102と呼ばれる充分に大きなサイ ズを持つ、単一のシステム・リソースが必要である。トレイル・スタック102は 、(アドレス、値)のペアからなるアレイ(若しくはスタック)で構成される。 初 期的には、及び、各アプリケーション・タスクが実行される直前には、環境レジ スタte(trail end)は、トレイル・スタック103の開始位置103 を指し示すようにセットされる。アプリケーション・タスク実行期間中に状態の ワードを書き込むときは、まず、指し示された場所のアドレス(addr)と現 在の値(oldval)をトレイル・スタック102に書き込まなければならない 。(言語コンパイラとコード・ジェネレータのサポートにより、この要求を効率的 に実現することができる。)遷移が完遂したとき(すなわち、アプリケーション・ タスクが成功裡に完了して、プロセスがサスペンドされたモードに戻されたとき )、teはトレイル・スタック102の先頭にリセットされ、次のメッセージに対 する準備が整う。 遷移を中断する必要があるときには、トレイルは(後方から)逆の順序で処理 され、旧い値がプロセス状態メモリ104によって指示されている場所に回復す る。このような処理は例えば、以下に示すコードによって実現される。 失敗した遷移の間に書き込まれた新しい値(newval)は廃棄される。 トレイリングは、すべての状態変数の更新に対して適用される。状態変数は、 メモリ・セグメント内でプロセスの状態ポインタによって指し示されたもので構 成され、其処から届くところにある。状態変数の更新は、タイマ領域(プロセス によって使用されるタイマの生成、再セット、削除に関連する。タイマに関して は後に詳解する)や、プロセス・インスタンス・テーブル(プロセスの生成に関連 する)、メモリ・プール(動的メモリ割り当てに関連する)における変化を含むも のとする。現在では、タイマ・オペレーション、プロセス生成、及びメモリ割り 当てはすべて、最小単位のアクションに自動的に含まれる。 トレイリングは、スタック、又は出力メッセージ・バッファ、若しくは、他の 揮 発性変数の更新に対しては必要でない。勿論、最適化のためであれば、状態オブ ジェクトのための初期化(構築)コードが必要とされる。 勿論、本発明の要旨を逸脱することなしに最小単位であることを実現するため に他のメカニズムを用いることができるということも充分理解されたい。カーネルのディスパッチ・プロセス プロセッサ32は、アプリケーション・コード実行の間において、カーネルを 実行する。カーネルは、入力メッセージ毎に1回だけ実行するメイン・ループを 有している。図8には、カーネル・ループをフローチャートの形式で図解してい る。カーネル・ループに関しては、図6を参照しながら記述されたカーネル・デー タ構造及び環境レジスタを紹介する前記の文脈中で記述される。既に言及したよ うに、カーネルは、入力バッファ50中で次に利用可能なメッセージを指し示す 内部状態変数input_read_head(若しくはmi)を有している。カーネルは、状 態レジスタmi.statusがゼロに等しいことによって入力バッファが空であること が示されている間は、アイドル・タスクを実行する(ブロック200で分岐Yes に抜けてブロック202に進む)。カーネルの機能は、入力されたメッセージを 到着順に従って可能な限り迅速に処理することである。入力メッセージが到着し (ブロック200の分岐Noに進む)、さらに、input_read_headによって指し示 されているメッセージ・バッファの状態フラグ・フィールドが有効メッセージであ る旨を示す場合には、カーネルは、メッセージの宛先pidであるmi.des tを引き出し、宛先pidから局所pidを引き出し、該局所pidが正しい範 囲内にあることを検証し、そして、プロセス・インスタンス・テーブル85内のレ コードにアクセスするためにこれを使用する。プロセス・インスタンス・レコード のフィールドは、実現インデックスを含んでいるが、これは入力されたメッセー ジから引き出された宛先pidと正確に一致しなければならない。もし、引き出 された実現インデックスが範囲外であるならば、入力メッセージは無効であると みなされ(ブロック204の分岐Noに進む)、エラー・カウンタが増分され(ブロ ック206)、その状態フィールドをクリアするとともにinput_read_headポイン タを進めることによって(ブロック222)、メッセージは廃棄される。 もしメッセージpidが有効であるならば(ブロック204において分岐Ye sに進む)、カーネルは、環境変数をプロセス実行や最小単位サポートのために 設定するとともに、プロセス・インスタンス・テーブル中のコード・ポインタによ って指し示されているアプリケーション・コードを呼び出す。アプリケーション・ コードがアクセスする必要がある場合には、1つの(概念的な)環境変数がメッ セージ発信元pidを与えるようにしてもよい。(しかしながら、アプリケーシ ョンがメッセージの発信元を問い合わせる必要があるのはごく稀であり、単にメ ッセージ送信元フィールドに対するポインタを隠し環境変数(可能であればレジ スタ)にコピーするだけの方で充分であり、効果的でさえある。また、アプリケ ーションが必要とする場合には、発信元フィールドを引き出すために間接メモリ 参照を使用するだけで充分である。)同様に、アプリケーション・コードがこの 場所で利用可能な情報(例えば、pid又はプロセス・タイプ属性)を要求する 場合には、プロセス・インスタンス・テーブル・レコードへのポインタが環境変数 内(可能であればレジスタ)に残される。 アプリケーション・コードを呼び出すためには、状態ポインタ88とコード・ポ インタ86がプロセス・インスタンス・テーブル85から読み出され、コール規定 に応じてレジスタにフェッチされ、及び/又は、スタックにプッシュされる。メ ソッド又はメッセージのコマンド・フィールドを引き出さなければならない。ま た、このコマンド後のメッセージの次のフィールドに対するポインタすなわち入 力バイト・ストリーム・レジスタも、レジスタにフェッチされ、及び/又は、スタ ックにプッシュされる。出力するメッセージに対する最小単位をサポートするた めに、output_write_headのコピー(カーネルの局所)が作成される(ブロック2 10)。次いで、コード・ポインタによって指し示されるアプリケーション・コー ドを呼び出し、入力バイト・ストリーム・インと状態ポインタをパラメータとして 渡し、リターン・コード若しくは結果"res"を予期して、アプリケーション・コ ードが実行される(ブロック212)。 アプリケーション・コードがカーネルに戻されたとき、そのリターン・コードr es(都合に応じてレジスタ内にあるか又はスタックの先頭に置かれる)は、「 完遂(commit)」又は「中止(abort)」を示す。もし中止するように決定が下され たことをコードが示すならば(ブロック214の分岐No)、カーネルは output_write_headをその局所に保存された値からリセットして、すべての出力 メッセージを取り消す。次いで、プロセスの初期状態を回復する必要がある(ブ ロック216)。次いで、状態フィールドをクリアするとともにinput_read_head を次のメッセージに進めることによって、入力メッセージが廃棄される(ブロッ ク222)。 もしリターン・コードが「完遂(commit)」を示すならば(ブロック214の分岐 Yes)、アプリケーション・コードによって生成された出力メッセージはすべて 、output_write_headの保存された値で開始しoutput_write_headの現在の値に続 くが、通信アダプタで処理されるように、状態フィールドをセットしなければな らない。単にtrail_endにtrail_startを代入することによって、トレイルをリセ ットすることができる(ブロック218)。プロセスが終了するという特別な場合 には、プロセスに関連するpid及びプロセス状態は割り当て解除される(ブロ ック220)。最終的には、状態フィールドをクリアするとともにinput_read_he adを次の入力メッセージに進めることによってことによって入力メッセージが廃 棄される(ブロック222)。 アプリケーション・コードの実行期間中にソフトウェア例外が発生した場合に は(矢印223)、適切な診断情報を取得することができ(ブロック224)、シス テム・スタックは通常の時点(すなわち、アプリケーション・コードをコールする 直前の時点)にリセットされ、コントロールは上述したような中止処理(ブロッ ク216)に移行する。関連する診断情報は、大まかにサイズの昇り順及びユー ティリティの降り順で言えば、以下に示すもので構成される。 (0)エラー・タイプ及びプログラム・カウンタ (1)現在の入力メッセージ (2)(完全な)現在のプロセス状態 (3)完全な入力バッファ・リング(最近処理されたメッセージと近い将来のメッ セージの双方を含む) ソフトウェア例外の例として、プロセスの各タイプ毎に、該タイプについての プロセス遷移のための最大許容時間が存在することもある。遷移がこの制限時間 を超過した場合には、例外が発生して、上述したように処理される。 本明細書で記述される実施形態では、メッセージが外部又は完全に内部的なも のかによってプロセッサ・オーバーヘッドの相違は全くない。内部メッセージが 出力バッファから入力バッファへの潜在的なコピー操作を除去するように最適化 されている場合、この相違はせいぜいコピーのDMAコストにしかならない。上 述したようなカーネル・ループを(アセンブラ言語で)最適に実装する場合、お よそ50の機械語インストラクションで充分であり、典型的なワークステーショ ンであればカーネルのオーバーヘッドは数分の1マイクロ秒にしかならない。 プロセス遷移は、応答が要求される出力メッセージを生成してもよい。このよ うなプロセス遷移は、(通常通りに)完結して、プロセスは「インアクティブ」 モードに突入する。期待される応答が受信されたとき、入力バッファ・リングに 入れられて、通常の方式によりオリジナルのプロセスを活動化することによって 処理される。 メッセージが失われる可能性があると仮定されているので、このような失われ たメッセージを検出するための設備がタイマに要求される。1つの可能な一般的 な規則は、メッセージに対する応答が待たれているプロセスは損失メッセージを 検出するためのタイマを利用するようにすることである。このようなプロセスは 、「一時的な状態(transient state)」にあると呼ばれ、もしオリジナルのメッ セージ又はその応答のいずれか失われたならば、プロセスはその代わりにこのよ うな状態に無限にとどまることができる。タイマが消滅すると、タイムアウト・ メッセージが送信されて、プロセスによるある種の回復アクションのトリガとな る。採用することができる回復アクションの種類は、関連するプロセスの種類や 失敗の性質に依存する。例えば、「持続的な(persistent)」プロセス(バックア ップを伴なうプロセスや、自動的に再生成されるプロセス)間での交換の場合に は、アクションとは、(メッセージを送ることによって)パートナーの状態をチェ ックしたり、パートナーの名前を再綴じ込みすることであってもよいし、成功す るまで継続的に行ってもよい。束の間のプロセス(例えば、コール・セットアッ プやトランサクションを管理するプロセス)の場合、該プロセスに対する外部手 段によって生成される何らかのエントリを用いてアクションを単に中止すること である。 数多くのプロセスが束の間の状態に突入し、ほとんどいつも直ぐにその状態を 立ち去るようなシステムでは、タイマのセッティングと取り消しの双方にかかる 費用を極めて低く維持することが重要である。本明細書中では、タイムアウト値 は任意の値であることを前提とし、通常の応答時間よりも相当大きいタイムアウ ト値を用いるものとする。タイムアウトの実際の値は特に重要ではなく、通常、 タイムアウト遅延を正確に与える必要は全くない。 このような状況においては、極めて低いコストを実現するために、以下に示す ような形式のデータ構造を使用する。 以下に示す2通りの処理手順を用いるプロセスによって、タイマを生成したり 破壊することができる。タイマ・ポインタは、プロセス状態内に維持される。 このプロセスは、新しいタイマ・レコードを生成して、そのポインタを戻す。 所有者フィールドは現在実行しているプロセスのidを取得して、タイマ・レコ ードがグローバル・タイマ・チェーンに添付される。(異なるクロック解像度が必 要とされる場合には、その解像度が入力パラメータとなる。)このようなタイマ・ チェーンは、カーネルによって管理されるグローバル変数である。 上式によって、タイマをグローバル・タイマ・チェーンから削除され、(効率化 のため、二重リンク・チェーンである必要がある)、次いでタイマを割り当て解除 す る。 以下に示すマクロを用いることによって、非常に安価にタイマのセッティング と取り消しを行うことができる。 リアル・タイム・クロックによる規則的な割り込みによって、非否定的値フィー ルドを減分しながらすべてのチェーン接続されたタイマ上で実行するタイマ・ス キャン(アプリケーション・プロセス実行の合間)を実行するように構成するこ とができる。ゼロになる値フィールドはすべて、所有者プロセスに送信されるメ ッセージになる。 本実施例では、タイムアウト・メッセージは、コマンド「タイムアウト」を持 つと仮定しているので、その結果として起こるアクションは、純粋に状態駆動型 である。その代替技術として、set_timerがタイムアウト・メッセージ上で使用す るメッセージ・コードを含むことができる。 上述した教示を考慮して、本発明に関する数多くの修正や変更を行うことが可 能である。したがって、特許請求の範囲に記載されている範囲を逸脱することな く、本明細書中で明確に記述した以外の形態で本発明を実現することができると いう点を充分留意されたい。 本明細書中では、状態遷移の最小単位を実現するための特定のメカニズムにつ いて記述してきたが、他のメカニズムを利用することもできるという点を留意さ れたい。 プロセスの能力をあらわすためにプロセスID(pid)を用いることができ る。pidを持つことによって、ある実体に対して関連するプロセスが受容する すべてのメッセージを送信することができる権利を与え、これによってあること ができるという能力を表すことになる。本明細書において記述された実施形態で は、pidは、2値であり、手近ないかなるデータ構造の中にも格納し、またメ ッセージに入れて自由に引き渡すなどすることができる。また、引き渡す能力に 関して、何らコントロールや制限を必要としない。このようなシステムでは、プ ロセスを破壊し、次いで、別のpidを持つ新しいプロセスを生成して、必要で あればその機能を実行することによってのみ、以前に許可された能力を取り消す ことができる。ノードの再初期化はこれの極端な例である。実用上の仮定は、す べてのノードが悪意がないという点で信用することができるが、故障条件下では 誤動作する可能性があるような、温和で協力的な環境ということである。 実現番号は、pidのその他の未使用ビットを埋めるが、ある時間間隔の間は 同じプロセスidが再利用されることはなく、したがって、記憶された旧いpi dを一掃(purge)するには充分となっている。目立った能力を取り消す安 価な方法は、その状態を維持している期間中にプロセスの実現番号を増分するこ とである。勿論、実現番号を用いない実装形態も可能である。
【手続補正書】特許法第184条の8第1項 【提出日】平成11年8月20日(1999.8.20) 【補正内容】 請求の範囲 1.プロセッサとメモリを有するネットワーク・ノードにおける非同期メッセー ジ処理方法であって、 複数のアプリケーション・タスクについてのアプリケーション・コードを該メモ リ中に格納するステップと、 複数のプロセス状態をメモリ中に維持するとともに、各プロセス状態を前記ア プリケーション・タスクの1つと関連付けて、各プロセス状態をpid(プロセ ス識別子)によって識別可能にするステップと、 該ノードが、それぞれ前記pidのうち特定の1つを含んだ入力メッセージを 受信するステップと、 受信された各入力メッセージに対して、該プロセッサが、割り込みなしに、前 記pidのうち特定の1つと関連付けられたアプリケーション・タスクを該特定 のpidによって識別される特定のプロセス状態のファンクションとして実行す るステップと、 を具備することを特徴とする非同期メッセージ処理方法。 2.さらに該特定のプロセス状態に変更を加えるステップを具備することを特徴 とする請求項1に記載の非同期メッセージ処理方法。 3.さらに、 実行中に、アプリケーション・タスクが出力メッセージを生成するステップと 、 該アプリケーション・タスクが成功裡に終了した後に、該ノードが出力メッセ ージを転送するステップと、 を具備することを特徴とする請求項1に記載の非同期メッセージ処理方法。 4.さらに、インターフェースが入力メッセージを受信するノードの一部を形成 して、入力メッセージを受信した順番に従って入力メッセージ・キュー内に格納 するステップを備え、 該プロセッサは、該関連するアプリケーションを完了まで割り込みなしに実行 することによって、該入力メッセージ・キューに格納されたメッセージを読み出 して1度に1つずつ処理する、 ことを特徴とする請求項1に記載の非同期メッセージ処理方法。 5.さらに、 アプリケーション・タスクが、生成された順番に従って出力メッセージを出力 メッセージ・キューに格納するステップと、 該アプリケーション・タスクが成功裡に完了したことに応答して、該アプリケ ーション・タスクによって生成されたメッセージを転送することができる旨の表 示を該メッセージ・キューに格納するステップと、 を備え、 該インターフェースは、転送することができる旨の表示を含んだメッセージを 該出力メッセージ・キューの中から読み出して、1度に1つずつ転送する、 ことを特徴とする請求項4に記載の非同期メッセージ処理方法。 6.各プロセスは、関連するアプリケーション・タスクを識別するプロセス・タイ プ定義を有することを特徴とする請求項1に記載の非同期メッセージ処理方法。 7.新しいプロセスのインスタンスを生成するために、該プロセッサは新しいプ ロセス状態を該メモリ中にそれぞれ割り当てることを特徴とする請求項6に記載 の非同期メッセージ処理方法。 8.該プロセス状態は、アプリケーション・タスクの開始前に存在した過去の値 を持つ複数の状態変数で構成され、 該プロセッサが、アプリケーション・タスクによって修正されたすべての状態 変数についての過去の値のログをとるステップと、 該アプリケーション・タスクが、完遂、中止、又は例外のうちいずれかの形態 で終了するステップと、 該アプリケーション・タスクが中止又は例外のいずれかの形態で終了した場合 に、該プロセッサが、修正された状態変数を過去の値に回復するステップと、 をさらに具備することを特徴とする請求項1に記載の非同期メッセージ処理方法 。 9.アプリケーション・タスクによって修正されたすべての状態変数についての 過去の値のログをとるステップは、該プロセッサが、各々の過去の値とそのアド レスをトレイル・スタック・ポインタによって指示されるトレイル・スタックとし て割り当てられたメモリ中の場所に保存して、次いで、トレイル・スタック・ポイ ンタを増分することによって実現され、 該アプリケーション・タスクが完遂して終了した場合には、該プロセッサは該 トレイル・スタック・ポインタをリセットし、 該アプリケーション・タスクが中止又は例外終了した場合には、該プロセッサ は該トレイル・スタック内の過去の値の各々を該メモリ中の元のアドレスに回復 する、 ことを特徴とする請求項8に記載の非同期メッセージ処理方法。 10.アプリケーション・タスクによって出力メッセージ・キューに格納されたメ ッセージは、アプリケーション・タスクが完遂して終了した場合にのみ転送され ることを特徴とする請求項8に記載の非同期メッセージ処理方法。 11.入力されるメッセージは、メッセージを送信したプロセスを識別する送信 元pidを含むことを特徴とする請求項1に記載の非同期メッセージ処理方法。 12.入力メッセージ・キュー及び出力メッセージ・キューは、該メモリ内に保存 されて該プロセッサによってアクセス可能であるとともに、該インターフェース による直接メモリ・アクセスによってアクセス可能であり、プロセスと該インタ ーフェース間のすべての通信とコントロールはこれらキュー経由でのみ行われる ことを特徴とする請求項5に記載の非同期メッセージ処理方法。 13.各pidを対応するプロセス状態の該メモリ中の場所や関連するアプリケ ーション・タスクの該メモリ中の場所とマッピングするために、プロセス・インス タンス・テーブルが使用されることを特徴とする請求項1に記載の非同期メッセ ージ処理方法。 14.アプリケーション・タスクの実行はこれらを直接呼び出すカーネル・タスク によってコントロールされ、 特定のpidに関連するアプリケーション・タスクによってメッセージが生成 され、続いてノードによって転送され、且つ、入力メッセージに対する応答を期 待する場合には、該アプリケーション・タスクがタイマを始動し、アプリケーシ ョン・タスクが完了まで実行するとともにカーネル・タスクに対するコントロール を放棄し、カーネル・タスクがこれを周期的に減分するステップと、 該タイマが消滅したときに、該カーネル・タスクが該特定のpidにアドレス されたタイムアウト・メッセージを生成するステップと、 をさらに具備することを特徴とする請求項1に記載の非同期メッセージ処理方法 。 15.デジタル・ネットワークに接続するためのネットワーク・ノードであって、 送られてくるメッセージを受信して入力メッセージ・キューに格納するととも に、送出するメッセージを出力メッセージ・キューから読み出して転送する、デ ジタル・ネットワークとのインターフェースと、 複数のアプリケーション・タスクについてのアプリケーション・コードを格納す るように稼動するとともに、複数のプロセス状態を格納するように稼動すること ができるメモリと、 プロセス状態を前記メモリ中に維持し、各プロセス状態をpid(プロセス識 別子)によって識別し、各pidを前記アプリケーション・タスクのうちの1つ と関連付け、該入力メッセージ・キューからメッセージを1度に1つずつ受信し た順番に従って読み出し、入力メッセージのpidに関連付けられたアプリケー ション・タスクを該入力メッセージのpidによって識別される特定のプロセス 状態のファンクションとして割り込みなしに実行するように稼動することができ るプ ロセッサと、 を具備することを特徴とするネットワーク・ノード。 16.前記プロセッサは、さらに、該特定のプロセス状態を変更するとともに、 出力メッセージを該出力メッセージ・キューの次に利用可能なバッファ位置に書 き込むように稼動することができることを特徴とする請求項15に記載のネット ワーク・ノード。 17.複数のネットワーク・ノードで構成されるデジタル・ネットワークであって 、各ネットワーク・ノードは、 送られてくるメッセージを受信して入力メッセージ・キューに格納するととも に、送出するメッセージを出力メッセージ・キューから読み出して転送する、デ ジタル・ネットワークとのインターフェースと、 複数のアプリケーション・タスクについてのアプリケーション・コードを格納す るように稼動するとともに、複数のプロセス状態を格納するように稼動すること ができるメモリと、 プロセス状態を前記メモリ中に維持し、各プロセス状態をpid(プロセス識 別子)によって識別し、各pidを前記アプリケーション・タスクのうちの1つと 関連付け、該入力メッセージ・キューからメッセージを1度に1つずつ受信した 順番に従って読み出し、入力メッセージのpidに関連付けられたアプリケーシ ョン・タスクを該入力メッセージのpidによって識別される特定のプロセス状 態のファンクションとして割り込みなしに実行し、該特定のプロセス状態を変更 するとともに、出力メッセージを該出力メッセージ・キューの次に利用可能なバ ッファ位置に書き込むように稼動することができるプロセッサと、 を具備することを特徴とするデジタル・ネットワーク。 18.さらに、各ノード上で実行される幾つかのプロセスのpidを知るプロセ ス・ネーム・サーバを具備し、前記複数のネットワーク・ノードのうち第1のノー ドが前記複数のネットワーク・ノードのうち第2のノード上におけるプロセスを 識別するために、該第1のノードが該プロセス・ネーム・サーバに対して問い合わ せを送信し、該プロセス・ネーム・サーバは該第2のノード上の該プロセスのプロ セス識別子を伴なう応答をすることを特徴とする請求項17に記載のデジタル・ ネットワーク。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 エリック・ビアマン カナダ国,ケー2ピー 2ジー2,オンタ リオ,オタワ,1701―71 サマセット ス トリート ダブリュー

Claims (1)

  1. 【特許請求の範囲】 1.プロセッサとメモリを有するネットワーク・ノードにおける非同期メッセー ジ処理方法であって、 プロセス状態と関連するアプリケーション・コードからなりpid(process i dentifier:プロセス識別子)によって識別可能な複数のプロセスをメモリ中に 維持するステップと、 ノードが入力メッセージを受信するステップと、 プロセッサが、受信される各メッセージに対して、メッセージの一部を構成す る宛先pidを基にして前記複数のプロセスのうちいずれに対してアドレスされ ているのかを判断し、宛先pidに関連付けられたアプリケーション・コードを 実行して該メッセージを宛先プロセスのプロセス状態のファンクションとして処 理し、必要であれば宛先プロセスのプロセス状態を変更するステップと、 アプリケーション・タスクが、実行中に、送出メッセージを生成するステップ と、 該ノードが送出メッセージを転送するステップと、 を具備することを特徴とする非同期メッセージ処理方法。 2.さらに、インターフェースが入力メッセージを受信するノードの一部を形成 して、入力メッセージを受信した順番に従って入力メッセージ・キュー内に格納 するステップを備え、 プロセッサは、該入力メッセージ・キューに格納されたメッセージを読み出し て1度に1つずつ処理する、 ことを特徴とする請求項1に記載の非同期メッセージ処理方法。 3.さらに、アプリケーション・コードが、出力メッセージを生成された順番に 従って出力メッセージ・キューに格納するステップを備え、 該インターフェースは、該出力メッセージ・キューからメッセージを読み出し て、1度に1つずつ転送する、 ことを特徴とする請求項2に記載の非同期メッセージ処理方法。 4.各プロセスは、関連するアプリケーション・コードを識別するプロセス・タイ プ定義をメモリ中に格納して有することを特徴とする請求項1に記載の非同期メ ッセージ処理方法。 5.新しいプロセスのインスタンスを生成するために、該プロセッサは新しいプ ロセス状態を該メモリ中にそれぞれ割り当てることを特徴とする請求項4に記載 の非同期メッセージ処理方法。 6.該プロセス状態は、アプリケーション・コードの開始前に存在した過去の値 を持つ複数の状態変数で構成され、 さらに、 該プロセッサが、遷移期間中にアプリケーション・コードによって修正された すべての状態変数についての過去の値のログをとるステップと、 該アプリケーション・コードが、完遂、中止、又は例外のうちいずれかの形態 で終了するステップと、 該アプリケーション・コードが中止又は例外のいずれかの形態で終了した場合 に、該プロセッサが、状態変数を過去の値に修正することで回復するステップと 、 を具備することを特徴とする請求項1に記載の非同期メッセージ処理方法。 7.アプリケーション・コードによって修正されたすべての状態変数についての 過去の値のログをとるステップは、該プロセッサが、各々の過去の値とそのアド レスをトレイル・スタック・ポインタによって指示されるトレイル・スタックとし て割り当てられたメモリ中の場所に保存して、次いで、トレイル・スタック・ポイ ンタを増分することによって実現され、 該アプリケーション・コードが完遂して終了した場合には、該プロセッサは該 トレイル・スタック・ポインタをリセットし、 該アプリケーション・コードが中止又は例外終了した場合には、該プロセッサ は該トレイル・スタック内の過去の値の各々を該メモリ中の元のアドレスに回復 す る、 ことを特徴とする請求項6に記載の非同期メッセージ処理方法。 8.アプリケーション・コードによって出力メッセージ・キューに格納されたメッ セージは、アプリケーション・コードが完遂して終了した場合にのみ転送される ことを特徴とする請求項6に記載の非同期メッセージ処理方法。 9.入力されるメッセージは、メッセージを送信したプロセスを識別する送信元 pidを含むことを特徴とする請求項1に記載の非同期メッセージ処理方法。 10.入力メッセージ・キュー及び出力メッセージ・キューは、該メモリ内に保存 されて該プロセッサによってアクセス可能であるとともに、該インターフェース による直接メモリ・アクセスによってアクセス可能であり、プロセスと該インタ ーフェース間のすべての必要な通常の通信とコントロールはこれらキュー経由で のみ行われることを特徴とする請求項3に記載の非同期メッセージ処理方法。 11.各pidを対応するプロセス状態の該メモリ中の場所やアプリケーション・ コードの該メモリ中の場所とマッピングするために、プロセス・インスタンス・ テーブルが使用されることを特徴とする請求項1に記載の非同期メッセージ処理 方法。 12.さらに、 特定のプロセスによってメッセージが生成され、続いてノードによって転送さ れ、且つ、該特定のプロセスが入力メッセージに対する応答を期待する場合には 、該プロセスがタイマを始動して、カーネルがこれを周期的に減分するステップ と、 該タイマが消滅したときに、該プロセッサがタイムアウト・メッセージを該特 定のプロセスに送信するステップと、 を具備することを特徴とする請求項1に記載の非同期メッセージ処理方法。 13.デジタル・ネットワークに接続するためのネットワーク・ノードであって、 送られてくるメッセージを受信して入力メッセージ・キューに格納するととも に、送出するメッセージを出力メッセージ・キューから読み出して転送する、デ ジタル・ネットワークとのインターフェースと、 プロセス状態と関連するアプリケーション・コードからなりpid(process i dentifier:プロセス識別子)によって識別可能な複数のプロセスをメモリ中に 維持するとともに、入力メッセージ・キューからメッセージを1度に1つずつ受 信した順番に読み出して、メッセージの一部を構成する宛先pidを基にして前 記複数のプロセスのうちいずれに対してメッセージがアドレスされているのかを 判断し、宛先pidに関連付けられたアプリケーション・コードを実行して該メ ッセージを宛先プロセスのプロセス状態のファンクションとして処理し、必要で あれば宛先プロセスのプロセス状態を変更するとともに、必要であれば出力メッ セージ・キューの次の利用可能なバッファ位置に送出メッセージを書き込むプロ セッサと、 を具備することを特徴とするネットワーク・ノード。 14.複数のネットワーク・ノードで構成されるデジタル・ネットワークであって 、各ネットワーク・ノードは、 送られてくるメッセージを受信して入力メッセージ・キューに格納するととも に、送出するメッセージを出力メッセージ・キューから読み出して転送する、デ ジタル・ネットワークとのインターフェースと、 プロセス状態と関連するアプリケーション・コードからなりpid(process i dentifier:プロセス識別子)によって識別可能な複数のプロセスをメモリ中に 維持するとともに、入力メッセージ・キューからメッセージを1度に1つずつ受 信した順番に読み出して、メッセージの一部を構成する宛先pidを基にして前 記複数のプロセスのうちいずれに対してメッセージがアドレスされているのかを 判断し、宛先pidに関連付けられたアプリケーション・コードを実行して該メ ッセージを宛先プロセスのプロセス状態のファンクションとして処理し、必要で あれば宛先プロセスのプロセス状態を変更するとともに、必要であれば出力メッ セー ジ・キューの次の利用可能なバッファ位置に送出メッセージを書き込むプロセッ サと、 を具備することを特徴とするデジタル・ネットワーク。 15.さらに、各ノード上で実行される幾つかのプロセスのpidを知るプロセ ス・ネーム・サーバを具備し、前記複数のネットワーク・ノードのうち第1のノー ドが前記複数のネットワーク・ノードのうち第2のノード上におけるプロセスを 識別するために、該第1のノードが該プロセス・ネーム・サーバに対して問い合わ せを送信し、該プロセス・ネーム・サーバは該第2のノード上の該プロセスのプロ セス識別子を伴なう応答をすることを特徴とする請求項14に記載のデジタル・ ネットワーク。
JP50344299A 1997-06-24 1998-06-02 非同期メッセージ処理システム及び方法 Pending JP2002505050A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US88045997A 1997-06-24 1997-06-24
US08/880,459 1997-06-24
PCT/CA1998/000537 WO1998059519A2 (en) 1997-06-24 1998-06-02 Asynchronous message processing system and method

Publications (1)

Publication Number Publication Date
JP2002505050A true JP2002505050A (ja) 2002-02-12

Family

ID=25376329

Family Applications (1)

Application Number Title Priority Date Filing Date
JP50344299A Pending JP2002505050A (ja) 1997-06-24 1998-06-02 非同期メッセージ処理システム及び方法

Country Status (4)

Country Link
EP (1) EP0992142A2 (ja)
JP (1) JP2002505050A (ja)
CA (1) CA2292450A1 (ja)
WO (1) WO1998059519A2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6970945B1 (en) 1999-11-01 2005-11-29 Seebeyond Technology Corporation Systems and methods of message queuing
EP1287439A2 (en) * 1999-11-01 2003-03-05 Seebeyond Technology Corporation Systems and methods of message queuing
CN116155842A (zh) * 2022-12-29 2023-05-23 天翼物联科技有限公司 一种指令消息队列的处理方法、系统、设备及介质
CN115827281B (zh) * 2023-02-02 2023-05-19 广州钛动科技股份有限公司 一种基于轻量级sqs消息处理框架的数据处理方法及其系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4736364A (en) * 1986-03-12 1988-04-05 American Telephone And Telegraph Company, At&T Bell Laboratories Switching system control arrangements

Also Published As

Publication number Publication date
WO1998059519A2 (en) 1998-12-30
CA2292450A1 (en) 1998-12-30
EP0992142A2 (en) 2000-04-12
WO1998059519A3 (en) 1999-03-25

Similar Documents

Publication Publication Date Title
Liskov et al. Implementation of argus
US11132294B2 (en) Real-time replicating garbage collection
JP3006675B2 (ja) 分散コンピューティングのための通信装置及び通信方法
KR0137406B1 (ko) 고장 방지 컴퓨터 시스템
JP2587141B2 (ja) 共用知能メモリを介して結合された複数のプロセッサ間でメッセージを伝達するための機構
JP3659062B2 (ja) 計算機システム
US5452430A (en) System and method for storing persistent and non-persistent queued data and for recovering the persistent data responsive to a system restart
JPH06202883A (ja) プロセス間通信装置及び通信方法
JPH09506727A (ja) 大規模並列処理システムのためのメッセージ機構
US11620215B2 (en) Multi-threaded pause-less replicating garbage collection
JP2001514778A (ja) メッセージ・キューイング・ファシリティを含むネットワーク・トランザクションをメインフレームからインテリジェントな入出力装置にオフロードするシステム及び方法
WO2014090008A1 (zh) 一种任务处理的方法和虚拟机
CN111813522A (zh) 一种虚拟arinc 653仿真验证平台
JP2004536382A (ja) 置換可能なサービス品質機能のあるネットワーク通信チャネルコンポーネントを選択するために、置換可能なコンポーネントを用いるシステム、方法及び製造物
US20020144019A1 (en) Method for transmitting function parameters to a remote node for execution of the function thereon
Bal et al. Performance of a high-level parallel language on a high-speed network
CN110083460A (zh) 一种利用事件总线技术的微内核架构的设计方法
JP2002505050A (ja) 非同期メッセージ処理システム及び方法
Hamilton A remote procedure call system
CN114816678B (zh) 一种虚拟机调度的方法、系统、设备和存储介质
Mullender Process management in a distributed operating system
JP2772068B2 (ja) 引き継ぎ情報のデータ保証処理方法
Mazzucco et al. Engineering distributed shared memory middleware for java
Kakulavarapu et al. Design of the runtime system for the Portable Threaded-C language
JPH08106440A (ja) 分散共有メモリ計算機システム