JP2002505050A - Asynchronous message processing system and method - Google Patents

Asynchronous message processing system and method

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
Japanese (ja)
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/en
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

Abstract

(57)【要約】 状態とタイプによってプロセスが定義される非同期メッセージ処理システム及び方法を提供する。ネットワーク・ノードにおいて受信された入力メッセージは、入力メッセージ・キューに格納されて、到着した順に従って処理される。また、出力メッセージは、出力メッセージ・キューに格納されて、生成された順に従って宛先ネットワーク・ノードに転送される。プロセスにアドレスされた入力メッセージは、処理を完結しプロセス状態を修正する特定のメッセージ処理アプリケーション・コードを呼び出すことによって処理される。プロセス状態の修正は、完全に起こるか又は全く起きないという意味において最小単位であり、プロセス状態を部分的に修正することはない。 (57) [Summary] An asynchronous message processing system and method are provided in which a process is defined by a state and a type. Input messages received at a network node are stored in an input message queue and processed according to the order in which they arrived. Also, the outgoing messages are stored in an outgoing message queue and forwarded to the destination network node in the order in which they were created. Input messages addressed to a process are processed by calling specific message processing application code that completes processing and modifies the process state. Modifying the process state is the smallest unit in the sense that it occurs completely or not at all, and does not partially modify the process state.

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)するには充分となっている。目立った能力を取り消す安 価な方法は、その状態を維持している期間中にプロセスの実現番号を増分するこ とである。勿論、実現番号を用いない実装形態も可能である。Description: FIELD OF THE INVENTION The present invention relates to a distributed asynchronous message processing system and method. BACKGROUND OF THE INVENTION Various models of communication processing for specification and implementation of distributed systems have become popular. Most well-known systems are remote from the ADA rendezvous mechanism, just as they are based on a synchronous model of communication in which the source also suspends until the suspended destination responds. Moving to procedure call. Such a system has significant advantages in practice. Because procedure calls can hide telecommunications, existing local applications can be turned into distributed applications with minimal impact. However, in intrinsic distributed reactive or command and control systems, the synchronization model has several problems. Any system that waits for a specific event and processes back is prone to communication deadlock. In general, since such a deadlock occurs depending on the state of the entire system, an extremely simplified system (ie, a fixed number of finite state machines having only a few states and accurate communication patterns) ) Can only be analyzed. While tightly organizing communications into a client / server hierarchy can avoid deadlocks, it results in a clumsy organization where active objects (ie, spontaneous message sources) cannot communicate directly with each other. Tends to. In particular, peer protocol processing and handling of exceptions and failure conditions are problematic because they involve message flows in the opposite direction to normal communication patterns. After all, even with a high-speed Reduced Instruction Set Computer (RISC), command and control is not possible because of the simple state transitions caused by arriving messages and the short message transmission time. Adjusting the bulk of the system requires milliseconds of CPU time. Delays between distant nodes on the network are measured in milliseconds, and round trip times are often tens of milliseconds. The ratio between the message transmission time between distant nodes and the local message processing time is called the "time constant ratio". The time constant ratio in the above time interval is approximately 10 Three -10 Four Which is already extremely high. The round trip time is dominated by the propagation delay, but does not decrease since it depends essentially on the speed of light. Thus, as the global network grows further, it will increase by an additional factor of 10. However, processing and transmission times can be expected to decrease by at least a factor of 10 in the next few years. As a result, the index of the time constant ratio is 10 Five To a degree. Temporal ratio is a critical parameter that characterizes a distributed system. From daily personal experience, it would be preferable to spend 5 seconds of a telephone call in order to have a 5 minute conversation (time-ratio r in this case is 1/60), but if the call takes 5 minutes (That is, the time constant r is 1), it will be distorted. Furthermore, if the user waits for 5 minutes for a conversation for 5 seconds, the person becomes naturally angry (time constant ratio r is 60). When the time constant ratio r exceeds 1, it means that the waiting process is suspended. If the cost of a context switch is not too high, it will do something else. Thus, a high time constant r can make one think about how many "threads" are needed to keep the processor busy. In the current worlds of local area networks (LANs) and personal computers (PCs), distributed applications (typically having a time constant r of 10 to 100) are slightly running, and a synchronous communication model can be executed. It is. However, the time constant r is 1000, and the time constant r alone is 10 6 That is no longer appropriate. One problem is that the suspension must save execution of the stack, so that in the worst case enough processes or threads must be allocated enough stack space. Thus, the stack area typically ranges from 10 kilobytes to 1 megabyte. In a system in which a relatively large number of "objects" occur simultaneously, depending on the size of the time constant r, excessive or infeasible memory requests may be caused. A second problem is that in current applications, the overhead due to suspension itself is longer than typical transition times. SUMMARY OF THE INVENTION It is an object of the present invention to obviate or mitigate the above-mentioned disadvantages. A first aspect of the present invention is a method for asynchronous message processing in a network node having a processor and a memory, the method comprising a plurality of application codes associated with a process state and identifiable by a pid (process identifier). Maintaining a process in memory for each message received by the processor, wherein the processor is addressed to any of the plurality of processes based on a destination pid that forms part of the message. And process the message as a function of the process state of the destination process by executing the application code associated with the destination pid, changing the process state of the destination process if necessary, and during that time the application task Send if necessary Generating a message, it is an asynchronous message processing method characterized by comprising the steps of: said node forwards the outgoing message. According to a second aspect of the present invention, there is provided a network node for connecting to a digital network. The network node receives an incoming message, stores the received message in an input message queue, and outputs an outgoing message. An interface to the digital network for reading and transferring from the queue, and maintaining in memory a plurality of processes consisting of application code associated with the process state and identifiable by a pid (process identifier); Reading out the messages from the input message queue one at a time in the order in which they were received, and to which of the plurality of processes the message is addressed based on the destination pid that forms part of the message Is determined and associated with the destination pid. The application code to process the message as a function of the process state of the destination process, change the process state of the destination process if necessary, and if necessary, A processor for writing the outgoing message to the buffer location. A third aspect of the present invention is a digital network including a plurality of network nodes, each of which receives an incoming message and stores it in an input message queue. An interface with a digital network for reading and transmitting a message to be sent from an output message queue, and a plurality of processes that can be identified by a pid (process identifier) consisting of application code related to a process state. Maintaining in memory and reading messages from the input message queue one at a time in the order in which they were received, and for any of the plurality of processes based on the destination pid that forms part of the message. Determine if the message is addressed Executing the application code associated with the destination pid to process the message as a function of the process state of the destination process, changing the process state of the destination process if necessary, and And a processor for writing the outgoing message to the next available buffer location in the queue. BRIEF DESCRIPTION OF THE DRAWINGS FIG. 1 is a schematic block diagram of a network according to the present embodiment. FIG. 2 is a block diagram of one node on the network shown in FIG. FIG. 3 is a diagram showing an overall flow of a message in a node according to the embodiment of the present invention. FIG. 4 is a diagram illustrating a shared input buffer ring. FIG. 5 is a diagram showing a typical message syntax. FIG. 6 shows a summary of the kernel data structure and the status registers. FIG. 7 is a diagram showing a cancellation log (trail) mechanism. FIG. 8 is a flowchart showing a kernel loop. Detailed Description of the Preferred Embodiment FIG. 1 shows a network context implementing a system and method according to an embodiment of the present invention. The network context is made up of a plurality of processing nodes 10 interconnected by a digital communication network 20. Communication network 20 may be a local area network, a wide area network, or a global network. The network 20 shall be capable of transmitting digital messages between any processing nodes 10 up to a reasonable maximum size. The network 20 may be either connection-oriented or connectionless media, but preferably has a reasonably low rate of message loss, data corruption, or delivery failure. By using lower layer protocols, many communication technologies can be utilized or applied in the implementation of the present invention. However, as a representative specific example, in this embodiment, it is assumed that a single cell ATM (asynchronous transfer mode) is used. In this case, a single virtual channel exists in each direction between each pair of nodes 10, and a table that maps node identifiers to local virtual channel identifiers exists for each node. Suppose. Further, it is assumed that the quality of service provided is sufficiently low that message corruption will occur such that no upper layer protocol is required. Node structure FIG. 2 illustrates the structure of each node 10. As shown, node 10 has at least access to a high speed local bus 30, a processor or CPU 32, some shared random access memory 34, and a communication network 20 (see FIG. 1). And an intelligent communication adapter 36 to be provided. The communication adapter 36 and the bus 30 are configured to enable direct memory access (DMA) between the communication adapter 36 and a message buffer in the shared memory 34. It is also assumed that the message buffer is visible from the processor 32. In a preferred embodiment of the present invention, normal communication between the processor 32 and the communication adapter 36 shall only occur via the shared memory 34, except under possible exceptional conditions. No interrupt is generated. In addition to the virtual channel between each pair of nodes, each node has a "loop back" channel for itself, and a node can send messages to itself. Such a loop back channel may be implemented in communication adapter 36, emulated in processor 32, or over a communication network. Each processor executes the runtime environment according to the embodiment of the present invention and some application code without the intervention of a standard OS (operating system). It should be understood that the runtime environment can be run in the context of a conventional OS, but the description is significantly more complex. Overview of the real-time environment Further, embodiments of the present invention will be elaborated while considering operation at a single node 10. The runtime environment in the processor 32 is controlled by a kernel that runs on the processor 32 periodically or continuously. The case of “periodic” is an operation method used in the context of the OS, but since the continuous execution is preferable, the latter is assumed in the following description. Each proset 32 also executes "processes" of the application invoked by the kernel. Each process has a lifetime between the time it is created by another process and the time it terminates spontaneously. As used herein, the term "process" refers to application code that executes concurrently with other processes by time-sharing processor time and saving stacks between time-sharings allocated to a particular process. Is different from its traditional meaning, such as a continuous stream of. The “process” referred to in this specification is defined by the following. (1) A process state consisting of various states stored in a shared memory 34 owned by a process existing from the time the process is created until the process is terminated. (2) The process behavior (behavior) is defined. Process types defined by code operating on various states and causing state transitions Again, only the process state and process type definitions exist for the life of the process. The kernel is continuous in the sense that it starts and does not end. Controlled by the kernel while the application process runs. The kernel calls the application process directly. In this sense, the kernel is always running. In a broad sense (at a glance), the kernel takes only one message at a time, received by a particular node, determines which process the message is intended for, Execute the completion code indicated by the type, change to one or more possible states according to the process state, output one or more messages to be sent to other processes, and finally return to the kernel. A sequence of such steps processed for each message is considered to constitute one "state transition" or simply one "transition". The kernel does not process the next message received by a particular node until the state transition associated with the previous message has completed. In fact, the kernel does nothing until a return from the application code executes and a transition occurs. A process is in "active" mode while the application code invoked in connection with a particular process executes. When the application task has completed, the process is in "inactive" mode. During inactivity, the process state and type continue to exist, but the processor does not execute any application code associated with the process and does not cause any possible state changes to the process. Time sharing also completes the transition of application code without the intervention of other processes, so there is no need to perform context switches between processes. It is a preferred feature of the present invention that state transitions are atomic. The minimum unit means that all operations related to the state transition occur or none of them occur. If for some reason all operations associated with the state transition are not completed, the effect on the state of any operation that has already been completed needs to be reverted. The behavior of each process is uniquely determined by the state and process type of the process. The states of different processes do not overlap. The process state of a process can only change due to the receipt of the message and its processing. The state transitions of the process are serialized, forming a strict sequence. Processes exclusively "own" (and are responsible for) state data and storage. The application code associated with the process type completely specifies the state changes and outgoing messages for each incoming message. A successful reply from this code completes the state transition. During the transition, each process goes into inactive mode and waits for the next message. Upon completion of the application code for each transition, a return code is returned to the kernel. The return code is either "commit" indicating that the code was executed successfully, or "abort" indicating that the code was not successfully executed. In the case of a successful return code, a successful state transition occurs. The kernel will perform some "post-transition" processing before transitioning to the next incoming message, which will be explained in more detail later. Process creation, termination, and identification Every process "P" is created as a by-product of the state transition of an existing process "A" on the same processor. P continues to exist while choosing to be independent of A. The process ends when the last message is received, by modifying the completion return code. Such modifications are detected by the kernel and processed during post-transition processing. At this time, the state storage assigned to the termination process is returned to the appropriate memory pool, the process type is returned to the default type, and all messages are discarded. Also, since the realization number (incarnation number) is incremented, all outstanding messages for the completed process are discarded. Both creation and termination of a process are part of the smallest unit of transition. In particular, the generation of P is part of the smallest unit transition for its generating side, A. Since direct creation occurs only locally (ie on the same shared memory), in order to get a spawned remote process, the process must run indirectly via an existing agent. Nevertheless, the agent may impose appropriate security restrictions. Once created, each process has a destination pid (process identifier), and other processes are used to address messages to the process. The destination pid will be described later. To make the destination pid available globally, an initial connection protocol is required. Initially, only the process knowing the pid of the process P and P itself are local sources. The usual way to get the pid of a remote process is to send an initial request to a well-known "name server" process, from which the response contains the desired pid. This applies to both existing processes and newly created processes. The process name of a well-known name server process (at least one for each node) can be handled in two ways, and is preferably used in a combination of the methods. The first is to provide a fixed index (fixed or realization number) for each of the good servers everywhere on all nodes. The second method relies on a common distributed name service based on having a well-known process register itself (the name server itself utilizes the first method). Schematic message flow Messages are the only means of communicating between nodes, whether or not the processes are on the same node. FIG. 3 schematically illustrates the flow of messages on a single node. Each node has a rotating input buffer ring 50 and a rotating output buffer ring 52, both of which share a portion of shared memory (see FIG. 2). It is formed using. The processor 32 executes a kernel 54 and controls execution of an application process 56. The kernel 54 has various functions. Here, the kernel 54 executes a dispatcher function and reads data from the input buffer 50. The application process 56 writes to the output buffer 56. The ordered input stream 58 from all other nodes is merged into a single serial input stream 60. In the case of ATM, the integration is performed somewhere in the absence of the ATM network. In other network environments, the integration is performed in the adapter 36 as shown. The incoming message is inserted into the next empty slot of the rotary input buffer ring 50. The kernel 54 processes messages in the order in which they arrive by asynchronously pulling messages from the input buffer ring 50 and activating the appropriate application processes 56 without the need for any process scheduling. Activation of the appropriate application process 56 will be described in more detail later. The output message is input to a subsequent slot in the rotating output buffer ring 52. Adapter 36 sequentially retrieves messages from output buffer ring 52 and places them in a single serial output stream 62 that includes a sequential stream 64 to all other nodes. It is possible for the adapter to reorder messages between the various streams, but not within a single stream. The rotating input buffer ring 50 and the rotating output buffer ring 52 provide for automatic reuse of free buffers without requiring explicit intervention of the kernel 54 by utilizing a rotating ring mechanism. Things. The input process, code execution, and output process can be desynchronized while allowing the transition execution speed to vary depending on the size of the ring. The load on the system can be represented by the occupancy of each buffer ring 50,52. The size of the buffer rings 50, 52 must be large enough (ie, to the same extent as other loss mechanisms) so that the loss rate due to buffer flooding is acceptably low. Input buffer ring Details of the recording of the input buffer ring 50 or the individual buffers will be described with reference to FIG. Rotating input buffer ring 50 is a data structure in shared memory 34 for processing messages received from communication adapter 36. The rotating input buffer ring 50 is more preferably statically configured as a ring of fixed (maximum) size message buffers (ie, a circularly connected list), such as at node initialization. . By using a static ring structure, it is not necessary to perform a dynamic list operation during the processing period, and the mutual exclusion problem and the problem of clear buffer reuse management can be avoided. Alternatively, buffers may be dynamically added to or deleted from the ring by the processor to adapt to gradual changes in occupancy statistics. Each message buffer contains the address of the next message buffer in the chain. These addresses collectively define where the ring is stored in memory. For a statically configured ring, these addresses are constant. FIG. 4 shows the fields in each message buffer (excluding the address of the next buffer). Each message buffer has a status word 70 used for synchronization, described below, and may also include some additional control information where possible (eg, a virtual channel identifier in the case of ATM). Each message buffer has space to store the body 72 (or content) of the message. The order and contents of the fields in each buffer can be set to suit a particular message protocol or buffering technique. In another embodiment (not shown), the message body and some or all of the dynamic control / status fields are placed in different areas of memory so that only a pointer to the body is written during buffering. You may. Such variations are useful in systems where the virtual memory address used by the processor is different from the physical memory address used by the adapter. This is because, according to this variant, each can have its own static ring-structured pointer (in a different memory address space) on the same (unlinked) message buffer. is there. As shown in FIG. 4, the body of the message 72 includes a destination pid field 74, a source pid field 76, and a data field 78. Messages are addressed to individual processes by having the corresponding pid in their destination pid field 74. The size and structure of the destination pid field 74 and the source pid field 76 are determined according to the addressing requirements for each particular instance in the network. The general structure of the pid field is a node identifier 80 used to identify the node associated with the process, a local pid 82 to identify the process on each node, and a process with a specific local pid 82 And an implementation number 84 that is used as an increment counter that is incremented each time it is generated. The realization number 84 is provided to limit the reuse of the pid or to distribute the process. A particular implementation of a process type is a process instance. The process instance table holds a mapping from the local pid 82 of the destination pid to the information needed to execute the application code associated with the indicated process. In the process instance table, one record 83 is prepared for each local pid 82. The record mainly consists of a code pointer 86 to a location in shared memory that stores application code for processing messages for the process instance, and a status pointer 88 to status information of the process instance. The realization index of pid is also held in field 90 of this record. It may include a pointer to a structure containing the generic attributes of the process type. It may further include (per instance) debug control or other attributes related to performance measurement. These attributes are different for each modification and execution mode (for example, simulation, development, field context). Output buffer ring The output buffer ring is similar to the input buffer ring. Input buffer operation by adapter One function of the communication adapter 36 is, for example, to transfer a valid received message (ie, a cell that is not “empty”) to the buffer pointed to by the state variable input_write_head in the input buffer ring 50 (DMA Transfer). The state variable input_write_head is used in the input buffer ring 50 to point to the next empty buffer. This state variable may be dedicated to the adapter 36 or held on the shared memory 34, but it is assumed that only the adapter 36 can read or rewrite (except at initialization. ). Upon each successful message transfer, adapter 36 sets a flag in the status field in the current buffer to indicate that the buffer is occupied by a valid message and sets input_write_head to the next in the chain. Advance to buffer. For example, another state variable, input_read_head, is maintained by kernel 54 and is used to control the reading of messages from the input buffer ring, as will be explained in greater detail below. Output buffer operation by adapter Another function of the communication adapter 36 is to transfer (via DMA) a valid (ie, "non-empty cell") message written to the output buffer ring 52 to the output communication stream 62. . For example, the state variable output_read_head is used to point to the message to be read from the output buffer ring 52. This state variable may be dedicated to the adapter 36 or may be held in the shared memory 34, but it is assumed that only the adapter 36 can read and rewrite data. except). For each successful message transfer, the adapter 36 sets a flag in the status field of the current buffer to indicate that the buffer is available again, and advances the output_lead_head to the next buffer in the chain. For example, another state variable output_write_head is maintained by the kernel 54 to control the writing of messages to the output buffer ring 52, which will be described in more detail below. Message syntax FIG. 5 shows a typical message syntax. As described above, the message syntax includes a destination pid 74 and a source pid 76 at the beginning of each message. The source pid 76 is automatically stamped for each message by the kernel 74 run time system. Also, the destination pid 74 is inserted by the kernel as part of the send message primitive operation. Application code 56 does not have direct access to any of these fields in the message, but can ask the message originator as an explicit call. The remaining message content (ie, data field 78) is associated with the message marshalling / de-marshalling device, and is ideally integrated with the application programming language. Details of this will not be referred to herein. Typically, it encodes a method 92, a format indicator 94 (such as the number of arguments 96 and the compression type of the signature), a standard machine independent basic type indication (including pid), and some checksum 98. . This format can also be encrypted. Kernel data structure and environment registers FIG. 6 illustrates how a run time system is configured in a particular embodiment. In this embodiment, the kernel maintains a system stack 100 and a trail stack 102 (described below). A series of environment registers are as shown below. mi- "mssage in" = input_read_head: accesses the message source pid and destination pid for messages in the input buffer ring 50. If the message exists, mi.status is true. mi.dest.pid is the destination pid included in the message. in-input byte stream: used to demarshal the code and extract the message fields from the message in the input buffer ring 50. no- "next out" = output_write_head: the next available output buffer in the output buffer ring 52 to set the destination pid and source pid. out-output byte stream: used by marshalling code in output buffer ring 52 to format the output message. pe-process entry: accesses all process instances and type attributes via process instance table 85. sp-stack pointer: start of system stack 100 te-trail stack end: end of undo log trail stack 102 pc-program counter: points to the next executable instruction in the execution code. Thus, the variables associated with the input and output buffer rings have been described. The main advantage of the system stack and the trail stack is that in the whole system, only one is needed for each processor. The illustrated memory pool 104 is an area in the memory 34 (see FIG. 2) that is reserved for process state storage. The code memory 106 is an area in the shared memory 34 for storing application codes. An active timer list 112 (managed by the kernel) is also located in shared memory 34. The code pointer 86 is shown pointing to the location in the code memory 106 where the application code is stored from the record pointed to by pe in the process instance table 85. State pointer 88 is shown pointing to the location in the state memory 104 where the process state for that process instance was stored from the same record in process instance table 85. The process state may include one or more timer pointers 114 for the timers in the active timer list 112. Cancel log mechanism There are several ways to implement the minimum unit of state transition. Assuming that only a few states are updated by most messages, and that the real need to recover the old state is extremely rare, all state variables that have changed, as illustrated in FIG. Software can be implemented efficiently based on logging of old values of. For this purpose, a single system resource of sufficiently large size, called the trail stack 102, is required. The trail stack 102 is composed of an array (or stack) composed of (address, value) pairs. Initially, and just before each application task is executed, the environment register te (trail end) is set to point to the start position 103 of the trail stack 103. When writing a state word during the execution of an application task, the address (addr) of the pointed location and the current value (oldval) must first be written to the trail stack 102. (Support for language compilers and code generators allows this requirement to be fulfilled efficiently.) When the transition is completed (ie, the application task has completed successfully and the process is in suspended mode) Te is reset to the top of the trail stack 102 and is ready for the next message. When a transition needs to be interrupted, the trail is processed in reverse order (from the back), restoring the old value to the location pointed to by process state memory 104. Such a process is realized, for example, by the following code. New values written during the failed transition are discarded. Trailing applies to all state variable updates. State variables consist of those pointed to by the process's state pointer in the memory segment and arrive from there. Updating the state variables is related to the timer area (creating, resetting, and deleting timers used by the process; the timer will be described in detail later), the process instance table (related to creating a process), and memory • Include changes in the pool (related to dynamic memory allocation). At present, timer operations, process creation, and memory allocation are all automatically included in the atomic action. Trailing is not required for updating the stack, or the output message buffer, or other volatile variables. Of course, for optimization, initialization (construction) code for the state object is required. Of course, it should be appreciated that other mechanisms can be used to achieve the smallest unit without departing from the spirit of the invention. Kernel dispatch process Processor 32 executes the kernel during application code execution. The kernel has a main loop that runs only once per input message. FIG. 8 illustrates the kernel loop in the form of a flowchart. The kernel loop is described in the above context, which introduces the kernel data structure and environment registers described with reference to FIG. As already mentioned, the kernel has an internal state variable input_read_head (or mi) that points to the next available message in the input buffer 50. The kernel executes the idle task while the status register mi.status is equal to zero indicating that the input buffer is empty (exit branch Yes at block 200 and proceed to block 202). The function of the kernel is to process incoming messages in the order of arrival as quickly as possible. If the incoming message arrives (go to branch No in block 200) and if the status flag field of the message buffer pointed to by input_read_head indicates that it is a valid message, the kernel will return the destination of the message. mi. Dest, derive the local pid from the destination pid, verify that the local pid is in the correct range, and use it to access the record in the process instance table 85. The field of the process instance record contains the realization index, which must exactly match the destination pid derived from the incoming message. If the derived realization index is out of range, the input message is considered invalid (go to branch No at block 204), the error counter is incremented (block 206), and its status field is cleared. By doing so and advancing the input_read_head pointer (block 222), the message is discarded. If the message pid is valid (go to branch Yes at block 204), the kernel sets the environment variables for process execution and atomic support, and by means of a code pointer in the process instance table. Call the application code pointed to. If the application code needs access, one (conceptual) environment variable may provide the message origin pid. (However, applications rarely need to query the origin of the message, it is sufficient to simply copy the pointer to the message source field into a hidden environment variable (preferably a register), It is even effective, and if the application needs it, it is sufficient to use an indirect memory reference to retrieve the source field.) Similarly, the application code is available at this location. When requesting information (eg, pid or process type attributes), a pointer to the process instance table record is left in an environment variable (possibly in a register). To invoke the application code, a status pointer 88 and a code pointer 86 are read from the process instance table 85, fetched into registers according to the call convention, and / or pushed onto the stack. The command field of the method or message must be derived. Also, a pointer to the next field of the message after this command, the input byte stream register, is fetched into the register and / or pushed onto the stack. A copy (kernel local) of output_write_head is made to support the smallest unit for the output message (block 210). The application code is then invoked, calling the application code pointed to by the code pointer, passing the input byte stream in and the status pointer as parameters, and expecting a return code or result "res" ( Block 212). When the application code is returned to the kernel, its return code res (either in a register or at the top of the stack, as appropriate) may be "commit" or "abort". Is shown. If the code indicates that a decision has been made to abort (No at block 214), the kernel resets output_write_head from its locally stored value and cancels all output messages. Then, the initial state of the process needs to be restored (block 216). The input message is then discarded by clearing the status field and advancing input_read_head to the next message (block 222). If the return code indicates "commit" (block 214, Yes), all output messages generated by the application code will start with the stored value of output_write_head and return to the current value of output_write_head. Continuing, the status field must be set to be processed by the communication adapter. The trail can be reset simply by assigning trail_start to trail_end (block 218). In the special case of a process terminating, the pid and process state associated with the process are deallocated (block 220). Eventually, the input message is discarded by clearing the status field and advancing the input_read_head to the next input message (block 222). If a software exception occurs during the execution of the application code (arrow 223), appropriate diagnostic information can be obtained (block 224) and the system stack returns to the normal time (ie, the application code The call is reset to a point just before the call) and control transfers to the abort process (block 216) as described above. The related diagnostic information is roughly composed of the following ascending order of size and descending order of utility. (0) error type and program counter (1) current input message (2) (complete) current process state (3) complete input buffering (both recently processed messages and near future messages) As an example of a software exception, for each type of process, there may be a maximum allowed time for a process transition for that type. If the transition exceeds this time limit, an exception is raised and processed as described above. In the embodiments described herein, there is no difference in processor overhead depending on whether the message is external or completely internal. If the internal message is optimized to eliminate potential copy operations from the output buffer to the input buffer, this difference will at most be the DMA cost of the copy. To optimally implement (in assembler language) a kernel loop as described above, about 50 machine language instructions are sufficient, and on a typical workstation the kernel overhead is only a fraction of a microsecond. No. The process transition may generate an output message for which a response is required. Such a process transition is completed (as usual) and the process enters an "inactive" mode. When the expected response is received, it is placed in the input buffer ring and processed by activating the original process in the usual manner. Since it is assumed that messages may be lost, provisions are made for the timer to detect such lost messages. One possible general rule is that processes waiting for a response to a message use a timer to detect a lost message. Such a process is said to be in a "transient state", and if either the original message or its response is lost, the process will instead endlessly enter such a state. Can stay. When the timer expires, a timeout message is sent, triggering some recovery action by the process. The type of recovery action that can be taken depends on the type of process involved and the nature of the failure. For example, in the case of an exchange between "persistent" processes (processes with backups or processes that are automatically regenerated), the action is the partner (by sending a message) May be checked, the partner's name may be rebound, or it may be done continuously until successful. In the case of a bunch of processes (eg, a process that manages call setup and transactions), simply aborting the action with some entry created by external means to the process. In systems where a large number of processes enter the interstitial state and almost always leave the state, it is important to keep the cost of both setting and canceling the timer very low. In the present specification, it is assumed that the timeout value is an arbitrary value, and a timeout value considerably larger than a normal response time is used. The actual value of the timeout is not particularly important, and there is usually no need to provide an exact timeout delay. In such a situation, in order to achieve extremely low cost, a data structure of the following format is used. The timer can be created or destroyed by a process using the following two processing procedures. The timer pointer is maintained in the process state. This process creates a new timer record and returns its pointer. The owner field gets the id of the currently executing process, and a timer record is attached to the global timer chain. (If a different clock resolution is required, that resolution is an input parameter.) Such a timer chain is a global variable managed by the kernel. The above removes the timer from the global timer chain (it must be a dual link chain for efficiency) and then deallocates the timer. By using the following macros, you can set and cancel timers at very low cost. Configured to perform a timer scan (between application process executions) that runs on all chained timers while decrementing non-negative value fields by regular interrupts by the real-time clock can do. Any value fields that go to zero result in a message being sent to the owner process. In the present embodiment, it is assumed that the timeout message has the command "timeout", so that the resulting action is purely state driven. As an alternative, set_timer can include the message code used on the timeout message. Many modifications and variations of the present invention are possible in light of the above teachings. Therefore, it should be noted that the invention may be practiced otherwise than as specifically described herein without departing from the scope of the appended claims. Although a particular mechanism for implementing the smallest unit of state transition has been described herein, it should be noted that other mechanisms may be utilized. A process ID (pid) can be used to indicate the capability of the process. Having a pid gives an entity the right to send all messages accepted by the associated process, thereby demonstrating the ability to be. In the embodiments described herein, the pid is binary and can be stored in any convenient data structure, passed freely in a message, etc. Also, there is no need for any controls or restrictions on the ability to deliver. In such a system, previously authorized capabilities can only be revoked by destroying the process and then creating a new process with another pid and performing that function if necessary. Node reinitialization is an extreme example of this. A practical assumption is that a mild and cooperative environment is credible in that all nodes are not malicious, but can malfunction under fault conditions. The realization number fills the other unused bits of the pid, but does not reuse the same process id during some time interval, and is therefore sufficient to purge the old stored pid. It has become. An inexpensive way to undo prominent capabilities is to increment the realization number of the process while maintaining its state. Of course, a mounting form that does not use the realization number is also possible.

