(57)【特許請求の範囲】
【請求項１】
制御回路を具える通信システムであって、該制御回路が、
メッセージベースのオペレーティングシステム、アプリケーションソフトウェア及びアプリケーションソフトウェアを交換する手段を含み、且つ
アプリケーションソフトウェアが交換される時に、置換されるべき古いソフトウェアコンポーネントが状態転送を遂行するようにし、一定の点で停止させて有効なメッセージを新しいソフトウェアコンポーネントに送るようにする
通信システムにおいて、
アプリケーションソフトウェアが、少なくとも１つのアプリケーションスレッド及び交換スレッドを有するプロセスを少なくとも含み、古いプロセスのアプリケーションスレッドが交換点で停止した後に、交換されるべき古いプロセスが少なくともその状態を集めるために供給され、更に、古いプロセスの交換スレッドが少なくとも状態を交換ポートを通して新しいプロセスに転送するために用いられることを特徴とする通信システム。
【請求項２】
アプリケーションスレッドが、少なくとも交換されるべき古いプロセスのアプリケーションスレッドの状態を集めるための第１部分を持ち、且つ集められた状態を古いプロセスの交換スレッドへ送るために用いられ、更に、新しいプロセスのアプリケーションスレッドが、古いプロセスの交換スレッドから状態を引き継ぐため及び状態に関するオブジェクトを再構成するための第２部分を持つことを特徴とする請求項１に記載の通信システム。
【請求項３】
制御回路が、プロセスをロードしスタートするため及び新たにスタートしたプロセスが古いプロセスに代わるべきか否かを認識するために用いられる他のソフトウェアコンポーネントとして置換サーバーを含むことを特徴とする請求項１又は２に記載の通信システム。
【請求項４】
古いプロセスを交換するために用いられる新しいプロセスのロード及びスタートの後、正規のプログラムルーティンをスキップし、先ず古いプロセスの交換点に対応する交換点へのジャンプが行われることを特徴とする請求項１乃至３のいずれか１項に記載の通信システム。
【請求項５】
複数のプロセスが交換されるべき場合には、これらのプロセスが連続的に交換されることを特徴とする請求項１乃至４のいずれか１項に記載の通信システム。
【請求項６】
新しいソフトウェアコンポーネントを置換サーバーへ送信媒体を介して送るためにメンテナンスデバイスが用いられることを特徴とする請求項１乃至５のいずれか１項に記載の通信システム。
【請求項７】
少なくとも１つのコンピュータを具えるコンピュータシステムであって、
メッセージベースのオペレーティングシステム、アプリケーションソフトウェア及びアプリケーションソフトウェアを交換する手段を含み、且つ
アプリケーションソフトウェアが交換される時に、置換されるべき古いソフトウェアコンポーネントが状態転送を遂行するようにし、一定の点で停止させて有効なメッセージを新しいソフトウェアコンポーネントに送るようにする
コンピュータシステムにおいて、
アプリケーションソフトウェアが、少なくとも１つのアプリケーションスレッド及び交換スレッドを有するプロセスを少なくとも含み、古いプロセスのアプリケーションスレッドが交換点で停止した後に、交換されるべき古いプロセスが少なくともその状態を集めるために供給され、更に、古いプロセスの交換スレッドが少なくとも状態を交換ポートを通して新しいプロセスに転送するために用いられることを特徴とするコンピュータシステム。
【請求項８】
メッセージベースのオペレーティングシステム、アプリケーションソフトウェア及びアプリケーションソフトウェアを交換する手段を含み、アプリケーションソフトウェアが交換される時に、置換されるべき古いソフトウェアコンポーネントが状態転送を遂行するようにし、一定の点で停止させて有効なメッセージを新しいソフトウェアコンポーネントに送るようにする、システムのためのソフトウェアコンポーネントを交換する方法において、
アプリケーションソフトウェアが、少なくとも１つのアプリケーションスレッド及び交換スレッドを有するプロセスを少なくとも含み、古いプロセスのアプリケーションスレッドが交換点で停止した後に、交換されるべき古いプロセスが少なくともその状態を集めるために供給され、更に、古いプロセスの交換スレッドが少なくとも状態を交換ポートを通して新しいプロセスに転送するために用いられることを特徴とする方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、制御回路を具える通信システムであって、該制御回路が、
メッセージベースのオペレーティングシステム、アプリケーションソフトウェア及びアプリケーションソフトウェアを交換する手段を含み、且つ
アプリケーションソフトウェアが交換される時に、置換されるべき古いソフトウェアコンポーネントが状態転送を遂行するようにし、一定の点で停止させて有効なメッセージを新しいソフトウェアコンポーネントに送るようにする
通信システムに関する。
【０００２】
通信システムは、ソフトウェアを長期間実際に連続的に使用することができるコンピュータシステム又は制御回路を含む。ソフトウェアにエラーがある場合、或いは新しい要求がある場合、或るソフトウェアコンポーネントを更新しなければならない場合がある。このような場合には通信システムの休止時間を最小にする必要がある。
【０００３】
スイッチングシステムのソフトウェアコンポーネントを交換する際に実際上休止時間のない通信システムがUS-A-5,155,837号から既知である。交換する前に、古いソフトウェアが動作している間に、先ず、全てのレジスタ、プロセス及びメモリーユニットの内容及び状態を特別なメモリーにセーブする（７欄30乃至36行）。次にソフトウェアの古いバージョンを第１部分にロードする。新しいソフトウェアを第２部分に連続的にロードする。新しいソフトウェアのロードが完了しテストか終了した後、全てのレジスタ、プロセス及びメモリーユニットの内容及び状態をメモリーから新しいソフトウェアに転送する。次にこの新しいソフトウェアを動作させる。しかしながら、従って、新しいソフトウェアは、古いソフトウェアが停止したプロセス点ではなく、定められたプログラム点で動作を開始する。更に、個々のソフトウェアモジュール又はソフトウェアコンポーネントが交換されるのではなく、閉じたソフトウェアが交換される。
【０００４】
更に、文献「"Elektrisches Nachrichtenwesen",第64巻第４号、1990年、第 327乃至333 頁」は、例えばスイッチングセンターの動作中におけるソフトウェアコンポーネントの交換を開示している。この交換の場合、システムが古いソフトウェアコンポーネントに必要な状態転送を遂行させる。予め定められた同期点に到達すると、古いソフトウェアコンポーネントが停止し、古い方から新しいソフトウェアコンポーネントにメッセージが送られる。新しいソフトウェアコンポーネントがスタートし、古いソフトウェアコンポーネントが停止し、除去される。交換のために具えられるプログラムの詳細な構成については、この文献からは不明である。
【０００５】
【発明が解決しようとする課題】
従って、本発明の目的は、この手順の間は短時間の遅延時間を除いて動作が制限されない、実現可能なソフトウェアコンポーネントの交換手順を提供することにある。
【０００６】
【課題を解決するための手段】
上記の目的は、冒頭の文節で述べた型の通信システムにおいて、アプリケーションソフトウェアが、少なくとも１つのアプリケーションスレッド及び交換スレッドを有するプロセスを少なくとも含み、古いプロセスのアプリケーションスレッドが交換点で停止した後に、交換されるべき古いプロセスが少なくともその状態を集めるために供給され、更に、古いプロセスの交換スレッドが少なくとも状態を交換ポートを通して新しいプロセスに転送するために用いられることによって達成される。
【０００７】
本発明による交換手順は、例えば複数のスレッド（連続的に実行されるプログラム部分）を含み、それらの間に交換を制御するための交換スレッドが存在するプロセスに関する。本発明によれば、それぞれの古いプロセスが停止したプログラム点（交換点）で新しいプロセスがスタートする。更に、古いプロセスの全ての状態が、古いプロセスの交換スレッドを介して新しい状態に転送される。しかしながら、これは、ソフトウェアコンポーネント間でメッセージを交換することを可能にするオペレーティングシステム（例えばコーラスCHORUS）を具えるシステムにのみ適用することができる。従って、メッセージは、以後ポートと称するソフトウェアインタフェースを介して種々のプロセス間で交換される。従って、状態は、古いプロセス及び新しいプロセスの交換ポートを介して交換される。
【０００８】
プロセスの交換は、他のプロセスに影響を与えないように行われる。交換後には、他のクライアント（他のプロセス）から到着するメッセージは新しいプロセスに送信され更に処理される。交換は処理の間の僅かな遅延が存在するだけで行われる。実用的な研究によれば、この遅延は数ミリ秒の範囲である。
【０００９】
通信システムは、コンピュータシステム、スイッチングセンター、コンピュータネットワーク、又は例えばビデオオンデマンドサーバーのようなサーバーであってもよい。コンピュータシステムは、少なくともその中のソフトウェアコンポーネントが交換されるコンピュータを含む。
【００１０】
アプリケーションスレッドは、少なくとも交換されるべき古いプロセスのアプリケーションスレッドの状態を集めるための第１部分を持ち、且つ集められた状態を古いプロセスの交換スレッドへ送るために用いられる。新しいプロセスのアプリケーションスレッドが、古いプロセスの交換スレッドから状態を引き継ぐため及び状態に関するオブジェクトを再構成するための第２部分を持つ。
【００１１】
プロセスの交換は置換サーバーによって開始される。このサーバーは、別のソフトウェアコンポーネントとして制御回路に含まれ、プロセスをロードしスタートさせるため及び新たにスタートしたプロセスが古いプロセスに代わるべきか否かを認識するために用いられる。メンテナンスデバイスが送信媒体を介して新しいプロセスを置換サーバーへ送る。
【００１２】
複数のプロセスの交換が行われる場合はそれらが連続的に交換される。従って先ず最初のプロセスが交換され、次に以後のプロセスが続く。複数のプロセスの交換が行われる場合は制御を置換サーバーに渡すことができる。
古いプロセスを交換するために用いられる新しいプロセスがロードされ、スタートすると、正規のプログラムルーティンをスキップし、先ず古いプロセスの交換点に対応する交換点へのジャンプが行われる。
【００１３】
本発明は、更に、少なくとも１つのコンピュータを含むコンピュータシステム及びソフトウェアコンポーネントを交換する方法に関する。
本発明のこれら及び他の観点は、以下に説明する実施例を参照することによって明瞭且つ明快になる。
【００１４】
【発明の実施の形態】
図１はコンピュータ１及びメンテナンスデバイス２を具えるコンピュータシステムを示す。コンピュータは、ハードウェアコンポーネント３、オペレーティングシステム４、アプリケーションソフトウェア５及び置換サーバー６を含む。オペレーティングシステム４は、メッセージ（例えばオペレーティングシステムに基づくメッセージ）を介して行うアプリケーションソフトウェア５のソフトウェアコンポーネント間の通信を可能にする。従って、メッセージ又はデータがソフトウェアインタフェースを介して交換される。以下においては、ソフトウェアインタフェースをポートと称する。
【００１５】
置換サーバー６はソフトウェアプログラムであり、それによりアプリケーションソフトウェア５のコンポーネントが交換される。交換されるべきソフトウェアコンポーネントは種々のスレッドを含むプロセス（アクター）である。スレッドは、プログラムの中の自律的に連続的に走行する部分である。図１は、円によって個々のソフトウェアコンポーネントを示している。円の間の結合は、ソフトウェアコンポーネント間のメッセージの流れを示している。
【００１６】
メンテナンスデバイス２は、リモートコンピュータであってもよく、それから新しいソフトウェアコンポーネントが送出される。従って、新しいソフトウェアコンポーネントについて、このコンピュータで開発されテストされることが考えられる。新しいソフトウェアコンポーネントを送信するために、既知の送信媒体及びプロトコルを用いることができる。例えば、電話ネットワークによる送信が可能である。しかしながら、（例えばローカルメンテナンスデバイス（ラップトップ）により）新しいソフトウェアコンポーネントをコンピュータ１に直接ロードすることもできる。
【００１７】
図２はコンピュータの他の実施例を示す。このコンピュータシステムは、ハードウェアインタフェース（例えばイーサネットインタフェース）によって相互に結合されている種々のノード（例えばパーソナルコンピュータ、ワークステーション等）を有するローカルエリアネットワークとして構成されている。図２は、例として種々のプロセス９を含むそれぞれのアプリケーションソフトウェアを含むネットワークの２つのノード７及び８を示している。このようなプロセスは、プロテクトされたアドレス空間を持ち、多数のポート及び、上述のように、図２に波線で示されている種々のスレッドを管理し、それらのポートを通してプロセスが他のプロセスとメッセージを交換する。プロセス９は、ポート10を介してメッセージ11のみを送信し受信することができる。ノード７及び８は、ネットワークの他のノード（図示されていない）にネットワークリンク30を介して結合される。
【００１８】
プロセスのスレッドは、更に、それら自身のそれぞれのポートを介してメッセージを交換することができる。更に、例えばミューテックスMutex 及びセマフォールsemaphore によってもメッセージを交換することができる。ミューテックス（相互排他）は、一定の範囲には１つのスレッドのみアクセスすることができるメソッドを表す。例えばデータがスレッドからプリンターに送信される場合である。この場合、スレッドがミューテックスを設定すると、このスレッドのみがプリンターにデータを送信することができる。従って他のスレッドはデータをプリンターに送ることができない。セマフォールは、限定された数のスレッドのみが一定の範囲にアクセスすることができる。異なるプロセスのスレッド間では、それぞれのプロセスのポートを介してのみメッセージを交換することができる。
【００１９】
図２にその１つのセクションを示しているローカルエリアネットワークのための分布オペレーティングシステムとしては、コーラスを用いることができる（Rozier,M.;Abrossimov,V.;Armand,F.;Boule,I.;Gien,M.;Guillemont,M.;Herrmann,F.;Kaiser,C.;Langlois,S.;Leonard,P.:Neuhauser,W.:Overview of the CHOLUS distrbuted operating systems;CHOLUS system Technical Report CS-TR-90-25,1990参照）。アプリケーションソフトウェアについては、例えばＣ又はＣ＋＋プログラミング言語を選択することができる。
【００２０】
図２のネットワークにおける少なくとも１つのプロセス９の交換を制御するため、ノード７が更に置換サーバー12を含む。この置換サーバー12は同様に、ノード７以外の他のノード（例えばノード８）の部分を形成することができる。
【００２１】
置換サーバー６（図１）又は12（図２）によって制御される少なくとも１つのプロセスが置換又は交換される時は、新しいソフトウェアコンポーネント（新しいプロセス）がロードされ、コンピュータ１（図１）又はネットワークのノード７又は８（図２）でスタートする。次に、古いソフトウェアコンポーネント（古いプロセス）の全てのアプリケーションスレッドが停止され、古いプロセスが全てのオブジェクトの状態を集める。新しいプロセスが、古いプロセスによって集められた状態を受取り、古いプロセスのポートが全てのペンディングメッセージと共に新しいプロセスに移る。古いオブジェクト構造が新しいプロセスに受入れられると、次に新しいプロセスのスレッドが、古いプロセスの点に対応する点でスタートする。最後に古いプロセスが削除される。
【００２２】
コンピュータ又はローカルエリアネットワークの動作中に行われるこの交換に対し、アプリケーションソフトウェアのコンポーネント又はプロセスにおいて、交換不可能なコンポーネントに関する一定の変更が行われる。交換可能である各プロセスは、交換スレッドと呼ばれ、交換手順を遂行する付加的なスレッドを含み、更に、交換中に通信を行うために用いられる付加的な交換ポートを含む。
【００２３】
図３は、交換に適しているプロセスが含まれていることを記号で表している。プロセス13が正方形で表され、そのアプリケーションスレッド14が波線として表示されている。プロセス13は１つのクライアントとポート15を通してデータを交換する。クライアントは、他のソフトウェアコンポーネントである。上述のように、交換可能のプロセスは付加的に交換スレッド16を含み、付加的な交換ポート17を有する。
【００２４】
図４は、プロセスの交換又は置換のためのメッセージの流れを示す。クライアント18が、これまでにインストールされたプロセス20のポート19（以下サービスポートという）にメッセージを送る。プロセス20（前駆コンポーネント）が新しいプロセス21（後継コンポーネント）に交換されることになる。後継コンポーネント21がロードされ、スタートすると、後継コンポーネント21の交換ポート22から、前駆コンポーネント20の交換ポート23に対して、交換命令が送られる。図４における交換命令は参照記号(1) で表されている。前駆コンポーネント20は、停止した後、その状態を集め、それらを後継コンポーネント21の交換ポート22に送る（矢印(2) ）。全ての送信が終わると、前駆コンポーネント20がこの通知を受ける（矢印(3) ）。次に、古いプロセスのサービスポート19が、クライアント18に対して、新しいサービスポート24として、ペンディングメッセージについてアクセス可能になる。このポートの変更は、点線矢印(4) で表示されている。
【００２５】
図５は、交換の後のメッセージの流れを示す。クライアント18が、ここで後継コンポーネント21のサービスポート24にメッセージを送る。前駆コンポーネント20が削除される。これは、前駆コンポーネント20を表す正方形の上の２本の交差線によって表示されている。
【００２６】
上述の交換手順においては、交換可能なプロセスがスタートしている。複数のプロセスを交換する場合は、この交換手順を幾つかのステップに分けることができる。従って、１つのステップは各回１つのプロセスの交換である。この結果、これは、多数のプロセスを同時に交換する場合に比較して、交換手順を制御することがより簡便であり、必要なメモリー容量がより少ない。
【００２７】
更に、古いプロセスを置換しようとする一定の新しいプロセスは、例えば他の新しい機能を含むことがある。古いプロセスとの互換性を保つためには、以前の機能を新しいプロセスでも更に使用可能にすることが必要である。古い機能を用いていた全てのクライアントが無くなる場合は、古い機能を無効とし、次の交換が導入される時に全て消去してもよい。
【００２８】
図１及び２は、動作中に交換可能なソフトウェアについて２つの応用の可能性を示す。他の応用の可能性が、メッセージを送信するために用いられるシステムについて存在する。１つの例は、主ブロックが図６に示されているスイッチングシステムである。このスイッチングシステムは、入力ライン26で受信した信号を１又は複数の出力ライン27に送出するスイッチングネットワーク25を含む。スイッチングネットワークを制御するため、必要なハードウェア部品に加えて、オペレーティングシステム、アプリケーションソフトウェア及び置換サーバーを含む制御回路28がある。アプリケーションソフトウェアのコンポーネントの交換のために、メンテナンスデバイス２がコンピュータ１と協働する場合と同様に、制御回路28と協働するメンテナンスデバイス29が存在する。
【００２９】
上述のように、交換スレッドは、プロセスの部分を構成すると共にプロセスの交換のために必要である。このような交換スレッドは、プロセス中のアプリケーションスレッドに対するインタフェースを具える。このインタフェースはプロセスを交換可能にする。Ｃ＋＋プログラミング言語におけるインタフェースの使用は、例えば「ExcThread 」と呼ぶことができるクラス定義である。アプリケーションスレッドは、このクラス「ExcThread 」のエンティティを厳密に１つ持つ。このクラスは３つのメソッド「getExcInfo」、「setExcInfo」及び「restartPointReached 」を持つ。
【００３０】
メソッド「ExcThread::getExcInfo 」は、各アプリケーションスレッドの最初に１度だけ呼出される。これは、アプリケーションコンポーネントが新しいコンポーネントとしてスタートするのか又はこのコンポーネントのより古いバージョンが交換されるのかの情報を与える。交換の場合においては、メソッド「ExcThread::getExcInfo 」が、古いコンポーネントのアプリケーションスレッドの状態、及び、新しいプロセスのアプリケーションスレッドが再スタートできる点を記述するパラメータを与える。
【００３１】
新しいプロセスのアプリケーションスレッドが全てのオブジェクトを再構成すると、それがメソッド「ExcThread::restartPointReached」を呼出す。このメソッドは、全てのアプリケーションスレッドのスタートを同期させるために用いられる。全てのスレッドがこのメソッドを用いる前に、このメソッドから抜け出すアプリケーションスレッドはないことが保証されなければならない。これによって、全てのオブジェクトが、いずれかのアプリケーションスレッドによって用いられる前に、確実に初期化される。これは、これらのオブジェクトが多数のアプリケーションスレッド、例えばポートを分け合う場合即ちセマフォールの場合に特に重要である。
【００３２】
メソッド「ExcThread::setExcInfo 」は、各アプリケーションスレッドによって、アプリケーションスレッドが交換のために停止した後で１度呼出される。このメソッドは、このアプリケーションスレッドの現在の状態をそのそれぞれの新しいコンポーネントに送出するために必要である。
【００３３】
状態の転送は、新しいプロセスにとって、例えば古いプロセスから状態を引き継ぐために必要である。状態転送は、古いプロセスの停止と新しいプロセスのスタートとの間で行われる。例えば、状態転送は、古い電話ディレクトリの状態を新しい電話ディレクトリの状態の中に再生するために必要である。このような転送は、例えば新しいフィールド「郵便コード」が加えられる場合、又はこのフィールドが他の型を含む（例えば４桁を５桁にする）場合に必要である。
【００３４】
プロセスの状態転送とは、そのオブジェクトの全ての状態が送信されることを意味する。従って各オブジェクトは２つのメソッドを持つ。１つのメソッドは状態をフェッチし、１つのメソッドは状態を格納する。
【００３５】
１つのプロセスの全てのアプリケーションスレッドが、それらが停止できる点で停止した時に、交換動作がスタートする。これらの点は停止点と呼ばれる。スレッドにおいて停止点に到達した時は、その正規の動作がアボートされ、交換に関する動作が遂行される。スレッドが停止できる同期及び通信点は、停止点と同様に選択される。
【００３６】
新しいプロセスがスタートできるそれぞれの点が、新しいプロセスにおける停止点で使用可能でなければならない。これらの点は再スタート点と呼ばれる。停止点及び再スタート点は交換点と呼ばれる。新しいプロセスは、プログラムコード及びオブジェクト構造で古いプロセスと区別される。新しいプロセスにおいては、複数のオブジェクトが消滅、付加又は変化することがある。
【００３７】
次の点は、交換点の例である。
Port::call
Port::receive
Semaphore::get
Mutex::get
Thread::delay
【００３８】
ここではプログラミング言語Ｃ＋＋の表記を選択している。先ず、クラス名を入力し、続いて２つのコロンの後にメソッド名を入力する(ClassName::MethodName) 。例えば「Mutex::get」は、Mutex 型の全てのオブジェクトについて使用可能性のメソッド「get 」を表す。
【００３９】
交換のための時間が長過ぎる場合には、或る種のアプリケーション（例えば、ソフトウェアコンポーネントがスイッチングセンターで交換される場合）に対して問題が生ずることがある。これは、次の５つの条件が満足される場合は生起しないものと思われる。
Ｒ1)アプリケーションが１つのプロセッサを持つシステム上で走行すること。
Ｒ2)プロセッサの負荷が 100％未満であること。
Ｒ3)プロセッサが所与の時間間隔内で一定のプロセッサ時間を保証されていること。
Ｒ4)スレッドが非同期的に停止することは許可されないこと。即ち、停止点以外では停止しないこと。
Ｒ5)交換点において、スレッドを停止し、それを停止点に残し、正規の方法で続けることができること。
【００４０】
プロセッサが使用可能であり (Ｒ1)、このプロセッサが 100％以下の負荷を持つ (Ｒ2)場合は、１つのプロセスの全てのスレッドが停止する時点が存在する。交換スレッドが使用可能であり、これがそのプロセスの他のアプリケーションスレッドの優先度より低い優先度を持つ場合は、このプロセスは常に所与の時間間隔内に使用可能なプロセッサ時間の一部分を受信しているので (Ｒ3)、交換スレッドがこの時点で起動される。交換スレッド自身を除いて全てのアプリケーションスレッドが、一定の停止点で停止したことが保証される (Ｒ4)。従って交換スレッドは、交換動作を実行するために使用可能なプロセッサ時間を利用し、停止点にある全てのアプリケーションスレッドを停止させる (Ｒ5)。
【００４１】
各停止点が交換点である場合は、多数の交換点が使用可能であることがある。多くの交換点が単純なミューテックス動作であり、共通データへの並行アクセスを妨げる場合がある。多数のオペレーティングシステムが、ミューテックスで停止したスレッドの単純なアボートを許可しない。従って、「Mutex::get」でスタートし「Mutex::rel」で終わるミューテックスは、潜在的な交換点として除外することができる。「Mutex::get」と「Mutex::rel」との間に他の停止点は存在しないこと、及びミューテックスは同一プロセスのスレッドによってのみ用いられることとの条件の下に、全てのスレッドが停止する時にこのミューテックスではスレッドが停止しないことが分かる。従って、これらの条件の下に、ミューテックスは交換点として除外することができる。
【００４２】
交換点が実現されると、１つのメソッドが実行され、そこで交換されるべきスレッドがそれ自身アボート状態に移る。この場合、オペレーティングシステムが特別なリターンコードを用いてアボート状態を終了させる。このリターンコードは、更にエラーコード「abort 」を表示する。アボートの場合、このリターンコードは交換のための信号として直接翻訳される。次に、Ｃ＋＋プログラミング言語の例が、交換できないスレッドに属する「port::receive 」（停止点）について与えられる。
0003912441.tif 000002
【００４３】
例において括弧中に与えられた数字は、プログラムテキストの一部分を構成するものではなく、単にラインを識別するために用いられている。ライン(08)においては、バッファ「buf 」は受信されるデータのためにクリアされる。ライン(09)の「receive 」ステートメントでバッファ「buf 」が新しいデータで満たされる。第２のパラメータ「receive 」ステートメントの「TimeOutPeriod 」は、例えばクライアントによって引き起こされるクラッシュのような無制限の遅延時間を防ぐための時間超過に対する値である。ライン(15)では、時間超過に対するエラーコード（「Time out」）がテストされる。
【００４４】
この停止点を交換点に変換するために、「port::receive 」についての例を変更する。従って、これが交換可能のスレッドに属する。
0003912441.tif 000003
【００４５】
上述の例は、交換のための交換スレッドオブジェクト主要点のプログラム部分を示す（ライン(01)）。交換不可能の例「port::receive 」に比較して新たに付加されたラインのみ説明する。ライン(10)では、エラーコード「Port::Aborted 」がテストされ、交換が検出されたか否かを明確にする。交換が行われる場合には、先ずスレッドのローカルオブジェクトの状態が集められる（ライン(11)）。状態は、オペレータ「< < 」及び「> > 」を定義する「Bin 」型の特別なオブジェクトに集められる。オペレータ「< < 」はオブジェクトの状態を集め、オペレータ「> > 」はそれらを復元する。次に、そのスレッドは、オブジェクトを削除し、他のメジャーを遂行してリソースを無駄にしないようにすることができる（ライン(12)）。最後の「ExcThread.setExchangeInfo 」の呼出しの後、集められた状態は、交換スレッドから新しいプロセスに送信される（ライン(13)）。第１パラメータ(ThreadName)は呼出されたスレッドを示し、第２パラメータ(ReceiveExcPointld) は呼出されたスレッド中での交換点を表す整数変数であり、第３パラメータ(state) は送出されるべき状態を表す。スレッドは決して「setExchangeInfo 」から戻ることはない。
【００４６】
交換スレッドが交換点で古いプロセスの状態を集め、古いプロセスが停止した後で、それぞれの点（再開始点）で新しいプロセスのスレッドがスタートする必要がある。従って、再開始点は、種々の他の機能の呼出しが終了するまでは到達しない機能中に存在するという問題がある。従って、新しいプロセスの呼出しの後、先ず、他のステートメントを実行せずに再開始点に到達すべきである。これは、例えばＣ＋＋プログラミング言語の機能では、「goto」命令によって達成することができる。機能の開始時点で、先ず再開始点を含む機能へのジャンプが行われる。これは、複数の機能レベルを介して実現することができる。再開始点に到達した後は、状態変数が再び設定され、古いプロセスがアボートする前における次のステートメントであった筈のステートメントにより、新しいプロセスが遂行される。
【００４７】
この場合の実際の動作を以下の例によって示す。
0003912441.tif 000004
【００４８】
機能「threadBody」（ライン(15)）が機能「fctA」を生成させ、それが再開始点を含む機能「fctB」を生成させる。先ず、機能「threadBody」で「restart 」が真実か否かがテストされる（ライン(17)）。真実ならば、それぞれの再開始点が選択され、それぞれのジャンプ目的地へのジャンプが行われる（ExcPointX;（ライン(24)）。そこでは機能「fctA」が呼出される。機能「fctA」においては（ライン(09)乃至(14)）同一の手順が繰り返される。ジャンプ目的地「ExcPointX 」（ライン(12)）では機能「fctB」にジャンプする。即ち、機能「fctB」（ライン(02)乃至(08)）中のジャンプ目的地「ExcPointX 」（ライン(05)）にジャンプする。
【００４９】
再開始点に到達すると、オブジェクトが再構成されることになる。状態転送を付加的に含む上記の例「port::receive 」を用いて説明する。この状態転送は、以下の例のライン(01)乃至(05)に記述されている。
0003912441.tif 000005
【００５０】
交換の後における状態の再構成（ライン(05)で比較する）がメソッド「ExcThread.restartPointReached 」の呼出し（ライン(06)）で終了する。これにより、新しいプロセスの全てのアプリケーションスレッドが、確実に同時にスタートする。「restartPointReached 」のパラメータ「deliveredState」は、状態が正確に読取られたか否かをテストするために必要である。
【００５１】
上述のように、プロセスはポートを通して通信を行う。このため、古いプロセスのポートは、なお新しいプロセス中に存在する（ポート変換）。コーラスオペレーティングシステムにおいては、ポート変換は容易に実現される。ポートの状態は、他のオブジェクトの状態と同様の方法で送信される。その相違は、ポートの状態が特別なメソッド「Port::migrate 」と共に転送されることのみである。古いプログラムの一部分をなすプログラムの例を以下に示す。
0003912441.tif 000006
【００５２】
新しいプロセスにおいて、送出された状態から移動されたポートが直接作り上げられる。メソッド「Port::migrate 」を処理するために用いられる時間の間、外部のメッセージが失われることはない。まだ到着しつつある全てのメッセージは、ポートのキューに行列しており、そのポートと共に新しいプロセスに送出される。
【００５３】
図７は、以下に説明する交換プロセスにおけるメッセージのフローチャートを示す。先ずプロセスＡ1 がスタートする。プロセスＡ1 がプロセスＡ2 で置換されるものとする。従ってプロセスＡ1 は前駆コンポーネントを表し、プロセスＡ2 は後継コンポーネントを表す。交換は、特別なソフトウェアコンポーネントとしてノードに収容されている置換サーバーＡＭによって制御される。図７においては、置換サーバーＡＭはＡＭと表記された長方形の記号で表されている。
【００５４】
図７におけるメッセージフローチャートは、プロセスＡ1 及びＡ2 のアプリケーションスレッドとそれぞれの交換スレッドＥ(A1)及びＥ(A2)との関係を示す。図７のメッセージフローチャートは、各プロセスＡ1 及びＡ2 に対して１つのアプリケーションスレッドＡ(A1)及びＡ(A2)のみを示すことが明らかである。種々のメカニズム（例えば「Port::send/Port::receive」、「Semaphore::get/Semaphore::rel 」）によって実現されるメッセージの流れは、それぞれの矢印で特徴付けられている。
【００５５】
図７のフローチャートにおいては、最初にプロセスＡ1 がロードされてスタートする（点Ｐ1 ）。このプロセスは交換スレッドＥ(A1)を発生し（矢印CET1）、置換サーバーＡＭにメッセージを送る（矢印NACH1 ）。置換サーバーＡＭは応答し（矢印OKS ）、これにより後続のコンポーネントがないことを表示する。続いて、プロセスＡ1 のアプリケーションスレッドＡ(A1)が、プロセスＡ1 の交換スレッドＥ(A1)のスタートを同期する（矢印SYNCS1）。次に、アプリケーションスレッドはそれらの元のタスク（点Ｐ2 ）に移る。
【００５６】
プロセスＡ1 のアプリケーションスレッドＡ(A1)によるプロセスＡ1 の交換スレッドＥ(A1)のスタートの同期の後、交換スレッドＥ(A1)が、アプリケーションスレッドＡ(A1)の優先度より低い優先度を自身に設定する（点Ｐ3 ）。これは、アプリケーションスレッドＡ(A1)に対する交換スレッドＥ(A1)の影響を可能な限り小さく保つために行われる。更に、点Ｐ3 で交換スレッドＥ(A1)が交換ポートを発生し、これにより後継コンポーネント（プロセスＡ2 ）がこのポートに到着することができる。次に、交換スレッドＥ(A1)が、交換の準備が完了したことを置換サーバーＡＭに信号する（矢印RFG1）。
【００５７】
プロセスＡ1 （前駆コンポーネント）の後継コンポーネントとしてプロセスＡ2 がロードされ、スタートし（点Ｐ4 ）、第２プロセスＡ2 の交換スレッドＥ(A2)が発生される（矢印CET2）と、先ず置換サーバーＡＭにメッセージ（矢印NACH2 ）が送られる。置換サーバーＡＭは、プロセスＡ2 のアプリケーションスレッドＡ(A2)の一つに、後継コンポーネントが前駆コンポーネント（プロセスＡ1 ）を置換することを表示する応答を送る（矢印OKR ）。続いて、このプロセスＡ2 のアプリケーションスレッドＡ(A2)が、前駆コンポーネントの交換ポートに対するそれぞれの参照符号を発生し（点Ｐ5 ）、プロセスＡ1 の交換スレッドＥ(A1)に交換手順がスタートしたことを知らせる（矢印STARE ）。
【００５８】
プロセスＡ2 のこのメッセージが第１プロセスの交換スレッドＥ(A1)を起動する。最初に、交換スレッドＥ(A1)が自身の交換ポートをアクセス不能にし、これにより他のコンポーネント（プロセス）が交換メッセージを送って来ないようにする（点Ｐ6 ）。全てのプロセスＡ1 のアプリケーションスレッドＡ(A1)が停止した時に、交換スレッドＥ(A1)が、全てのスレッドが停止した旨のメッセージを受取り（矢印ALLBL ）、次に全てのプロセスＡ1 のアプリケーションスレッドＡ(A1)にアボート命令を与える（矢印ABTHR ）。交換手順の継続のための命令（矢印RETHR ）を第１プロセスＡ1 の交換スレッドＥ(A1)から受信すると、プロセスＡ1 の各アプリケーションスレッドＡ(A1)がその状態を集め（点Ｐ7 ）、アクノリッジ信号を交換スレッドＥ(A1)に送り（矢印ABCOM ）、終了時点でそれ自身を消去する（点Ｐ8 ）。
【００５９】
第１プロセスＡ1 の交換スレッドＥ(A1)が第１プロセスＡ1 のアプリケーションスレッドＡ(A1)の種々の状態を集め（点Ｐ9 ）、それらを第２プロセスＡ2 のアプリケーションスレッドＡ(A2)に送る（矢印REPAS ）。これは交換手順の開始を知らせることになる（矢印STARE を参照）。受信された状態はアプリケーションスレッドＡ(A2)に運ばれる（点Ｐ10）。この状態はそれらの状態の部分を引き継いでおり、これからそれらのオブジェクトを再構成する（点Ｐ11）。同時に、それにより交換スレッドＥ(A2)が通知を受ける（矢印SYNCS2）。全ての再開始点への到達が完了した後、この交換スレッドＥ(A2)は、それらの元のタスクを実行するためにアプリケーションスレッドＡ(A2)を解放する（矢印STACO ）。
【００６０】
最後に、第２プロセスＡ2 の交換スレッドＥ(A2)が第１プロセスＡ1 の交換スレッドＥ(A1)に、交換手順が完了した旨の信号を送る（矢印ALLAB ）。第１プロセスＡ1 の交換スレッドＥ(A1)は、置換サーバーに停止メッセージを送り（矢印STOP）、自身を停止させる。次に、第２プロセスＡ2 の交換スレッドＥ(A2)は、それ自身、更に後の時点で後継コンポーネントにより置換されることになるかも知れない。続いて、交換スレッドが交換ポートを発生し、自身を最も低い優先度レベルに設定し（点Ｐ12）、置換サーバーＡＭに対し、交換スレッドが交換の準備を完了した旨の通知を行う（矢印RFG2）。
【図面の簡単な説明】
【図１】メンテナンスデバイス及び交換可能のプロセスを含むコンピュータを具えるコンピュータシステムを示す図である。
【図２】ローカルエリアネットワークを含むコンピュータシステムを示す図である。
【図３】プロセスを記号で表した図である。
【図４】新しいプロセスと古いプロセスとの交換を記号で表した図である。
【図５】新しいプロセスと古いプロセスとの交換後の状態を記号で表した図である。
【図６】メンテナンスデバイス及び交換可能のプロセスを含む制御回路を具えるスイッチングシステムを示す図である。
【図７】古いプロセスと新しいプロセスとの間のメッセージの流れを示す図である。
【符号の説明】
１  コンピュータ
２  メンテナンスデバイス
３  ハードウェアコンポーネント
４  オペレーティングシステム
５  アプリケーションソフトウェア
６  置換サーバー
７、８  ノード
９  プロセス
１０  ポート
１１  メッセージ
１２  置換サーバー
１３  プロセス
１４  アプリケーションスレッド
１５  ポート
１６  交換スレッド
１７  交換ポート
１８  クライアント
１９  ポート
２０、２１  プロセス
２２、２３  交換ポート
２４  サービスポート
２５  スイッチングネットワーク
２６  入力ライン
２７  出力ライン
２８  制御回路
２９  メンテナンスデバイス
３０  ネットワークリンク
【図１】
0003912441.tif 000007
【図２】
0003912441.tif 000008
【図３】
0003912441.tif 000009
【図４】
0003912441.tif 000010
【図５】
0003912441.tif 000011
【図６】
0003912441.tif 000012
【図７】
0003912441.tif 000013