(57)【特許請求の範囲】
【請求項１】
割り込み処理の実行時刻を決定し、前記割り込み処理の内容を実行時刻と対応付けてコールアウトテーブルに登録する、登録部と、
前記コールアウトテーブルを参照し、現在時刻が前記割り込み処理の実行時刻になった場合に、前記割り込み処理を、複数のプロセッサのうちのいずれかにより実行させる、実行部と、
を具備し、
前記登録部は、前記割り込み処理として周期Ｔで周期的に実行されるべき周期的処理が実行されたときに、
予め設定される初期時刻から前記周期Ｔのｎ倍（ｎは０以上の整数）の時間が経過した時刻である理想時刻と、現在時刻との間の差を、時間差として求め、
前記時間差が予め設定された許容範囲内であるか否かを判定し、
前記時間差が前記許容範囲内でない場合に、現在時刻から前記周期Ｔが経過した時刻である補正前時刻から予め設定された補正時間だけずれた時刻を補正後時刻として求め、前記補正後時刻を次回の前記周期的処理の実行時刻として前記コールアウトテーブルに登録し、
前記時間差が前記許容範囲内である場合に、前記補正後時刻として次の前記理想時刻を採用し、前記補正後時刻を次回の前記周期的処理の実行時刻として前記コールアウトテーブルに登録する
割り込み処理装置。
【請求項２】
請求項１に記載された割り込み処理装置であって、
前記登録部は、前記周期Ｔによって前記周期的処理を実行する旨を示す周期的処理実行要求を受け付けたときに、前記理想時刻と、現在時刻との間の差を、時間差として求め、
前記時間差が前記許容範囲内であるか否かを判定し、
前記時間差が前記許容範囲内でない場合に、現在時刻から前記周期Ｔが経過した時刻である補正前時刻から予め設定された補正時間だけずれた時刻を補正後時刻として求め、前記補正後時刻を次回の前記周期的処理の実行時刻として前記コールアウトテーブルに登録し、
前記時間差が前記許容範囲内である場合に、前記補正後時刻として次の前記理想時刻を採用し、前記補正後時刻を次回の前記周期的処理の実行時刻として前記コールアウトテーブルに登録する
割り込み処理装置。
【請求項３】
請求項１又は２に記載された割り込み処理装置であって、
更に、
前記複数のプロセッサの各々に含まれるタイマーレジスタを同期させる、タイマー同期部、
を具備し、
前記初期時刻は、前記タイマー同期部が前記タイマーレジスタを同期させた時刻に設定される
割り込み処理装置。
【請求項４】
請求項１乃至３のいずれかに記載された割り込み処理装置であって、
前記補正時間がＤとして表される場合に、前記許容範囲は、「０±Ｄ」として設定されている
割り込み処理装置。
【請求項５】
請求項４に記載された割り込み処理装置であって、
登録部は、前記補正時間Ｄが０より小さい値に設定されている場合に、下記（数式１）に従って、現在時刻から前記補正後時刻までの経過時間を示す補正後ｅｔｉｍｅを求め、前記許容時間及び前記補正後時間が０より大きい値に設定されている場合に、下記（数式２）に従って、前記補正後ｅｔｉｍｅを求め、
（数式１）；補正後ｅｔｉｍｅ＝ｅｔｉｍｅ＋Ｍａｘ（０−ＴＭ％ｅｔｉｍｅ，Ｄ）
（数式２）；補正後ｅｔｉｍｅ＝ｅｔｉｍｅ＋Ｍｉｎ（ｅｔｉｍｅ−ＴＭ％ｅｔｉｍｅ，Ｄ）
前記ｅｔｉｍｅは、現在時刻から前記補正前時刻までの経過時間を示し、
前記ＴＭは、前期初期時刻から現在時刻までの経過時間を示し、
前記％は、剰余演算を示し、
前記Ｍａｘは、括弧内に記載される値の最大値を選択的に返却する関数を示す
前記Ｍｉｎは、括弧内に記載される値の最小値を選択的に返却する関数を示す
割り込み処理装置。
【請求項６】
割り込み処理の実行時刻を決定し、前記割り込み処理の内容を実行時刻と対応付けてコールアウトテーブルに登録するステップと、
前記コールアウトテーブルを参照し、現在時刻が前記割り込み処理の実行時刻になった場合に、前記割り込み処理を、複数のプロセッサのうちのいずれかにより実行させるステップと、
を具備し、
前記登録するステップは、
前記割り込み処理として周期Ｔで周期的に実行されるべき周期的処理が実行されたときに、予め設定される初期時刻から前記周期Ｔのｎ倍（ｎは０以上の整数）の時間が経過した時刻である理想時刻と、現在時刻との間の差を、時間差として求めるステップと、
前記時間差が予め設定された許容範囲内であるか否かを判定するステップと、
前記時間差が前記許容範囲内でない場合に、現在時刻から前記周期Ｔが経過した時刻である補正前時刻を求め、前記補正前時刻から予め設定された補正時間だけずれた時刻を補正後時刻として求め、前記補正後時刻を次回の前記周期的処理の実行時刻として前記コールアウトテーブルに登録するステップと、
前記時間差が前記許容範囲内である場合に、前記補正後時刻として次の前記理想時刻を採用し、前記補正後時刻を次回の前記周期的処理の実行時刻として前記コールアウトテーブルに登録するステップとを備える
割り込み処理方法。
【請求項７】
請求項６に記載された割り込み処理方法を、コンピュータにより実現するための、割り込み処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、割り込み処理装置、割り込み処理方法、及び割り込み処理プログラムに関する。
【背景技術】
【０００２】
マルチプロセッサ計算機システムでは、複数のプロセッサ（ＣＰＵ）によって、並列的にプログラムが実行される。これにより、単一のプロセッサを用いる場合よりも、処理速度を速めることが可能である。
【０００３】
関連技術として、特許文献１（特開２０００−２１５０７２）が挙げられる。特許文献１には、マルチスレッドで動作するプロセスのプロセス移動を実現することにより、分散システムの構築を容易にするプログラム実行装置を提供することを課題とした技術が記載されている。
【０００４】
マルチプロセッサ計算機システムでは、複数のプロセッサが同期して処理を実行しなければならない。同期処理に関する技術として、特許文献２（特表昭６１−５０１６６１）、及び特許文献３（特許第４０７８０６５）が挙げられる。
【０００５】
一方で、計算機システムでは、割り込み処理が発生することがある。割り込み処理をどのようにして実行するかは、計算機システムの性能を向上させる観点から、重要である。割り込み処理として、周期的に行われる周期的割り込み処理が発生することがある。周期的割り込み処理に関する技術が、例えば、特許文献４（特開２００１−１６６９５４）、特許文献５（特開２００２−１８２９３０）、及び特許文献６（特開平９−３１６５９７）、及び特許文献７（特開２００９−２６０３５）が挙げられる。
【０００６】
特に、特許文献７においては、経過時間ＴＲが割り込み処理の周期Ｔの整数倍に一致する時刻に限定して割り込み処理が行われるようにする点が記載されている。これにより、様々な異なる周期の割り込み処理が可能な限り同一の時刻で発生することとなり、並列プログラムのバリア同期待ちへの影響を最小限に抑えることができる点が記載されている。
【０００７】
その他に本願発明者が知りえた関連技術としては、特許文献８（特開平８−３２８８８０）が挙げられる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０００−２１５０７２
【特許文献２】特表昭６１−５０１６６１
【特許文献３】特許第４０７８０６５
【特許文献４】特開２００１−１６６９５４
【特許文献５】特開２００２−１８２９３０
【特許文献６】特開平９−３１６５９７
【特許文献７】特開２００９−２６０３５
【特許文献８】特開平８−３２８８８０
【発明の概要】
【発明が解決しようとする課題】
【０００９】
図１を参照して、本発明が解決しようとする課題を説明する。図１（ａ）は、プログラムに記載される各処理が単一のプロセッサによって実行された状態を示す概念図である。図１（ａ）に示されるように、複数の処理（処理１〜処理５）が、単一のプロセッサにより、順番に実行されている。一方、図１（ｂ）は、各処理が、複数のプロセッサ（ＣＰＵ１〜４）によって並列的に実行された状態を示す概念図である。図１（ｂ）に示される例では、各処理が、複数のプロセッサにより並列的に実行されている。複数のプロセッサは、同じタイミングで割り当てられた処理を終えている。各プロセッサが処理を実行し終えたタイミングで、バリア同期処理が行われ、次の処理が実行される。このように、複数のプロセッサによって並列的に処理を実行することにより、単一のプロセッサを用いる場合よりも、処理速度を向上させることができる。
【００１０】
しかしながら、既述のように、計算機システムでは、割り込み処理が発生することがある。図１（ｃ）は、割り込み処理が行われた状態を示す概念図である。図１（ｃ）に示される例では、１番目の処理を実行中に、プロセッサ（ＣＰＵ１）において割り込み処理が行われている。その結果、プロセッサ（ＣＰＵ１）が１番目の割り当てられた処理を実行し終えるタイミングが、他のプロセッサ（ＣＰＵ２〜４）が処理を実行し終えるタイミングよりも、遅くなっている。バリア同期処理は、全てのプロセッサが割り当てられた処理を実行し終えた段階で、実行される。従って、他のプロセッサ（ＣＰＵ２〜４）は、割り当てられた処理を実行し終えた後、プロセッサ（ＣＰＵ１）が処理を実行し終えるのを待つことになる。このように、複数のプロセッサのうちのいずれかが割り込み処理を実行すると、他のプロセッサはバリア同期処理を待たなければならず、処理速度が遅くなってしまう。
【００１１】
これに対して、特許文献７（特開２００９−２６０３５）に記載の技術によれば、様々な異なる周期の割り込み処理が可能な限り同一の時刻で発生する。図１（ｄ）は、複数の割り込み処理が同一の時刻に実行された状態を示す概念図である。図１（ｄ）に示される例では、各プロセッサが２番目の処理を実行しているときに、複数の割り込み処理が複数のプロセッサ（ＣＰＵ１〜４）により実行されている。そのため、複数の割り込み処理を複数のプロセッサによって並列的に実行することが可能となり、割り込み処理によるロスを最小限に抑えることが可能になる。
【００１２】
しかしながら、特許文献７に記載されるように、割り込み処理の実行時刻を限定した場合、本来割り込み処理が行われるべき時刻から大幅にずれたタイミングで、割り込み処理が実行されてしまうことがある。割り込み処理の種類によっては、所望するタイミングから大幅にずれたタイミングで処理を実行すると、問題が発生することがある。すなわち、割り込み処理の目的によっては、特許文献７に記載された技術を採用することができない、という問題点があった。
【課題を解決するための手段】
【００１３】
本発明に係る割り込み処理装置は、割り込み処理の実行時刻を決定し、前記割り込み処理の内容を実行時刻と対応付けてコールアウトテーブルに登録する、登録部と、前記コールアウトテーブルを参照し、現在時刻が前記割り込み処理の実行時刻になった場合に、前記割り込み処理を、複数のプロセッサのうちのいずれかにより実行させる、実行部とを具備する。前記登録部は、前記割り込み処理として周期Ｔで周期的に実行されるべき周期的処理が実行された場合に、予め設定される初期時刻ｔ０から前記周期Ｔの整数倍の時間が経過した時刻である理想時刻ｔ１と、現在時刻から前記周期Ｔが経過した時刻である補正前時刻ｔ２との間の差を、時間差として求める。また、前記時間差が予め設定された許容範囲内であるか否かを判定する。さらに、前記時間差が前記許容範囲内でない場合に、前記補正前時刻ｔ２から予め設定された補正時間だけずれた時刻を補正後時刻として求め、前記補正後時刻を次回の前記周期的処理の実行時刻として前記コールアウトテーブルに登録する。前記時間差が前記許容範囲内である場合に、前記補正後時刻として前記理想時刻ｔ１を採用し、前記補正後時刻を次回の前記周期的処理の実行時刻として前記コールアウトテーブルに登録する。
【００１４】
本発明に係る割り込み処理方法は、割り込み処理の実行時刻を決定し、前記割り込み処理の内容を実行時刻と対応付けてコールアウトテーブルに登録するステップと、前記コールアウトテーブルを参照し、現在時刻が前記割り込み処理の実行時刻になった場合に、前記割り込み処理を、複数のプロセッサのうちのいずれかにより実行させるステップとを具備する。前記登録するステップは、前記割り込み処理として周期Ｔで周期的に実行されるべき周期的処理が実行された場合に、予め設定される初期時刻ｔ０から前記周期Ｔの整数倍の時間が経過した時刻である理想時刻ｔ１と、現在時刻から前記周期Ｔが経過した時刻である補正前時刻ｔ２との間の差を、時間差として求めるステップと、前記時間差が予め設定された許容範囲内であるか否かを判定するステップと、前記時間差が前記許容範囲内で無い場合に、前記補正前時刻ｔ２から予め設定された補正時間だけずれた時刻を補正後時刻として求め、前記補正後時刻を次回の前記周期的処理の実行時刻として前記コールアウトテーブルに登録するステップと、前記時間差が前記許容範囲内である場合に、前記理想時刻ｔ１を前記補正後時刻として求め、前記補正後時刻を次回の前記周期的処理の実行時刻として前記コールアウトテーブルに登録するステップとを備える。
【００１５】
本発明に係る割り込み処理プログラムは、上述の割り込み処理方法を、コンピュータにより実現するためのプログラムである。
【発明の効果】
【００１６】
本発明によれば、各割り込み処理が所望するタイミングに近いタイミングで実行され、且つ、複数の割り込み処理が可能な限り同一時刻に実行される、割り込み処理装置、割り込み処理方法、及び割り込み処理プログラムが提供される。
【図面の簡単な説明】
【００１７】
【図１】課題を説明するための図である。
【図２】実施形態の概要を説明するための図である。
【図３】計算機システムを示す概略図である。
【図４】計算機システムの動作方法を示すフローチャートである。
【図５Ａ】タイマーレジスタの同期方法を示すフローチャートである
【図５Ｂ】実行時刻の決定方法を示すフローチャートである。
【図５Ｃ】割り込み処理実行時における動作をフローチャートである。
【図６Ａ】実施形態の作用効果を説明するための図である。
【図６Ｂ】実施形態の作用効果を説明するための図である。
【図７Ａ】実施形態の作用効果を説明するための図である。
【図７Ｂ】実施形態の作用効果を説明するための図である。
【図８】割り込み処理が実行されるタイミングと、許容補正値との関係を示す図である。
【図９】許容補正値Ｄが０に設定されている場合の動作例を示す図である。
【図１０】許容補正値Ｄが−Ｔに設定されている場合の動作例を示す図である。
【発明を実施するための形態】
【００１８】
以下に、図面を参照しつつ、本発明の実施形態について説明する。
【００１９】
まず、本実施形態に係る割り込み処理装置の概要について説明する。図２は、本実施形態の概要を説明するための説明図である。図２において、横軸は時刻を示している。図２には、周期Ｔの周期的な割り込み処理が行われるタイミングが示されている。図２に示されるように、初期時刻ｔ０が、予め定められている。初期時刻ｔ０は、例えば、計算機システムが立ち上げられた時刻である。
【００２０】
図２に示されるように、受け付け時刻ｔｒにおいて、周期Ｔで割り込み処理を実行する旨を示す割り込み要求が発生したとする。この割り込み処理に対して、初期時刻ｔ０から周期Ｔのｎ倍（ｎは０以上の整数）の時間が経過した時刻が、理想時刻ｔ１（ｔ１−１、ｔ１−２、ｔ１−３・・・）として記載されている。尚、初期時刻ｔ０は、ｎ＝０における理想時刻ｔ１−０と捉えることもできる。また、図２には、時刻ｔｒから周期Ｔが経過した時刻（ｔｒ＋Ｔ）が、補正前時刻ｔ２−１として記載されている。補正前時刻ｔ２−１は、本来第１回目の割り込み処理（１）が実行されるべき時刻である。
【００２１】
本実施形態では、割り込み要求が発生したときに、現在時刻（受付時刻ｔｒ）と、直前（又は直後）の理想時刻ｔ１（ここでは初期時刻ｔ０）との間の時間差が求められる。そして、この時間差が、予め設定された許容範囲内であるか否かが判定される。図２には、時間差が許容範囲外であった場合の例が示されている。時間差が許容範囲外であった場合には、補正前時刻ｔ２−１から予め設定された補正時間だけずれた時刻が、補正後時刻ｔ３−１として求められる。そして、一回目の割り込み処理（１）の実行時刻として、求められた補正後時刻ｔ３−１が登録される。これにより、補正後時刻ｔ３−１において、１回目の割り込み処理（１）が実行されることになる。尚、時間差が許容範囲内であった場合には、次の理想時刻ｔ１（時刻ｔ１−１）が補正後時刻として求められ、一回目の割り込み処理（１）の実行時刻として登録される。
【００２２】
割り込み処理が行われるたびに、上述と同様の動作が行われる。すなわち、１回目の割り込み処理（１）が実行された時に（時刻ｔ３−１に）、再び、現在時刻ｔ３−１と理想時刻ｔ１−１との間の時間差が求められる。図２には、この時間差が許容範囲内であった場合の例が示されている。時間差が許容範囲内であれば、次の理想時刻ｔ１−２が、補正後時刻として求められ、次の割り込み処理（２）の実行時刻として登録される。その後は、理想時刻ｔ１（ｔ１−３、ｔ１−４、・・・）に一致するタイミングで、周期Ｔの割り込み処理が繰り返し実行されることになる。尚、時間差が許容範囲外であった場合には、現在時刻ｔ３−１から周期Ｔが経過した時刻が補正前時刻ｔ２−２として求められ、この補正前時刻ｔ２からさらに補正時間だけずれた時刻が補正後時刻として求められる。
【００２３】
上述のような手法により、割り込み処理が繰り返されるたびに、割り込み処理の実行時刻が理想時刻ｔ１に段階的に近づいていく。そして、最終的には、理想時刻ｔ１において割り込み処理が繰り返し実行されることになる。すなわち、割り込み処理は、最終的に、初期時刻ｔ０から周期Ｔの整数倍の時間が経過した時刻において、実行されることになる。そのため、複数の割り込み処理が発生した場合、周期Ｔが同じであれば、複数の割り込み処理が同一のタイミングで実行されることになる。また、周期が異なる割り込み処理同士は、初期時刻ｔ０から周期の最小公倍数の時間が経過した時刻において、同時に実行されることになる。可能な限り複数の割り込み処理を同時に実行することが可能となり、計算機システムの処理速度を向上させることが可能になる。
【００２４】
加えて、割り込み処理の実行時刻は、段階的に補正される。割り込み処理の実行時刻は、本来実行されるべき時刻（補正前時刻ｔ２）から、補正時間以上にずれることは無い。割り込み処理は、期待されるタイミングに近いタイミングで実行される。期待されるタイミングから大幅にずれたタイミングで割り込み処理が実行されることがないので、計算機システムの動作が影響を受けることが防止される。
【００２５】
続いて、本実施形態について、詳細に説明する。
【００２６】
図３は、本実施形態に係る割り込み処理装置６が組み込まれた計算機システム１を示す概略図である。図３に示されるように、計算機システム１は、複数のプロセッサ３、主記憶装置２、及びプロセッサ間通信装置４を有している。
【００２７】
複数のプロセッサ３の各々は、タイマーレジスタ５を有している。タイマーレジスタ５は、一定間隔でインクリメントされ、自プロセッサに割り込みを発生させる。タイマーレジスタ５が発生させる割り込みが、以下、タイマー割り込みと称される。また、タイマー割り込みが発生する間隔が、以下、ティック（ｔｉｃｋ）と表記される。すなわちタイマー割込みはティック単位の一定間隔で、発生する事になる。
【００２８】
プロセッサ間通信装置４は、全てのプロセッサ３とアクセス可能に接続されている。プロセッサ間通信装置４は、全てのプロセッサ３に、同時に割り込みを発生させる。プロセッサ間通信装置４が発生させる割り込みが、以下、ブロードキャスト割込みと称される。ブロードキャスト割り込みは、任意の時点で任意のプロセッサにより発生させる事が出来る。
【００２９】
主記憶装置２には、オペレーティングシステムの一部として、割り込み処理プログラムが格納されており、割り込み処理プログラムが各プロセッサによって実行されることにより、割り込み処理装置６が実現される。割り込み処理装置６は、タイマー同期部７、及びコールアウト部８を有している。
【００３０】
タイマー同期部７は、複数のプロセッサ３間において、タイマーレジスタ５を同期させるために設けられている。
【００３１】
コールアウト部８は、現在時刻から指定時間（テック単位の値ｅｔｉｍｅ）が経過したときに、指定された割り込み処理（以下、指定処理；関数へのポインタｅｆｕｎｃ）を起動する機能を有している。コールアウト部８は、コールアウト登録部９、コールアウトテーブル１１、及びコールアウト実行部１２を有している。
【００３２】
コールアウトテーブル１１は、割り込み処理とその実行時刻との対応関係を示すテーブルである。コールアウトテーブル１１は、複数のスロットを有している。各スロットには、指定時間ｅｔｉｍｅと指定処理ｅｆｕｎｃとの対応関係が記述されている。コールアウトテーブル１１が有するスロットの数は、計算機システム１が同時に要求し得る処理の最大数を登録するのに十分な大きさであり、コールアウトテーブル１１が溢れる事はない。また、コールアウトテーブル１１には、指定処理ｅｆｕｎｃが、指定時間ｅｔｉｍｅが小さな値から順番に詰めて登録されている（但し、ｅｔｉｍｅ＝０であるものは除く）。コールアウトテーブル１１において、なにも登録されていない空きスロットは、｛ｅｔｉｍｅ，ｅｔｉｍｅ｝＝｛０、ＮＵＬＬ｝となっている。指定時間ｅｔｉｍｅは、現在時刻からの経過時間を示しており、タイマー割り込みが発生するたびにデクリメントされる。
【００３３】
コールアウト登録部９は、指定処理ｅｆｕｎｃに対して、指定時間ｅｔｉｍｅを決定し、コールアウトテーブル１１に登録する機能を有している。コールアウト登録部９は、コールアウト時間補正部１０を有している。コールアウト時間補正部１０は、割り込み処理の周期Ｔに応じて、次に割り込み処理が実行される時刻を補正する機能を有している。すなわち、コールアウト登録部９は、コールアウト時間補正部１０によって補正された時刻を、指定時間ｅｔｉｍｅとしてコールアウトテーブル１１に登録する。
【００３４】
コールアウト実行部１２は、コールアウトテーブル１１を参照し、指定時間ｅｔｉｍｅがゼロとなった指定処理ｅｆｕｎｃを実行する機能を有している。コールアウト実行部１２は、タイマー割り込みの延長で動作し、指定処理（ｅｆｕｎｃ）を実行する。
【００３５】
続いて、本実施形態に係る計算機システムの動作方法について説明する。図４は、本実施形態に係る計算機システムの動作方法を示すフローチャートである。
【００３６】
ステップＳ１；タイマーレジスタの同期
計算機システム１が立ち上げられると、タイマー同期部７が、複数のプロセッサ３間において、タイマーレジスタ５を同期させる。本実施形態では、以下、タイマーレジスタ５が同期された時刻が、初期時刻ｔ０と記載される。
【００３７】
ステップＳ２；割り込み要求の受付
オペレーティングシステム等によって、周期Ｔで割り込み処理を行う旨の要求（割り込み要求）が発生したとする。割り込み要求は、コールアウト部８によって受け付けられる。
【００３８】
ステップＳ３；次回の実行時刻の決定
コールアウト部８は、割り込み要求を受け付けると、コールアウト登録部９によって、次に割り込み処理を行う時刻（実行時刻）を決定する。そして、コールアウト登録部９は、割り込み処理（指定処理ｅｆｕｎｃ）を、決定した実行時刻に対応する指定時間ｅｔｉｍｅと対応付けて、コールアウトテーブル１１に登録する。
【００３９】
ステップＳ４；割り込み処理の実行
指定時間ｅｔｉｍｅは、タイマー割り込みの発生に応じて、デクリメントされる。指定処理ｅｆｕｎｃの指定時間ｅｔｉｍｅが０になると、コールアウト実行部１２が、その指定処理ｅｆｕｎｃを割り込み処理として実行する。その後、ステップＳ３に戻ってその指定処理ｅｆｕｎｃの次の実行時刻が決定され、以降の動作が繰り返される。尚、割り込み処理を終了する場合には、ステップＳ４の後に、ステップＳ３の動作が行われなければよい。また、指定処理ｅｆｕｎｃが実行されてからステップＳ３で次の実行時刻が登録されるまでの間隔は、１ティックと比較して十分に短く、ステップＳ４における指定処理ｅｆｕｎｃと次の実行時刻の登録とは、実質的に同時刻に行なわれるものとする。
【００４０】
続いて、各ステップにおける動作を詳細に説明する。
【００４１】
まず、ステップＳ１（タイマーレジスタの同期）における動作について詳細に説明する。
【００４２】
図５Ａは、ステップＳ１における動作を詳細に示すフローチャートである。図５Ａに示されるように、計算機システム１が立ち上げられると、タイマー同期部７は、プロセッサ間通信装置４を使用して、全てのプロセッサ３にブロードキャスト割り込みを発行する（ステップＳ６）。そして、各プロセッサ３が、ブロードキャスト割り込みを受信する（ステップＳ７）。その後、各プロセッサ３は、ブロードキャスト割り込みにより、タイマーレジスタ５の値を０に設定する（ステップＳ８）。これ以降、全てのプロセッサ３においては、同時刻にタイマーレジスタ５に設定された値がデクリメントされ、ティック間隔で同時刻にタイマー割込みが定期的に発生することになる。
【００４３】
次いで、ステップＳ３（次回の実行時刻の決定）における動作について詳細に説明する。
【００４４】
図５Ｂは、ステップＳ３における動作を詳細に示すフローチャートである。
【００４５】
ステップＳ９；補正後経過時間ｅｔｉｍｅ（ｔ３）の算出
割り込み要求を受け付けた場合、又は、周期的に実行される指定処理ｅｆｕｎｃが実行された場合、コールアウト登録部８は、次にその指定処理ｅｆｕｎｃが実行される時刻までの経過時間（補正後経過時間ｅｔｉｍｅ（ｔ３））を算出する。ここで、本来、次に指定処理ｅｆｕｎｃが実行されるべき時刻（補正前時刻ｔ２）は、現在時刻から周期Ｔが経過した時刻である。ただし、コールアウト登録部８は、この補正前時刻ｔ２を以下に述べる手法によって修正し、補正後経過時間ｅｔｉｍｅ（ｔ３）を算出する。
【００４６】
具体的には、コールアウト登録部８は、次に指定処理ｅｆｕｎｃが行われる予定の時刻（補正前時刻ｔ２）までの経過時間ｅｔｉｍｅ（ｔ２）を識別する。経過時間ｅｔｉｍｅ（ｔ２）は、すなわち、周期Ｔに対応する時間である。さらに、コールアウト時間補正部１０により、経過時間ｅｔｉｍｅ（ｔ２）が以下に述べる手法によって補正され、補正後の経過時間ｅｔｉｍｅ（ｔ３）が求められる。補正後の経過時間ｅｔｉｍｅ（ｔ３）は、指定処理ｅｆｕｎｃと対応付けられて、コールアウトテーブル１１に登録される。次に指定処理ｅｆｕｎｃが実行される時刻は、現在時刻から補正後の経過時間ｅｔｉｍｅ（ｔ３）が経過した時刻になる。コールアウト時間補正部１０は、実質的に、補正前時刻ｔ２を補正し、補正後の時刻をコールアウトテーブル１１に登録しているといえる。
【００４７】
補正後ｅｔｉｍｅ（ｔ３）の算出方法について、以下に説明する。コールアウト時間補正部１０は、予め設定された許容補正値Ｄ（ティック単位の整数値）を利用して、補正後ｅｔｉｍｅ（ｔ３）を算出する。ここで、許容補正値Ｄが０より小さい値に設定されている場合、コールアウト時間補正部１０は、下記式（１）により、補正後ｅｔｉｍｅ（ｔ３）を算出する。また、許容補正値Ｄが０より大きい値に設定されている場合、コールアウト時間補正部１０は、下記式（２）により、補正後ｅｔｉｍｅ（ｔ３）を算出する。
（数式１）；補正後ｅｔｉｍｅ（ｔ３）＝ｅｔｉｍｅ（ｔ２）＋Ｍａｘ（０−ＴＭ％ｅｔｉｍｅ（ｔ２），Ｄ）
（数式２）；補正後ｅｔｉｍｅ（ｔ３）＝ｅｔｉｍｅ（ｔ２）＋Ｍｉｎ（ｅｔｉｍｅ（ｔ２）−ＴＭ％ｅｔｉｍｅ（ｔ２），Ｄ）
数式１及び２において、％は剰余演算を示す。また、Ｍａｘ（）は、括弧内の値の最大値を選択的に返却する関数を示す。Ｍｉｎ（）は、括弧内の値の最小値を選択的に返却する関数を示す。ＴＭは、タイマレジスタ５の値を表し、０以上の整数値を取り得る。
【００４８】
上述の数式１において、「ＴＭ％ｅｔｉｍｅ（ｔ２）」は、実質的に、現在時刻と理想時刻ｔ１との間の時間差を示している。ここで、許容補正値Ｄを用いて、「０±Ｄ」という範囲が、許容範囲と定義される。「Ｍａｘ（０−ＴＭ％ｅｔｉｍｅ（ｔ２），Ｄ）」は、実質的に、現在時刻と理想時刻ｔ１との間の時間差が、許容範囲「０±Ｄ」の間に収まっているか否かを判定しているといえる。すなわち、数式１は、時間差が許容範囲「０±Ｄ」の範囲外である場合に、補正後ｅｔｉｍｅ（ｔ３）として「ｅｔｉｍｅ（ｔ２）＋Ｄ」という値を算出することを示しており、実質的に、補正前時刻ｔ２から許容補正値Ｄ（補正時間Ｄ）だけずれた時刻が補正後時刻ｔ３として求められることを示している。また、数式１は、時間差が許容範囲「０±Ｄ」の範囲内である場合に、補正後ｅｔｉｍｅ（ｔ３）として「ｅｔｉｍｅ（ｔ２）から時間差分だけずれた時刻」が算出されることを示しており、実質的に、理想時刻ｔ１が補正後時刻ｔ３として求められることを示している。
【００４９】
上述の数式２についても、数式１と同様に、現在時刻と理想時刻ｔ１との間の時間差が許容範囲「０±Ｄ」の範囲外である場合に、補正後時刻ｔ３として補正前時刻ｔ２から許容補正値Ｄだけずれた時刻が求められ、時間差が許容範囲外である場合には補正後時刻として理想時刻ｔ１が求められることを示している。
【００５０】
ステップＳ１０；探索スロットの初期化
ステップＳ９において補正後ｅｔｉｍｅ（ｔ３）が算出されると、補正後コールアウト登録部１０は、コールアウトテーブル１１における探索対象スロットＳの値を、初期値０に設定する。
【００５１】
ステップＳ１１〜１２；スロットの探索
次いで、コールアウト登録部１０は、コールアウトテーブル１１を参照し、探索対象スロットＳが空きスロットであるか、又は、探索対象スロットに記述されたｅｔｉｍｅがステップＳ９で求めた補正後ｅｔｉｍｅ（ｔ３）の値よりも大きいか、を判定する（ステップＳ１１）。探索対象スロットＳが空きスロットではなく、記述されたｅｔｉｍｅが補正後ｅｔｉｍｅ以下である場合、コールアウト登録部１０は、探索対象スロットＳの値をインクリメントし、再びステップＳ１１の動作を行う（ステップＳ１２）。
【００５２】
ステップＳ１３；スロットに挿入
一方、ステップＳ１１において、探索対象スロットＳが空きスロットであるか、又は、記述されたｅｔｉｍｅが補正後ｅｔｉｍｅ（ｔ３）の値よりも大きかった場合、コールアウト登録部１０は、補正後ｅｔｉｍｅ（ｔ３）を指定処理ｅｆｕｎｃと対応付けて、探索対象スロットＳに挿入する。これにより、コールアウトテーブル１１では、実行時刻の順番に従って、指定処理ｅｆｕｎｃが登録されることになる。
【００５３】
続いて、ステップＳ４（割り込み処理の実行）における動作を詳細に説明する。図５Ｃは、ステップＳ４における動作を詳細に示すフローチャートである。
【００５４】
ステップＳ１４；タイマー割り込みの受信
複数のプロセッサ３の各々が、タイマー割り込みを受信したとする。
【００５５】
ステップＳ１５；探索対象スロットＳの設定
各プロセッサ３は、タイマー割り込みを受信すると、コールアウト実行部８により、探索対象スロットＳとして、自プロセッサに割り当てられた番号ｐｒｃｎを設定する。
【００５６】
ステップＳ１６；ｅｔｉｍｅの判定
次いで、コールアウト実行部８により、探索対象スロットＳにｅｔｉｍｅが登録されているか否かを判定する。登録されている場合、ｅｔｉｍｅが０か否かを判定する。０である場合には処理を終了し、０でない場合には、次のステップＳ１７の処理が行われる。
【００５７】
ステップＳ１７；ｅｔｉｍｅのデクリメント
コールアウト実行部８は、探索対象スロットＳに記載されたｅｔｉｍｅの値を、１、デクリメントする。
【００５８】
ステップＳ１８；ｅｔｉｍｅの判定
次いで、コールアウト実行部８は、デクリメントにより、探索対象スロットＳに記載されたｅｔｉｍｅが０になったか否かを判定する。０になった場合、次にステップＳ１９の動作が行われる。０にならなかった場合、次にステップＳ２０の動作が行われる。
【００５９】
ステップＳ１９；ｅｆｕｎｃの実行
ステップＳ１８において、ｅｔｉｍｅが０になった場合、コールアウト実行部８は、指定処理ｅｆｕｎｃによって指定される処理（関数）を実行し、探索対象スロットＳに記載された内容を削除する。そして、次のステップＳ２０の処理が行われる。
【００６０】
ステップＳ２０；探索対象スロットＳの変更
コールアウト実行部８は、探索対象スロットＳの値を、プロセッサ３の台数分だけ進め、再びステップＳ１６以降の処理を繰り返す。
【００６１】
以上説明したステップＳ１４〜Ｓ２０の動作により、コールアウトテーブル１１に記載された指定処理ｅｆｕｎｃが、指定時間ｅｔｉｍｅが０になった時点で実行される。上述のような動作によれば、各プロセッサ３が、Ｓ％Ｎ＝ｐｒｃｎ（Ｎはプロセッサの台数）を満たすスロットに関して、指定時間ｅｔｉｍｅが０になった場合に、指定処理ｅｆｕｎｃを実行する。従って、一つのプロセッサに割り込み処理が集中することがなくなる。尚、コールアウトテーブル１１への一連のアクセス、すなわち｛ｅｔｉｍｅ、ｅｆｕｎｅ｝に対するデクリメントや参照＆登録や参照＆削除は、排他制御により逐次的に動作する事が保障されているものとする。
【００６２】
続いて、本実施形態の作用効果について説明する。
【００６３】
本実施形態によれば、システムの立ち上げ時に、一度だけ、タイマーレジスタ５の同期処理が行われる。このため、同期処理に要するコストを削減することができる。この点について、以下に説明する。
【００６４】
複数のプロセッサ間で同一時刻に複数の割り込み処理を実行するために、所定の間隔で同期処理を行うことが考えられる。図６Ａは、そのような場合の動作を示す概略図である。図６Ａに示される例では、複数の割り込み処理を同一のタイミングで繰り返し実行するために、同期処理が繰り返し実行されている。この場合、割り込み処理を実行する度に同期処理が行われる必要がある。そのため、特別なＨＷ（ハードウェア）機構などのコストの高い同期処理装置が必要になる。
【００６５】
一方、図６Ｂは、本実施形態における動作を示す概略図である。図６Ｂに示されるように、本実施形態では、システム立ち上げ時（初期時刻０）に複数のプロセッサ３間においてタイマー同期処理が一度だけ実行される。これにより、初期時刻０において、タイマーレジスタ５の値が０に設定される。これ以降、複数のプロセッサ３では、タイマー割り込みが、自動的に同じタイミングで発生することになる。本実施形態において、割り込み処理は、タイマー割り込みに応じて実行される。そのため、各プロセッサが割り込み処理を実行する度に同期処理を行う必要がなくなり、高価なＨＷ機構などが必要なくなる。
【００６６】
また、本実施形態では、周期Ｔで行われる割り込み処理が、最終的に、理想時刻ｔ１（初期時刻ｔ０から周期Ｔの整数倍の時間が経過した時刻）に、実行されるようになる。これにより、複数のプロセッサ３間において、可能な限り同一の時刻に割り込み処理を実行することができ、バリア同期の遅延量を最小限に抑えることが可能になる。この点について、以下に説明する。
【００６７】
図７Ａは、割り込み処理の実行時刻を補正しなかった場合の動作を説明するための説明図である。割り込み処理の実行時刻を補正しなかった場合、割り込み処理は、割り込み要求が発生した時刻から周期Ｔの整数倍の時間が経過した時刻において、実行される。ここで、異なる割り込み処理の間では、割り込み要求の発生時刻が同一であるとは限らない。通常、割り込み要求はランダムなタイミングで発生する。従って、異なる割り込み処理同士は、互いに無関係なタイミングで実行されることになる。
【００６８】
一方、図７Ｂは、様々な周期Ｔの割り込み処理が、理想時刻ｔ１において実行される場合の動作を説明するための説明図である。この場合、周期Ｔが同じ割り込み処理同士は、同一のタイミングで実行される。例えば、図７Ｂに示されるように、周期Ｔが２０である割り込み処理同士は、理想時刻ｔ１（＝０、２０、４０、・・）において、同時に実行される。また、周期Ｔが異なる割り込み処理同士は、初期時刻ｔ０から周期Ｔの整数倍の時間が経過した時間において、同時に実行される。例えば、図７Ｂに示されるように、周期Ｔが２０である割り込み処理と、周期Ｔが３０である割り込み処理とは、初期時刻（０）から周期Ｔの最小公倍数の時間が経過した時刻（６０、１２０、・・・）において、同時に実行される。そのため、可能な限り複数の割り込み処理を同一タイミングで実行することができ、バリア同期の遅延量を最小限に抑えることができる。
【００６９】
また、本実施形態では、割り込み処理の実行時刻が、段階的に理想時刻ｔ１に近づけられていく。割り込み処理の実行時刻が、期待される時刻（補正前時刻ｔ２）から大幅にずれることはなく、計算機システム１の動作に悪影響が及ぶことはない。この点について、以下に説明する。
【００７０】
図８は、割り込み処理が実行されるタイミングと、許容補正値Ｄとの関係を示す図である。図８には、一例として、タイマレジスタ５の値が１０（初期時刻ｔ０からの経過時間が１０）である時刻（以下、時刻１０と表記する）において、割り込み要求が発生（初登録）した場合の例が示されている。また、図８には、割り込み処理の周期Ｔが２０である場合の例が示されている。更に、図８には、許容補正値Ｄが±Ｔ，±１０、±８、±６、±４、±２、及び０である場合のそれぞれが、示されている。
【００７１】
図８に示される例において、割り込み要求が発生した時刻１０と、理想時刻ｔ１（初期時刻ｔ０）との間の時間差は、１０である。従って、許容補正値Ｄが±８、±６、±４、及び±２である場合には、時間差が許容範囲（０±Ｄ）外であるものと判定される。そのため、補正前時刻ｔ２（現在時刻から周期Ｔが経過した時刻＝時刻３０）から許容補正値Ｄだけずれた時刻が補正後時刻として求められ、１回目の割り込み処理の実行時刻として登録されている。尚、許容補正値Ｄが正の値である場合には、補正前時刻ｔ２（時刻３０）より後の時刻が補正後時刻として求められ、許容補正値Ｄが負の値である場合には、補正前時刻ｔ２よりも前の時刻が補正後時刻として求められる。そして、割り込み処理が繰り返し実行されるたびに、実行時刻が理想時刻ｔ１に近づいていき、最終的には理想時刻ｔ１のタイミングで割り込み処理が行われることになる。このように、割り込み処理の実行時刻と、期待される時刻（補正前時刻ｔ２）との間の時間差は、許容補正値Ｄの絶対値を超えることはない。すなわち、割り込み処理は、期待される時刻に近いタイミングで、実行される。また、割り込み処理は、割り込み要求が発生してから、高々Ｔ＾２／｜Ｄ｜±Ｔで示される有限時間内に、理想時刻ｔ１に実行されることになる。尚、許容補正値Ｄが０に設定されている場合には、実行時刻は補正されない。また、許容補正値Ｄが±Ｔ又は±１０に設定されている場合には、一回目の割り込み処理が理想時刻ｔ１に実行されることになる。
【００７２】
上述のように、本実施形態によれば、一度の補正では最大でも許容補正値Ｄを超える補正は行われない。許容補正値Ｄが周期Ｔに対して十分に小さな値に設定されていれば、次の割込み処理までの間隔は（Ｔ±｜Ｄ｜）になり、周期Ｔの経過後の時刻（補正前時刻ｔ２）と比較して極端に異なる時刻に割込み処理が実行されることはない。また、補正処理は、割込み要求が発生してからある一定時間Ｔ＾２／｜Ｄ｜±Ｔ以内に完了する。尚、再登録時に周期Ｔを変更することで、割り込み処理の周期を途中から動的に変更する事も可能である。
【００７３】
尚、もともと一定間隔で発生する事が前提とされる周期的な割込み処理について、割り込み処理の間隔を変更することは、一見すると問題があるように思われる。しかしながら、この点は、以下に述べる理由により、問題とならない。
【００７４】
まず、第１に、周期的な割込み処理の動作の開始が遅れることは、割込み処理のＨＷ的な仕組み上、原理的にありうることである。例えば、割り込み禁止区間では、割込み処理要求の発生そのものが保留され、遅延する。従って、一般的には、遅れる事を前提とした仕組みが、割込みハンドラの処理自体に組み込まれている。したがって周期Ｔの割込み処理の実行時刻が、補正前時刻ｔ２から許容補正値Ｄだけずれることは、｜Ｄ｜がＴに対して十分小さく設定されていれば、問題にならない。
【００７５】
第２に、一般的に、高い精度が求められる割込み処理については、割込み処理の動作の開始が遅れたり進んだり（早まったり）することが考慮され、割込みハンドラ処理において、システムの現在時刻（ＴＭよりも精度が高い時刻）が取得され、誤差が補正される。なぜなら、システムの周期的な動作の最小単位は、通常ＴＭによるティック単位であり、これよりも細かい精度は期待できない。そのため、指定された間隔に対して±１ティック以内の誤差が発生する。したがって周期Ｔの割込み処理の実行時刻が、補正前時刻ｔ２から許容補正値Ｄだけずれることは、｜Ｄ｜がＴに対して十分小さく設定されていれば、問題にならない。
【００７６】
第３に、周期的な割り込みの実装には、大きく分けて次の２通りの方式があると考えられる。「（Ａ）割込みハンドラ処理の中で次回の割込み処理の再登録を行うことにより周期的に割込み処理を発生させる方式」と、「（Ｂ）既存の『割込み処理を周期的に発生させる機構』に対して、最初に一度だけ周期的な割込み処理の発生を委ねて、その後に独自の再登録は行わない方式」とが考えられる。（Ａ）の方式に関しては、遅れが蓄積する可能性があるという問題がある。但し、前述の第１及び第２の理由と同じ対処方法により、「遅れる事を前提とした仕組み」や「システムの現在時刻を取得する仕組み」を割込みハンドラ処理に組み込む事により、問題を解決する事が出来る。（Ｂ）の方式に関しては、最初の割込みの起動までの間隔だけがその後の間隔と大きく異なるという問題があるように思われる。しかし、そもそもこの様な差異は問題ではなく、その後の割込みの間隔が一定であるということに重点がおかれている。したがって、（Ｂ）の方式の場合には、｜Ｄ｜が、Ｔと一致する程度に十分大きな値であったとしても、問題になることはない。
【００７７】
以上説明したように、本実施形態によれば、周期的な割込み処理の特性に応じて、許容補正値Ｄを設定することによって、周期的な割込み処理の間隔を変更することによって生ずる問題を、適切に排除することができる。
【００７８】
尚、本実施形態では、ステップＳ９において、許容補正値Ｄが用いられ、現在時刻と理想時刻ｔ１との間の時間差が許容範囲「０±Ｄ」という範囲である場合に、補正後時刻ｔ３として補正前時刻ｔ２から許容補正値Ｄだけずれた時刻が求められる場合について説明した。但し、許容範囲が「０±Ｄ」と定義された場合に、必ずしも補正後時刻ｔ３として、補正前時刻ｔ２から許容補正値Ｄだけずれた時刻が求められる必要はない。例えば、許容補正値Ｄとは別に、「補正時間」が設定され、補正後時刻ｔ３として、補正前時刻ｔ２から補正時間だけずれた時刻が求められてもよい。
【００７９】
また、本実施形態では、理想時刻ｔ１が初期時刻ｔ０から周期Ｔの整数倍の時間が経過した時刻である場合について、説明した。そして、初期時刻ｔ０として、タイマーレジスタ５の値がゼロに設定された時刻が採用される場合について説明した。但し、初期時刻ｔ０は、必ずしもタイマーレジスタ５の値がゼロに設定された時刻である必要はない。初期時刻ｔ０として、タイマーレジスタ５の値がゼロに設定された時刻よりも後の時刻が採用されてもよい。
【００８０】
また、図８に示したように、許容補正値Ｄが０に設定されている場合には、割り込み処理の実行時刻は補正されない。また、許容補正値Ｄが±Ｔに設定されている場合には、一度の補正により、割り込み処理が理想時刻ｔ１に補正されることになる。従って、許容補正値Ｄは、０以外の値であり、｜Ｄ｜がＴよりも小さくなるような値に設定されている必要がある。
【００８１】
以下に、許容補正値Ｄが０に設定されている場合における、割り込み処理が実行されるタイミングについて、具体例を用いて説明する。
【００８２】
図９は、許容補正値Ｄが０に設定されている場合の動作例を示す図である。図９には、複数の割り込み処理（Ｅ１〜Ｅ５）が実行されるタイミングが示されている。まず、時刻５以上６未満の時点で、周期２０ティックの割り込み処理Ｅ１が発生したと仮定する。すると、時刻５以上６未満の時点で、コールアウト登録部９が、｛ｅｔｉｍｅ、ｅｆｕｎｃ｝＝｛２０、Ｅ１｝の割り込み要求を受け付ける。コールアウト登録部９は、コールアウトテーブル１１に、｛２０、Ｅ１｝を登録する。時刻２５の時点で、コールアウト実行部８によってコールアウトテーブル１１が｛０、Ｅ１｝に変更される。そのため、｛０、Ｅ１｝が削除され、割り込みＥ１が実行される。割り込み処理Ｅ１が実行されると同時に、コールアウト登録部９は、コールアウトテーブル１１に、｛２０、Ｅ１｝を登録する。以降、上記の処理の繰り返しで処理Ｅ１が時刻２５、４５、６５、８５、１０５、１２５、１４５、１６５、…のタイミングで、定期的に起動され続ける。
【００８３】
同様に、時刻３５以上３６未満の時点で周期２０ティックの割り込み処理Ｅ２が発生したと仮定する。処理Ｅ２は、時刻５５、７５、９５、１１５、１３５、１５５、…のタイミングで、と定期的に起動される。
【００８４】
同様に、時刻４５以上４６未満の時点で、周期３０ティックの割り込み処理Ｅ３が発生したと仮定する。割り込み処理Ｅ３は、時刻７５、１０５、１３５、…のタイミングで、定期的に実行される。
【００８５】
同様に、時刻６５以上６６未満の時点で、周期４０ティックの割り込み処理Ｅ４が発生したと仮定する。割り込み処理Ｅ４は、時刻１０５、１４５、…のタイミングで、定期的に実行される。
【００８６】
同様に、時刻８５以上８６未満の時点で、周期５０ティックの割り込み処理Ｅ５が発生したと仮定する。割り込み処理Ｅ５は、時刻１３５、１８５、…のタイミングで、定期的に実行される。
【００８７】
図９に示されるように、許容補正値Ｄが０に設定されている場合、割り込み処理Ｅ１〜割り込み処理Ｅ５は、互いに関係のないタイミングで実行されることが理解される。
【００８８】
次に、許容補正値Ｄが−Ｔに設定されている場合の動作について説明する。
【００８９】
図１０は、許容補正値Ｄが−Ｔに設定されている場合の動作例を示す図である。
【００９０】
まず、時刻５以上６未満の時点で、周期２０ティックの割り込み処理Ｅ１が発生したと仮定する。すると、時刻５以上６未満の時点で、コールアウト登録部９が｛ｅｔｉｍｅ、ｅｆｕｎｃ｝＝｛２０、Ｅ１｝の割り込み要求を受け付ける。コールアウト登録部１０は、コールアウト時間補正部１０により、経過時間２０ティックを補正式２０−（５％２０）で１５ティックに補正し、コールアウトテーブル１１に｛１５、Ｅ１｝を登録する。時刻１０の時点で、コールアウト実行部１２により、コールアウトテーブル１１が｛１０、Ｅ１｝にされる。時刻２０の時点で、コールアウト実行部１２により、コールアウトテーブル１１が｛０、Ｅ１｝にされ、｛０、Ｅ１｝が削除され、割り込み処理Ｅ１が実行される。割り込み処理Ｅ１が実行されると共に、コールアウト登録部９では、コールアウト時間補正部１０が、２０ティックを補正式「２０−（２０％２０）」を用いて２０ティックに補正し、コールアウトテーブル１１に｛２０、Ｅ１｝を登録する。以降、上記の処理の繰り返しで、割り込みＥ１が、時刻２０、４０、６０、８０、１００、１２０、１４０、１６０、…と周期２０ティックの整数倍の時刻に定期的に起動され続ける。
【００９１】
次に、時刻３５以上３６未満の時点で、周期２０ティックの割り込み処理Ｅ２が発生したと仮定する。すると、時刻３５以上３６未満の時点で、コールアウト登録部９が、｛ｅｔｉｍｅ、ｅｆｕｎｃ｝＝｛２０、Ｅ２｝の割り込み要求を受け付ける。コールアウト登録手段部９は、コールアウト時間補正部１０により、経過時間２０ティックを補正式「２０−（３５％２０）」を用いて５ティックに補正し、コールアウトテーブル１１に｛５、Ｅ２｝を登録する。この結果、コールアウトテーブル１１には、｛５、Ｅ１｝及び｛５、Ｅ２｝が記載されることになる。時刻４０の時点で、コールアウト実行部１２により、コールアウトテーブル１１に記載された内容が、｛０、Ｅ１｝及び｛０、Ｅ２｝にされる。その結果、｛０、Ｅ１｝及び｛０、Ｅ２｝が削除され、割り込み処理Ｅ１と割り込み処理Ｅ２とが、異なるプロセッサ３上で同時に実行される。割り込み処理Ｅ１及び割り込み処理Ｅ２が実行されるとともに、コールアウト登録部９は、再度、｛２０、Ｅ１｝、｛２０、Ｅ２｝をコールアウトテーブル１１に登録する。以降、上記の動作が繰り返され、割り込みＥ１と割り込み処理Ｅ２とは、周期２０ティックの整数倍の時刻（４０、６０、８０、１００、１２０、１４０、１６０、…）に、定期的に起動され続ける。
【００９２】
次に、時刻４５以上４６未満の時点で、周期３０ティックの割り込み処理Ｅ３が発生したと仮定する。すると、時刻４５以上４６未満の時点で、コールアウト登録部９が、｛ｅｔｉｍｅ、ｅｆｕｎｃ｝＝｛３０、Ｅ３｝の割り込み要求を受け付ける。コールアウト登録部９はコールアウト時間補正部１１により、経過時間３０ティックを補正式「３０−（４５％３０）」により１５ティックに補正し、コールアウトテーブル１１に｛１５、Ｅ３｝を登録する。この結果、コールアウトテーブル１１には、｛１５、Ｅ１｝、｛１５、Ｅ２｝、及び｛１５、Ｅ３｝が登録されていることになる。時刻５０の時点で、コールアウト実行部１２により、コールアウトテーブル１１の登録内容が、｛１０、Ｅ１｝、｛１０、Ｅ２｝、及び｛１０、Ｅ３｝にされる。時刻６０の時点で、コールアウト実行部１２により、コールアウトテーブル１１の登録内容が、｛０、Ｅ１｝、｛０、Ｅ２｝、及び｛０、Ｅ３｝にされる。その結果、｛０、Ｅ１｝、｛０、Ｅ２｝、及び｛０、Ｅ３｝が削除され、割り込み処理Ｅ１、割り込み処理Ｅ２、及び割り込み処理Ｅ３が異なるプロセッサ３上で同時に実行される。割り込み処理Ｅ１、Ｅ２、及びＥ３が実行されると同時に、コールアウト登録部９が、再度、｛２０、Ｅ２｝、｛２０、Ｅ２｝、及び｛３０、Ｅ３｝を、コールアウトテーブル１１に登録する。以降、上記の処理が繰り返えされ、割り込み処理Ｅ３は、周期３０ティックの整数倍の時刻（６０、９０、１２０、１５０、…）に定期的に起動され続ける。
【００９３】
次に、時刻６５以上６６未満の時点で、周期４０ティックの割り込み処理Ｅ４が発生したと仮定する。すると、時刻６５以上６６未満の時点で、コールアウト登録部９が｛ｅｔｉｍｅ、ｅｆｕｎｃ｝＝｛４０、Ｅ４｝の割り込み要求を受け付ける。コールアウト登録部９では、コールアウト時間補正部１１が、経過時間４０ティックを、補正式「４０−（６５％４０）」を用いて１５ティックに補正し、コールアウトテーブル１１に｛４０、Ｅ４｝を登録する。この結果、コールアウトテーブル１１の登録内容は、｛１５、Ｅ１｝、｛１５、Ｅ２｝、｛１５、Ｅ４｝、及び｛２５、Ｅ３｝になる。時刻７０の時点で、コールアウトテーブル１１における登録内容が、｛１０、Ｅ１｝、｛１０、Ｅ２｝、｛１０、Ｅ４｝、及び｛２０、Ｅ３｝になる。時刻８０の時点で、コールアウトテーブル１１における登録内容が、｛０、Ｅ１｝、｛０、Ｅ２｝、｛０、Ｅ４｝、及び｛１０、Ｅ３｝となり、｛０、Ｅ１｝、｛０、Ｅ２｝、及び｛０、Ｅ４｝が削除され、割り込み処理Ｅ１、Ｅ２、及びＥ４が実行される。割り込み処理Ｅ１、Ｅ２、及びＥ４が実行されると同時に、コールアウト登録部９は、再度、｛２０、Ｅ１｝、｛２０、Ｅ２｝、及び｛４０、Ｅ４｝をコールアウトテーブル１１に登録する。この結果、コールアウトテーブル１１における登録内容は、｛１０、Ｅ３｝、｛２０、Ｅ１｝、｛２０、Ｅ２｝、及び｛４０、Ｅ４｝になる。以降、上記の処理が繰り返され、割り込み処理Ｅ４は、周期４ティックの整数倍の時刻（８０、１２０、１６０、…）に定期的に起動され続ける。
【００９４】
次に、時刻８０以上９０未満の時点で、周期５０ティックの割り込み処理Ｅ５が発生したと仮定する。すると、前記で述べたアルゴリズムにしたがって、図８に示すとおりにコールアウトテーブル１１が遷移し、割り込み処理Ｅ５は、周期５ティックの整数倍の時刻（時刻１００、１５０、…）に定期的に起動され続ける。
【００９５】
上述のように、許容補正値Ｄが−Ｔに設定された場合には、初回の補正によって必ず実行時刻が理想時刻ｔ１に設定されることになる。
【００９６】
本実施形態は、例えば、共有メモリ型のマルチプロセッサ計算機システムや分散メモリ型のマルチプロセッサ計算機システムに対して適用することができる。
【符号の説明】
【００９７】
１  計算機システム
２  主記憶装置
３  プロセッサ
４  プロセッサ間通信装置
５  タイマーレジスタ
６  割り込み処理装置（割り込み処理プログラム）
７  タイマー同期部
８  コールアウト部
９  コールアウト登録部
１０  コールアウト時間補正部
１１  コールアウトテーブル
１２  コールアウト実行処理部
【図１】
0005483258.tif 000002
【図２】
0005483258.tif 000003
【図３】
0005483258.tif 000004
【図４】
0005483258.tif 000005
【図５Ａ】
0005483258.tif 000006
【図５Ｂ】
0005483258.tif 000007
【図５Ｃ】
0005483258.tif 000008
【図６Ａ】
0005483258.tif 000009
【図６Ｂ】
0005483258.tif 000010
【図７Ａ】
0005483258.tif 000011
【図７Ｂ】
0005483258.tif 000012
【図８】
0005483258.tif 000013
【図９】
0005483258.tif 000014
【図１０】
0005483258.tif 000015