【手続補正書】特許法第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に記載のデジタル・ ネットワーク。[Procedure of Amendment] Article 184-8, Paragraph 1 of the Patent Act [Submission date] August 20, 1999 (1999.8.20) [Correction contents]                                The scope of the claims 1. Asynchronous messages in a network node with processor and memory Processing method,   Note the application code for multiple application tasks Storing it in the   While maintaining a plurality of process states in the memory, each process state is Each process state is associated with one of the application tasks by a pid (process Identifier), and   The node receives an input message, each containing a particular one of the pids. Receiving,   For each input message received, the processor will Identifying an application task associated with a particular one of the pids Execute as a function of a particular process state identified by the Steps A method for processing an asynchronous message, comprising: 2. Further comprising the step of making a change to the particular process state. 2. The asynchronous message processing method according to claim 1, wherein 3. further,   During execution, the steps by which the application task generates output messages ,   After the application task has completed successfully, the node Transferring the page, 2. The method according to claim 1, further comprising: 4. In addition, the interface forms part of the node that receives incoming messages And store them in the input message queue in the order in which they were received Comprising the steps of:   The processor executes the associated application without interruption until completion Read the message stored in the input message queue. And process them one at a time, 2. The method of claim 1, wherein: 5. further,   Application tasks output messages in the order in which they were created Storing in a message queue;   In response to the application task completing successfully, Table that the messages generated by the solution task can be forwarded Storing an indication in the message queue; With   The interface sends a message containing an indication that it can be forwarded. Read from the output message queue and transfer one at a time; The method of claim 4, wherein: 6. Each process has a process type that identifies the associated application task. 2. The asynchronous message processing method according to claim 1, wherein the asynchronous message processing method has a loop definition. 7. The processor creates a new process to create a new process instance. 7. The method according to claim 6, wherein a process state is assigned to each of the memories. Asynchronous message processing method. 8. The process state is a past value that existed before the application task started Consists of multiple state variables with   All states in which the processor has been modified by application tasks Logging a past value for the variable;   If the application task is completed, aborted, or an exception Ending with   When the application task terminates in either aborted or exceptional form Recovering the modified state variable to a previous value; 2. The asynchronous message processing method according to claim 1, further comprising: . 9. For all state variables modified by the application task The step of logging past values is a step in which the processor causes each past value and its Address as the trail stack pointed to by the trail stack pointer. To a location in memory allocated by Is realized by incrementing   If the application task is completed and completed, the processor Reset the trail stack pointer,   If the application task is aborted or terminated abnormally, the processor Restores each of the past values in the trail stack to the original address in the memory Do The method of claim 8, wherein the asynchronous message processing method comprises: 10. Messages stored in the output message queue by the application task The message is only forwarded when the application task has completed and completed. The method according to claim 8, wherein the asynchronous message processing method comprises: 11. The incoming message is a send identifying the process that sent the message 2. The asynchronous message processing method according to claim 1, further comprising a source pid. 12. Input message queue and output message queue are stored in the memory And accessible by the processor and the interface Accessible by direct memory access by All communication and control between interfaces is done only through these queues The asynchronous message processing method according to claim 5, wherein: 13. For each pid, the location of the corresponding process state in the memory and the associated application Process instance to map the location of the 2. The asynchronous message as claimed in claim 1, wherein a distance table is used. Page processing method. 14. The execution of application tasks is a kernel task that calls them directly Controlled by   Message generated by application task associated with specific pid And then forwarded by the node and expect a response to the input message. To wait, the application task starts a timer and the application Execution to completion and control of kernel tasks A kernel task decrements it periodically, and   When the timer expires, the kernel task addresses the particular pid. Generating an encrypted timeout message; 2. The asynchronous message processing method according to claim 1, further comprising: . 15. A network node for connecting to a digital network,   Receives incoming messages and stores them in the input message queue The message to be sent is read from the output message queue and transferred. Digital network interface,   Stores application code for multiple application tasks And run to store multiple process states Memory that can be   The process state is maintained in the memory, and each process state is stored in a pid (process identification). Each pid is identified by one of the application tasks And receive messages one at a time from the input message queue. Read in the order in which the A particular task identified by the pid of the input message Can be run as a function of state to execute without interruption Rup With the Rosessa, A network node comprising: 16. The processor further changes the specific process state, Writes the output message to the next available buffer location in the output message queue The network according to claim 15, wherein the network can be operated so as to input data. Work node. 17. A digital network consisting of multiple network nodes , Each network node   Receives incoming messages and stores them in the input message queue The message to be sent is read from the output message queue and transferred. Digital network interface,   Stores application code for multiple application tasks And run to store multiple process states Memory that can be   The process state is maintained in the memory, and each process state is stored in a pid (process identification). Each pid with one of the application tasks. Associate and receive messages one at a time from the input message queue Read in the order, the application associated with the pid of the input message Task is identified by the pid of the input message. Executes without interruption as a state function and changes the state of that particular process Output message and the next available buffer in the output message queue. A processor operable to write to the buffer location; A digital network, comprising: 18. In addition, a process that knows the pids of several processes running on each node A first name node of the plurality of network nodes. A process on a second of the plurality of network nodes The first node queries the process name server to identify And the process name server sends the process name of the process on the second node. 18. The digital communication device according to claim 17, wherein the response is performed with a access identifier. network.

