(57)【特許請求の範囲】
【請求項１】
システム階層構造の複数レベルにわたって分散する複数プロセッサノードを有するイベントベースの階層化分散処理システム（１）であって、階層化処理システム（１）のうち少なくとも１つの上位レベルプロセッサノード（１０）は、
複数の共有メモリプロセッサ（１１）を有し、かつ
外部のイベントをプロセッサにマッピングするための手段（１４）を有し、ここで、このマッピングするための手段（１４）によって、プロセッサノードに到達する外部イベントフローが複数の非交換（ｎｏｎ−ｃｏｍｍｕｔｉｎｇ）イベントカテゴリに分割され、分割された非交換イベントカテゴリの各々が所定セットの共有メモリプロセッサに割当てられて、そのセットのプロセッサによって処理され、非交換イベントカテゴリが同時に処理できるようになっており、
その際、その非交換イベントカテゴリは、イベントの順序がカテゴリ内では保持されるべきであるが、異なるカテゴリのイベント処理に関しては順序付けは要求されないという点で、イベントがグループ分けされたものであり、更に
共有メモリ（１２）のグローバルデータがプロセッサによって操作されるときにデータ整合性を確保するための手段（１５）とを有する前記階層化分散処理システム。
【請求項２】
各プロセッサセットを単一プロセッサ形式で構成した請求項１記載の階層化分散処理システム。
【請求項３】
少なくとも１セットのプロセッサを、複数プロセッサ段をもつマルチプロセッサパイプラインとして動作するプロセッサアレイ形式で構成し、プロセッサセットに割り当てられる非交換カテゴリの各イベントを、パイプライン内のそれぞれ異なるプロセッサ段で実行されるイベントチェーンとしてスライス単位で処理する請求項１記載の階層化分散処理システム。
【請求項４】
共有メモリ（１２）の所定データ領域からの入力データを必要とするイベントがマッピング手段（１４、１８）によって全く同じ所定プロセッサセットにマッピングされる請求項３記載の階層化分散処理システム。
【請求項５】
上位レベルプロセッサノードがさらに、プロセッサセットで生成されたイベントを同じプロセッサセットに供給するための手段を含む請求項１記載の階層化分散処理システム。
【請求項６】
所定の発生源（Ｓ１／Ｓ２）からのイベントによって非交換カテゴリが画定される請求項１記載の階層化分散処理システム。
【請求項７】
発生源（Ｓ１／Ｓ２）が入力ポート、下位レベルのプロセッサノード、または階層化分散処理システムに接続されたハードウェア装置である請求項６記載の階層化分散処理システム。
【請求項８】
イベントに応答して実行されるソフトウェアタスクに使用されるグローバル変数を共有メモリ内でロックするための手段と、ロックされたグローバル変数をタスク実行終了時に解放するための手段とが、データ整合手段（１５）に含まれる請求項１記載の階層化分散処理システム。
【請求項９】
さらに、２つの相互にロックするタスクの一方のロックされたグローバル変数を解放して適切な遅延時間後にそのタスクを再実行するための手段がデータ整合手段（１５）に含まれる請求項８記載の階層化分散処理システム。
【請求項１０】
共有メモリ（１２）内のソフトウェアに複数のソフトウェアブロック（Ｂ１〜Ｂｎ）が含まれ、イベントに応答してプロセッサの各々がソフトウェアブロックを含むソフトウェアタスクを実行し、タスク実行開始前にソフトウェアブロックの少なくともグローバルデータをロックするためにデータ整合手段（１５）の一部を形成する手段が各プロセッサに含まれ、ブロックをロックしているプロセッサだけがそのブロック中のグローバルデータにアクセスすることができる請求項１記載の階層化分散処理システム。
【請求項１１】
ロッキング手段が対応するタスクの実行開始前にソフトウェアブロック全体をロックし、ロックされたブロックをタスク実行終了時に解放する請求項１０記載の階層化分散処理システム。
【請求項１２】
デッドロック状態を最小にするためにタスク実行開始前に、ロッキング手段がタスクにおける処理時間のかなりの部分を消費する少なくともソフトウェアタスクに必要なブロックを確保する請求項１０記載の階層化分散処理システム。
【請求項１３】
デッドロック状態を検出するための手段と、処理進行を確実にするために、待ちプロセッサの１つによってロックされているブロックを解放して適切な遅延時間後のそのプロセッサが実行するソフトウェアタスクを再開するための手段とが、上位レベルプロセッサノードに含まれる請求項１０記載の階層化分散処理システム。
【請求項１４】
目的のソフトウェアタスクに必要な変数が別のプロセッサによってロックされているか否かチェックするための手段と、目的のタスクに関わるプロセッサによってロックされた変数を別のプロセッサが待っているか否か確認するための手段とが、デッドロック検出手段に含まれる請求項１３記載の階層化分散処理システム。
【請求項１５】
複数の対応ソフトウェアタスクを並列に実行するために複数のプロセッサ（１１）が個別にイベントを処理し、並列タスク間の衝突を検出するための手段と、衝突が検出されたタスクを元に戻して再実行するための手段とが、データ整合手段（１５）に含まれる請求項１記載の階層化分散処理システム。
【請求項１６】
共有メモリにおける変数の使用をマークするための手段が各プロセッサに含まれ、マーキングに基づいて変数アクセス衝突を検出するための手段が衝突検出手段に含まれる請求項１５記載の階層化分散処理システム。
【請求項１７】
共有メモリ（１２）内のソフトウェアに複数のソフトウェアブロック（Ｂ１〜Ｂｎ）が含まれ、複数のプロセッサの各々はソフトウェアブロックを含むソフトウェアタスクを、イベントに応答して実行し、各プロセッサには、ブロック内の変数の使用をマークするための手段が含まれ、衝突検出手段には、マーキングに基づいて変数アクセス衝突を検出するための手段が含まれる請求項１５記載の階層化分散処理システム。
【請求項１８】
さらに、並列イベントキュー（１６）と、各プロセッサセットに対するキューと、各外部イベントに含まれる情報に基づいて各外部イベントをイベントキューにマッピングするためのマッピング手段（１４）とが、上位レベルのプロセッサノード（１０）に含まれる請求項１記載の階層化分散処理システム。
【請求項１９】
システム階層構造の複数レベルにわたって分散する複数プロセッサノードを有するイベントベースの階層化分散処理システム（１）における処理方法であって、
階層化処理システム（１）の少なくとも１つの上位レベルのプロセッサノード（１０）に複数の共有メモリプロセッサ（１１）を設けるステップを含み、
システムで認識されたイベントフローコンカレンシに基づいて、プロセッサノードへの外部イベントフローを複数の非交換イベントカテゴリに分割するステップを含み、
各非交換イベントカテゴリが複数プロセッサの所定セットに割り当てられて、そのセットのプロセッサによって処理されるように非交換イベントカテゴリをプロセッサにマッピングし、それにより非交換イベントカテゴリが同時に処理できるようにするステップを含み、
その際、その非交換イベントカテゴリは、イベントの順序がカテゴリ内では保持されるべきであるが、異なるカテゴリのイベント処理に関しては順序付けは要求されないイベントの点で、イベントがグループ分けされたものであり、更に
与えられたグローバルデータにアクセス可能なプロセッサが一度に１つに限定されるように、共有メモリ（１２）のグローバルデータをプロセッサが操作するときのデータ整合性を確保するステップを含む前記処理方法。
【請求項２０】
少なくとも１つのプロセッサセットを、複数プロセッサ段をもつマルチプロセッサパイプラインとして動作させ、プロセッサセットに割り当てられる非交換カテゴリの各イベントを、パイプライン内のそれぞれ異なるプロセッサ段で実行されるイベントチェーンとしてスライス単位で処理する請求項１９記載の処理方法。
【請求項２１】
プロセッサセットで生成されたイベントを同じプロセッサに供給する請求項１９記載の処理方法。
【請求項２２】
データ整合を確保する前記ステップにおいて、イベントに応答して実行されるソフトウェアタスクに使用されるグローバル変数を共有メモリ内でロックし、ロックされたグローバル変数をタスク実行終了時に解放する請求項１９記載の処理方法。
【請求項２３】
データ整合を確保する前記ステップにおいて更に、２つの相互にロックするタスクの一方のグローバル変数を解放して適切な遅延時間後にそのタスクを再実行する請求項２２記載の処理方法。
【請求項２４】
共有メモリ（１２）内のソフトウェアに複数のソフトウェアブロックが含まれ、イベントに応答してプロセッサの各々によって、ソフトウェアブロックを含むソフトウェアタスクが実行される処理方法であって、データ整合を確保する前記ステップにおいて、プロセッサの１つによる実行前にソフトウェアブロックの少なくともグローバルデータをロックして、そのプロセッサだけがそのブロック中のグローバルデータにアクセスすることができるようにした請求項１９記載の処理方法。
【請求項２５】
対応するタスクの実行開始前にソフトウェアブロック全体をロックし、ロックされたブロックをタスク実行終了時に解放する請求項２４記載の処理方法。
【請求項２６】
いわゆるデッドロック状態を避けるためにタスク実行開始前にソフトウェアタスクに必要なすべてのブロックを確保する請求項２４記載の処理方法。
【請求項２７】
デッドロック状態を検出し、処理進行を確実にするために、待ちプロセッサの１つによってロックされているブロックを解放して適切な遅延時間後にそのプロセッサが実行するソフトウェアタスクを再実行する請求項２４記載の処理方法。
【請求項２８】
イベントに応答して複数の対応ソフトウェアタスクを並列にプロセッサで実行する処理方法であって、データ整合を確保する前記ステップにおいて、アクセス衝突を検出し、衝突が検出されたタスクを元に戻して再実行する請求項１９記載の処理方法。
【請求項２９】
共有メモリにおける変数の使用を各プロセッサでマークし、前記衝突検出時にマーキングに基づいて変数アクセス衝突を検出する請求項２８記載の処理方法。
【請求項３０】
更に、単一プロセッサシステム用のアプリケーションソフトウェアを複数の共有メモリプロセッサに移行して実行するステップを含む請求項１９記載の処理方法。
【発明の詳細な説明】
【０００１】
（発明の技術分野）
本発明は、一般にイベントベース処理システム、特に階層化分散処理システムおよびその処理システムにおける処理方法に関するものである。
【０００２】
（発明の背景）
演算処理上の観点から、多くのイベントベースのシステムは階層化分散処理システムとして構成される。例えば、現代の電気通信およびデータ通信ネットワークでは一般に、ネットワークからのイベントを処理するためのプロセッサ階層構造が各ネットワークノードに含まれる。一般に、メッセージパッシングによって通信する階層構造のプロセッサにおいて、プロセッサ階層の下位レベルのプロセッサは、比較的単純なサブタスクの低レベル処理を行い、階層の上位レベルのプロセッサは、比較的複雑なタスクの高レベル処理を行う。
【０００３】
これらの階層的アーキテクチャは、その本質的な同時性が既にある程度利用されているが、単位時間あたりの処理イベント数が増加するにしたがって、機能の増大にとってプロセッサ階層の上位レベルがボトルネックになる。例えば、プロセッサ階層構造が「木」構造になっていると、階層構造の最上位レベルにおけるプロセッサが最大のボトルネックになる。
【０００４】
この問題を軽減するための従来のアプローチは、主としてプロセッサクロック周波数の高速化、高速メモリ、命令パイプライン処理に頼っている。
【０００５】
（関連技術）
Ｕｃｈｉｄａ他に付与された米国特許Ｎｏ．５，２３９，５３９には、複数の呼プロセッサ（ｃａｌｌ  ｐｒｏｃｅｓｓｏｒ）間で負荷を一様に分散することによってＡＴＭ交換の交換網を制御するためのコントローラが開示されている。発呼順、または呼の各セルに付けられたチャンネル識別子によって、主プロセッサは発呼処理を呼プロセッサに割り当てる。交換状態コントローラは交換網における複数のバッファに関する利用情報を収集し、呼プロセッサは交換状態コントローラの内容に基づいて呼処理を行う。
【０００６】
日本国特許要約書ＪＰ６２７６１９８では、複数のプロセッサユニットを用い、互いに独立したユニットによってパケットの交換処理を行うパケット交換が開示されている。
【０００７】
日本国特許要約書ＪＰ４１００４４９Ａでは、ＡＴＭチャンネルをＳＴＭマルチプレクシングすることによってＡＴＭ交換とシグナリングプロセッサアレイ（ＳＰＡ）の間でシグナリングセルを分散するＡＴＭ通信システムが開示されている。ルーティングタグ加算器によってそれぞれの仮想チャンネルに付加されるＳＰＡの番号に基づいたＳＴＭを利用してシグナリングセルを交換することによって、処理負荷の分散が実現される。
【０００８】
日本国特許要約書ＪＰ５２７４２７９では、プロセッサ階層セットの形態を用い、プロセッサ要素グループに並列パイプライン処理をさせる並列処理装置が開示されている。
【０００９】
（発明の概要）
本発明の目的は、イベントベースの階層化分散処理システムのスループットを向上させることである。特に、階層化システムでは上位プロセッサノードで形成されるボトルネックの輻輳を緩和することが望ましい。
【００１０】
また、本発明の目的は、必ずしも必要ではないが望ましくは上位プロセッサノードとして動作し、システムで認識されたイベントフローコンカレンシに基づいてイベントを効率的に処理することができる処理システムを提供することである。
【００１１】
また、本発明の目的は、既存のアプリケーションソフトウェアの再利用を可能にすると共に、イベントフローにおいてコンカレンシを利用することができる処理システムを提供することである。
【００１２】
また、本発明の目的は、階層化分散処理システムにおいてイベントを効率的に処理するための方法を提供することである。
【００１３】
上記目的およびその他の目的は特許請求の範囲で規定されるように、本発明によって達成される。
【００１４】
本発明による一般概念は、階層化分散処理システムの最上位レベル又は最上位レベル群に複数の共有メモリプロセッサを導入し、システムで認識される同時発生イベントフローに基づいて複数プロセッサの利用を最適化することである。
【００１５】
本発明の第１の特徴によると、外部のイベントフローは、非交換（ｎｏｎ−ｃｏｍｍｕｔｉｎｇ）カテゴリと呼ばれるイベントの同時発生カテゴリに分割され、これらの非交換カテゴリは同時実行用の複数プロセッサにマッピングされる。一般に、非交換カテゴリはイベントのグループ分けであって、イベントの順序はカテゴリ内に保存する必要があるが、カテゴリ間の順序付けは不要である。例えば、非交換カテゴリは、システムに接続された特定の入力ポート、リージョナル（局地的な）プロセッサまたはハードウェア装置等の所定発生元から現れるイベントで定義することができる。イベントの各非交換カテゴリは、１つ以上のプロセッサからなる所定プロセッサセットに割り当てられ、所定プロセッサセットから発生する内部イベントは、そのプロセッサセットに割り当てられた非交換カテゴリ又はカテゴリ群を保存するために、同じプロセッサセットにフィードバックされる。
【００１６】
本発明の第２の特徴によると、複数のプロセッサは多くのプロセッサ段を含むマルチプロセッサパイプラインとして動作し、パイプラインに到達するそれぞれの外部イベントは、パイプラインのそれぞれ異なる段で実行される内部イベントのチェーンとしてスライス単位で処理される。一般に、それぞれのパイプライン段は１つのプロセッサで実行されるが、所定のプロセッサがパイプライン中の１つ以上の段を実行することも可能である。マルチプロセッサパイプラインを実現するときに特に有利な方法は、共有メモリソフトウェアのソフトウェアブロック／クラスのクラスタを各プロセッサに割り当てることであって、その場合、各イベントを特定のブロックの対象として定め、この割り当てに基づいて各プロセッサにイベントが分散される。
【００１７】
一般的な処理構造はいわゆるマトリックス処理で得られ、非交換カテゴリは互いに異なるプロセッサセットによって実行され、少なくとも１つのプロセッサセットは、パイプラインにおけるそれぞれ異なるプロセッサ段によってスライス単位で外部イベントを処理するマルチプロセッサパイプラインとして動作するプロセッサアレイで形成される。
【００１８】
共有メモリシステムでは、全体のアプリケーションプログラムおよびデータはシステムのすべての共有メモリプロセッサにアクセスすることができる。したがって、グローバルデータをプロセッサで処理するとき、データの整合性を確保する必要がある。
【００１９】
本発明によれば、イベントに応答して実行されるソフトウェアタスクで使用されるグローバルデータをロックするか、あるいはオブジェクト指向ソフトウェアデザインの場合にはソフトウェアブロック／オブジェクト全体をロックすることによって、データの整合性を確保することができる。イベント処理に１つ以上のブロックからのリソースを必要とする場合は、タスクが互いにロックし合って、ロックアプローチはデッドロックに陥るかもしれない。そして、デッドロックが検出され、処理の進行を確実にするためにロールバックが行われるか、あるいは、タスクに必要な全ブロックをタスク実行開始前に確保することによってデッドロックは完全に避けられる。
【００２０】
データの整合性を確保するもう一つのアプローチは、タスクの並行処理に基づいており、タスク間のアクセス衝突を検出し、衝突が検出された実行タスクをロールバックして再開する。衝突は変数使用マーキング（ｖａｒｉａｂｌｅ  ｕｓａｇｅ  ｍａｒｋｉｎｇｓ）に基づいて検出されるか、または読み出しアドレスと書き込みアドレスを比較するアドレス比較に基づいて検出される。
【００２１】
個々のデータの代わりに比較的広い領域をマーキングすれば、大まかな衝突チェックが実現できる。
【００２２】
本発明の解決策によれば、処理システムのスループットを実質的に向上させ、階層化処理システムにおいて、上位ボトルネックの輻輳が効率的に緩和される。
【００２３】
共有メモリマルチプロセッサを使用し、データの整合性を確保するのに適した手段を利用すれば、単一プロセッサシステム用の既存アプリケーションソフトウェアを再利用することができる。多くの場合、階層化処理システムにおける最上位レベルの単一プロセッサノードなどの単一プロセッサシステム用として、既に何百万行ものコードが利用可能である。即納の標準マイクロプロセッサを使用して複数のプロセッサを実装する場合、アプリケーションソフトウェアを自動変換し、更に必要に応じてシステムの仮想計算機／オペレーティングシステムを変更することによって、既存のアプリケーションソフトウェアをすべて再利用して複数プロセッサをサポートすることができる。一方、専用設計の特殊ハードウェアとして複数プロセッサが実装されている場合、アプリケーションソフトウェアを直接そのマルチプロセッサ環境に合わせて移行することができる。いずれにしても、アプリケーションソフトウェアの設計を最初からはじめる場合と比較して、貴重な時間の節約と、プログラミングコストの軽減が可能になる。
【００２４】
本発明には以下の特長がある：
・スループットの向上。
・ボトルネックの輻輳緩和。
・既存アプリケーションソフトウェアの再利用可能。特に、オブジェクト指向設計の場合。
【００２５】
その他の特長については、以下の発明実施例の記述において明らかになる。
以下に、付図にしたがって、発明に関する上記以外の目的、特徴について記述する。
【００２６】
（発明実施例の詳細説明）
付図のそれぞれにおいて、同じ参照符号は、対応する要素または同等の要素を表す。
【００２７】
図１は上位レベルプロセッサノードを備えた本発明による階層化分散処理システムの概要図である。階層化分散処理システム１には、システム階層構造の複数レベルにわたって分散された複数プロセッサノードを有する従来の木構造が含まれる。例えば、電気通信用のノードおよびルータに、階層化処理システムを見ることができる。当然、処理システムで処理されるイベント数が増加するにしたがって上位レベルプロセッサノード、特に最上層プロセッサノードがボトルネックになる。
【００２８】
本発明によれば、そのようなボトルネックの輻輳を緩和する効果的な方法として、階層構造の最上位レベルで複数の共有メモリプロセッサ１１を使用する。図１では、トップノード１０に複数のプロセッサが設けられている。複数の共有メモリプロセッサ１１は、標準マイクロプロセッサを基にしたマルチプロセッサシステムとして実現することが望ましい。すべてのプロセッサ１１が共通のメモリ、いわゆる共有メモリ１２を共有する。一般に、上位レベルのプロセッサノード１０へ向かう非同期の外部イベントは、最初に入出力ユニット（Ｉ／Ｏ）１３に到達し、そこからマッパあるいはディストリビュータ１４に転送される。マッパ１４は処理用プロセッサ１１にイベントをマッピングまたは分散する。
【００２９】
プロセッサノード１０への外部イベントフローは、階層化処理システム１で認識されるイベントフローコンカレンシに基づいて、イベントに関する複数の同時カテゴリに分割される。なお、以下の記述において、このカテゴリは非交換カテゴリ（ＮＣＣ）と呼ばれる。１つ以上のプロセッサ１１を含む所定のプロセッサセットに各ＮＣＣが割り当てられることをマッパ１４で確認することにより、同時処理および複数プロセッサの最適利用が可能になる。マッパ１４はプロセッサ１１のうちの１つ以上に実装することが可能であり、その場合、そのプロセッサをマッパ専用にすることが望ましい。
【００３０】
非交換カテゴリはイベントのグループ分けであって、イベントの順序はカテゴリ内で保存する必要があるが、異なるカテゴリ間で処理イベントの順序付けは不要である。プロトコルで情報フローを管理するようなシステムでは、一定の関連イベントが受け取り順に処理されることが、一般要件として必要がある。システム構成如何に関わらず、これはシステムの不変条件である。適切なＮＣＣを識別して、ＮＣＣの同時処理を行うことにより、与えられたシステムプロトコルに課される順序付け要件が確実に満たされると同時に、イベントフローにおける固有のコンカレンシが利用される。
【００３１】
外部イベントをイベントチェーンとして「スライス単位」で処理または実行することができれば、複数プロセッサのうち１セット以上をマルチプロセッサパイプラインとして動作させることによって、別の、あるいは追加の同時処理が可能になる。マルチプロセッサパイプラインに到達する各外部イベントはこのようにしてスライス単位で処理され、マルチプロセッサパイプラインのそれぞれ異なるプロセッサ段で実行される。
【００３２】
したがって、それぞれ異なるプロセッサセットで各ＮＣＣを実行し、少なくとも１つのプロセッサセットをマルチプロセッサパイプラインとして動作させる、いわゆるマトリックス処理によって一般的な処理構造が得られる。なお、図１で示されるプロセッサの論理「マトリックス」には、いくつかの空要素が含まれることがある。図１に示されるプロセッサの論理マトリックスを単一行のプロセッサに減らすと、純粋なＮＣＣ処理が得られ、また、このマトリックスを単一列のプロセッサに減らすと、純粋なイベントレベルパイプライン処理が得られる。
【００３３】
一般に、イベントベースのシステムでの演算は、外部からの入力イベントでシステムの状態を変化させて出力イベントを生成する状態マシンとしてモデル化される。独立／非結合な（ｉｎｄｅｐｅｎｄｅｎｔ／ｄｉｓｊｏｉｎｔ）状態マシンによってそれぞれの非交換カテゴリ／パイプライン段を処理できるとすれば、様々な状態マシン間でデータの共有はあり得ないだろう。しかし、グローバル状態またはグローバル変数で表されるグローバルリソースが存在するならば、与えられたグローバル状態の計算は一般に、１つのプロセッサだけの「原子的（ａｔｏｍｉｃ）」なものでなければならず、それはシステム状態マシンの一部を実行し与えられた１つのグローバル状態に対して一度にアクセスする。ＮＣＣ／パイプラインベースの実行によって、いわゆるシーケンス依存チェックは不要になる。
【００３４】
より深く理解するために、以下の例を考察する。別の通信ノードへの空きチャンネルなどのリソースが、あるグローバル変数セットにしたがって割り当てられると仮定する。この場合、異なるＮＣＣの２つの非同期ジョブに関して、空きチャネルを要求する順序は重要ではなく、最初の要求には、選択基準と合う第１のチャネルが割り当てられ、２番目の要求には、基準と合う次の利用可能なチャネルが割り当てられる。重要な点は、１つのジョブの進行中にチャネルの選択が行われ、他のジョブがそれに干渉しないことである。チャンネル割り当てを決めるグローバル変数に対するアクセスは「原子的（ａｔｏｍｉｃ）」でなければならない（しかし、特別な場合にはチャンネルサーチを並列化することが可能である）。
【００３５】
もう一つの例は、ＮＣＣが異なる２つのジョブに関するもので、カウンタをインクリメントする必要がある。どのジョブが最初にカウンタをインクリメントするかは重要でないが、インクリメントするために一方のジョブがカウンタ変数を操作（現在値を読んで、それに１を加算）している間、他方のジョブによる干渉を禁止する。
【００３６】
共有メモリシステムでは、共有メモリ１２における全アプリケーションプログラムスペースとデータスペースはすべてのプロセッサからアクセスできる。したがって、プロセッサはすべてのプロセッサまたは少なくとも２つ以上のプロセッサに共通なグローバル変数を操作する必要があるから、データの整合性を確保する必要がある。これは図１の参照符号１５で示されるデータ整合手段によって達成される。
【００３７】
以下の記述では、本発明の第１の特徴としてのＮＣＣ処理、本発明の第２の特徴としてのイベントレベルパイプライン処理、データの整合性を確保するための手順および手段について説明する。
【００３８】
ＮＣＣ処理
図２は発明の第１の特徴によるイベント駆動処理システムの概要図である。処理システムは、複数の共有メモリプロセッサＰ１〜Ｐ４、共有メモリ１２、入出力ユニット１３、ディストリビュータ１４、データ整合手段１５、複数の独立した並列のイベントキュー１６を有する。
【００３９】
入出力ユニット１３は外部からの入力イベントを受け取り、出力イベントを送出する。ディストリビュータ１４は入力イベントを非交換カテゴリ（ＮＣＣ）に分割し、各ＮＣＣを所定の独立したイベントキュー１６に分散する。各イベントキューはそれぞれ対応するプロセッサに接続され、各プロセッサはその関連イベントキューから処理のためのイベントを順々にフェッチ、すなわち取り込む。イベントの優先順位が互いに異なっていれば、プロセッサが優先順位にしたがってイベントを処理するように考慮する必要がある。
【００４０】
例えば、上位レベルの主プロセッサノードと、リージョナルプロセッサと呼ばれる複数の下位レベルプロセッサとを含み、各リージョナルプロセッサが交代で複数のハードウェア装置を受持つ階層化処理システムを考察する。このようなシステムでは、ハードウェア装置から発生したイベントと、一群の装置を受持つリージョナルプロセッサから発生したイベントは、所定のプロトコルで定義される順序要件に関わる諸条件を満足する（上位レベルでの処理によって保護されるエラー条件を除いて）。したがって、特定装置／リージョナルプロセッサからのイベントは非交換カテゴリを形成する。非交換カテゴリを保存するために、それぞれの装置／リージョナルプロセッサは、そのイベントを常に同じプロセッサに送る必要がある。
【００４１】
例えば電気通信アプリケーションでは、ユーザから受信した数字シーケンス、またはトランク装置に対するＩＳＤＮのユーザ部分メッセージシーケンスは、受信順に処理する必要があるが、２つの独立したトランク装置に対するメッセージシーケンスは、個々のトランク装置に対する順序が保存される限り、順不同で処理することができる。
【００４２】
図２では、所定の発生源Ｓ１、例えば特定のハードウェア装置または入力ポートからのイベントは、所定のプロセッサＰ１にマッピングされ、別の所定の発生源Ｓ２、例えば特定のリージョナルプロセッサからのイベントは、別の所定のプロセッサＰ３にマッピングされる。一般に共有メモリプロセッサ数と比べて発生源の数の方がはるかに多いので、通常は各プロセッサに対して複数の発生源が割り当てられる。典型的な電気通信／データ通信に応用する場合、単一の主プロセッサノードに１０２４のリージョナルプロセッサが接続される。主ノードにおける複数の共有メモリプロセッサに負荷平衡方式でリージョナルプロセッサをマッピングすることは、それぞれの共有メモリプロセッサがおよそ２５６のリージョナルプロセッサに対応することを意味する（主ノードに４つのプロセッサが含まれ、各リージョナルプロセッサからそれぞれ同じ負荷が発生すると仮定）。しかし、実際には更に細分化して、シグナリング装置や加入者端末等のハードウェア装置を主ノードプロセッサにマッピングするのが好ましい。このようにすると、一般に負荷平衡を取りやすくなる。電気通信ネットワークにおける各リージョナルプロセッサは何百台ものハードウェア装置を制御する場合がある。したがって、１０，０００あるいはそれ以上のハードウェア装置を単一のプロセッサにマッピングする（もちろんタイムシェアリングで負荷処理するのであるが）代わりに、本発明による解決策では、主ノードにおける複数の共有メモリプロセッサに各ハードウェア装置をマッピングすることで、主ノードのボトルネックの輻輳を緩和する。
【００４３】
外部イベントをプロセッサ対プロセッサ（ＣＰ−ｔｏ−ＣＰ）信号すなわちいわゆる内部イベントで接続されるスライス単位で処理するＡＸＥ  Ｄｉｇｉｔａｌ  Ｓｗｉｔｃｈｉｎｇ  Ｓｙｓｔｅｍ  ｏｆ  Ｔｅｌｅｆｏｎａｋｔｉｅｂｏｌａｇｅｔ  ＬＭ  Ｅｒｉｃｓｓｏｎなどのシステムでは、プロトコルによる要件の他にそれ自身の順序付け要件が加わる。ＮＣＣに関するこのようなＣＰ−ｔｏ−ＣＰ信号は、（実行中の最後のスライスで発生する上位優先信号で置換されない限り）それらの発生順に処理する必要がある。図２でプロセッサとイベントキューを結ぶ破線で示されるように各ＣＰ−ｔｏ−ＣＰ信号（内部イベント）がその発生源である同一プロセッサで処理されるならば、この付加的な順序付け要件は満たされる。したがって、内部イベントは、それらを生成した同じプロセッサかプロセッサセットへのフィードバックによって同一ＮＣＣ内に保持され、その結果、各内部イベントがその生成順に処理されることが保証される。
【００４４】
通常、処理システムから見たイベント表現は信号メッセージである。一般に、各信号メッセージには、ヘッダーと信号本体が含まれる。信号本体はソフトウェアタスクの実行に必要な情報を含む。例えば、信号本体は、明示的か否かは別として、共有メモリ内のソフトウェアコード／データを指すポインタと、所要の入力オペランドとを含む。この意味において、イベント信号は自立型であって、対応するタスクを完全に規定する。その結果、プロセッサＰ１〜Ｐ４はそれぞれ独自にイベントの取り込みおよび処理を行って、対応のソフトウェアタスクまたはジョブを並列に実行する。なお、ソフトウェアタスクもジョブと呼ぶことにして、この開示全般にわたって、タスクとジョブは互換性を持った用語として使用する。タスクの並列実行中、プロセッサは、共有メモリのグローバルデータを操作する必要がある。（ジョブのライフタイム中）いくつかのプロセッサが同じグローバルデータにアクセスして操作するデータ不整合（ｄａｔａ  ｉｎｃｏｎｓｉｓｔｅｎｃｉｅｓ）を避けるために、データ整合手段１５はデータの整合性が常に維持されていることを確認する必要がある。タスクの並行実行中にグローバルデータが複数プロセッサで操作されたときのデータ整合性を保証するために、本発明では２つの基本的な手順を利用する。
【００４５】
・ロッキング：各プロセッサは通常、対応するタスクで使用するグローバルデータをタスク実行開始前にロックするための手段を、データ整合手段１５の一部として含んでいる。このようにすれば、グローバルデータをロックしたプロセッサだけがそのデータにアクセスすることができる。ロックされたデータはタスク実行完了時に解放されることが望ましい。このアプローチにおいては、あるプロセッサによってグローバルデータがロックされているときに別のプロセッサが同じデータにアクセスしようとした場合、ロックされたデータが解放されるまで、別のプロセッサは待たなければならない。一般に、ロッキングには待ち時間（ロックされたグローバル状態での待ちまたは停止）が伴い、並列処理量をある程度制限する（異なるグローバル状態における同時の並行動作は、もちろん可能）。
【００４６】
・衝突検出およびロールバック：ソフトウェアタスクが並列に実行され、アクセス衝突が検出された場合、衝突が検出された１つ以上の実行タスクをロールバックして再開することができる。一般に、衝突検出はマーカー法かアドレス比較法によって行われる。マーカー法の場合、共有メモリでの変数の使用にマーキングするための手段が各プロセッサに含まれ、マーキングに基づいて変数のアクセス衝突が検出される。一般に、衝突検出には、ロールバックによる（無駄な処理の結果として）ペナルティがある。
【００４７】
アプローチの選択はアプリケーションによって異なり、ケースバイケースで選択される。簡単な経験則によれば、データベースシステムには、ロッキングに基づくデータ整合が適しており、電気通信、データ通信システムには、衝突検出が適している。いくつかの応用面では、ロッキングと衝突検出の組み合わせが有利であるかもしれない。
【００４８】
データ整合性を確保するための手段としてのロッキングと衝突検出については、詳しく後述する。
【００４９】
図３は本発明の第１の特徴による処理システムの一実施例を示す。この実施例において、プロセッサＰ１〜Ｐ４は、各プロセッサが個別のローカルキャッシュＣ１〜Ｃ４を備えた対称マルチプロセッサ（ＳＭＰ）であり、イベントキューは専用メモリリストＥＱ１〜ＥＱ４（リンクしたリストが望ましい）として共有メモリ１２に割り当てられる。
【００５０】
前述のように各イベント信号には一般に、ヘッダーと信号本体が含まれる。この場合、ヘッダーには、対応するイベントが属するＮＣＣを表すＮＣＣタグ（明示的が否かは問わない）が含まれる。ディストリビュータ１４はイベント信号に含まれるＮＣＣタグに基づいて、入力イベントをイベントキューＥＱ４〜ＥＱ１の１つへ分配する。例えば、入力ポート、リージョナルプロセッサまたはハードウェア装置など、イベント発生源をＮＣＣタグで表すことができる。入出力ユニット１３で受け取ったイベントが特定のハードウェア装置から発生したものであって、これをイベント信号に含まれるタグで表すと仮定する。そうすると、ディストリビュータ１４はイベントのタグを評価し、あらかじめ格納されたイベントディスパッチテーブル等に基づいて、共有メモリに割り当てられたイベントキューＥＱ１〜ＥＱ４のうちの所定キューにイベントを分配する。各プロセッサＰ１〜Ｐ４は、共有メモリ１２中の各専用イベントキューからローカルキャッシュを通してイベントを取り込んで、それらイベントを順次処理して、処理を終える。トラフィック発生元における長期の不均衡を調整するために、イベントディスパッチテーブルを時々変更することができる。
【００５１】
もちろん、本発明はローカルキャッシュ付きの対称マルチプロセッサに限定するものではない。共有メモリシステムに関する他の例として、キャッシュを含まない共有メモリ、共通キャッシュ付き共有メモリ、混成キャッシュ付き共有メモリがある。
【００５２】
オブジェクト指向設計例
図４は共有メモリソフトウェアのオブジェクト指向設計の簡易化共有メモリマルチプロセッサシステムを示す概要図である。共有メモリ１２におけるソフトウェアはオブジェクト指向設計であり、１セットのブロックＢ１〜Ｂｎまたはクラスとして構成される。各ブロック／オブジェクトは一定の機能を実行する役割をもつ。一般に、各ブロック／オブジェクトは２つの主要セクター、すなわち、コードを格納するプログラムセクターと、データを格納するデータセクターに分けられる。あるブロックのプログラムセクターのコードは、そのブロックに属するデータに関してのみ、アクセス、処理することができる。データセクターもまた２つのセクター、すなわち、複数のグローバル変数ＧＶ１〜ＧＶｎを含む「グローバル」データの第１セクターと、レコードＲ１〜Ｒｎなどの例えば「プライベートな」データの第２セクターに分割されるのが望ましく、通常は各レコードに、レコードＲｘで例示される複数のレコード変数ＲＶ１〜ＲＶｎが含まれる。一般に各トランザクションは、あるブロックの１つのレコードに関連付けられており、ブロック内のグローバルデータを複数トランザクションで共有することができる。
【００５３】
通常はブロックへの信号エントリーで、ブロック内のデータ処理が開始する。各プロセッサはイベントを受け取ると、それがイベント外部イベントか内部イベントに関わらず、そのイベント信号で示されるブロックのコードを実行し、そのブロック中のグローバル変数およびレコード変数の処理を行い、それによってソフトウェアタスクを実行する。図４において、ソフトウェアタスクの実行は各プロセッサＰ１〜Ｐ４内の波線によって示される。
【００５４】
図４の例では、第１のプロセッサＰ１はソフトウェアブロックＢ８８のコードを実行する。図には命令１２０〜１２３だけしか示されていないが、実際には多くの命令が実行され、ブロック中の１つ以上の変数が各命令によって処理される。例えば、命令１２０はレコードＲ１におけるレコード変数ＲＶ２８を処理し、命令１２１はレコードＲ５におけるレコード変数ＲＶ５９を処理し、命令１２２はグローバル変数ＧＶ４３を処理し、命令１２３はグローバル変数ＧＶ６７を処理する。それに対応して、プロセッサＰ２はコードを実行してブロックＢ１の変数を処理し、プロセッサＰ３はコードを実行してブロックＢ８の変数を処理し、プロセッサＰ４はコードを実行してブロックＢ９９の変数を処理する。
【００５５】
ブロック志向のソフトウェアの例として、Ｔｅｌｅｆｏｎａｋｔｉｅｂｏｌａｇｅｔ  ＬＭ  ＥｒｉｃｓｓｏｎのＰＬＥＸ（Ｐｒｏｇｒａｍｍｉｎｇ  Ｌａｎｇｕａｇｅ  ｆｏｒ  Ｅｘｃｈａｎｇｅｓ）ソフトウェアがあり、これはソフトウェア全体がブロック形式で構成される。Ｊａｖａアプリケーションは真のオブジェクト指向設計の例である。
【００５６】
イベントレベルパイプライン処理
前述のように、いくつかのシステムでは、内部イベント（例えば、ＣＰ−ｔｏ−ＣＰバッファ信号）によって接続された「スライス」単位で外部イベントが処理される。
【００５７】
本発明の第２の特徴によると、同時処理は、複数の共有メモリプロセッサからなる少なくとも１セットのプロセッサを、各外部イベントがパイプラインのそれぞれ異なるプロセッサ段で実行されるイベントのチェーンとしてスライス単位で処理されるマルチプロセッサパイプラインとして動作させることによって実行される。ある段から発生するすべての信号が発生順にしたがって次段に送られる限り、発生順信号処理の順序づけ条件は保証されるだろう。この基準から逸脱した場合でも、競走のない実行（ｒａｃｉｎｇ−ｆｒｅｅ  ｅｘｅｃｕｔｉｏｎ）を保証しなければならないだろう。与えられたスライスを実行した結果、２つ以上の信号が発生した場合、それらを発生順に後続プロセッサ段に供給する必要があり、あるいは、これらの信号を２つ以上のプロセッサに分配するときは、競走に伴って計算に支障がないように考慮しなければならない。
【００５８】
ここで、本発明の第２の特徴によるマルチプロセッサパイプラインの一実施例を図５Ａ、図５Ｂにしたがって説明する。
【００５９】
図５Ａは発明の第２の特徴によるイベント駆動型処理システムの概要図である。この処理システムは図２のものと類似している。しかし、マルチプロセッサパイプライン１１の一部であるプロセッサによって生成される内部イベントは、必ずしも同じプロセッサにフィードバックされるわけではなく、プロセッサＰ１〜Ｐ４から引かれた破線で示されるように、いずれかのプロセッサに供給されてイベントキュー１６につながるバス上で終端することもある。
【００６０】
オブジェクト指向のソフトウェアデザインでは、共有メモリのソフトウェアは図４に関連して上述したようにブロックあるいはクラス状に構成され、対応するプロセッサは外部イベントを受け取ると、ブロック／オブジェクトのコードを実行し、別のブロック／オブジェクトに向けた内部イベント形式の結果を生成する。実行のためこの内部イベントが現れると、指示されたブロック／オブジェクトで実行され、他のブロック／オブジェクトに向けた別の内部イベントが生成される。通常、このチェーンは２〜３の内部イベント発生後に消滅する。例えば電気通信に応用する場合、それぞれの外部イベントが生成する内部イベントは５〜１０づつ程度であろう。
【００６１】
オブジェクト指向ソフトウェア設計のためのカスタム化マルチプロセッサパイプラインを実現することにより、ソフトウェアブロック／クラスのクラスタをプロセッサに割り当てることができる。図２では、共有メモリ１２におけるブロック／クラスのクラスタＣＬ１〜ＣＬｎが破線ボックスで図式的に示される。図２においてプロセッサＰ２とクラスタＣＬ１をつなぐ実線で示されるように、１つのクラスタＣＬ１はプロセッサＰ２に割り当てられ、また、プロセッサＰ４とクラスタＣＬ２をつなぐ破線で示されるように、もう一つのクラスタＣＬ２はプロセッサＰ４に割り当てられる。このように、共有メモリ１２内のブロック／クラスの各クラスタは、プロセッサＰ１〜Ｐ４の所定の１つに割り当てられ、割当スキームはディストリビュータ１４内のルックアップデーブル１７と共有メモリ１２内のルックアップデーブル１８で実行される。各ルックアップデーブル１７、１８は、例えばイベントＩＤに基づいて目標ブロックを各イベントにリンクさせ、それぞれの目標ブロックをブロックの所定クラスタに関連づける。ディストリビュータ１４はルックアップデーブル１７における情報にしたがって外部イベントを各プロセッサに分散する。共有メモリ１２のルックアップデーブル１８は、プロセッサへの内部イベントの分散を可能にするために、すべてのプロセッサＰ１〜Ｐ４で使用することができる。言い換えれば、プロセッサは、内部イベントを生成したとき、ルックアップデーブル１８を参照して、ｉ）対応する目標ブロックを、例えばイベントＩＤに基づいて確認し、ｉｉ）確認された目標ブロックが属するクラスタを確認し、ｉｉｉ）確認されたクラスタが割り当てられるプロセッサを確認して、内部イベント信号を適切なイベントキューに送出する。ここで重要なことは、一般的には各ブロックがそれぞれ唯一のクラスタに属しているが、クラスタが重複する割当スキームでも、イベントＩＤの他に実行状態などの情報を用いた若干複雑な方法によって実行可能である。
【００６２】
図５Ｂに示されるように、プロセッサにブロック／クラスのクラスタをマッピングすると、自動的にパイプライン処理が実行される。すなわち、外部イベントＥＥは、プロセッサＰ１に割り当てられているブロックＡに導かれ、このブロックで生成される内部イベントＩＥは、プロセッサＰ２に割り当てられているブロックＢに導かれ、このブロックで生成される内部イベントＩＥは、プロセッサＰ４に割り当てられているブロックＣに導かれ、このブロックで生成される内部イベントＩＥは、プロセッサＰ１に割り当てられているブロックＤに導かれる。したがって、論理的には、多くのプロセッサ段を含むパイプラインを有することになる。ここで、ブロックＡ、Ｄは、プロセッサＰ１にマッピングされるクラスタの一部であると仮定し、ブロックＢはプロセッサＰ２にマッピングされるクラスタの一部であり、ブロックＣはプロセッサＰ４にマッピングされるクラスタの一部である。パイプラインの各段は１つのプロセッサで実行されるが、特定のプロセッサでパイプライン中の１つ以上の段を実行することが可能である。
【００６３】
一つの変形として、共有メモリ１２の所定データ領域からの入力データを必要とするイベントを同一の所定プロセッサセットにマッピングすることもできる。
【００６４】
マルチプロセッサパイプラインにおける１つのプロセッサ段が第１のイベントチェーンに属するイベントを実行して、その結果として発生した内部イベント信号を次のプロセッサ段に送ると、通常は次のイベントチェーンからのイベントの処理が自由に開始されるので、スループットが向上する。
【００６５】
利得を最大にするためには、すべてのプロセッサの負荷が等しくなるように、プロセッサへのパイプライン段のマッピングをする必要がある。したがって、ブロック／クラスのクラスタのパーティションは「等負荷」基準にしたがって仕切られる。各クラスタに費やされる時間は、例えば単一プロセッサで走る同様のアプリケーションから判断することが可能であり、また、ランタイム中に監視してパーティションの再調整をすることもできる。１つの入力イベントに応答してブロックから２つ以上の内部イベントが発生し、それぞれのイベントが別々のブロックに送られる場合、後から発生した内部イベントが先に実行されることを防止する、「等負荷」基準付きの「非競走（ｎｏ  ｒａｃｉｎｇ）」基準が必要である。
【００６６】
もちろん、外部イベントをスライスに分割せずに、そのまま処理してもよいが、分割することにより、構造化されたプログラム開発／メンテナンスが可能になり、更に、パイプライン処理も可能になる。
【００６７】
また、１つの外部イベントを２〜３の大スライスまたは多数の小スライスに分割してもでも、同じ処理を行うことができる。
【００６８】
以上のように、並行タスク実行中にプロセッサでグローバルデータを操作するときの整合性を確保するためには、ｉ）ロッキングと、ｉｉ）衝突検出およびロールバックの２つの基本的な手順がある。
【００６９】
データ整合性を確保する手段としてのロッキング
データ整合性を確保する目的でロッキングを実行すると、一般にタスクを実行する際に、各プロセッサは、タスクが使用するグローバルデータをタスクの実行開始前にロックする。このようにして、グローバルデータをロックしたプロセッサだけが、そのデータにアクセスすることができる。
【００７０】
データ領域を明確に画定して、ブロックの特定のデータセクターまたはブロック全体をロックすることができるので、ロッキングはオブジェクト指向デザインに非常に適している。通常、ブロック内のグローバルデータのどの部分が特定の実行シーケンスまたはタスクによって変更されるかを知ることは不可能であり、グローバルデータの一般的な特徴づけができないため、データ整合性を確保する上で、グローバルデータセクター全体をロックするのが安全な方法である。理想的な場合は、各ブロックのグローバルデータを保護するだけで十分であるが、多くのアプリケーションでは、保護を必要とする「アクロスレコード」と呼ばれる動作がある。例えば、空レコードを選択する動作では、実際に空レコードを見つけるまでに多くのレコードを探すことになろう。したがって、ブロック全体をロックすると、すべてが保護される。また、バッファード信号の実行が、ループする（ＥＸＩＴまでに１ブロック当たり２回以上巡る）可能性があるいわゆるダイレクト／結合信号（あるブロックから別のブロックへダイレクトにジャンプする）によって接続される複数ブロックにまたがるようなアプリケーションでは、ロックされたブロックをタスク実行終了時まで解放できない。
【００７１】
一般に、ＮＣＣを使用すると複数のプロセッサ間の「共有状態」が最小限になって、キャッシュヒット率が向上する。特に、例えば電気通信システムにおけるシグナリング装置や加入者端末などの機能的に異なるリージョナルプロセッサ／ハードウェア装置を主要ノードにおけるそれぞれ異なるプロセッサにマッピングすると、後方の実行段に処理が達するまで、異なるアクセスメカニズムは通常異なるブロックで処理されるため、ロックされたブロック上でノーウエイトまたはほとんどノーウエイトで異なるアクセスメカニズムの同時処理が可能になる。
【００７２】
図６は、データ整合性を保証するために行うブロック／オブジェクトのロッキングを示す。３つの異なる外部イベントＥＥｘ、ＥＥｙ、ＥＥｚがブロックＢ１、Ｂ２、Ｂ１にそれぞれ送られる場合を考察する。外部イベントＥＥｘはブロックＢ１に入り、ブロックＢ１の対角線で示されるように、対応するプロセッサがブロックにおける実行開始前にブロックＢ１をロックする。次に、外部イベントＥＥｙはブロックＢ２に入り、対応するプロセッサがブロックＢ２をロックする。図６の時間軸（ｔ）で示されるように、既にブロックＢ１に入って、そのブロックをロックしている外部イベントＥＥｘに続いて、ブロックＢ１に向かう外部イベントＥＥｚが到達する。したがって、外部イベントＥＥｚの処理は、ブロックＢ１が解放されるまで待たなければならない。
【００７３】
しかし、ロッキングによって、２つのプロセッサが、現タスクの実行で互いに必要とする変数が解放されるのを無限に待ち続けるデッドロック状態が生じ得る。したがって、デッドロックを避けるか、あるいはデッドロックを検出し、処理の進行を保証するロールバックを行うのが望ましい。
【００７４】
実行中に必要に応じてブロックを確保またはロックする代わりに、ジョブの始めにタスク（すなわちジョブ）全体の実行に必要な全ブロックを確保することによってデッドロックを回避することができる。あるジョブに必要な全ブロックを常に予測することは不可能であるがコンパイラ分析を使用する非ランタイム入力の場合、例えばジョブ中の処理時間の多くの部分を消費するブロックを少なくとも確保することによってデッドロックを最小にするための情報が得られるかもしれない。デッドロックを最小にする効率的な方法は、その処理で次に必要になるブロックであるか否かにかかわらず、使用頻度の高いブロックを実行開始前に確保することである。最も安全な考え方は、ほとんど間違いなくジョブに必要なブロック、特に、使用頻度の高いブロックを確保し、そして残りのブロックを必要な時点で確保することである。
【００７５】
実行中に必要に応じてブロックを確保しようとすると、前述のようにデッドロックになり易いので、デッドロックを検出して、分析する必要がある。デッドロックは、できるだけ早く検出するのが望ましく、本発明によれば、ほとんど即座にデッドロックを検出することができる。すべての「オーバーヘッド処理」は２つのジョブ間で行われるので、デッドロックを起こしそうな後のジョブにリソースが取られると、デッドロックの検出が明らかになる。これは、他のプロセッサが対象のジョブに必要なリソースの１つを保持しているかどうかチェックし、そのプロセッサが対象のジョブのプロセッサに保持されたリソースを待っているかどうかを、例えばブロックごとのフラグを使用して確認することによって達成される。
【００７６】
デッドロックを最小にすると、通常、ロールバックスキームと進行スキームに影響を与える。デッドロックの頻度が下がるにしたがって、まれにしか起こらないロールバックの効率を気にする必要がなくなるので、ロールバックスキームは単純になる。逆に、デッドロックの頻度が比較的高いと、効率的なロールバックスキームが重要になる。
【００７７】
ロールバックの基本原理は、保持されたリソースをすべて解放し、デッドロックの原因にかかわるジョブの１つの開始点に戻り、その時点までの実行中に行われたすべての変更を元に戻し、そして、効率を損なわずに処理の進行が保証されるような方法、あるいはそのような遅延時間を経て、ロールバックされたジョブを再実行することである。この原理は一般に、ロールバックスキームがただちにジョブを再実行することによって同じジョブのロールバックが原因のデッドロックの繰返しを許さないと同時に、また、ロールバックジョブの開始までの遅延時間をあまり長くしないことを意味する。しかし、ジョブの実行時間が非常に短い場合は、単にロールバックの対象としてデッドロックの原因となった「後の（ｌａｔｅｒ）」ジョブを選択するのが適切であろう。
【００７８】
データ整合性を確保する手段としての衝突検出
データ整合性を確保する目的で衝突検出を実施すると、複数のプロセッサによってソフトウェアタスクが並列に実行されてアクセス衝突が検出され、そして衝突が検出された１つ以上の実行タスクをロールバックして再実行することができる。
【００７９】
タスク実行中に各プロセッサが共有メモリにおける変数の使用をマークして、変数アクセス衝突の検出を可能にすることが望ましい。ごく基本的なレベルでは、マーカー法は共有メモリにおける個々の変数の使用をマークする過程を含む。しかし、個々のデータの代わりに比較的広い領域をマークすることによって、やや大まかな衝突チェックが実現できる。大まかな衝突チェックを実施する一つの方法は、ページングを含む標準メモリ管理テクニックの利用である。もう一つは、変数の組分けをマークする方法であって、個々のレコード変数をマークする代わりに、レコード内のすべてのレコード変数を含む全レコードをマークする場合に、特に効率的である。しかし、与えられたデータ領域をジョブが使用するときに、他のジョブが同じ領域を使用する確率が非常に低くなるような「データ領域」を選択することが重要である。さもなければ、大まかなデータ領域マーキングが、実際にはロールバックの頻度を増すことになるかもしれない。
【００８０】
図７は、オブジェクト指向ソフトウェア設計におけるアクセス衝突を検出する際の変数マーキングの使用を示す。図４との関連で上述したように、共有メモリ１２は複数ブロックＢ１〜Ｂｎで構成され、複数のプロセッサＰ１〜Ｐ３が共有メモリ１２に接続される。図７では、ブロックＢ２およびブロックＢ４の２ブロックについて詳細が示されている。この特定のマーカー法では、ブロック内の各グローバル変数ＧＶ１〜ＧＶｎおよび各レコードＲ１〜Ｒｎは、図７に示されるマーカーフィールドに関連付けられる。
【００８１】
マーカーフィールドは共有メモリシステムに接続されたプロセッサごとに１ビットを含むから、この場合、各マーカーフィールドは３ビットを含む。最初に全ビットがリセットされ、各プロセッサは変数かレコードにアクセス（読み書き）する前に自己のビットをセットし、次に、マーカーフィールド全体を読んで評価する。マーカーフィールド内で他のビットがセットされていれば、衝突の可能性が差し迫っているので、プロセッサロールは実行中のタスクをロールバックして、対応する全マーカービットをリセットすることを含めて、現実行点までに施されたすべての変更を元に戻す。一方、他に設定されたビットがなければ、プロセッサはタスクの実行を続ける。各プロセッサは実行中にアクセスした各変数のアドレスを記録し、タスク実行終了時には、記録されたアドレスを使用してそれぞれの対応マーカーフィールド中の自己ビットをリセットする。
【００８２】
衝突検出時にロールバックできるようにしておくためには、修正された全変数および各ジョブ実行中の全アドレスのコピー（変更前の変数状態）を保存する必要がある。それによって、ロールバック時に原状回復が可能になる。
【００８３】
図７において、プロセッサＰ２はグローバル変数ＧＶ１にアクセスする必要があり、ＧＶ１に関連するマーカーフィールドの第２位置における自己のビットをセットして、マーカーフィールド全体を読む。この場合、プロセッサＰ２がセットしたビットと、プロセッサＰ１がセットしたビットがフィールド（１１０）に含まれることから、変数アクセス衝突が差し迫っていることが検出される。プロセッサＰ２は実行中のタスクをロールバックする。そして、レコードＲ２にアクセスする必要があれば、プロセッサＰ２は第２位置における自己ビットをセットして、次に、マーカーフィールド全体を読む。Ｐ２がセットしたビットと、Ｐ３がセットしたビットがフィールド（０１１）に含まれることから、レコードアクセス衝突が検出され、プロセッサＰ２は実行中のタスクをロールバックする。レコードＲ１にアクセスする必要があると、プロセッサＰ３はまず、関連マーカーフィールドの第３位置における自己ビットをセットし、そのフィールド全体を読んで評価する。この場合、他にセットされたビットがないので、プロセッサＰ３はレコードにアクセスして読み書きすることができる。例えば、ほとんど読み込んだ変数に関する不要なロールバックを減らすために、それぞれのマーカーフィールドには、各プロセッサあたり２ビットづつ、すなわち読出しと書き込みに１ビットづつ含まれることが望ましい。
【００８４】
もう一つの衝突検出アプローチはアドレス比較法と呼ばれ、タスク終了時に読出しと書き込みアドレスが比較される。マーカー法との主な違いは、他のプロセッサによるアクセスを通常はタスク実行中にチェックせず、タスク終了時にだけチェックすることである。アドレス比較法を実施する特定タイプのチェックユニットに関する一例が国際特許出願ＷＯ８８／０２５１３で開示されている。
【００８５】
既存アプリケーションソフトウェアの再利用
通常、既存のシーケンシャリープログラムド（ｓｅｑｕｅｎｔｉａｌｌｙ  ｐｒｏｇｒａｍｍｅｄ）アプリケーションソフトウェアには、かなりな金額が投資されており、階層化処理システムの最上位レベルにおける単一プロセッサノードなどの単一プロセッサシステム用として、何千行、何百万行ものソフトウェアコードが既に存在している。アプリケーションソフトウェアが複数のプロセッサ上で実行されるとき、再コンパイル等によって自動的にアプリケーションソフトウェアを変換してデータ整合性を確保すれば、すべてのソフトウェアコードはマルチプロセッサ環境に移行され、再利用されるので、時間と費用の節約になる。
【００８６】
図８Ａは層状の観点からみた従来技術による単一プロセッサシステムを示す。下部層は、標準マイクロプロセッサ等のプロセッサＰ１である。次の層にはオペレーティングシステムが含まれ、続いて仮想計算機があり、この仮想計算機で最上層のアプリケーションソフトウェアが翻訳される。
【００８７】
図８Ｂは層状の観点からみたマルチプロセッサシステムを示す。下部層は、即納で入手可能な複数の共有メモリプロセッサとして実現されるマイクロプロセッサＰ１、Ｐ２である。次の層はオペレーティングシステムである。仮想計算機は例えばＳＵＮのワークステーション上で走るＡＰＺエミュレータや、ＳＩＭＡＸ等のコンパイル型式の高性能エミュレータなど、周知のＪａｖａ仮想計算機であって、マルチプロセッササポートおよびデータ整合性関連サポートに適するように変更される。一般に、シーケンシャリープログラムド（ｓｅｑｕｅｎｔｉａｌｌｙ  ｐｒｏｇｒａｍｍｅｄ）アプリケーションソフトウェアは、オブジェクトコードのポスト処理により、あるいは、コンパイルされるものであれば再コンパイルにより、また、翻訳されるものであればインタプリタを変更することにより、データ整合性関連サポートに適するコードを追加するだけで変換される。
【００８８】
変数マーキングに基づく衝突検出の場合、以下の方法で、単一プロセッサシステム用アプリケーションソフトウェアをマルチプロセッサ環境に移行することができる。適切なロールバックを可能にするため、変数への各書き込みアクセス前に変数のアドレスおよび原状態を格納するためのコードがアプリケーションソフトウェアに挿入される。変数への各読み出しおよび書き込みアクセス前に、マーカーフィールドのマーカービットをセットし、マーカーフィールドをチェックし、変数のアドレスを格納するためのコードがソフトウェアに挿入される。続いて、アプリケーションソフトウェアの再コンパイルまたは再翻訳、あるいはオブジェクトコードのポスト処理が行われる。衝突検出関連サポートに適応するためにハードウェア／オペレーティングシステム／仮想計算機が修正され、ロールバックが実行され、マーカーフィールドがリセットされる。したがって、マーカーフィールドをチェックするためのコードを実行するときに衝突が検出されると、通常はハードウェア／オペレーティングシステム／仮想計算機に制御が移り、格納されている修正変数のコピーを使用してロールバックが行われる。通常はジョブの終わりに、ハードウェア／オペレーティングシステム／仮想計算機は、ジョブでアクセスした変数の格納されたアドレスによって示される各マーカーフィールド中の関連ビットを引き継いで、リセットする。
【００８９】
コードの静的分析を行うことにより、新しいコードの挿入を最小限にとどめることができる。例えば、前述のように各読み書きの前に必ずコードを挿入するのではなく、最終目的が達せられる程度に回数を減らしてコードを挿入することができる。
【００９０】
しかし、専用設計の特殊ハードウェアとして複数のプロセッサが使用される場合は、アプリケーションソフトウェアがマルチプロセッサ環境に直接移行すると理解するべきである。
【００９１】
図９は、本発明による１つ以上の処理システムを実施した通信システムの概略図である。通信システム１００はＰＳＴＮ（Ｐｕｂｌｉｃ  Ｓｗｉｔｃｈｅｄ  Ｔｅｌｅｐｈｏｎｅ  Ｎｅｔｗｏｒｋ）、ＰＬＭＮ（Ｐｕｂｌｉｃ  Ｌａｎｄ  Ｍｏｂｉｌｅ  Ｎｅｔｗｏｒｋ）、ＩＳＤＮ（Ｉｎｔｅｇｒａｔｅｄ  Ｓｅｒｖｉｃｅｓ  Ｄｉｇｉｔａｌ  Ｎｅｔｗｏｒｋ）およびＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｔｒａｎｓｆｅｒ  Ｍｏｄｅ）ネットワークなど、様々なベアラサービスネットワークをサポートすることができる。通信システム１００は基本的に、トランクグループに通常分類される物理リンクによって相互接続される複数の交換／ルーティングノード５０−１〜５０−６を含む。交換ノード５０−１〜５０−４にはアクセスポイントがあって、そこに電話５１−１〜５１−４とコンピュータ５２−１〜５２−４等のアクセス端末がローカル交換機（図示せず）を通して接続される。交換ノード５０−５は移動体交換センター（ＭＳＣ）５３に接続される。ＭＳＣ５３は２台の基地局コントローラ５４−１、５４−２（ＢＳＣ）、およびホームロケーションレジスタ（ＨＬＲ）ノード５５に接続される。第１のＢＳＣ５４−１は、１個以上の移動体ユニット５７−１、５７−２と通信する複数の基地局５６−１、５６−２に接続される。同様に、第２のＢＳＣ５４−２は、１個以上の移動体ユニット５７−３と通信する複数の基地局５６−３、５６−４に接続される。交換ノード５０−６はデータベースシステム（ＤＢＳ）を備えたホストコンピュータ５８に接続される。システム１００に接続されたユーザ端末、例えばコンピュータ５２−１、５２−４は、ホストコンピュータ５８のデータベースシステムにデータベースサービスを要求することができる。サーバ５９、特にＪａｖａサーバは交換／ルーティングノード５０−４に接続される。また、ビジネスネットワーク（図示せず）などのプライベートネットワークも、図１の通信システムに接続することが可能である。
【００９２】
通信システム１００は、ネットワークに接続されたユーザに対して様々なサービスを提供する。それらサービスの例として、ＰＳＴＮ、ＰＬＭＮによる通常の通話、メッセージサービス、ＬＡＮ接続、インテリジェントネットワーク（ＩＮ）サービス、ＩＳＤＮサービス、ＣＴＩ（Ｃｏｍｐｕｔｅｒ  Ｔｅｌｅｐｈｏｎｙ  Ｉｎｔｅｇｒａｔｉｏｎ）サービス、テレビ会議システム、ファイル転送、いわゆるインターネットへのアクセス、ポケットベルサービス、ビデオ・オン・デマンドなどがある。
【００９３】
本発明によると、システム１００における各交換ノード５０に、発明の第１または第２の特徴による（あるいは行列処理システム形式で２つの特徴を組み合わせた）処理システム１−１〜１−６を設け、その処理システムによってサービス要求やノード間通信などのイベントを取り扱うことが望ましい。例えば、呼セットアップでは、ジョブシーケンスを実行するために処理システムを必要とする。このジョブシーケンスにより、プロセッサレベルでの呼セットアップサービスが定義される。また、本発明による処理システムは、ＭＳＣ５３、ＢＳＣ５４−１、５４−２、ＨＬＲノード５５、通信システム１００のホストコンピュータ５８およびサーバ５９を、各１つ用いて構成することが望ましくい。
【００９４】
本発明は階層化処理システムの上位レベルプロセッサノードで使用することが好ましいが、当業者には明らかな通り、イベントフローコンカレンシの確認が可能であれば、あらゆるイベント駆動型処理に発明の上記特徴を適用することができる。
【００９５】
イベントベースシステムの定義として、必ずしも限定しないが、電気通信、データ通信、トランザクション志向のシステムを包含する。
【００９６】
共有メモリプロセッサの定義としては、市場で簡単に入手できる標準マイクロプロセッサに限定するものではなく、ＳＭＰや特化ハードウェアなど、すべての処理ユニットからアクセス可能なアプリケーションソフトウェアおよびデータで共通メモリに対して動作する各種タイプの処理ユニットを包含する。また、これは共有メモリがいくつかのメモリユニットにわたって分散されたシステム、あるいは、異なるプロセッサに対する分散共有メモリの異なる部分へのアクセスタイムが異なるかもしれない非対称アクセスのシステムも包含する。
【００９７】
上述の実施例は単なる例として挙げたものであって、それらは本発明を限定するものではない。上記以外にも、ここに開示され、請求される基本原理を保有する修正、変更、改良を発明の範囲と主旨にしたがって実施することができる。
【図面の簡単な説明】
【図１】  上位レベルのプロセッサノードを備えた本発明による階層化分散処理システムの概要図。
【図２】  本発明の第１の特徴による処理システムの概要図。
【図３】  本発明の第１の特徴による処理システムの特定実施例。
【図４】  共有メモリソフトウェアのオブジェクト指向設計による簡易化共有メモリマルチプロセッサの概要図。
【図５Ａ】  本発明の第２の特徴による特に好ましい処理システムの概要図。
【図５Ｂ】  本発明の第２の特徴によるマルチプロセッサパイプライン。
【図６】  データの整合性を確保するためのブロック／オブジェクトロッキングの使用例。
【図７】  アクセス衝突検出のための変数マーキングの使用例。
【図８Ａ】  階層的に見た従来技術によるシングルプロセッサシステム例。
【図８Ｂ】  階層的に見たマルチプロセッサシステム例。
【図９】  本発明による少なくとも１つの処理システムを実装した通信システムの概要図。
【図１】
0004489958.tif 000002
【図２】
0004489958.tif 000003
【図３】
0004489958.tif 000004
【図４】
0004489958.tif 000005
【図５Ａ】
0004489958.tif 000006
【図５Ｂ】
0004489958.tif 000007
【図６】
0004489958.tif 000008
【図７】
0004489958.tif 000009
【図８Ａ】
0004489958.tif 000010
【図８Ｂ】
0004489958.tif 000011
【図９】
0004489958.tif 000012