(57)【要約】【課題】  同一ユーザに対してサービスを確立するためのイベントが多様かつ輻輳的に発生するサービスを提供する際に、イベントの排他制御を適切に行う。【解決手段】  本発明では、サービス提供に必要な１又は複数のサービスオブジェクトと、サービスオブジェクトを収容している排他制御オブジェクトを有する排他グループを規定している。各イベントを、優先イベントと非優先イベントとに分かれる。各サービスオブジェクトはそれぞれ、自オブジェクトに係る非優先イベントを収容するキューを備える。複数のキューにキューイングされている、排他グループ内の全ての非優先イベントにはリンクが張られる。排他制御オブジェクトは、優先イベントを収容するキューを備える。排他制御オブジェクトは、キューイングされている優先イベントを、リンクが張られている非優先イベントより優先して実行制御する。【選択図】      図１
2007233977.tif 000002
【特許請求の範囲】
【請求項１】
シングルＣＰＵがメモリ上に展開されたサービス提供プログラムに従い、輻輳的に発生するイベントを排他制御しながら実行するマルチタスクシステムの排他制御方法において、
同一の被提供者へのサービス提供に必要な１又は複数のサービスオブジェクトを所属させた、しかも、上記サービスオブジェクトを収容している排他制御オブジェクトを有する排他グループを規定し、
各イベントを、実行の緊急性に基づいて、処理を優先的に行う優先イベントと、その他の非優先イベントに分離し、
上記各サービスオブジェクトはそれぞれ、自オブジェクトに係る非優先イベントを収容する非優先イベントキューを備え、
上記各サービスオブジェクトの非優先イベントキューにキューイングされている、当該排他グループ内の全ての非優先イベントにリンクを張り、
上記排他制御オブジェクトは、優先イベントを収容する優先イベントキューを備え、
上記排他制御オブジェクトは、当該排他グループが実行権を得たときに、優先イベントキューにキューイングされている優先イベントを、リンクが張られている上記各サービスオブジェクトの非優先イベントキューにキューイングされている非優先イベントより優先して実行制御する
ことを特徴とするマルチタスクシステムの排他制御方法。
【請求項２】
サービス提供の形態、段階に応じて、排他グループ内にサービスオブジェクトを追加させ、又は、排他グループ内から所定のサービスオブジェクトを離脱させ、離脱時には、非優先イベントのリンクを張り直すことを特徴とする請求項１に記載のマルチタスクシステムの排他制御方法。
【請求項３】
サービス提供の形態、段階に応じて、複数の排他グループを、上記各排他グループの上記排他制御オブジェクトが親子関係となるように、かつ、上記各排他制御オブジェクトが上記サービスオブジェクトの収容状態を維持したまま、結合することを特徴とする請求項１又は２に記載のマルチタスクシステムの排他制御方法。
【請求項４】
親の上記排他制御オブジェクトは、子の上記排他制御オブジェクトを、自己が収容するサービスオブジェクトと同列で排他制御対象とすることを特徴とする請求項３に記載のマルチタスクシステムの排他制御方法。
【請求項５】
サービス提供の形態、段階に応じて、複数の上記排他グループが結合されて形成されている排他グループを、２個の上記排他制御オブジェクト間の親子関係を分断することにより、分離することを特徴とする請求項３又は４に記載のマルチタスクシステムの排他制御方法。
【請求項６】
サービス提供の形態、段階に応じて、複数の上記排他グループが結合されて形成されている排他グループ内において、所定の上記サービスオブジェクトの収容先の上記排他制御オブジェクトを変更することを特徴とする請求項３又は４に記載のマルチタスクシステムの排他制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマルチタスクシステムの排他制御方法に関し、例えば、ＩＰ電話サービスのような、１個のサービス提供サーバ（交換サーバ）が収容するユーザが非常に多く、１ユーザに対してサービスを確立するためのイベントが多様かつ輻輳的に発生する加入者サービスのサービス提供サーバ（交換サーバ）に適用し得る。
【背景技術】
【０００２】
一般的な非同期通信システムのサーバ（例えば、ＩＰ電話サービスを提供している交換サーバ）では、入力されたイベントに対してコンテキストを割り当て、マルチスレッド（この明細書においてはスレッドやプロセスをまとめてスレッドと呼ぶ）の構造にて、多様で輻輳的なイベントの処理（例えば、多くの加入者からの発呼や着呼やその他の処理に応じる）を実現している。加入者サービスを実現しているサービスオブジェクトなどの上位リソースへアクセスする際には、コンテキストが再入することによって、データの破壊が起きないように、ｍｕｔｅｘなどのロックプリミティブを用いた排他制御処理を実施する（例えば、特許文献１〜特許文献３、非特許文献１、非特許文献２参照）。
【０００３】
例えば、加入者Ａに対する発呼でも、加入者Ａが加入者Ｂと通話状態にあるときに発生した発呼（イベントＸ）と、通話状態にない加入者Ａに対する発呼（イベントＹ）とでは処理や優先度が異なり、また、加入者Ａがキャッチホンサービスを契約しているか否かによっても発呼時（イベントＸ−１、Ｘ−２）の処理や優先度が異なり、排他制御処理が必要となっている。
【０００４】
イベントの順位性は、コンテキストの優先度に応じて、実現することも可能となっているが、システムに依存してしまうため、アプリケーション上でキュー配列を構築して順位付けを行う。通常、キュー長の設定は、イベント輻輳を考慮し、多めに捕捉しておく必要がある。
【特許文献１】特開平９−０２６９２３号公報
【特許文献２】特開平９−０４４３６８号公報
【特許文献３】特開平９−１０１９０１号公報
【非特許文献１】ｗｗｗ．ｈｌｌａ．ｉｓ．ｔｓｕｋｕｂａ．ａｃ．ｊｐ／~ｙａｓ／ｓｉｅ／ｐｄｓｏｆｔ−２０００／２００１−０１−１８／
【非特許文献２】ｗｗｗ．ｖａｌｉｎｕｘ．ｃｏ．ｊｐ／ｄｏｃｓ／ｐｄｆ／ＶＡＢＦ２００３／ＶＡＢＦ_Ｔ０１．ｐｄｆ
【発明の開示】
【発明が解決しようとする課題】
【０００５】
一元的なｍｕｔｅｘのような排他制御では、イベントを保持したコンテキスト同士の衝突を避けるだけとなり、排他された別のイベントを保持しているコンテキストは、現在処理を行っているコンテキストの処理が完了するまで待機することとなり、サービスオブジェクトへイベント伝達がなされるまで時間がかかってしまうこととなる。そのため、サービスの継続性や品質を必要とするシステム（例えば、ＩＰ電話システム）のサーバなどには適用することはできない。
【０００６】
順位性を保証するためのキューは一次配列であり、キュー長は有限なものである。そのため、例えば、複数のサービスオブジェクトが一斉に生成され、イベントが発生した場合、キューあふれが発生し、イベントが喪失してしまうこととなる。
【０００７】
一方、キュー配列を動的に生成／確保していくモデルが考えられるが、システムメモリが限定されているようなシステムでは、キューサイズの管理を実施しなければならず、メモリ管理部がサービスオブジェクトの生成条件を意識する必要があり、オブジェクト指向開発下のモデルには適さない。以上のように、提供するサービスの特性や動作条件に見合った形に、キューの構造的配置を予め定めておくことは大変困難である。
【０００８】
また、キューへのイベント入力とキューからのイベント出力を実施するコンテキストにおいても、順序性を保つため、一つのキューに対して、そのコンテキストに係る入力イベント及び出力イベントを一つずつ配置しなければならない。これは、輻輳的に発生するイベントを処理するには性能的なボトルネックとなる。
【０００９】
さらに、既にキューイングしてあるイベントキューからある特定のオブジェクト宛のイベントを削除／変更する場合に、通常のキュー配列では、先頭からの線形検索を実施しなければ実行することができない。輻輳的にイベントが発生する場合、キュー長も大きくなっており、線形検索実施による処理時間の保証は不可能である。
【００１０】
そのため、収容するユーザが多く、同一ユーザに対してサービスを確立するためのイベントが多様かつ輻輳的に発生するサービスを提供するサーバなどに、好適なマルチタスクシステムの排他制御方法が望まれている。
【課題を解決するための手段】
【００１１】
本発明は、シングルＣＰＵがメモリ上に展開されたサービス提供プログラムに従い、輻輳的に発生するイベントを排他制御しながら実行するマルチタスクシステムの排他制御方法において、（ア）同一の被提供者へのサービス提供に必要な１又は複数のサービスオブジェクトを所属させた、しかも、上記サービスオブジェクトを収容している排他制御オブジェクトを有する排他グループを規定し、（イ）各イベントを、実行の緊急性に基づいて、処理を優先的に行う優先イベントと、その他の非優先イベントに分離し、（ウ）上記各サービスオブジェクトはそれぞれ、自オブジェクトに係る非優先イベントを収容する非優先イベントキューを備え、（エ）上記各サービスオブジェクトの非優先イベントキューにキューイングされている、当該排他グループ内の全ての非優先イベントにリンクを張り、（オ）上記排他制御オブジェクトは、優先イベントを収容する優先イベントキューを備え、（カ）上記排他制御オブジェクトは、当該排他グループが実行権を得たときに、優先イベントキューにキューイングされている優先イベントを、リンクが張られている上記各サービスオブジェクトの非優先イベントキューにキューイングされている非優先イベントより優先して実行制御することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、同一ユーザ（同一の被提供者）に対してサービスを確立するためのイベントが多様かつ輻輳的に発生するサービスを提供する際に、イベントの排他制御を適切に行うことができる。
【発明を実施するための最良の形態】
【００１３】
（Ａ）実施形態
以下、本発明によるマルチタスクシステムの排他制御方法の一実施形態を、図面を参照しながら詳述する。なお、以下の説明において、具体例での補足は、ＩＰ電話システムにおけるコールエージェント（交換サーバ）に設けられているマルチ呼処理タスクシステムを例に行うこととする。
【００１４】
（Ａ−１）実施形態の技術思想の特徴
この実施形態は、サービスオブジェクトへ入力されるイベントの形態に伴ってキューとコンテキストの配置を最適化するための排他制御オブジェクトＥＸＯＢと、各サービスオブジェクトの基底クラスを提供することにより、オブジェクトのグルーピング、そのグループ内でサービスオブジェクトが増加したときのキュー長の自然拡張、及び、ロック処理を必要としないコンテキストの割付を実現する点に特徴を有している。
【００１５】
また、この実施形態は、イベントキューの配列をサービスオブジェクトとバインドすることにより、該当オブジェクト宛のイベントキューを即座に発見することを可能にしている点に特徴を有している。
【００１６】
（Ａ−２）マルチタスク処理装置
以下、マルチタスクシステムが実装されたマルチタスク処理装置の構成を、マルチ呼処理タスク処理装置を例に説明する。
【００１７】
マルチ呼処理タスク処理装置は、例えば、ＩＰ電話機などからの多量のＶｏＩＰ信号（例えば、８０万回線）を取り扱うコールエージェントに適用されているものであり、ハードウェア的には、一般的なコールエージェントと同様である。すなわち、ＣＰＵ、メモリ、内蔵ＨＤＤ等の大容量記憶装置、キーボード、マウス、ディスプレイ、通信インタフェース部などを備えており、ＣＰＵは、システムバスを介してメモリに接続され、また、システムバス及び入出力デバイスを介して、大容量記憶装置、キーボード、マウス、ディスプレイ、通信インタフェース部等と接続されている。
【００１８】
このマルチ呼処理タスク処理装置は、例えば、Ｌｉｎｕｘ・Ｗｉｎｄｏｗｓ（登録商標）等の汎用マルチタスクＯＳを適用している。汎用マルチタスクＯＳはカーネル内にＴＳＳスケジューラを有している。
【００１９】
マルチ呼処理タスク処理装置１は、図２に示すように、汎用マルチタスクＯＳ２０におけるカーネル２１内のＴＳＳスケジューラ２２に加え、ユーザ層に位置する、スケジューラ機能（呼処理イベントスケジューラ３１）や排他制御機能（グループ別排他制御処理部３２）を有する呼処理イベントエンジン３０を有している。スケジュール機能面からは、ＴＳＳスケジューラ２２は、イベントエンジン３０を介して、ＶｏＩＰアプリケーション４０に係るスレッドを処理対象とし得る。言い換えると、イベントスケジューラ３１は、カーネル２１のＴＳＳスケジューラ２２上で動作するコンテキストである。
【００２０】
この実施形態の場合、後述するように、排他制御の単位となる排他グループが複数存在し、カーネル２１のＴＳＳスケジューラ２２上で動作するイベントスケジューラ３１は、ＣＰＵの実行権を、どの排他グループに付与するかを決定するものである。なお、この決定には、この実施形態の特徴はないのでその説明は省略する（例えば、特願２００４−３７９９０９号明細書及び図面に記載の方法を適用できる）。
【００２１】
グループ別排他制御処理部３２は、各排他グループ毎に、イベントの順位性を管理し、ＣＰＵの実行権が付与された排他グループに関しては、複数のイベントを排他制御しながら実行させるものである。
【００２２】
（Ａ−３）排他グループ毎のイベントの順位性
次に、排他グループ毎のイベントの順位性を、図１を参照しながら説明する。ここで、図１は、排他グループにおけるオブジェクトとイベントキューとの関係を示す説明図である。
【００２３】
排他グループは、排他制御の単位となるオブジェクトの集合体である。上述したコールエージェントの場合であれば、概ね、各排他グループはそれぞれの「呼」に対応する。
【００２４】
排他グループＥＧは、図１に示すように、排他グループＥＧ内のイベント実行を制御するための排他制御オブジェクトＥＸＯＢと、１以上（図１は４個の例を示している）のサービスオブジェクトＳＥＯＢ−１〜ＳＥＯＢ−４で構成される。
【００２５】
図１に示す排他グループＥＧの例では、４つのサービスオブジェクトＳＥＯＢ−１〜ＳＥＯＢ−４が一つの排他グループＥＧに属しており、排他制御オブジェクトＥＸＯＢによりイベント実行制御が行われる例である。
【００２６】
図１は、コールエージェントにおける排他グループの例を示しており、サービスオブジェクトＳＥＯＢ−１〜ＳＥＯＢ−４はそれぞれ、発呼側のＩＰ電話機との信号授受を担当する「（発呼側）リソースオブジェクト」、呼処理シーケンスを担当する「コール制御オブジェクトＥＸＯＢ」、３者通話サービスや転送サービスなどへの移行処理などを担当する「シナリオオブジェクト」、着呼側のＩＰ電話機との信号授受を担当する「（着呼側）リソースオブジェクト」である。例えば、着呼側電話番号が入力されていない状態であれば、「（着呼側）リソースオブジェクト」が形成されておらず、着呼側電話番号が入力され、それに応じたスレッドが実行されることにより「（着呼側）リソースオブジェクト」が形成される。通話状態において、発呼側又は着呼側のＩＰ電話機がオンフックされ、それに応じたスレッドが実行されることにより、オンフックされたＩＰ電話機に係る「リソースオブジェクト」が消去、離脱される。以上のように、一つの排他グループＥＧ内のサービスオブジェクトＳＥＯＢも増減するものである。
【００２７】
排他制御オブジェクトＥＸＯＢは、現在存在しているサービスオブジェクトＳＥＯＢ−１〜ＳＥＯＢ−４のリスト情報ＬＩＳを管理している。
【００２８】
排他グループＥＧは、２種類の優先度からなるイベントキューを有する。すなわち、「非優先」イベントキューＱ１（Ｑ１−１〜Ｑ１−４）と、「優先」イベントキューＱ２とを有している。
【００２９】
「非優先」イベントキューＱ１は、外部からの入出力のような数が多く非優先的に扱うイベント（非優先イベント）ＥＶＮに対するキュー配列であり、このキューＱ１は、サービスオブジェクトＳＥＯＢ−１〜ＳＥＯＢ−４に配置されている。非優先イベントＥＶＮは、イベント実行対象のサービスオブジェクトＳＥＯＢ−１〜ＳＥＯＢ−４の非優先イベントキューＱ１にキューイングされる。ここで、各サービスオブジェクトＳＥＯＢ−１〜ＳＥＯＢ−４が生成している間に同時に受信すると思われる非優先イベントＥＶＮの最大数に、非優先イベントキューＱ１のキュー長が選定されている。そのため、各サービスオブジェクトＳＥＯＢ−１〜ＳＥＯＢ−４の特性により、各サービスオブジェクトＳＥＯＢ−１〜ＳＥＯＢ−４における必要なキュー長は異なるが、それぞれ必要なキュー長が確保される。また、サービスオブジェクトＳＥＯＢが新たに生成されてグループＥＧ内に結合されると、排他グループＥＧ全体に対するキュー長が伸長されたことになる。
【００３０】
発生した非優先イベントＥＶＮは、上述したように、実行対象サービスオブジェクトＳＥＯＢ−１〜ＳＥＯＢ−４の非優先イベントキューＱ１にキューイングされると共に、排他グループＥＧ内でそれまでの最後にキューイングされていた非優先イベントＥＶＮにリンクされる。
【００３１】
図３は、排他グループＥＧの非優先イベントキューＱ１間における非優先イベントＥＶＮのリンク状態の一例を示す説明図である。
【００３２】
まず、非優先イベントＥＶＮ−５が生じていない、４個の非優先イベントＥＶＮ−１〜ＥＶＮ−４が存在している状態を説明する。サービスオブジェクトＳＥＯＢ−Ａに係る非優先イベントＥＶＮ−１及びＥＶＮ−３はサービスオブジェクトＳＥＯＢ−Ａ内の非優先イベントキューＱ１−Ａにキューイングされ、サービスオブジェクトＳＥＯＢ−Ｂに係る非優先イベントＥＶＮ−２はサービスオブジェクトＳＥＯＢ−Ｂ内の非優先イベントキューＱ１−Ｂにキューイングされ、サービスオブジェクトＳＥＯＢ−Ｃに係る非優先イベントＥＶＮ−４はサービスオブジェクトＳＥＯＢ−Ｃ内の非優先イベントキューＱ１−Ｃにキューイングされる。これらの４個の非優先イベントＥＶＮ−１〜ＥＶＮ−４はその生成順にリンクが張られている。すなわち、非優先イベントＥＶＮ−１から非優先イベントＥＶＮ−２へリンクが張られ、非優先イベントＥＶＮ−２から非優先イベントＥＶＮ−３へリンクが張られ、非優先イベントＥＶＮ−４から非優先イベントＥＶＮ−４へリンクが張られ、非優先イベントの処理順序が規定されている。
【００３３】
処理順序が先頭（１番）の非優先イベントＥＶＮ−１の位置情報ＳＴＡと、処理順序が最後の非優先イベントＥＶＮ−４の位置情報ＥＮＤとは、図１に示すように、排他制御オブジェクトＥＸＯＢで管理される。リンクの先頭位置情報ＳＴＡは、非優先イベントＥＶＮを該当オブジェクトからデキューして実行するときに使用される。図３では、先頭位置情報ＳＴＡとして、先頭の非優先イベントＥＶＮ−１に係るサービスオブジェクトＳＥＯＢ−ＡのＩＤを格納し、最後位置情報ＥＮＤとして、最後の非優先イベントＥＶＮ−４に係るサービスオブジェクトＳＥＯＢ−ＣのＩＤを格納する場合を示している。サービスオブジェクトＳＥＯＢが規定されると、その内部の非優先イベントキューＱ１によって、先頭又は最後の非優先イベントＥＶＮが一意に定まるので、図３のような格納方法を適用できる。
【００３４】
排他グループＥＧに、４個の非優先イベントＥＶＮ−１〜ＥＶＮ−４が存在している状態において、新たな非優先イベントＥＶＮ−５が生じたとする。その非優先イベントＥＶＮ−５は、当該非優先イベントＥＶＮ−５に関係するサービスオブジェクトＳＥＯＢ−Ｃ内の非優先イベントキューＱ１−Ｃにキューイングされると共に、それまでの最後の非優先イベントＥＶＮ−４にリンクされる。また、最後位置情報ＥＮＤは、新たな非優先イベントＥＶＮ−５の位置に更新される。
【００３５】
サービスオブジェクトＳＥＯＢ毎に非優先イベントキューＱ１（図１でのＱ１−１〜Ｑ１−４、図３でのＱ１−Ａ〜Ｑ１−Ｂ）を設けるのではなく、排他グループＥＧ全体で１個の非優先イベントキューを設けることも考えられる。しかし、サービスオブジェクトＳＥＯＢ毎に非優先イベントキューＱ１を設ける実施形態の方法は、オブジェクトの生成／離脱に応じて、非優先イベントの順位性を動的に切り換えることができると共に、排他グループＥＧ全体のキュー長を必要に応じて動的に切り換えることができる。
【００３６】
「優先」イベントキューＱ２は、排他グループＥＧ内のオブジェクト間通信で発生するようなイベント数が少なく優先的に扱うイベント（優先イベント）ＥＶＰに対するキュー配列であり、排他グループＥＧ内で１つ配備し、これは排他制御オブジェクトＥＸＯＢに配置する。優先イベントキューＱ２は即座に実行されるため、１つのイベントから複数の優先イベントＥＶＰが発生する場合を除き、優先イベントＥＶＰの発生は１つのみのため、排他グループＥＧ毎にキュー長を設定することにより、メモリリソースを最低限に抑えることができる。
【００３７】
（Ａ−４）優先イベント及び非優先イベントの実行
次に、上述のように、キューイングされている優先イベントと非優先イベントの実行について説明する。
【００３８】
優先イベントＥＶＰは排他グループＥＧ内の各サービスオブジェクトＳＥＯＢが持つ非優先イベントＥＶＮの実行よりも優先的に実行される。例えば、排他グループＥＧ内のサービスオブジェクトＳＥＯＢ−ＡからサービスオブジェクトＳＥＯＢ−Ｂへイベントを送信した場合、当該イベントは優先イベントＥＶＰとして排他制御オブジェクトＥＸＯＢ内の優先イベントキューＱ２にキューイシングされる。サービスオブジェクトＳＥＯＢ−Ａで行っていた処理を実施した後、コンテキストが排他制御オブジェクトＥＸＯＢに戻り次第、排他制御オブジェクトＥＸＯＢは優先イベントキューＱ２からサービスオブジェクトＳＥＯＢ−Ｂのイベントを抽出し、サービスオブジェクトＳＥＯＢ−Ｂへイベントを伝達して処理を実施する。このとき、サービスオブジェクトＳＥＯＢ−Ａの優先イベントＥＶＰを発生した処理中に、サービスオブジェクトＳＥＯＢ−Ｂへ入力された外部からの非優先イベントＥＶＮは、サービスオブジェクトＳＥＯＢ−Ｂ内の非優先イベントキューＱ１-Ｂへ即座にキューイングされるものの、排他制御オブジェクトＥＸＯＢ内にある優先イベントキューＱ２とは疎結合になっており、優先イベントの処理終了後に実行される。
【００３９】
図４は、非優先イベントＥＶＮに優先させて優先イベントＥＶＰを実行させる際の処理フローチャートである。なお、優先イベントＥＶＰと非優先イベントＥＶＮとの実行は、排他制御オブジェクトＥＸＯＢが制御する。
【００４０】
排他制御オブジェクトＥＸＯＢは、まず、当該排他グループＥＧ内に優先イベントＥＶＰがあるか否かを、排他制御オブジェクトＥＸＯＢが保有している優先イベントキューＱ２で確認する（ステップ１００）。優先イベントキューＱ２に優先イベントＥＶＰがキューイングされていれば、先頭のキューイベントをデキューし（ステップ１０１）、イベント実行を行うサービスオブジェクトに優先イベントＥＶＰを渡してイベント処理を実行させる（ステップ１０２）。
【００４１】
そのようなイベント処理が終了して制御が排他制御オブジェクトＥＸＯＢに返ってくると、排他制御オブジェクトＥＸＯＢは、再度、自オブジェクトが保有している優先イベントキューＱ２を見て優先イベントＥＶＰの有無を確認する（ステップ１０３）。優先イベントＥＶＰがあれば、排他制御オブジェクトＥＸＯＢは、上述と同様な処理（ステップ１０１、１０２）を繰り返し実行する。
【００４２】
優先イベントキューＱ２に当初から優先イベントＥＶＰが存在しない場合（ステップ１００で否定結果）や、優先イベントキューＱ２に存在した優先イベントＥＶＰに係る処理を全て実行し、優先イベントキューＱ２に優先イベントＥＶＰがなくなった場合（ステップ１０３で否定結果）には、排他制御オブジェクトＥＸＯＢは、非優先イベントＥＶＮの処理を行う。
【００４３】
非優先イベントＥＶＮの処理ではまず、排他制御オブジェクトＥＸＯＢは、非優先イベントＥＶＮの存在を確認する（ステップ１０４）。非優先イベントＥＶＮは実行順にリンクされており、排他制御オブジェクトＥＸＯＢが保持している非優先イベントリンクの先頭情報ＳＴＡに有効な情報が記述されていると、排他制御オブジェクトＥＸＯＢは、非優先イベントＥＶＮが存在すると判断する。
【００４４】
排他制御オブジェクトＥＸＯＢは、非優先イベントリンクの先頭情報ＳＴＡを元に、先頭非優先イベントをキューイングしているサービスオブジェクトＳＥＯＢの非優先イベイトキューＱ１から非優先イベントＥＶＮをデキューし（ステップ１０５）、そのサービスオブジェクトＳＥＯＢにてその非優先イベントＥＶＮの処理を実行させる（ステップ１０６）。なお、デキュー時には、非優先イベントリンクの先頭情報ＳＴＡの書き換えなども実行する。
【００４５】
非優先イベントＥＶＮが存在しない場合（ステップ１０４で否定結果）や、非優先イベントＥＶＮの処理が終了して制御が排他制御オブジェクトＥＸＯＢに返ってきた場合には、排他制御オブジェクトＥＸＯＢは、実行権を解放する（ステップ１０７）。言い換えると、他のコンテキスト（例えば、他の排他グループ）に実行権を渡す。
【００４６】
当該排他グループに実行権が戻ってくると、排他制御オブジェクトＥＸＯＢは、上述したステップ１０２に移行し、優先イベントキューＱ２にイベントＥＶＰがあるかを確認する。
【００４７】
以上のように、１回の実行権の付与では、優先イベントＥＶＰが存在すれば、存在する全ての優先イベントＥＮＰの処理を行い、優先イベントＥＶＰがない場合やなくなった場合には、一つの非優先イベントＥＶＮの処理を行う。すなわち、常に優先イベントＥＮＰの処理を先に実行し、優先イベントＥＮＰがないときやなくなったときに非優先イベントＥＶＮの処理を実行する。
【００４８】
（Ａ−５）排他グループからのサービスオブジェクトの離脱
排他グループＥＧの構成からサービスオブジェクトＳＥＯＢがサービス上の条件により離脱する場合である。
【００４９】
一度、サービス形態によるオブジェクト群が一つのサービスを成した後、サービス実施中に発生した新たな要求により、その形態を変更する必要があり、いずれかのサービスオブジェクトが離脱することがある。例えば、加入者Ａ及び加入者Ｂとの通話に係る排他グループＥＧにおいて、通話中状態で加入者Ａがオンフックしたような場合には、加入者Ａとの信号授受を担当していたリソースオブジェクトＳＥＯＢ−１（図１参照）は排他グループから離脱することになる。
【００５０】
図５は、離脱時の処理を示すフローチャートであり、図６は、離脱時の処理イメージを示す説明図である。ここで、排他制御オブジェクトＥＸＯＢにおける離脱時用のスレッドの制御下で離脱時の処理が実行される。
【００５１】
離脱時には、離脱するオブジェクトＳＥＯＢ−１は、自分へ入力されていた非優先イベントＥＶＮを非優先イベントキューＱ１の配列から削除する（ステップ２００）。次に、排他制御オブジェクトＥＸＯＢ内の優先イベントキューＱ２の配列から、離脱するオブジェクトＳＥＯＢ−１に関係する優先イベントＥＶＰを削除する（ステップ２０１）。以上のようにして、離脱するオブジェクトＳＥＯＢ−１への全てのイベントＥＶＮ、ＥＶＰをキューＱ１、Ｑ２の配列から削除した後、排他制御オブジェクトＥＸＯＢ内のオブジェクトリストＬＩＳとからそのサービスオブジェクトＳＥＯＢ−１を削除することによって（ステップ２０２）、排他グループＥＧからのサービスオブジェクトＳＥＯＢ−１の離脱を実現している。
【００５２】
因みに、サービスオブジェクトＳＥＯＢの追加処理は、排他制御オブジェクトＥＸＯＢ内のオブジェクトリストＬＩＳへの書込みだけであり、追加直後に、必要に応じて、イベントＥＶＮ、ＥＶＰをキューＱ１、Ｑ２の配列に書き込むことになる。
【００５３】
ここで、非優先イベントキューＱ１の配列からの削除処理では、残った非優先イベントＥＶＮのリンクの張替えや、先頭位置情報ＳＴＡや最終位置情報ＥＮＤの更新などが実行される。
【００５４】
図７は、離脱するオブジェクト宛の非優先イベントをキュー配列から削除する際の具体的な方法の説明図である。
【００５５】
図７は、２個のオブジェクトＳＥＯＢ−Ａ及びＳＥＯＢ−Ｂがある状態から、オブジェクトＳＥＯＢ−Ａが離脱する場合を示している。各オブジェクトの非優先イベントキューＱ１−Ａ、Ｑ１−Ｂの非優先イベントＱＡ−１〜ＱＡ−３、ＱＢ−１〜ＱＢ−３は順序性を管理するためチェーン管理されており、前後の非優先イベントの位置情報を保持している。対象非優先イベントの削除は、この前後の非優先イベントの情報を入れ替えることにより実現する。
【００５６】
まず、離脱オブジェクトＳＥＯＢ−Ａの先頭の非優先イベントＱＡ−１に着目し、この先頭非優先イベントＱＡ−１が前の非優先イベントと書き込んでいる非優先イベントＱＢ−１と、この先頭非優先イベントＱＡ−１が後の非優先イベントと書き込んでいる非優先イベントＱＡ−２とを直結させて先頭非優先イベントＱＡ−１を離脱させる。
【００５７】
次に、離脱オブジェクトＳＥＯＢ−Ａの新たに先頭の非優先イベントとなった非優先イベントＱＡ−２に着目し、この非優先イベントＱＡ−２が前の非優先イベントと書き込んでいる非優先イベントＱＢ−１と、この非優先イベントＱＡ−２が後の非優先イベントと書き込んでいる非優先イベントＱＢ−２とを直結させて非優先イベントＱＡ−２を離脱させる。
【００５８】
以下、同様なアトミックな処理を、離脱オブジェクトＳＥＯＢ−Ａの全ての非優先イベントＥＶＮがなくなるまで繰り返す。
【００５９】
（Ａ−６）排他グループの結合と分離
次に、排他グループＥＧの結合と分離とについて説明する。まず、排他グループＥＧの結合について説明する。排他グループ結合のイメージを図８及び図９に示している。
【００６０】
排他グループの結合とは、それぞれ異なるサービスを実現している複数の排他グループが新たなサービスを実現するために１つの排他グループとしてイベント制御されることである。例えば、加入者Ａ及び加入者Ｂの通話サービスに係る第１の排他グループがあり、加入者Ｃが発呼処理を開始した直後の第２の排他グループがあり、その後、加入者Ｃが入力した発呼先電話番号が加入者Ａの電話番号であって、加入者Ａがキャッチホンサービスに契約しているような場合には、第１及び第２の排他グループは結合される。
【００６１】
排他グループＥＧの結合は、図８に示すように、１つの排他クループＥＧ−Ａの排他制御オブジェクトＥＸＯＢ−１が親排他制御オブジェクトとなり、他排他グループＥＧ−Ｂの排他制御オブジェクトＥＸＯＢ−２を子排他制御オブジェクトとして親排他グループＥＧ−Ａ（＝ＥＧ−Ｃ）に所属させる。
【００６２】
既に結合している排他グループと既に結合している排他グループとの結合や、既に結合している排他グループと他の排他グループとの結合も可能である。例えば、既に結合している排他グループと既に結合している排他グループとの結合であれば、図９に示すように、一方の既結合排他グループＥＧ−Ａの最下位レベルの子排他制御オブジェクトＥＸＯＢ−１を親排他制御オブジェクトとし、一方の既結合排他グループＥＧ−Ｂの親排他制御オブジェクトＥＸＯＢ−２を子排他制御オブジェクトとして結合し、新たな結合排他グループＥＧ−Ｃを構成する。
【００６３】
排他グループの結合の必要性や、いずれを親排他制御オブジェクトとし、いずれを子排他制御オブジェクトとするかは、イベントを処理する所定のオブジェクトの中に予め規定されている。
【００６４】
結合された子排他制御オブジェクトは、その親排他制御オブジェクトの配下のサービスオブジェクトと同様なものとなる。図８の例であれば、結合排他グループＥＧ−Ｃの親排他制御オブジェクトＥＸＯＢ−１内のオブジェクトリストＬＩＳに、サービスオブジェクトＳＥＯＢ−ａ、ＳＥＯＢ−ｂと共に、子排他制御オブジェクトＥＸＯＢ−２の識別情報もリストアップされる。
【００６５】
グループ結合された排他グループでのイベント実行方式は、１個の排他グループのイベント実行方式とほぼ同様であり、結合された排他グループ内でのイベント実行制御は親排他制御オブジェクトから子排他制御オブジェクトへ順に分配されていく。
【００６６】
図８において、排他グループＥＧ−Ｃでのイベント制御は、親排他制御オブジェクトＥＸＯＢ−１から子排他制御オブジェクトＥＸＯＢ−２に分配される。そのため、子排他制御オブジェクトＥＸＯＢ−２の配下のサービスオブジェクトＳＥＯＢ−ｃ、ＳＥＯＢ−ｄへのイベント実行順序は、排他制御オブジェクトＥＸＯＢ−１から分配された排他制御オブジェクトＥＸＯＢ−２におけるイベント実行として、所属オブジェクトＳＥＯＢ−ｃ、ＳＥＯＢ−ｄへのイベント制御が行われる。従って、結合された排他グループＥＧ−Ｃ内でのイベント実行順序も保たれている。
【００６７】
図１０は、グループ結合された排他グループでのイベント実行制御を示すフローチャートであり、上述した図４との同一、対応処理には同一符号を付して示している。
【００６８】
図１０において、排他制御オブジェクト（親排他制御オブジェクト）は、非優先イベントＥＶＮが存在しない場合（ステップ１０４で否定結果）や、非優先イベントＥＶＮの処理が終了して制御が自排他制御オブジェクトに返ってきた場合には、子排他制御オブジェクトが結合されているか否かを判別する（ステップ１１０）。子排他制御オブジェクトが結合されている場合には、配下の子排他制御オブジェクトに実行権を引き渡す（ステップ１１１）。このとき、配下の子排他制御オブジェクトは、図１０に示と同様なイベント実行制御を行う。親排他制御オブジェクトは、子排他制御オブジェクトが存在しない場合（ステップ１１０で否定結果）や、子排他制御オブジェクトの処理が終了して制御が自排他制御オブジェクトに返ってきた場合には、実行権を解放する（ステップ１０７）。言い換えると、他のコンテキスト（例えば、他の排他グループ）に実行権を渡す。
【００６９】
次に、排他グループＥＧの分離について説明する。図１１は、結合排他グループの分離のイメージを示している。
【００７０】
排他グループの分離とは、結合されて１つになった排他グループ内から、子排他制御オブジェクトに係る排他グループが、親排他制御オブジェクトに係るグループの所属から分離し、子排他制御オブジェクトが自ら実行を分配する親排他制御オブジェクト相当のイベント制御を行う状態になることである。当初からの親排他制御オブジェクトは、制御対象は減少したが、継続して制御を実効的に行う。例えば、加入者Ａ、Ｂ、Ｃによる３者通話状態から、一人の加入者がオンフックし、オンフックした加入者との切断処理が残っているような状態への変化では、排他グループの分離が必要となる。
【００７１】
排他グループの分離の必要性や、どこで分離するかは、イベントを処理する所定のオブジェクトの中に予め規定されている。
【００７２】
図１１は、排他グループ結合した排他グループＥＧ−Ｄを排他制御オブジェクトＥＸＯＢ−１と排他制御オブジェクトＥＸＯＢ−２の間で分離する例である。排他制御オブジェクトＥＸＯＢ−１と排他制御オブジェクトＥＸＯＢ−２の間で分離すると、排他制御オブジェクトＥＸＯＢ−１は排他グループＥＧ−Ｅを形成し、排他制御オブジェクトＥＸＯＢ−２は配下の排他制御オブジェクトＥＸＯＢ−３、４と共に排他グループＥＧ−Ｆを形成する。
【００７３】
分離した排他グループＥＧ−Ｅの排他制御オブジェクトＥＸＯＢ−１は、引き続き親排他制御オブジェクトとしてグループ内のイベント制御を実行し、排他グループＥＧ−Ｆの排他制御オブジェクトＥＸＯＢ−２は、親排他制御オブジェクトになってグループ内のイベント制御を実行する。
【００７４】
例えば、分離前の結合排他グループＥＧ−Ｄの親排他制御オブジェクトＥＸＯＢ−１内のオブジェクトリストＬＩＳから、子排他制御オブジェクトＥＸＯＢ−２の識別情報が除外されることで排他グループＥＧ−Ｅの分離がなされる。
【００７５】
（Ａ−７）排他グループ内のサービスオブジェクトの移動
次に、結合排他グループ内におけるサービスオブジェクトの移動について説明する。図１２は、結合排他グループ内でのオブジェクト移動のイメージを示している。
【００７６】
図１２は、親排他制御オブジェクトＥＸＯＢ−１に所属するサービスオブジェクトＳＥＯＢ−ｂが、子排他制御オブジェクトＥＸＯＢ−２の所属となる例を示している。例えば、キャッチホンサービスにおいて、待機中の加入者が切り替わるような場合には、親から子の移動や、子から親への移動が並行的に実行される。
【００７７】
結合排他グループ内におけるサービスオブジェクトの移動の必要性や、いずれを移動するかは、イベントを処理する所定のオブジェクトの中に予め規定されている。
【００７８】
親排他制御オブジェクトＥＸＯＢ−１に所属するオブジェクトＳＥＯＢ−ｂは、同一排他グループＥＧ−Ａ内の子排他制御オブジェクトＥＸＯＢ−２の部分排他グループへ移動することができる。オブジェクトＳＥＯＢ−ｂが移動するとき、オブジェクトＳＥＯＢ−ｂの非優先イベントＥＶＮがキューイングされている場合、そのイベントと共に子排他制御オブジェクトＥＸＯＢ−２の所属へ移動し、イベント実行順序は最後になる。なお、親排他制御オブジェクトＥＸＯＢ−１に残っている他のサービスオブジェクトの非優先イベントのリンクの張り直しも適宜実行される。
【００７９】
図１２に示すような移動では、親排他制御オブジェクトＥＸＯＢ−１内のオブジェクトリストＬＩＳから、サービスオブジェクトＳＥＯＢ−ｂが除外され、子排他制御オブジェクトＥＸＯＢ−２のオブジェクトリストＬＩＳには、サービスオブジェクトＳＥＯＢ−ｂが追加される。
【００８０】
なお、図１２では、親排他制御オブジェクトから子排他制御オブジェクトへのサービスオブジェクトの移動を示したが、子排他制御オブジェクトから親排他制御オブジェクトへサービスオブジェクトが移動することもある。
【００８１】
（Ａ−８）実施形態の効果
上記実施形態によれば、以下の効果を奏することができる。
【００８２】
（Ａ−８−１）上記実施形態によれば、要求されたイベントは、排他グループ内において、優先イベントと非優先イベントとに分離して管理され、イベントの順序性を厳密に保つことができる。
【００８３】
また、サービスの段階、状態により、同一の排他制御オブジェクトに収容されているサービスオブジェクトの数が変化しても、各サービスオブジェクト毎に、キュー長が設けられていて、トータルとしてのキュー長がダイナミックに変化するため、キュー配列を予め捕捉しておく必要がなく、メモリリソースの節約ができ、かつ、輻輳的に発生したイベントにも対応することできる。
【００８４】
さらに、キュー長を排他制御オブジェクトは意識せず、各サービスオブジェクト側で意識するため、多様なサービスに対応することが可能となる。
【００８５】
さらにまた、優先イベント、非優先イベント（のキュー）がメモリ的にも別オブジェクトにて配置されていて疎結合となっているため、キュー操作をそれぞれ、別のコンテキストで実施しても、コンテキスト競合が発生せず、高速なキューイングオペレーションを実現することが可能となる。
【００８６】
また、サービス過渡期若しくは実施中に、サービスを構成するオブジェクトを変更するようなリアルタイムサービスにも容易に対応することができる。
【００８７】
また、上記実施形態によれば、オブジェクト指向に基づき生成される各オブジェクト間でのイベント通信を可能とするオブジェクト仮想ネットワークを実現しつつ、ユーザ処理部において独自でイベントの排他および順序の考慮を必要としないため、一貫したオブジェクトモデルを構築可能とし、一定な性能品質を保証する。
【００８８】
（Ａ−８−２）上記実施形態によれば、排他グループからサービスオブジェクトが離脱する際に、当該オブジェクト内にキュー配列が配置されているため、当該オブジェクト内のキュー配列のキュー操作を行うだけで必要な動作を完了させることができる。
【００８９】
これは、キュー配列から該当するイベントキューを探すために、排他グループ全体のキュー配列を線形検索する必要がなく、該当するイベントキュー操作を即座に実施でき、高速なキュー配列操作を実施することが可能となっている。
【００９０】
排他グループの結合では、排他グループ（子排他グループ）を１つのサービスオブジェクトと見立てることで優先イベント、非優先イベントの順序制御が親排他制御オブジェクトの制御下で行うことができる。
【００９１】
（Ａ−８−３）上記実施形態によれば、排他グループの結合、分離を行うことにより、例えば、複数の入出力を伴うサービスでも、入出力の排他制御を一元的に管理することが可能となり、複雑なサービスへ対応することが可能となっている。
【００９２】
（Ａ−８−４）上記実施形態によれば、例えば、複数ある入出力を持つサービスにおいて、１つの入出力を別のサービスへ移行させることが可能となっている。
【００９３】
（Ｂ）他の実施形態
本発明のマルチタスク処理装置及び方法は、上記実施形態に示したような、オブジェクトが単独又はグルーピングされ、オブジェクトへのイベント入出力によってサービスを実現するようなシステムに適用可能である。
【００９４】
例えば、メディアゲートウェイコントローラ（ＭＧＣ）などの電話交換装置にも適用できる。また例えば、Ｗｅｂアプリケーションサーバなどにも適用できる
【図面の簡単な説明】
【００９５】
【図１】実施形態の排他グループ毎のイベントの順位性の説明図である。
【図２】実施形態のマルチタスク処理装置の機能的構成を示す説明図である。
【図３】実施形態の非優先イベント間のリンク状態例を示す説明図である。
【図４】実施形態の非優先イベントに優先させて優先イベントを実行させる際の処理フローチャートである。
【図５】実施形態の離脱時の処理を示すフローチャートである。
【図６】実施形態の離脱時の処理イメージを示す説明図である。
【図７】実施形態の離脱オブジェクト宛の非優先イベントをキュー配列から削除する際の具体的方法の説明図である。
【図８】実施形態の排他グループ結合のイメージを示す説明図（１）である。
【図９】実施形態の排他グループ結合のイメージを示す説明図（２）である。
【図１０】実施形態の結合排他グループにおけるイベント実行制御を示すフローチャートである。
【図１１】実施形態の排他グループ分離のイメージを示す説明図である。
【図１２】実施形態の結合排他グループ内でのオブジェクト移動のイメージを示す説明図である。
【符号の説明】
【００９６】
１…マルチ呼処理スレッド処理装置、１０…ハードウェア、２０…汎用マルチタスクＯＳ、２１…カーネル、２２…ＴＳＳスケジューラ、３０…呼処理イベントエンジン、３１…呼処理イベントスケジューラ、３２…グループ別排他制御処理部、４０…ＶｏＩＰアプリケーション。
【図１】
2007233977.tif 000003
【図２】
2007233977.tif 000004
【図３】
2007233977.tif 000005
【図４】
2007233977.tif 000006
【図５】
2007233977.tif 000007
【図６】
2007233977.tif 000008
【図７】
2007233977.tif 000009
【図８】
2007233977.tif 000010
【図９】
2007233977.tif 000011
【図１０】
2007233977.tif 000012
【図１１】
2007233977.tif 000013
【図１２】
2007233977.tif 000014