(57)【要約】【課題】  中央処理装置のイベント処理コストを低減し、中央処理装置の利用効率を向上できる計算機システムを提供する。【解決手段】  イベントコントローラ３０は、専用処理部から受信したイベントディスクリプタを、分離部３５を介して、イベントキュー３１又は３２に格納する。選択部３６は、所定の条件で、イベントキュー３１、３２に格納されたイベントディスクリプタを、代表イベントキュー３３に格納する。ＣＰＵ１０は、ローカルバス１４を介して、代表イベントキュー３３からイベントディスクリプタを受け取る。【選択図】    図３
2007079789.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上の中央処理装置と１つ以上の専用処理装置とが、互いにイベントディスクリプタを送受信してイベントを通知する計算機システムであって、
前記中央処理装置に向けて送信されたイベントディスクリプタを受信し、代表イベントキューに格納するイベントコントローラを備え、
前記中央処理装置は、前記代表イベントキューから前記イベントディスクリプタを受け取ることを特徴とする計算機システム。
【請求項２】
前記イベントコントローラは、複数の受信イベントキューと、受信したイベントディスクリプタの情報に基づいて該イベントディスクリプタを前記複数のイベントキューに振り分ける分離手段と、前記複数の受信イベントキューの何れかを選択し、該選択したイベントキューに格納されたイベントディスクリプタを前記代表イベントキューに格納する選択手段とを備える、請求項１に記載の計算機システム。
【請求項３】
前記分離手段は、受信したイベントディスクリプタの優先度に従って該イベントディスクリプタを前記複数の受信イベントキューに振り分ける、請求項２に記載の計算機システム。
【請求項４】
前記中央処理装置は、前記代表イベントキューからローカルバスを介して前記イベントディスクリプタを受け取る、請求項１〜３の何れか一に記載の計算機システム。
【請求項５】
前記代表キューに格納されたイベントディスクリプタを、前記中央処理装置のメモリに格納するＤＭＡコントローラを更に備える、請求項１〜３の何れか一に記載の計算機システム。
【請求項６】
前記イベントディスクリプタが、次処理を特定するために必要な状態変数を含み、前記中央処理装置は、前記状態変数に基づいて、状態遷移、登録関数起動、及び、タスクディスパッチの何れの処理を実行するかを決定する、請求項１〜５の何れか一に記載の計算機システム。
【請求項７】
前記イベントコントローラは、受信した１つ以上のイベントディスクリプタに基づいて１つのイベントディスクリプタを生成し、前記代表イベントキューに格納するイベントディスクリプタ生成部を備える、請求項１〜６の何れか一に記載の計算機システム。
【請求項８】
イベントディスクリプタ生成部は、受信したイベントディスクリプタの情報に基づいて、複数のイベントディスクリプタの待ち合わせ処理を行い、該待ち合わせ処理によって待ち合わせられた複数のイベントディスクリプタから前記１つのイベントディスクリプタを生成する、請求項７に記載の計算機システム。
【請求項９】
前記中央処理装置は、前記イベントディスクリプタのダイジェスト情報を抽出して格納する拡張レジスタを備える、請求項１〜８の何れか一に記載の計算機システム。
【請求項１０】
１つ以上の中央処理装置と１つ以上の専用処理装置とが、互いにイベントディスクリプタを送受信してイベントを通知する計算機システムであって、
前記中央処理装置に向けて送信されたイベントディスクリプタの内容と、記憶装置に記憶された判定論理とに従って、前記受信した１つ以上のイベントディスクリプタから１つのイベントディスクリプタを生成し、該生成したイベントディスクリプタを前記中央処理装置に受け渡すイベントコントローラを備えることを特徴とする計算機システム。
【請求項１１】
１つ以上の中央処理装置と１つ以上の専用処理装置とが、互いにイベントディスクリプタを送受信してイベントを通知する計算機システムで、前記中央処理装置に向けて送信されたイベントディスクリプタを受信する方法であって、
イベントコントローラが、前記中央処理装置に向けて送信されたイベントディスクリプタを受信し、代表イベントキューに格納する第１ステップと、
前記中央処理装置が、前記代表イベントキューから前記イベントディスクリプタを受け取る第２ステップとを有することを特徴とする方法。
【請求項１２】
前記第１ステップは、
前記イベントコントローラが、受信したイベントディスクリプタの情報に基づいて該イベントディスクリプタを複数のイベントキューに振り分けるステップと、
前記イベントコントローラが、前記複数の受信イベントキューの何れかを選択し、該選択したイベントキューに格納されたイベントディスクリプタを前記代表イベントキューに格納するステップとを含む、請求項１１に記載の方法。
【請求項１３】
前記振り分けるステップでは、前記イベントコントローラは、受信したイベントディスクリプタの優先度に従って該イベントディスクリプタを前記複数の受信イベントキューに振り分ける、請求項１２に記載の方法。
【請求項１４】
前記第２ステップでは、前記中央処理装置は、前記代表イベントキューからローカルバスを介して前記イベントディスクリプタを受け取る、請求項１１〜１３の何れか一に記載の方法。
【請求項１５】
前記第２ステップでは、ＤＭＡコントローラが、前記代表キューに格納されたイベントディスクリプタを前記中央処理装置のメモリに受け渡す、請求項１１〜１３の何れか一に記載の方法。
【請求項１６】
前記イベントディスクリプタが、次処理を特定するために必要な状態変数を含み、
前記中央処理装置が、前記状態変数に基づいて、状態遷移、登録関数起動、及び、タスクディスパッチの何れの処理を実行するかを決定するステップを更に有する、請求項１１〜１５の何れか一に記載の方法。
【請求項１７】
前記第１ステップは、
前記イベントコントローラが、受信した１つ以上のイベントディスクリプタに基づいて１つのイベントディスクリプタを生成するステップと、前記受信した１つ以上のイベントディスクリプタに代えて該生成した１つのイベントディスクリプタを前記代表イベントキューに格納するステップとを含む、請求項１１〜１６の何れか一に記載の方法。
【請求項１８】
前記１つのイベントディスクリプタを生成するステップでは、前記イベントコントローラは、受信したイベントディスクリプタの情報に基づいて、複数のイベントディスクリプタの待ち合わせ処理を行い、該待ち合わせ処理によって待ち合わせられた複数のイベントディスクリプタから前記１つのイベントディスクリプタを生成する、請求項１７に記載の方法。
【請求項１９】
前記中央処理装置が、前記イベントディスクリプタのダイジェスト情報を抽出して拡張レジスタに格納するステップを更に含む、請求項１１〜１８の何れか一に記載の方法。
【請求項２０】
１つ以上の中央処理装置と１つ以上の専用処理装置とが、互いにイベントディスクリプタを送受信してイベントを通知する計算機システムで、前記中央処理装置に向けて送信されたイベントディスクリプタを受信する方法であって、
イベントコントローラが、前記中央処理装置に向けて送信されたイベントディスクリプタを受信するステップと、
前記イベントコントローラが、前記受信した１つ以上のイベントディスクリプタに基づいて１つのイベントディスクリプタを生成するステップと、
前記中央処理装置が、前記生成した１つのイベントディスクリプタを前記イベントコントローラから受け取るステップとを有することを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システム及びイベント処理方法に関し、更に詳しくは、中央処理装置と、これと連携して動作する専用処理装置とを有する計算機システム、及び、そのような計算機システムにおけるイベント処理方法に関する。
【背景技術】
【０００２】
中央処理装置（ＣＰＵ）と専用処理装置とを連携して動作させ、ＣＰＵの処理の一部を専用処理装置にオフロードして、ＣＰＵの処理負担を軽減する計算機システムが知られている。（例えば、特許文献１参照）。図９は、ＣＰＵと専用処理部とを連携させた一般的な計算機システムの一例を示している。計算機システム２００は、ＣＰＵ２１０と、複数の専用処理部２２０とを備える。各専用処理部２２０は、周辺ＩＯ処理を行う専用プロセッサやＤＳＰ等として構成され、担当する処理に特化したハードウェアで構成される。ＣＰＵ２１０と、各専用処理部２２０とは、ＰＣＩバス等のバス２６０を介して、相互に接続される。
【０００３】
ＣＰＵ２１０は、ＰＣＩバス２６０を介して、専用処理部２２０に処理コマンドを発行し、専用処理部２２０に処理を実行させる。また、ＣＰＵ２１０は、完了の確認を行う際には、ＰＣＩバス２６０を介して、専用処理部２２０の状態レジスタ２２１を読み出して、処理の完了を確認する。或いは、ＣＰＵ２１０のメモリ２１１上に、各専用処理部に対応してイベント格納領域２２２を設けておき、専用処理部２２０側から、そのイベント格納領域２２２に、ＰＣＩバス２６０を介して状態イベントを書き込み、ＣＰＵ２１０がこれを参照して、処理の終了を確認する。
【０００４】
【特許文献１】特開平５-１０３０３６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記従来の計算機システム２００において、ＣＰＵ２１０が、ＰＣＩバス２６０を介して各専用処理部２２０の状態レジスタ２２１をポーリングする場合には、複数回にわたってＰＣＩバス２６０にアクセスすることで、ＣＰＵ時間を消費するという問題がある。近年、ＰＣＩバス２６０には、ＰＣＩ  Ｅｘｐｒｅｓｓ（登録商標）やＲａｐｉｄＩＯ（登録商標）といった、１Ｇｂｐｓを超える転送速度を実現する高速シリアルバスが用いられることが一般的となっている。このような高速シリアルバスでは、パラレル−シリアル変換による遅延が大きく、１ワードを読み出す場合でも、固定長パケットによるデータ転送が行われるため、ポーリングにかかるコストが大きく、ＣＰＵ時間の消費の影響は大きくなる。
【０００６】
また、専用処理部２２０がＣＰＵ２１０上のメモリ２１１に状態イベントを書き込んで、ＣＰＵ２１０がこれを参照する方法では、各専用処理部２２０は、独立に結果を書き込むため、メモリ２１１上のイベント格納領域２２２と、専用処理部２２０とを１対１に対応させることが必要である。このため、ＣＰＵ２１０は、専用処理部２２０での処理の終了を確認する際には、複数個所を参照することが必要になるという問題がある。また、イベント書き込み時に、メモリがビジーとなるため、ＣＰＵ２１０の本来の処理がブロックされることがあるという問題もある。
【０００７】
上記した状態イベントの読み出しの他に、割り込み機構を用いてＣＰＵ２１０にイベントを渡す方式も考えられる。しかし、割り込みを使用する場合には、ＣＰＵ２１０への通知そのものは高速化できるものの、割り込みを処理する際に、ＣＰＵ２１０上で動作するアプリケーションプログラムのコンテキスト（作業レジスタ情報）を退避させる必要があり、この作業には、一般に数１００クロックが必要となる。従って、専用処理部２２０を頻繁に使用するときには、割り込みの使用はコストが高く一般的には利用されていない。
【０００８】
本発明は、上記従来技術の問題点を解消し、中央処理装置と専用処理装置とを連携させた計算機システムにおいて、中央処理装置のイベント処理コストを低減し、中央処理装置の利用効率を向上できる計算機システム及びイベント処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の第１の視点の計算機システムは、１つ以上の中央処理装置と１つ以上の専用処理装置とが、互いにイベントディスクリプタを送受信してイベントを通知する計算機システムであって、前記中央処理装置に向けて送信されたイベントディスクリプタを受信し、代表イベントキューに格納するイベントコントローラを備え、前記中央処理装置は、前記代表イベントキューから前記イベントディスクリプタを受け取ることを特徴とする。
【００１０】
本発明の第１の視点のイベント処理方法は、１つ以上の中央処理装置と１つ以上の専用処理装置とが、互いにイベントディスクリプタを送受信してイベントを通知する計算機システムで、前記中央処理装置に向けて送信されたイベントディスクリプタを受信する方法であって、イベントコントローラが、前記中央処理装置に向けて送信されたイベントディスクリプタを受信し、代表イベントキューに格納する第１ステップと、前記中央処理装置が、前記代表イベントキューから前記イベントディスクリプタを受け取る第２ステップとを有することを特徴とする。
【００１１】
本発明の第１の視点の計算機システム及びイベント処理方法では、イベントコントローラは、受信したイベントディスクリプタを、代表イベントキューに格納し、中央処理装置は、代表イベントキューから、イベントディスクリプタを受け取る。中央処理装置は、単一の代表イベントキューを参照することで、イベントディスクリプタを受け取ることができるため、複数の専用処理部又は他の中央処理装置からのイベントディスクリプタの受け取りに複数個所の参照が必要な従来に比して、中央処理装置がイベント処理に要するコストを低減できる。
【００１２】
本発明の計算機システムでは、前記イベントコントローラは、複数の受信イベントキューと、受信したイベントディスクリプタの情報に基づいて該イベントディスクリプタを前記複数のイベントキューに振り分ける分離手段と、前記複数の受信イベントキューの何れかを選択し、該選択したイベントキューに格納されたイベントディスクリプタを前記代表イベントキューに格納する選択手段とを備える構成を採用できる。この場合、前記分離手段は、受信したイベントディスクリプタの優先度に従って該イベントディスクリプタを前記複数の受信イベントキューに振り分けることが好ましい。また、本発明のイベント処理方法では、前記第１ステップは、前記イベントコントローラが、受信したイベントディスクリプタの情報に基づいて該イベントディスクリプタを複数のイベントキューに振り分けるステップと、前記イベントコントローラが、前記複数の受信イベントキューの何れかを選択し、該選択したイベントキューに格納されたイベントディスクリプタを前記代表イベントキューに格納するステップとを含む構成を採用できる。この場合、前記振り分けるステップでは、前記イベントコントローラは、受信したイベントディスクリプタの優先度に従って該イベントディスクリプタを前記複数の受信イベントキューに振り分ける構成を採用できる。例えば、複数の受信イベントキューと、イベントディスクリプタの優先度とを対応させて、受信したイベントディスクリプタを、優先度に従って対応する受信イベントキューに格納し、選択部により、優先度が高いイベントディスクリプタを格納するイベントキューを優先して、受信イベントキューからイベントディスクリプタを取り出して代表イベントキューに格納する場合には、優先度が高いイベントディスクリプタを、優先的に、中央処理装置に受け渡すことができる。
【００１３】
本発明の計算機システムでは、前記中央処理装置は、前記代表イベントキューからローカルバスを介して前記イベントディスクリプタを受け取る構成を採用できる。また、本発明のイベント処理方法は、前記第２ステップでは、前記中央処理装置は、前記代表イベントキューからローカルバスを介して前記イベントディスクリプタを受け取る構成を採用できる。この場合、中央処理装置は、バスを介した状態ポーリングを用いる場合に比して、高速にイベントディスクリプタにアクセスすることができ、中央処理装置の効率的な利用が可能となる。
【００１４】
本発明の計算機システムでは、前記代表イベントキューに格納されたイベントディスクリプタを、前記中央処理装置のメモリに格納するＤＭＡコントローラを更に備える構成を採用できる。また、本発明のイベント処理方法は、前記第２ステップでは、ＤＭＡコントローラが、前記代表イベントキューに格納されたイベントディスクリプタを前記中央処理装置のメモリに受け渡す構成を採用できる。この場合には、中央処理装置は、メモリにＤＭＡ転送されたイベントディスクリプタに、高速にアクセスすることができ、中央処理装置の効率的な利用が可能となる。
【００１５】
本発明の計算機システムでは、前記イベントディスクリプタが、次処理を特定するために必要な状態変数を含み、前記中央処理装置は、前記状態変数に基づいて、状態遷移、登録関数起動、及び、タスクディスパッチの何れの処理を実行するかを決定する構成を採用できる。また、本発明のイベント処理方法では、前記イベントディスクリプタが、次処理を特定するために必要な状態変数を含み、前記中央処理装置が、前記状態変数に基づいて、状態遷移、登録関数起動、及び、タスクディスパッチの何れの処理を実行するかを決定するステップを更に有する構成を採用できる。この場合、中央処理装置は、受信したイベントディスクリプタの状態変数に基づいて、次の処理を決定できる。
【００１６】
本発明の計算機システムでは、前記イベントコントローラは、受信した１つ以上のイベントディスクリプタに基づいて１つのイベントディスクリプタを生成し、前記代表イベントキューに格納するイベントディスクリプタ生成部を備える構成を採用できる。また、本発明のイベント処理方法では、前記第１ステップは、前記イベントコントローラが、受信した１つ以上のイベントディスクリプタに基づいて１つのイベントディスクリプタを生成するステップと、前記受信した１つ以上のイベントディスクリプタに代えて該生成した１つのイベントディスクリプタを前記代表イベントキューに格納するステップとを含む構成を採用できる。この場合、イベントコントローラがイベント処理の一部を担うことで、中央処理装置が、専用処理部が発行したイベントディスクリプタに従って次の処理を起動するまでの処理コストを低減できる。
【００１７】
本発明の計算機システムでは、イベントディスクリプタ生成部は、受信したイベントディスクリプタの情報に基づいて、複数のイベントディスクリプタの待ち合わせ処理を行い、該待ち合わせ処理によって待ち合わせられた複数のイベントディスクリプタから前記１つのイベントディスクリプタを生成する構成を採用できる。また、本発明のイベント処理方法では、前記１つのイベントディスクリプタを生成するステップでは、前記イベントコントローラは、受信したイベントディスクリプタの情報に基づいて、複数のイベントディスクリプタの待ち合わせ処理を行い、該待ち合わせ処理によって待ち合わせられた複数のイベントディスクリプタから前記１つのイベントディスクリプタを生成する構成を採用できる。例えば、イベントコントローラは、複数の専用処理部からの応答を示すイベントディスクリプタを待ち合わせて、その応答に含まれる処理結果に基づいて、１つのイベントを生成し、中央処理装置に受け渡す。このようにすることで、中央処理装置は、１つのイベントディスクリプタによって、複数の専用処理部からの処理結果を参照することができる。
【００１８】
本発明の計算機システムでは、前記中央処理装置は、前記イベントディスクリプタのダイジェスト情報を抽出して格納する拡張レジスタを備える構成を採用できる。また、本発明のイベント処理方法では、前記中央処理装置が、前記イベントディスクリプタのダイジェスト情報を抽出して拡張レジスタに格納するステップを更に含む構成を採用できる。この場合、レジスタアクセスは高速であるため、中央処理装置は、イベントディスクリプタのダイジェスト情報に高速にアクセスできる。
【００１９】
本発明の第２の視点の計算機システムは、１つ以上の中央処理装置と１つ以上の専用処理装置とが、互いにイベントディスクリプタを送受信してイベントを通知する計算機システムであって、前記中央処理装置に向けて送信されたイベントディスクリプタの内容と、記憶装置に記憶された判定論理とに従って、前記受信した１つ以上のイベントディスクリプタから１つのイベントディスクリプタを生成し、該生成したイベントディスクリプタを前記中央処理装置に受け渡すイベントコントローラを備えることを特徴とする。
【００２０】
本発明の第２の視点のイベント処理方法は、１つ以上の中央処理装置と１つ以上の専用処理装置とが、互いにイベントディスクリプタを送受信してイベントを通知する計算機システムで、前記中央処理装置に向けて送信されたイベントディスクリプタを受信する方法であって、イベントコントローラが、前記中央処理装置に向けて送信されたイベントディスクリプタを受信するステップと、前記イベントコントローラが、前記受信した１つ以上のイベントディスクリプタに基づいて１つのイベントディスクリプタを生成するステップと、前記中央処理装置が、前記生成した１つのイベントディスクリプタを前記イベントコントローラから受け取るステップとを有することを特徴とする。
【００２１】
本発明の第２の視点の計算機システム及びイベント処理方法では、イベントコントローラは、受信した１以上のイベントディスクリプタに基づいて、例えば状態遷移判定等を行って、その結果を示すイベントディスクリプタを生成し、これを中央処理装置に受け渡す。このようにする場合には、イベントコントローラがイベント処理の一部を担うことで、中央処理装置が、専用処理部が発行したイベントディスクリプタに従って次の処理を起動するまでの処理コストを低減できる。
【発明の効果】
【００２２】
本発明の第１の視点の計算機システム及びイベント処理方法では、イベントコントローラは、専用処理部からのイベントディスクリプタを代表イベントキューに格納し、中央処理装置は、代表イベントキューからイベントディスクリプタを受け取る。中央処理装置は、単一の代表イベントキューを参照することで、イベントディスクリプタを受け取ることができるため、従来に比して、中央処理装置がイベント処理に要するコストを低減することができる。
【００２３】
また、本発明の第２の視点の計算機システム及びイベント処理方法では、イベントコントローラは、受信した１以上のイベントディスクリプタに基づいて、イベントディスクリプタを生成し、これを中央処理装置に受け渡す。この場合には、イベントコントローラがイベント処理の一部を担うことで、中央処理装置がイベントに従って、次の処理を起動するまでの処理コストを削減できる。
【発明を実施するための最良の形態】
【００２４】
図１は、本発明の第１実施形態の計算機システムの構成を示している。計算機システム１００は、ソフトウェア動作により処理を実行する１以上のＣＰＵ１０と、専用ハードウェアや、ＤＳＰ、専用プロセッサで構成される１以上の専用処理部２０と、イベントコントローラ３０とを備える。ＣＰＵ１０及び専用処理部２０は、それぞれ、所定の条件でイベントディスクリプタを発行し、発行したイベントディスクリプタを、ディスクリプタ転送網４０に送出する。ＣＰＵ１０、及び、専用処理部２０は、それぞれ、対応するイベントコントローラ３０を介して、ディスクリプタ転送網４０を経由して転送されたイベントディスクリプタを受け取る。
【００２５】
図２は、ディスクリプタ転送網４０を転送されるイベントディスクリプタの内容の一例を示している。イベントディスクリプタは、宛先処理部ＩＤ、要求元処理部ＩＤ、ディスクリプタＩＤ、優先度フラグ、制御フラグ、参照数、状態ＩＤ、及び、付加情報を有する。ディスクリプタＩＤは、イベントディスクリプタを識別するために使用される。宛先処理部ＩＤ及び要求元処理部ＩＤは、それぞれ、ディスクリプタの発行先及び発行元を示す。ディスクリプタ転送網４０は、これら発行先及び発行元を参照して、指定された宛先（ＣＰＵ１０又は専用処理部２０）にイベントディスクリプタを転送する。
【００２６】
優先度フラグは、ディスクリプタの優先度を示す。制御フラグ及び参照数は、後述するように、イベントコントローラ３０内で参照される。状態ＩＤは、ＣＰＵ１０が次の処理を決めるために必要なＩＤを示しており、次タスクＩＤ、次関数ＩＤ、次状態ＩＤ、前状態ＩＤ等がある。これらＩＤは、イベントコントローラ３０によって、適宜付け替えられることがある。付加情報は、要求パラメータや処理結果などを含む。要求パラメータは、ＣＰＵ１０及び専用処理部２０が必要とするパラメータ類を格納する。処理結果は、イベント通知によって通知した処理結果内容などを含む。
【００２７】
図３は、ＣＰＵ１０、及び、これに付属するイベントコントローラ３０の詳細な構成を示している。ＣＰＵ１０上で動作するプログラムとしては、イベントハンドラ１０１、登録関数処理１０２、ディスパッチ処理１０４、及び、ディスクリプタ発行処理１０６がある。イベントハンドラ１０１は、受け取ったイベントディスクリプタを参照し、次に行う処理を決定する。登録関数処理１０２は、あらかじめ設定された一連の処理を実行する。ディスパッチ処理１０４は、複数のタスク１０５の中から、起動するタスクを決定する。ディスクリプタ発行処理１０６は、イベントディスクリプタを発行する。
【００２８】
ＣＰＵ１０は、通常のアプリケーション処理において、登録関数処理１０２又はタスク１０５により処理を行う。これら処理において、専用処理部２０（図１）に対して処理を依頼するときには、ディスクリプタ発行処理１０６により、処理要求を記述したイベントディスクリプタを発行する。専用処理部２０は、イベントコントローラ３０を介して、イベントディスクリプタを受け取ると、そのイベントディスクリプタによって指定された処理を行う。このとき、ＣＰＵ１０の主記憶メモリから専用処理部２０に対してデータ転送が必要なときには、専用処理部２０は、図示しないＰＣＩバス等のデータ転送バスを介して、ＣＰＵ１０から情報を取得する。
【００２９】
専用処理部２０は、処理が完了すると、次状態ＩＤを含むイベントディスクリプタを、ＣＰＵ１０に向けて送信する。ＣＰＵ１０上で動作するイベントハンドラ１０１は、イベントコントローラ３０からローカルバス１４を介してイベントディスクリプタを読み取り、読み取ったイベントディスクリプタに含まれる状態ＩＤや処理結果と状態遷移テーブル１０３とに基づいて、次の処理を決定する。
【００３０】
イベントハンドラ１０１は、状態ＩＤの次タスクＩＤがイベントハンドラタスクを示しているときには、前状態ＩＤと、処理の結果にて定まる次状態ＩＤとに対応する登録関数処理１０２を起動する。この場合、登録関数処理１０２において一連の処理が完了すると、イベントハンドラ１０１に制御が戻り、イベントハンドラ１０１は、イベントコントローラ３０から、イベントディスクリプタを取り出して、次の処理に移行する。登録関数処理１０２において、専用処理部２０に処理を依頼して結果を受け取る場合には、登録関数処理１０２を完了してイベントハンドラ１０１に制御を戻すことで、専用処理部２０の結果を受信する。
【００３１】
イベントハンドラ１０１は、次タスクＩＤがイベントハンドラタスク以外を示しているときには、ディスパッチ処理１０４により、タスク１０５の中から、該当するタスクを選択して起動する。タスク１０５を呼び出すときには、該当タスクのタスク制御ブロックに保存されている、プログラムカウンタやスタックポインタ、或いは、各種レジスタ情報などのコンテキスト情報を用いてタスクを切り替える。該当タスクは、一連の処理を実行して、専用処理部２０に処理を依頼して結果を受け取るときには、イベントハンドラ１０１に制御を戻す。また、専用処理部２０に処理を依頼する場合以外にも、ＩＯ待ちや、タイマイベント待ちなどの次のイベントを待つときにはイベントハンドラ１０１に制御を切り替える。
【００３２】
イベントコントローラ３０は、複数の受信イベントキュー（図３では、２つのイベントキュー３１、３２）と、代表イベントキュー３３と、制御部３４と、分離部３５と、選択部３６とを有する。イベントキュー３１及び３２は、それぞれ、例えば優先度が高いイベントディスクリプタを記憶するためのキュー、及び、優先度が低いイベントディスクリプタを記憶するためのキューとして使用される。分離部３５は、ディスクリプタ転送網４０（図１）を介して受信したイベントディスクリプタを、その優先度フラグ（図２）に従って、イベントキュー３１又は３２に追加登録する。分離部３５は、例えば優先度フラグが「優先度高」を示しているときには、受信したイベントディスクリプタを、イベントキュー３１に登録する。また、優先度フラグが「優先度低」を示しているときには、受信したイベントディスクリプタを、イベントキュー３２に登録する。
【００３３】
選択部３６は、所定のタイミングで、イベントキュー３１又は３２から、イベントディスクリプタを１つ取り出す。このとき、選択部３６は、優先度が高いイベントディスクリプタを格納するイベントキューを優先して、イベントディスクリプタを取り出す。例えば、イベントキュー３１及び３２の双方にイベントディスクリプタが登録されているときには、優先度が高いイベントディスクリプタを記憶するイベントキュー３１からイベントディスクリプタを取り出す。選択部３６は、取り出したイベントディスクリプタの制御フラグ（図２）を参照し、制御フラグが「１」のときには、取り出したイベントディスクリプタを制御部３４に受け渡し、「１」以外のときには、１以上のイベントディスクリプタの格納領域を有する代表イベントキュー３３に登録する。
【００３４】
制御部３４は、制御用のプロセッサ又はハードウェアにより構成されている。制御部３４は、制御フラグが「１」に設定されたイベントディスクリプタを受け取ると、あらかじめ組み込まれた判定論理（プログラムを含む）に従って、待ち合わせ処理や状態遷移判定等を行い、受け取った１以上のイベントディスクリプタに基づいて新たなイベントディスクリプタを生成する。制御部３４は、イベントディスクリプタを生成すると、その生成したイベントディスクリプタを、代表イベントキュー３３に登録する。制御部３４又は選択部３６によって代表イベントキュー３３に登録されたイベントディスクリプタは、ローカルバス１４を介して、ＣＰＵ１０によって読み出される。
【００３５】
制御部３４の詳細な動作について説明する。ここでは、３つの専用処理部２０を利用して、ＣＰＵ１０から処理をオフロードする場合について考える。この場合、ＣＰＵ１０は、制御フラグを「１」、参照数を「３」としたイベントディスクリプタを、各専用処理部２０に発行する。各専用処理部２０は、それぞれ独立に自身の処理を行い、処理が完了すると、処理結果を含むイベントディスクリプタを、ＣＰＵ１０に向けて送信する。このイベントディスクリプタは、ＣＰＵ１０のイベントコントローラ３０によって受信される。
【００３６】
ＣＰＵ１０のイベントコントローラ３０では、制御フラグが「１」であるため、選択部３６は、制御部３４にイベントディスクリプタを受け渡す。制御部３４は、前状態ＩＤと、要求元処理部ＩＤとの組み合わせについて、どのような処理を行うかの情報を記憶しており、その情報を参照して、待ち合わせ処理を行うことを理解する。この例では、イベントディスクリプタの参照数が「３」であることから、３つの専用処理部２０からのイベントディスクリプタを待ち合わせることを理解する。
【００３７】
制御部３４は、３つの専用処理部２０からのイベントディスクリプタが揃うまで待機し、イベントディスクリプタが全て揃うと、各イベントディスクリプタに含まれる処理結果を参照し、あらかじめ組み込まれた判定論理に従って、各専用処理部２０での処理結果の組み合わせに応じて次状態ＩＤを決定する。その後、その次状態ＩＤを含むイベントディスクリプタを生成し、生成したイベントディスクリプタを、代表イベントキュー３３に登録する。
【００３８】
ここで、選択部３６が、イベントキュー３１又は３２からイベントディスクリプタを取り出すタイミングについては、ＣＰＵ１０が代表イベントキュー３３からディスクリプタを取り出すタイミングの直前とすることが好ましい。これは、ＣＰＵ１０が代表イベントキュー３３を参照する周期に比して、選択部３６がイベントディスクリプタを取り出して代表イベントキュー３３に登録する周期が長い場合には、イベントキュー３１又は３２にイベントディスクリプタが登録されているにもかかわらず、代表イベントキュー３３が「空」となって、ＣＰＵ１０がイベントディスクリプタを読み出すことができないことがあるからである。また、選択部３６がイベントディスクリプタを代表イベントキュー３３に登録する周期を短くしすぎると、優先度が高いイベントディスクリプタが、優先度が低いイベントディスクリプタに少し遅れてイベントコントローラ３０に到達したときに、優先度が低いイベントキューが、代表イベントキュー３３に先に登録されることがあるためである。
【００３９】
以下、図４に示す、２つのＣＰＵ１１１、１１２と、３つの専用処理部（データ復号処理部１２４、パタンチェック処理部１２５、１２６）を有する計算機システム（ネットワーク処理装置）を例に挙げて具体的な処理の流れを説明する。パケット受信部１２３は、外部からのパケットの送受信を行う。パケット受信部１２３は、外部からのパケットデータを受信し、データの整合チェック等を行った後、あらかじめ定められたデータ転送方式で、ＣＰＵ１１１のメモリにデータをコピーする。パケット受信部１２３は、データ転送が完了すると、ＣＰＵ１１１のイベントコントローラ１３１に、ＣＰＵ１１１において受信処理を行う関数のＩＤを含む完了イベントを発行する。この関数ＩＤは、あらかじめパケット受信部１２３に登録されている。
【００４０】
ＣＰＵ１１１は、代表イベントキュー３３（図３）から受信完了イベントを読み出し、読み出したイベントディスクリプタに含まれる次関数ＩＤに基づいて、受信関数を呼び出して、受信処理を行う。なお、パケット受信部１２３が発行する受信完了イベントを示すイベントディスクリプタについては、パタンチェック処理部１２５、１２６等が発行するイベントディスクリプタに比して、優先度が低く設定される。このようにすることで、ＣＰＵ１１１がビジー状態であるときに、処理の単位であるパケット受信を抑えることが可能になり、システム内での処理のオーバーフローを防ぐことができる。また、ひとつのパケットデータに対して複数回のパタンチェック処理を行なう場合のように、呼び出し頻度の高い処理部からのイベントの優先度を高くしておくことにより。イベントの滞留による処理効率の低下を避けることができる。
【００４１】
ＣＰＵ１１１は、受信処理の一連の処理中で、データの復号が必要になると、データ復号処理部１２４に対して、データ復号処理を要求するイベントを発行する。データ復号処理部１２４は、自身のイベントコントローラ１３４から、ＣＰＵ１１１によって発行されたイベントディスクリプタを受信し、復号処理を開始する。復号処理では、図示しないデータ転送網を介して、ＣＰＵ１１１のメモリからデータを引き取り、データ復号を行う。データ復号処理部１２４が行うデータ復号処理には、エンコードされた文字のデコードや、暗号データの復号、圧縮されたデータの伸長などがある。
【００４２】
データ復号処理部１２４は、復号処理を完了すると、データ転送網を介してＣＰＵ１１１のメモリに結果を格納すると共に、復号完了を示すイベントディスクリプタを、ＣＰＵ１１１に向けて送信する。このイベントディスクリプタは、イベントコントローラ１３１によって受信され、代表イベントキュー３３（図３）に格納される。ＣＰＵ１１１は、代表イベントキュー３３から復号完了を示すイベントディスクリプタを読み出し、読み出したイベントディスクリプタに含まれる状態ＩＤに基づいて、次の処理に移る。例えば、状態ＩＤのタスクＩＤがイベントハンドラ１０１（図３）以外を示しているときには、ディスパッチ処理１０４を介して、該当するタスク１０５を起動する。タスク１０５では、一連の処理を実行した後、パタンチェック処理部１２５に対して、パタンチェック処理を要求するイベントを発行する。
【００４３】
パタンチェック処理部１２５は、自身のイベントコントローラ１３５からイベントディスクリプタを取り出し、パタンチェック処理を行う。パタンチェック処理部１２５は、パタンチェック処理を完了すると、その照合結果に応じて、次関数ＩＤ及び次タスクＩＤを決定し、それらを含むイベントディスクリプタを、ＣＰＵ１１１に向けて送信する。ＣＰＵ１１１は、イベントコントローラ１３１の代表イベントキュー３３からイベントディスクリプタを読み出し、読み出したイベントディスクリプタに含まれる状態ＩＤの次関数ＩＤ及び次タスクＩＤに基づいた処理を実行する。ネットワーク処理装置は、このようにして一連の処理を実行することにより、ＣＰＵと専用処理部との連携処理を実現する。
【００４４】
次に、ＣＰＵ１１１が、パタンチェック処理部１２５及びパタンチェック処理部１２６の２つの専用処理部を利用する場合について考える。パタンチェック処理部１２５及び１２６は、パタンチェックの対象となるパタンが互いに異なっており、異なる機能を提供する。ＣＰＵ１１１は、パタンチェックを行う際には、パタンチェック処理部１２５及び１２６に対して、それぞれ処理を要求するイベントを発行する。このときにＣＰＵ１１１が発行するイベントディスクリプタの具体例を、図５（ａ）に示す。このイベントディスクリプタには、宛先処理部ＩＤとしてパタンチェック処理部１２５又は１２６が記述され、要求元処理部ＩＤとしてＣＰＵ１１１が記述され、制御フラグは、“１”に設定される。要求ＩＤは共に「１２３４」であり、２つの結果を待ち合わせることから参照数を「２」とする。
【００４５】
パタンチェック処理部１２５及び１２６は、それぞれ、ＣＰＵ１１１が発行したイベントディスクリプタを受け取り、パタンチェック処理を実行する。パタンチェック処理部１２５は、処理が完了すると、処理結果を含む応答イベントを発行する。パタンチェック処理部１２５及び１２６が発行する応答イベント示すイベントディスクリプタの具体例を、図５（ｂ）に示す。このイベントディスクリプタは、要求処理部ＩＤがＣＰＵ１１１であり、要求元処理部ＩＤがパタンチェック処理部１２５、１２６である点で、同図（ａ）に示すイベントディスクリプタと相違する。また、処理結果として、「一致あり」又は「一致なし」が付加されている。
【００４６】
パタンチェック処理部１２５が発行したイベントディスクリプタは、ＣＰＵ１１１のイベントコントローラ１３１によって受信される。このイベントディスクリプタは、制御フラグが“１”であるため、選択部３６（図３）から、制御部３４に受け渡される。制御部３４は、パタンチェック処理部１２５からの応答イベント受信すると、前状態ＩＤ及び要求元処理部ＩＤ“１２５”を参照して、待ち合わせ処理が必要であることを理解し、イベントディスクリプタの待ち合わせを行う。制御部３４は、待ち合わせ処理では、ディスクリプタＩＤ“１２３４”を参照して、待ち合わせ対象のイベントディスクリプタを特定する。また、イベントディスクリプタの参照数“２”を参照して、２つのイベントディスクリプタを待ち合わせることを認識する。
【００４７】
パタンチェック処理部１２６は、処理が完了すると、処理結果を含む応答イベントを発行する。パタンチェック処理部１２６が発行したイベントディスクリプタは、選択部３６から制御部３４へ受け渡される。制御部３４は、前状態ＩＤ及び要求元処理部ＩＤ“１２５”を参照して、待ち合わせ処理が必要であることを理解する。制御部３４は、ディスクリプタＩＤ“１２３４”を参照して、待ち合わせ対象のイベントディスクリプタを既に受信していることを認識し、２つのイベントディスクリプタが揃ったことから、待ち合わせ処理を終了する。その後、受信した２つのイベントディスクリプタを用い、判定論理に従って、新たなイベントディスクリプタを生成する。
【００４８】
図６は、制御部３４が記憶する判定論理テーブルの具体例を示している。この判定論理テーブルは、要求元処理部ＩＤがパタンチェック処理部１２５又は１２６で、かつ、前状態ＩＤが５００のときに適用される。制御部３４は、待ち合わせた２つのイベントディスクリプタの処理結果を参照して論理判定テーブルを引き、次状態ＩＤを決定する。例えば、パタン処理部１２５及び１２６での処理結果が共に「一致あり」であれば、次状態ＩＤを“７００”と決定する。また、処理結果の少なくとも一方が「一致なし」であれば、次状態ＩＤを“８００”と決定する。
【００４９】
制御部３４は、次状態ＩＤの決定後、パタンチェック処理部１２５又は１２６からのイベントディスクリプタの内容を引き継ぎ、次状態ＩＤを、上記のようにして決定した次状態ＩＤとするイベントディスクリプタを生成して、これを代表イベントキュー３３に登録する。このとき、付加情報（図２）には、２つのパタンチェック処理部１２５、１２６からの処理結果を含める。ＣＰＵ１１１は、制御部３４が生成したイベントディスクリプタを、代表イベントキュー３３（図３）を介して受け取り、パタンチェック処理部１２５及び１２６の処理結果に基づいた適切な登録関数処理１０２或いはタスク１０５を起動して、処理を継続する。このようにすることで、ＣＰＵ１０は、２つのパタンチェック処理部１２５及び１２６に要求したパタンチェック処理に対して、イベントコントローラ３０において生成された単一のイベントディスクリプタ（処理結果）を参照することで、次の処理状態に遷移することが可能になる。
【００５０】
本実施形態では、イベントコントローラ３０は、ＣＰＵ１０又は専用処理部２０が発行したイベントディスクリプタを、単一の代表イベントキュー３３に格納し、ＣＰＵ１０等は、代表イベントキュー３３から、ローカルバス１４を介してイベントディスクリプタを読み出す。このようにすることで、ＣＰＵ１０は、単一のイベントキューを参照することで、専用処理部２０又は他のＣＰＵ１０が発行したイベントディスクリプタを受け取ることができ、複数個所を参照する場合に比して、イベント処理に要するコストを削減できる。また、イベントディスクリプタを、ローカルバス１４を介して読み出すため、専用処理部２０等に対してデータ転送バスを介して状態ポーリングを行う場合に比して、高速なアクセスが可能となり、ＣＰＵ１０の効率的な利用が可能になる。
【００５１】
また、本実施形態では、イベントコントローラ３０の制御部３４は、制御フラグが「１」のイベントディスクリプタを受け取り、受け取った１以上のイベントディスクリプタに基づいて待ち合わせ処理や状態遷移判定等を行い、その結果を示すイベントディスクリプタを生成して、これをＣＰＵ１０に受け渡す。この場合、一部の処理をイベントコントローラ３０に代行させることで、メインのアプリケーションを実行するＣＰＵ１０上のプログラム構成を簡潔にすると共に、ＣＰＵ１０の使用効率を高めることができる。
【００５２】
図７は、本発明の第２実施形態の計算機システムの構成を示している。本実施形態の計算機システム１００ａは、ＤＭＡコントローラ６２を備えており、ＣＰＵ１０が、ＣＰＵ１０のメモリ１１上の単一のイベントキューエリア１２からイベントディスクリプタを読み出す点で、第１実施形態と相違する。メモリ１１は、メモリバス６１を介して、ＣＰＵ１０と接続される。メモリバス６１には、例えば、ＰＣＩバス、ＰＣＩ  Ｅｘｐｒｅｓｓ、ＲａｐｉｄＩＯ等のバスを用いることができる。
【００５３】
イベントコントローラ３０では、第１実施形態で説明した動作と同様な動作により、単一の代表イベントキュー３３（図３）に、イベントディスクリプタを登録する。ＤＭＡコントローラ６２は、ＤＭＡ（Direct Memory Access）機能により、イベントコントローラ３０内の代表イベントキュー３３が格納するイベントディスクリプタを、ＣＰＵ１０を介さずに、メモリ１１内の単一のイベントキューエリア１２に転送する。ＣＰＵ１０は、メモリ１１に対してポーリング処理を行い、イベントキューエリア１２から、イベントディスクリプタを読み出して、処理を行う。
【００５４】
本実施形態では、代表イベントキュー３３に格納されたイベントディスクリプタを、ＤＭＡ転送により、ＣＰＵ１０の配下のメモリ１１のイベントキューエリア１２に転送する。この場合にも、ＣＰＵ１０は、単一のイベントキューエリア１２を参照することでイベントディスクリプタを受け取ることができる。また、ＣＰＵ１０とメモリ１１の間のメモリバスは、通常、ローカルバス１４に比して高速データ転送が可能であるため、第１実施形態で得られる効果に加えて、ＣＰＵ１０は、イベントディスクリプタのサイズが大きい場合には、ローカルバス１４を用いる場合に比して、高速にイベントディスクリプタを参照することができる。
【００５５】
図８は、本発明の第３実施形態の計算機システムのＣＰＵ付近の詳細な構成を示している。本実施形態は、ＣＰＵ１０ａが、拡張レジスタ群１３を更に有する点で、第１実施形態と相違する。拡張レジスタ群１３は、イベントコントローラ３０内の代表イベントキュー３３（図３）のダイジェスト情報を格納する。このダイジェスト情報は、代表イベントキュー３３にイベントディスクリプタがあるか否かを示す情報、及び、ＣＰＵ処理で必要となる次状態ＩＤなどを含む。
【００５６】
ＣＰＵ１０ａは、インタフェース部１５により、イベントコントローラ３０からダイジェスト情報を収集し、収集した値を、拡張レジスタ群１３に値を格納する。ＣＰＵ１０ａは、拡張レジスタ群１３を参照することで、代表イベントキュー３３にイベントディスクリプタがあるか否かの情報や、次状態ＩＤ等を取得できる。ＣＰＵ１０ａにおいて、レジスタアクセス処理は最も高速であり、ローカルバス１４を介したイベントキューのポーリングに比して、拡張レジスタ群１３に高速にアクセスすることができる。このため、イベントコントローラ３０のアクセスに必要な時間を短縮することができ、ＣＰＵ１０ａを、より有効に活用できる。
【００５７】
なお、上記各実施形態では、イベントディスクリプタに優先度を設けて、優先度が高いイベントディスクリプタを、優先的にＣＰＵ１０に受け渡す例について説明したが、優先度を設定しないことも可能である。この場合には、イベントコントローラ３０は、受信したイベントディスクリプタを代表イベントキュー３３に格納していけばよい。また、制御フラグが「１」のイベントディスクリプタについては、イベントキュー３１、３２、及び、選択部３６を介さずに、分離部３５から制御部３４に受け渡すようにしてもよい。ＣＰＵ１０のイベントコントローラ３０と専用処理部２０のイベントコントローラ３０とは、必ずしも同一の構成である必要はなく、例えば専用処理部２０のイベントコントローラ３０については、代表イベントキュー３３のみを備える構成であってもよい。
【００５８】
第１実施形態では、具体例として、制御部３４が、２つのパタンチェック処理部１２５及び１２６からのイベントディスクリプタを待ち合わせ、その処理結果に基づいて次状態ＩＤを決定し、１つのイベントディスクリプタを生成したが、制御部３４は、待ち合わせ処理のみを行う構成であってもよい。その場合には、制御部３４は、状態遷移判定を行わずに、２つのパタンチェック処理部１２５及び１２６からのイベントディスクリプタが揃った時点で、代表イベントキュー３３に、２つのイベントディスクリプタをまとめて登録すればよい。このようにすることで、ＣＰＵ１０は、２つのイベントディスクリプタを順次に取り出すことができ、ＣＰＵ１０において、待ち合わせ処理を行う必要がなくなる。
【００５９】
以上、本発明をその好適な実施形態に基づいて説明したが、本発明の計算機システム及びイベント処理方法は、上記実施形態例にのみ限定されるものではなく、上記実施形態の構成から種々の修正及び変更を施したものも、本発明の範囲に含まれる。
【図面の簡単な説明】
【００６０】
【図１】本発明の第１実施形態の計算機システムの構成を示すブロック図。
【図２】イベントディスクリプタの内容の一例を示す図。
【図３】ＣＰＵ１０及びイベントコントローラ３０の詳細な構成を示すブロック図。
【図４】ネットワーク処理装置の構成を示すブロック図。
【図５】（ａ）及び（ｂ）は、それぞれ、イベントディスクリプタの内容の具体例を示す図。
【図６】判定論理における処理結果と次状態との関係の具体例を示す図。
【図７】本発明の第２実施形態の計算機システムの構成を示すブロック図。
【図８】本発明の第３実施形態の計算機システムの構成を示すブロック図。
【図９】従来の計算機システムの構成を示すブロック図。
【符号の説明】
【００６１】
１００  計算機システム
１０、１１１〜１１２  ＣＰＵ
１１  メモリ
１２  イベントキューエリア
１３  拡張レジスタ群
１４  ローカルバス
１５  インタフェース部
２０  専用処理部
３０、１３１〜１３６  イベントコントローラ
３１、３２、３３  イベントキュー
３４  制御部
３５  分離部
３６  選択部
４０  ディスクリプタ転送網
６１  メモリバス
６２  ＤＭＡコントローラ
１０１  イベントハンドラ
１０２  登録関数処理
１０３  状態遷移テーブル
１０４  ディスパッチ処理
１０５  タスク
１０６  ディスクリプタ発行処理
１２３  パケット受信部
１２４  データ復号処理部
１２５、１２６  パタンチェック処理部
【図１】
2007079789.tif 000003
【図２】
2007079789.tif 000004
【図３】
2007079789.tif 000005
【図４】
2007079789.tif 000006
【図５】
2007079789.tif 000007
【図６】
2007079789.tif 000008
【図７】
2007079789.tif 000009
【図８】
2007079789.tif 000010
【図９】
2007079789.tif 000011