(57)【特許請求の範囲】
【請求項１】
複数のプログラムにプログラムの実行に必要なリソースを割り当ててプログラムの実行を制御するプログラム実行制御方法であって、
プログラム実行手段による、前記リソースを利用してプログラムを実行し、当該プログラムの実行箇所が予め設定された通過ポイントを通過した場合に通過ポイントを通過した通知を送信するステップと、
プログラム管理手段による、前記通知を受信して前記通知の受信回数をカウントするとともに、前記通過ポイントの通過回数の設定値を単位時間当たりの複数の実行段階に分けて設定して記憶する記憶手段に記憶された前記設定値に基づいて前記リソースを要求し、当該リソースを前記プログラム実行手段に渡してプログラムの実行制御を行うプログラム管理手段と、
プロセス管理手段による、単位時間毎に、前記複数の実行段階のうち優先度の高い実行段階から順に単位時間の終了まで前記リソースを各プログラムに割り当てるステップと、
を有することを特徴とするプログラム実行制御方法。
【請求項２】
前記プログラム管理手段は、前記受信回数が前記設定値に達した時点あるいは超えた時点で、前記リソースを前記プロセス管理手段に戻すことを特徴とする請求項１記載のプログラム実行制御方法。
【請求項３】
前記プログラム管理手段は、前記実行段階毎に、各通過ポイントの当該実行段階における前記設定値と前記通過ポイントを通過してから次の通過ポイントを通過するまでの負荷を乗算した和から必要な前記リソースを求めて前記プロセス管理手段に要求することを特徴とする請求項１記載のプログラム実行制御方法。
【請求項４】
前記プログラム管理手段は、単位時間当たりに利用した前記リソースの統計量を前記プロセス管理手段から取得して単位時間当たりの前記受信回数で割り前記負荷を算出することを特徴とする請求項３記載のプログラム実行制御方法。
【請求項５】
複数のプログラムにプログラムの実行に必要なリソースを割り当ててプログラムの実行を制御するプログラム実行制御装置であって、
前記リソースを利用してプログラムを実行し、当該プログラムの実行箇所が予め設定された通過ポイントを通過した場合に通過ポイントを通過した通知を送信するプログラム実行手段と、
前記通過ポイントの通過回数の設定値を単位時間当たりの複数の実行段階に分けて設定して記憶する記憶手段と、
前記通知を受信して前記通知の受信回数をカウントするとともに、前記記憶手段に記憶された前記設定値に基づいて前記リソースを要求し、当該リソースを前記プログラム実行手段に渡してプログラムの実行制御を行うプログラム管理手段と、
単位時間毎に、前記複数の実行段階のうち優先度の高い実行段階から順に単位時間の終了まで前記リソースを各プログラムに割り当てるプロセス管理手段と、
を有することを特徴とするプログラム実行制御装置。
【請求項６】
前記プログラム管理手段は、前記受信回数が前記設定値に達した時点あるいは超えた時点で、前記リソースを前記プロセス管理手段に戻すことを特徴とする請求項５記載のプログラム実行制御装置。
【請求項７】
前記プログラム管理手段は、前記実行段階毎に、各通過ポイントの当該実行段階における前記設定値と前記通過ポイントを通過してから次の通過ポイントを通過するまでの負荷を乗算した和から必要な前記リソースを求めて前記プロセス管理手段に要求することを特徴とする請求項５記載のプログラム実行制御装置。
【請求項８】
前記プログラム管理手段は、単位時間当たりに利用した前記リソースの統計量を前記プロセス管理手段から取得して単位時間当たりの前記受信回数で割り前記負荷を算出することを特徴とする請求項７記載のプログラム実行制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、負荷状況に応じてプログラムの実行を制御する技術に関する。
【背景技術】
【０００２】
交換などの組み込みシステムや公衆向けサービスを提供するシステムにおいては、遅延などの発生を抑制し、正常にサービスを継続して提供することが必要である。
【０００３】
従来技術において、プロセスに優先度をつけ、優先度の高いプロセスを優先的に処理する方法がある。プロセス優先度には、絶対優先度と相対優先度があり、絶対優先度は優先度順にプロセスを処理するものであり、相対優先度はプロセスの処理はラウンドロビンが前提で、優先度はＣＰＵのタイムスライスの割当割合の指標値とするものである。現状のＯＳでは、これらの技術に基づいてプロセスのスケジュール管理を行っている。
【０００４】
また、特定のイベントについて、イベント１件あたりのおおよその負荷を想定し、ある周期でのイベント受け入れ件数の上限を設定し、その上限を超えるイベントの受け入れをキャンセルすることで、イベント受け入れ量を平準化するシステムが考えられている。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】「マルチプロセッサ用リアルタイムＯＳの解説」、[online]、名古屋大学組込システム研究センター、［２０１１年５月２７日検索］、インターネット〈ＵＲＬ：http://www.nces.is.nagoya-u.ac.jp/NEXCESS/blog/index.php?catid=44&blogid=5〉
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、プロセス優先度、特に絶対優先度が高いイベントが多量に発生し、ＣＰＵタイムスライスがプロセス優先度の高いイベントにすべて占められていた場合に、優先度が低いプロセスは動作不可となるという問題がある。例えば、システムの定期的なバックアップのようなプロセスはＣＰＵタイムスライスを優先的に使用しないように優先度を低くしてもよいが、優先度が高いイベントが多量発生した場合でもバックアップ自体は行われる必要がある。
【０００７】
このような場合を想定し、ＣＰＵの負荷状態を監視して、ＣＰＵが高負荷となった場合に、優先度の高いイベントをキャンセルし、ＣＰＵタイムスライスに余力を持たせることで優先度の低いプロセスにＣＰＵタイムスライスを割り当てるシステムが考えられているが、ＣＰＵタイムスライスに余力を残す方法では、常に使用されないＣＰＵタイムスライスが発生するという問題がある。また、ＣＰＵの負荷状態は統計量としてＯＳ等にて測定されるものであり、測定から統計量として計算されるための時間が必要となり、多量のイベント発生による高負荷状態発生からイベントキャンセルまでのタイムラグが存在するという問題がある。
【０００８】
受け入れ件数の上限を設定する方法では、計算結果から算出された上限値よりも実際に受け入れ可能な件数は多く、ＣＰＵ能力を十分に使用していないという問題がある。上限値を超えたイベントは、処理中イベントとして内部保留されたり、次周期に持ち越された後で処理されるが、実際には、イベント発生件数には揺らぎがある場合がほとんどで、イベント発生件数の揺らぎによっては上限値を超えたイベントも処理できてしまう。逆に、計算結果よりも大きい件数を上限値として設定した場合、揺らぎによっては処理しきれないケースが発生する。
【０００９】
本発明は、上記に鑑みてなされたものであり、多数のプログラムに実行する際に、ＣＰＵ能力を十分に使用して処理能力を向上させることを目的とする。
【課題を解決するための手段】
【００１０】
第１の本発明に係るプログラム実行制御方法は、複数のプログラムにプログラムの実行に必要なリソースを割り当ててプログラムの実行を制御するプログラム実行制御方法であって、プログラム実行手段による、前記リソースを利用してプログラムを実行し、当該プログラムの実行箇所が予め設定された通過ポイントを通過した場合に通過ポイントを通過した通知を送信するステップと、プログラム管理手段による、前記通知を受信して前記通知の受信回数をカウントするとともに、前記通過ポイントの通過回数の設定値を単位時間当たりの複数の実行段階に分けて設定して記憶する記憶手段に記憶された前記設定値に基づいて前記リソースを要求し、当該リソースを前記プログラム実行手段に渡してプログラムの実行制御を行うプログラム管理手段と、プロセス管理手段による、単位時間毎に、前記複数の実行段階のうち優先度の高い実行段階から順に単位時間の終了まで前記リソースを各プログラムに割り当てるステップと、を有することを特徴とする。
【００１１】
上記プログラム実行制御方法において、前記プログラム管理手段は、前記受信回数が前記設定値に達した時点あるいは超えた時点で、前記リソースを前記プロセス管理手段に戻すことを特徴とする。
【００１２】
上記プログラム実行制御方法において、前記プログラム管理手段は、前記実行段階毎に、各通過ポイントの当該実行段階における前記設定値と前記通過ポイントを通過してから次の通過ポイントを通過するまでの負荷を乗算した値の和から必要な前記リソースを求めて前記プロセス管理手段に要求することを特徴とする。
【００１３】
上記プログラム実行制御方法において、前記プログラム管理手段は、単位時間当たりに利用した前記リソースの統計量を前記プロセス管理手段から取得して単位時間当たりの前記受信回数で割り前記負荷を算出することを特徴とする。
【００１４】
第２の本発明に係るプログラム実行制御装置は、複数のプログラムにプログラムの実行に必要なリソースを割り当ててプログラムの実行を制御するプログラム実行制御装置であって、前記リソースを利用してプログラムを実行し、当該プログラムの実行箇所が予め設定された通過ポイントを通過した場合に通過ポイントを通過した通知を送信するプログラム実行手段と、前記通過ポイントの通過回数の設定値を単位時間当たりの複数の実行段階に分けて設定して記憶する記憶手段と、前記通知を受信して前記通知の受信回数をカウントするとともに、前記記憶手段に記憶された前記設定値に基づいて前記リソースを要求し、当該リソースを前記プログラム実行手段に渡してプログラムの実行制御を行うプログラム管理手段と、単位時間毎に、前記複数の実行段階のうち優先度の高い実行段階から順に単位時間の終了まで前記リソースを各プログラムに割り当てるプロセス管理手段と、を有することを特徴とする。
【発明の効果】
【００１５】
本発明によれば、多数のプログラムに実行する際に、ＣＰＵ能力を十分に使用して処理能力を向上させることができる。
【図面の簡単な説明】
【００１６】
【図１】本実施の形態におけるプログラム実行制御装置の構成を示す機能ブロック図である。
【図２】プログラムの実行状態の遷移の例を示す図である。
【図３】第１の方法のプログラム実行制御処理を示すシーケンス図である。
【図４】第２の方法のプログラム実行制御処理を示すシーケンス図である。
【図５】多段階でＣＰＵタイムスライスを割り当てる様子を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態について図面を用いて説明する。
【００１８】
図１は、本実施の形態におけるプログラム実行制御装置の構成を示す機能ブロック図である。同図に示すプログラム実行制御装置は、プログラム実行部１０、プログラム管理部２０、およびプロセス管理部３０を備える。プログラム実行制御装置が備える各部は、演算処理装置、記憶装置等を備えたコンピュータにより構成して、各部の処理がプログラムによって実行されるものとしてもよい。このプログラムはプログラム実行制御装置が備える記憶装置に記憶されており、磁気ディスク、光ディスク、半導体メモリ等の記録媒体に記録することも、ネットワークを通して提供することも可能である。
【００１９】
プログラム実行部１０は、プロセス管理部３０から割り当てられたＣＰＵタイムスライスを利用してプログラムを実行し、プログラムの実行箇所が所定の通過ポイントを通過した場合に通過ポイントを通過した旨をプログラム管理部２０に通知する。図２に、プログラムの実行状態の遷移の例を示す。同図では、３つの実行状態１１１，１１２，１１３を示しており、実行状態１１１，１１２，１１３それぞれの処理の開始点に通過ポイント１２１，１２２，１２３が設定されている。プログラム実行部１０は、プログラムを実行し、プログラムの実行箇所が予めプログラム本体に設定された通過ポイント１２１，１２２，１２３に到達した場合に、プログラム管理部２０に通過ポイント１２１，１２２，１２３を通過した旨を通知する。
【００２０】
プログラム管理部２０は、プログラムを実行するためのＣＰＵタイムスライスの要求、プログラム実行部１０からの通知のカウント及び応答、プログラム実行時の負荷の測定など、プログラム実行部１０のプログラムの実行を管理する。
【００２１】
また、プログラム管理部２０は、図１に示すように、プログラムそれぞれについて、プログラムの通過ポイント１２１，１２２，１２３毎に、通知された通過の回数と１次、２次、３次と多段階に設定された通過回数の設定値を記載する通過ポイント情報２１を記憶している。プログラム実行部１０から通過ポイント１２１，１２２，１２３の通過が通知されると通過ポイント情報２１に記載された通過回数が更新される。なお、通過回数の設定値はプログラム毎に予め定めておき、通過回数はプログラム起動時に初期化される。
【００２２】
プロセス管理部３０は、単位時間内に多段階に設定された１次、２次、３次といった実行段階のうち優先度の高い実行段階から順に、プログラム管理部２０から各プログラムについて要求されたＣＰＵタイムスライスを集計し、各プログラムの実行順序をスケジューリングして、ＣＰＵタイムスライスをプログラム管理部２０経由でプログラムに割り当てる。また、プロセス管理部３０は、単位時間当たりの各プログラムのＣＰＵタイムスライスの統計量を求めておき、プログラム管理部２０からの要求に応じてＣＰＵタイムスライスの統計量を通知する。
【００２３】
なお、プログラムとプログラム管理部２０は１対１の関係であり、プロセス管理部３０とプログラム管理部２０あるいはプログラムとは１対多の関係である。本実施の形態では、プログラムを起動する度に、プログラムを管理する管理プログラムをコンピュータに実行させてプログラム管理部２０として機能させる。複数のプログラムが実行される場合は、複数のプログラム管理部２０が存在することになり、各プログラム管理部２０からＣＰＵタイムスライスの要求がプロセス管理部３０に送信される。
【００２４】
次に、プログラムの実行制御処理について説明する。
【００２５】
本実施の形態におけるプログラムの実行制御方法には２つの方法がある。第１の方法は、プログラムから通知された通過回数をカウントし、通過回数が通過ポイント情報２１の設定値に達した場合に制御をプロセス管理部３０に戻す方法であり、第２の方法は、通過ポイント情報２１の設定値と一通過あたりの処理負荷の積から必要なＣＰＵタイムスライスを求めてプロセス管理部３０に要求し、割り当てられたＣＰＵタイムスライスを使い切った時点で制御をプロセス管理部３０に戻す方法である。
【００２６】
まず、第１の方法について説明する。
【００２７】
図３は、第１の方法のプログラム実行制御処理を示すシーケンス図である。第１の方法では、プロセス管理部３０のプログラムディスパッチ（ＣＰＵの処理能力の割り当て）をプログラム走りきりとした。走りきりとは、プログラムのディスパッチの通知を一時的にマスクしてプログラムを実行し続ける実行方法である。
【００２８】
プロセス管理部３０がＣＰＵの処理能力をプログラム管理部２０を通じてプログラムの実行に割り当てて、プログラムが実行される（ステップＳ１１，Ｓ１２）。
【００２９】
プログラム実行部１０は、プログラムの実行箇所が通過ポイントを通る毎にプログラム管理部２０に通知する（ステップＳ１３）。
【００３０】
プログラム管理部２０は、通過ポイント情報２１の通過回数を更新し、通過回数が１次分の設定値より小さい場合は通過ＯＫであることをプログラム実行部１０に通知する（ステップＳ１４）。
【００３１】
プログラム実行部１０が通過ポイントの通過をプログラム管理部２０に通知したときに、通過回数が１次分の設定値に達した時点でプロセス管理部３０に制御を戻す（ステップＳ１５，Ｓ１６）。あるいは、通過回数が設定値に達しない時点で単位時間当たりのプログラムの処理が終了した場合は、プロセス管理部３０に制御を戻す。
【００３２】
プロセス管理部３０は、制御が戻されると、別のプログラムにＣＰＵの処理能力を割り当てる。全てのプログラムの１次分の処理が完了したときに単位時間当たりのＣＰＵリソースに余分があれば、２次分、３次分のプログラムの実行制御処理が行われる。単位時間が経過したら、次の単位時間において再び１次分の実行段階から順に処理を行う。
【００３３】
続いて、第２の方法について説明する。
【００３４】
図４は、第２の方法のプログラム実行制御処理を示すシーケンス図である。第２の方法では、プロセス管理部３０のプログラムディスパッチをタイムスライス割当とした。割り当てるＣＰＵタイムスライスは、通過ポイント情報２１に記載された設定値と処理負荷により決定する。
【００３５】
プログラム管理部２０は、各通過ポイントの１次分の設定値と一通過あたりの処理負荷の積を求め、その和から必要なＣＰＵタイムスライスをプロセス管理部３０に要求する（ステップＳ２１）。ＣＰＵタイムスライスの要求はプログラム起動時に行う。もしくは、単位時間毎に次の単位時間のＣＰＵタイムスライス要求として実施してもよい。なお、一通過あたりの処理負荷の算出については後述する。
【００３６】
プロセス管理部３０は、各プログラムの要求をスケジューリングして各プログラムにＣＰＵタイムスライスを割り振り、ＣＰＵタイムスライスをプログラム管理部２０を通じてプログラムの実行に割り当てて、プログラムが実行される（ステップＳ２２，Ｓ２３）。
【００３７】
プログラム管理部２０は、割り当てられたＣＰＵタイムスライスを使い切った時点でプロセス管理部３０に制御を戻す（ステップＳ２４）。あるいは、ＣＰＵタイムスライスを使い切らないで単位時間当たりのプログラムの処理が終了した場合は、プロセス管理部３０に制御を戻す。
【００３８】
プロセス管理部３０は、制御が戻されると、別のプログラムにＣＰＵタイムスライスを割り当てる。全てのプログラムの１次分の処理が完了したときに単位時間当たりのＣＰＵリソースに余分があれば、２次分、３次分のプログラムの実行制御処理が行われる。単位時間が経過したら、次の単位時間において再び１次分の実行段階から順に処理を行う。
【００３９】
次に、プロセス管理部３０によるスケジューリングについて説明する。
【００４０】
通過回数の設定値は１次、２次、３次・・・と多段階に設定されており、全てのプログラムの１次分の処理が完了したときに単位時間当たりのＣＰＵリソースに余分があれば、２次分、３次分のプログラムの実行制御処理が行われる。
【００４１】
図５に、多段階でＣＰＵタイムスライスを割り当てる様子を示す。
【００４２】
図５（ａ）に示すように、プロセス管理部３０は、多数のプログラムから１次分のＣＰＵタイムスライスが要求されるので、１次分の要求を集計し、実行順序をスケジューリングし、各プログラムに対してＣＰＵタイムスライスを割り当てる。図５（ａ）では、符号１００Ａ〜Ｄで示す部分が各プログラムから要求されて割り当てたＣＰＵタイムスライスを示す。
【００４３】
プロセス管理部３０から各プログラムに対してＣＰＵタイムスライスが割り当てられて順次プログラムが実行され、１次分の処理実績が確定した時点でＣＰＵタイムスライスに余分があれば、図５（ｂ）に示すように２次分のスケジューリングを行い、ＣＰＵタイムスライスを各プログラムに対して割り当てる。図５（ｂ）では、符号１００で示す部分が１次分で使用されたＣＰＵタイムスライスの実績を示し、符号２００Ａ〜Ｄで示す部分が２次分として各プログラムから要求されて割り当てたＣＰＵタイムスライスを示す。以下同様に、２次分処理後に余分なＣＰＵタイムスライスがあれば３次分をスケジューリングする。なお、多段階の処理分をすべて処理後にもＣＰＵタイムスライスに余分があれば、既存のタイムスライス割当論理などに従いＣＰＵタイムスライスを割り当てる。
【００４４】
次に、通過ポイントを用いた負荷測定について説明する。
【００４５】
プログラム管理部２０は、プログラムの実行箇所が所定の通過ポイントを通過した場合に通知を受けて通過回数をカウントする。プロセス管理部３０は、単位時間当たりの各プログラムのＣＰＵタイムスライスの統計量を求める。プログラム管理部２０は、ＣＰＵタイムスライスの統計量をプロセス管理部３０に問い合わせ、単位時間当たりのタイムスライスの統計量と通過ポイントの通過回数より単位時間当たりの１通過の負荷を算出する。
【００４６】
現在のＯＳ（オペレーティングシステム）はプロセス単位でＣＰＵ使用率などの負荷の統計をとっていることが多い。負荷と１通過の処理負荷の関係は、１通過の処理負荷を変数とし、通過回数をパラメータとした多元方程式で表される。１通過の処理負荷をｘ１〜ｘｎ、通過回数をａ１〜ａｎ、ＣＰＵタイムスライスの統計値をＬとした場合次式となる。
【００４７】
Ｌ＝ａ１ｘ１＋ａ２ｘ２＋・・・＋ａｎｘｎ
プログラムへの入力を変更することにより、複数の多元方程式が得られるのでそれを計算することで１通過の処理負荷を求めることができる。ａ１〜ａｎの負荷割合はある程度の周期で統計をとった場合に同じような割合になることが多い。その場合はｘ１〜ｘｎの処理をもとめたものを考えてＸとし、通過回数をＡとすると以下といえる。
【００４８】
Ｌ＝Ａ×Ｘ
これを計算することによって１通過あたりの平均の処理負荷を求めることができる。
【００４９】
次に、各実行段階における通過回数の設定について説明する。
【００５０】
１次分など低次の段階では、システムが輻輳した場合でも必ず処理しなくてはならない処理とその処理に対する通過回数を設定しておく。これにより、輻輳中でもその処理が設定値分処理されることが保証される。逆に、輻輳中に抑止したい処理については、通過回数を０もしくは抑止したい処理分のＣＰＵタイムスライスとなるように設定する。
【００５１】
高次の段階では、プログラムの処理が一定時間内に終わるようにする、一定時間内のイベント処理量がある一定値を超えるようにするなど、システムが対外的に保証する性能等に基づき設定値を決定する。これにより、輻輳中でない場合にプログラムの処理性能が保証される。その間の段階では、輻輳／負荷レベルに沿った性能や実行したい内容を上記と同様に設定することによって保証される。
【００５２】
また、処理の上限回数を定義しておき、優先度の低いプログラムがＣＰＵタイムスライスを使用しすぎないようにする。
【００５３】
以上説明したように、本実施の形態によれば、プログラム実行部１０が、プログラムに通過ポイントを設定して実行箇所が通過ポイントを通過したときに通知し、プログラム管理部２０が、単位時間当たりの複数の実行段階に分けて通過ポイントの通過回数の設定値を記憶しておき、通過回数と設定値に基づいてＣＰＵタイムスライスを要求し、プロセス管理部３０が、単位時間毎に、１次分から順にＣＰＵタイムスライスを各プログラムに割り当てて、単位時間のＣＰＵタイムスライスに余裕がある場合は、２次分、３次分と割り当てることで、ＣＰＵ能力を十分に使用して処理能力を向上させることができる。全体として優先度が低いプログラムについても、１次分とした処理については優先的に実行される。
【符号の説明】
【００５４】
１０…プログラム実行部
２０…プログラム管理部
３０…プロセス管理部
２１…通過ポイント情報
【図１】
0005469128.tif 000002
【図２】
0005469128.tif 000003
【図３】
0005469128.tif 000004
【図４】
0005469128.tif 000005
【図５】
0005469128.tif 000006