───────────────────────────────────────────────────── フロントページの続き (72)発明者 エリック・ビアマン カナダ国,ケー2ピー 2ジー2,オンタ リオ,オタワ,1701―71 サマセット ス トリート ダブリュー────────────────────────────────────────────────── ─── Continuation of front page    (72) Inventor Eric Bierman             Canada, K2P2G2, Onta             Rio, Ottawa, 1701-71 Somerset             Treat W

Claims (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に記載のデジタル・ ネットワーク。[Claims] 1. Asynchronous messages in a network node with processor and memory Processing method,   The pid (process i) consists of application code associated with the process state. dentifier (process identifier) in memory Steps to maintain;   A node receiving an input message;   For each message received, the processor forms part of the message. To any of the plurality of processes based on the destination pid And determine the application code associated with the destination pid To process the message as a function of the process state of the destination process. Modifying the process state of the destination process if necessary;   Steps in which the application task generates outgoing messages during execution When,   The node forwarding the outgoing message; A method for processing an asynchronous message, comprising: 2. In addition, the interface forms part of the node that receives incoming messages And store them in the input message queue in the order in which they were received Comprising the steps of:   The processor reads a message stored in the input message queue. Process one at a time, 2. The method of claim 1, wherein: 3. In addition, the application code generates output messages in the order in which Therefore, there is the step of storing in the output message queue,   The interface reads a message from the output message queue And transfer one at a time, The method according to claim 2, wherein 4. Each process has a process type that identifies the associated application code. 2. The asynchronous method according to claim 1, further comprising storing the loop definition in a memory. Message processing method. 5. The processor creates a new process to create a new process instance. 5. The method according to claim 4, wherein a process state is assigned to each of the memories. Asynchronous message processing method. 6. The process state is a past value that existed before the start of the application code Consists of multiple state variables with   further,   The processor has been modified by application code during the transition period Logging past values for all state variables;   The application code is in any form: completed, aborted, or exception Ending with   If the application code terminates in either aborted or exceptional form Recovering the processor by modifying the state variable to a past value; , 2. The method according to claim 1, further comprising: 7. For all state variables modified by the application code The step of logging past values is a step in which the processor executes each past value and its Address as the trail stack pointed to by the trail stack pointer. To a location in memory allocated by Is realized by incrementing   If the application code completes and terminates, the processor Reset the trail stack pointer,   If the application code is aborted or exceptionally terminated, the processor Restores each of the past values in the trail stack to the original address in the memory You , 7. The method according to claim 6, wherein: 8. Messages stored in the output message queue by application code Messages are only transferred when the application code has completed and finished 7. The method according to claim 6, wherein: 9. The input message is the sender that identifies the process that sent the message The asynchronous message processing method according to claim 1, further comprising a pid. 10. Input message queue and output message queue are stored in the memory And accessible by the processor and the interface Accessible by direct memory access by All necessary normal communication and control between interfaces 4. The method according to claim 3, wherein the method is performed only. 11. Each pid is a location of the corresponding process state in the memory or an application. Process instance to map to the location in memory of the code The asynchronous message processing according to claim 1, wherein a table is used. Method. 12. further,   Messages are generated by specific processes and subsequently forwarded by nodes. And the particular process expects a response to the input message The process starts a timer and the kernel decrements it periodically When,   When the timer expires, the processor sends a timeout message to the feature. Sending to a predetermined process; 2. The method according to claim 1, further comprising: 13. A network node for connecting to a digital network,   Receives incoming messages and stores them in the input message queue The message to be sent is read from the output message queue and transferred. Digital network interface,   The pid (process i) consists of application code associated with the process state. dentifier (process identifier) in memory Maintain and receive messages one at a time from the input message queue. Read out in the order in which they were received, and based on the destination pid that Which of the multiple processes the message is addressed to Determines and executes the application code associated with the destination pid to Process the message as a function of the process state of the destination Change the process state of the destination process if any, and output messages if necessary. Write the outgoing message to the next available buffer location in the message queue. With Sessa, A network node comprising: 14. A digital network consisting of multiple network nodes , Each network node   Receives incoming messages and stores them in the input message queue The message to be sent is read from the output message queue and transferred. Digital network interface,   The pid (process i) consists of application code associated with the process state. dentifier (process identifier) in memory Maintain and receive messages one at a time from the input message queue. Read out in the order in which they were received, and based on the destination pid that Which of the multiple processes the message is addressed to Determines and executes the application code associated with the destination pid to Process the message as a function of the process state of the destination Change the process state of the destination process if any, and output messages if necessary. Sey The processor that writes outgoing messages to the next available buffer location in the queue. And A digital network, comprising: 15. In addition, a process that knows the pids of several processes running on each node A first name node of the plurality of network nodes. A process on a second of the plurality of network nodes The first node queries the process name server to identify And the process name server sends the process name of the process on the second node. 15. The digital communication device according to claim 14, wherein the response is performed with a access identifier. network.
JP50344299A 1997-06-24 1998-06-02 Asynchronous message processing system and method Pending JP2002505050A (en)

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 (en) 2002-02-12

Family

ID=25376329

Family Applications (1)

Application Number Title Priority Date Filing Date
JP50344299A Pending JP2002505050A (en) 1997-06-24 1998-06-02 Asynchronous message processing system and method

Country Status (4)

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

Families Citing this family (3)

* 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
AU2620701A (en) * 1999-11-01 2001-05-14 Seebeyond Technology Corporation Systems and methods of message queuing
CN115827281B (en) * 2023-02-02 2023-05-19 广州钛动科技股份有限公司 Data processing method and system based on lightweight SQS message processing framework

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
EP0992142A2 (en) 2000-04-12
WO1998059519A2 (en) 1998-12-30
WO1998059519A3 (en) 1999-03-25
CA2292450A1 (en) 1998-12-30

Similar Documents

Publication Publication Date Title
Liskov et al. Implementation of argus
KR0137406B1 (en) Fault tolerant computer system
JP3006675B2 (en) Communication device and communication method for distributed computing
Das et al. GTW: a time warp system for shared memory multiprocessors
JP2587141B2 (en) Mechanism for communicating messages between multiple processors coupled via shared intelligence memory
JP3659062B2 (en) Computer system
JPH06202883A (en) Equipment for communication between processes and method therefor
US11132294B2 (en) Real-time replicating garbage collection
US11620215B2 (en) Multi-threaded pause-less replicating garbage collection
JPH09506727A (en) Message Mechanism for Large Scale Parallel Processing System
JP4171910B2 (en) Parallel processing system and parallel processing program
JP2001514778A (en) System and method for offloading a network transaction including a message queuing facility from a mainframe to an intelligent input / output device
US7028313B2 (en) Method for transmitting function parameters to a remote node for execution of the function thereon
CN114756357A (en) Non-blocking distributed planned task scheduling method based on JVM (Java virtual machine)
JPH10307732A (en) Message transmitting method
Bal et al. Performance of a high-level parallel language on a high-speed network
JP2002505050A (en) Asynchronous message processing system and method
Tamura et al. A real-time operating system supporting distributed shared memory for embedded control systems
Hamilton A remote procedure call system
US7320044B1 (en) System, method, and computer program product for interrupt scheduling in processing communication
US20090019259A1 (en) Multiprocessing method and multiprocessor system
Mazzucco et al. Engineering distributed shared memory middleware for java
Mullender Process management in a distributed operating system
Adebayo et al. A performance study of client-broker-server systems
JP2772068B2 (en) Data assurance processing method for inherited information