(57)【要約】【課題】ジョブスケジューリングの負荷を低減する。【解決手段】制御装置１０は、スケジューラに登録されたジョブ１３ａと異なる、スケジューラに登録されていないジョブ１３ｂ，１３ｃの実行履歴を示す履歴情報１１ａを取得する。制御装置１０は、履歴情報１１ａに基づいて、ジョブ１３ａを情報処理装置で実行する予定の時間帯における、ジョブ１３ｂが実行されることによる当該情報処理装置のリソース使用状況を予測する。制御装置１０は、当該時間帯における予測したリソース使用状況が所定の条件を満たす場合、ジョブ１３ａおよびジョブ１３ｂの間でスケジューリングを行う。【選択図】図１
2015049550.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
あるスケジューラに登録されたジョブと異なる、前記スケジューラに登録されていない１または２以上の他のジョブの実行履歴を示す履歴情報を取得し、
前記履歴情報に基づいて、前記スケジューラに登録されたジョブを情報処理装置で実行する予定の時間帯における、少なくとも１つの他のジョブが実行されることによる前記情報処理装置のリソース使用状況を予測し、
前記時間帯における前記予測したリソース使用状況が所定の条件を満たす場合、前記スケジューラに登録されたジョブおよび前記少なくとも１つの他のジョブの間でスケジューリングを行う、
処理を実行させる制御プログラム。
【請求項２】
前記履歴情報は、２以上の他のジョブの実行履歴を示し、
前記スケジューリングは、前記少なくとも１つの他のジョブに加えて、前記少なくとも１つの他のジョブと関連する他のジョブを含めて行う、
請求項１記載の制御プログラム。
【請求項３】
前記少なくとも１つの他のジョブの実行の有無を監視し、
前記時間帯に前記少なくとも１つの他のジョブが実行されなくなったと判定したとき、前記関連する他のジョブも実行されないと仮定して再スケジューリングを行う、
請求項２記載の制御プログラム。
【請求項４】
前記スケジューリングによって前記スケジューラに登録されたジョブを実行する予定の前記時間帯をシフトした場合、前記シフト後の時間帯における他のリソース使用状況を予測し、
前記予測した他のリソース使用状況に応じて再スケジューリングを行う、
請求項１乃至３の何れか一項に記載の制御プログラム。
【請求項５】
前記少なくとも１つの他のジョブが前記スケジューリングにより決定された実行開始時刻より早く起動した場合、当該少なくとも１つの他のジョブをサスペンドする、
請求項１乃至４の何れか一項に記載の制御プログラム。
【請求項６】
前記所定の条件は、前記スケジューラに登録されたジョブと前記少なくとも１つの他のジョブとが並行して同一ファイルにアクセスすること、および、前記スケジューラに登録されたジョブと前記少なくとも１つの他のジョブの負荷の合計が閾値を超えることの少なくとも一方を含む、
請求項１乃至５の何れか一項に記載の制御プログラム。
【請求項７】
前記スケジューラに登録されたジョブのスケジュールを示す画面情報に、前記少なくとも１つの他のジョブの予測されるスケジュールを付加して出力する、
請求項１乃至６の何れか一項に記載の制御プログラム。
【請求項８】
コンピュータが実行する制御方法であって、
あるスケジューラに登録されたジョブと異なる、前記スケジューラに登録されていない１または２以上の他のジョブの実行履歴を示す履歴情報を取得し、
前記履歴情報に基づいて、前記スケジューラに登録されたジョブを情報処理装置で実行する予定の時間帯における、少なくとも１つの他のジョブが実行されることによる前記情報処理装置のリソース使用状況を予測し、
前記時間帯における前記予測したリソース使用状況が所定の条件を満たす場合、前記スケジューラに登録されたジョブおよび前記少なくとも１つの他のジョブの間でスケジューリングを行う、
制御方法。
【請求項９】
あるスケジューラに登録されたジョブと異なる、前記スケジューラに登録されていない１または２以上の他のジョブの実行履歴を示す履歴情報を記憶する記憶部と、
前記履歴情報に基づいて、前記スケジューラに登録されたジョブを情報処理装置で実行する予定の時間帯における、少なくとも１つの他のジョブが実行されることによる前記情報処理装置のリソース使用状況を予測し、
前記時間帯における前記予測したリソース使用状況が所定の条件を満たす場合、前記スケジューラに登録されたジョブおよび前記少なくとも１つの他のジョブの間でスケジューリングを行う、演算部と、
を有する制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は制御プログラム、制御方法および制御装置に関する。
【背景技術】
【０００２】
現在、業務において繰り返し行われる定型的な作業をコンピュータが実行するジョブとして定義しておき、コンピュータを利用して作業の自動化を行うことが行われている。例えば、サーバ装置などの電子機器の管理について、電子機器の電源ＯＮ・ＯＦＦ、電子機器からのデータ収集および分析、電子機器に搭載されたソフトウェアの更新などのジョブを、定期または不定期にコンピュータに実行させることがある。
【０００３】
コンピュータが複数のジョブを実行し得る場合、ジョブスケジューラと呼ばれるソフトウェアを用いて、これら複数のジョブの実行を集約して管理することがある。ジョブスケジューラは、複数のジョブの登録を受け付け、登録された複数のジョブが効率的に実行されるように、これら複数のジョブのスケジューリングを行う。例えば、ジョブスケジューラは、多数のジョブが同時に実行されてコンピュータのリソースが不足しないように、登録された複数のジョブの間で実行順序や実行タイミングを調整する。
【０００４】
例えば、システム負荷や実行多重度を考慮したコンピュータによるジョブスケジューリング方法が提案されている。このコンピュータは、新規ジョブが登録されると、現在のＣＰＵ（Central Processing Unit）負荷やディスク負荷などのシステム負荷を確認し、システム負荷が閾値を超えている場合には、新規ジョブをすぐに実行せずに待機させる。また、コンピュータは、現在並行して実行しているジョブの数（実行多重度）を確認し、実行多重度が閾値を超えている場合にも、新規ジョブをすぐに実行せずに待機させる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１８６３４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、１つのジョブスケジューラが、コンピュータで実行され得る全てのジョブを一元的に管理できるとは限らない。例えば、セキュリティソフトウェアは、定期的にウィルスチェックを行うために独自のジョブスケジューラを備えていることがある。また、オペレーティングシステム（ＯＳ：Operating System）は、定期的に更新プログラムの有無を確認するために独自のジョブスケジューラを備えていることがある。このように、あるジョブスケジューラから見て、当該ジョブスケジューラが管理するジョブ（管理ジョブ）の他に、管理していないジョブ（管理外ジョブ）が存在することになる。
【０００７】
管理外ジョブが存在すると、管理外ジョブによって情報処理装置のリソースが使用されることで、ジョブスケジューラが決定したスケジュール通りに管理ジョブを実行し終えることができなくなるおそれがある。そこで、ジョブスケジューラは、管理外ジョブの存在も考慮して管理ジョブをスケジューリングできることが好ましい。しかし、実行され得る全ての管理外ジョブの存在を検知し、これら全ての管理外ジョブをジョブスケジューラが考慮しようとすると、ジョブスケジューリングの負荷が大きくなるという問題がある。
【０００８】
１つの側面では、本発明は、ジョブスケジューリングの負荷を低減する制御プログラム、制御方法および制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、コンピュータに以下の処理を実行させる制御プログラムが提供される。あるスケジューラに登録されたジョブと異なる、スケジューラに登録されていない１または２以上の他のジョブの実行履歴を示す履歴情報を取得する。履歴情報に基づいて、スケジューラに登録されたジョブを情報処理装置で実行する予定の時間帯における、少なくとも１つの他のジョブが実行されることによる情報処理装置のリソース使用状況を予測する。時間帯における予測したリソース使用状況が所定の条件を満たす場合、スケジューラに登録されたジョブおよび少なくとも１つの他のジョブの間でスケジューリングを行う。
【００１０】
１つの態様では、コンピュータが実行する制御方法が提供される。
１つの態様では、記憶部と演算部とを有する制御装置が提供される。記憶部は、あるスケジューラに登録されたジョブと異なる、スケジューラに登録されていない１または２以上の他のジョブの実行履歴を示す履歴情報を記憶する。演算部は、履歴情報に基づいて、スケジューラに登録されたジョブを情報処理装置で実行する予定の時間帯における、少なくとも１つの他のジョブが実行されることによる情報処理装置のリソース使用状況を予測し、時間帯における予測したリソース使用状況が所定の条件を満たす場合、スケジューラに登録されたジョブおよび少なくとも１つの他のジョブの間でスケジューリングを行う。
【発明の効果】
【００１１】
１つの側面では、ジョブスケジューリングの負荷を低減することができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態の制御装置を示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】ジョブ間のＣＰＵリソース競合の例を示す図である。
【図４】ジョブ間のファイル競合の例を示す図である。
【図５】ジョブの可視化例を示す図である。
【図６】ジョブ管理サーバのハードウェア例を示すブロック図である。
【図７】ジョブ管理サーバの機能例を示すブロック図である。
【図８】リソース情報テーブルの例を示す図である。
【図９】管理ジョブテーブルの例を示す図である。
【図１０】仮想ジョブテーブルの例を示す図である。
【図１１】サスペンドジョブテーブルの例を示す図である。
【図１２】リソース監視の手順例を示すフローチャートである。
【図１３】定期ジョブ分析の手順例を示すフローチャートである。
【図１４】再スケジューリングの手順例を示すフローチャートである。
【図１５】ファイル競合解消の手順例を示すフローチャートである。
【図１６】ファイル競合の解消例を示す図である。
【図１７】管理ジョブのシフト例を示す図である。
【図１８】ＣＰＵリソース競合解消の手順例を示すフローチャートである。
【図１９】ＣＰＵリソース競合の解消例を示す図である。
【図２０】ジョブ実行制御の手順例を示すフローチャートである。
【図２１】ファイル競合監視の手順例を示すフローチャートである。
【図２２】ＣＰＵリソース競合監視の手順例を示すフローチャートである。
【図２３】仮想ジョブ制御の手順例を示すフローチャートである。
【図２４】仮想ジョブ非起動時の再スケジューリング例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の制御装置を示す図である。
【００１４】
第１の実施の形態の制御装置１０は、スケジューラを用いてジョブをスケジューリングする。制御装置１０は、コンピュータであってもよい。ジョブは、例えば、サーバ装置・ストレージ装置・通信装置などの情報機器を管理するものであり、ユーザから指定された周期で定期的に実行され得る。ジョブは、制御装置１０において実行されてもよいし、他の装置（他のコンピュータなど）において実行されてもよい。
【００１５】
制御装置１０は、記憶部１１および演算部１２を有する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性の記憶装置でもよいし、ＨＤＤ（Hard Disk Drive）などの不揮発性の記憶装置でもよい。演算部１２は、例えば、プロセッサである。プロセッサは、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）であってもよく、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの集積回路を含んでもよい。プロセッサは、例えば、ＲＡＭなどの半導体メモリに記憶されたプログラムを実行する。また、「プロセッサ」は、２以上のプロセッサの集合（マルチプロセッサ）であってもよい。
【００１６】
記憶部１１は、ジョブの実行履歴を示す履歴情報１１ａを記憶する。ここで、同一の装置（例えば、制御装置１０）上で実行され得るジョブには、ジョブ１３ａ，１３ｂ，１３ｃが含まれる。ジョブ１３ａは、あるスケジューラに登録されたもの（管理ジョブ）であり、ジョブ１３ｂ，１３ｃは、当該スケジューラに登録されていないもの（管理外ジョブ）である。ジョブ１３ｂ，１３ｃは、ジョブ１３ａと異なる他のスケジューラに登録されていてもよい。履歴情報１１ａは、少なくとも管理外ジョブであるジョブ１３ｂ，１３ｃの実行履歴を示す。履歴情報１１ａは、例えば、ジョブ１３ｂ，１３ｃを実行する装置から取得される。履歴情報１１ａは、更にジョブ１３ａの実行履歴を示してもよい。
【００１７】
演算部１２は、履歴情報１１ａに基づいて、管理ジョブであるジョブ１３ａを実行する予定の時間帯における、管理外ジョブが実行されることによるリソース使用状況を予測する。このとき、演算部１２は、ジョブ１３ａを実行予定の時間帯に限定してリソース使用状況を予測すればよく、ジョブ１３ａを実行予定の時間帯以外については予測しなくてよい。図１に例示したように、ジョブ１３ｂの時間帯がジョブ１３ａと重複すると予測され、ジョブ１３ｃの時間帯はジョブ１３ａと重複しないと予測されるとする。この場合、演算部１２は、ジョブ１３ｃを考慮しなくてよい。例えば、演算部１２は、履歴情報１１ａの中から、ジョブ１３ａを実行する予定の時間帯の実行履歴のみを検索して分析する。
【００１８】
そして、演算部１２は、ジョブ１３ａを実行する予定の時間帯における予測したリソース使用状況が、所定の条件を満たすか判定する。所定の条件を満たす場合、演算部１２は、ジョブ１３ａおよび予測される時間帯がジョブ１３ａと重複する管理外ジョブ（ジョブ１３ｂ）の間で、スケジューリングを行う。一方、所定の条件を満たさない場合、演算部１２は、ジョブ１３ａ，１３ｂの間でスケジューリングを行わなくてよい。
【００１９】
リソース使用状況には、ジョブ１３ａ，１３ｂそれぞれのファイルアクセスが含まれ得る。その場合、所定の条件は、ジョブ１３ａ，１３ｂが並行して同一ファイルにアクセスすることであってもよい。また、リソース使用状況には、ジョブ１３ａ，１３ｂそれぞれのＣＰＵ負荷が含まれ得る。その場合、所定の条件は、合計のＣＰＵ負荷が閾値を超えることであってもよい。所定の条件は、管理ジョブと管理外ジョブが並行して実行された場合に、一方のジョブの実行終了が大きく遅延するおそれがある条件と言うこともできる。
【００２０】
スケジューリングには、管理ジョブであるジョブ１３ａと管理外ジョブであるジョブ１３ｂの何れか一方の実行予定の時間帯をシフトすることが含まれ得る。例えば、演算部１２は、可能であればジョブ１３ａの開始タイミングを早くする。他の管理ジョブとの関係でジョブ１３ａの開始タイミングを早くすることが難しい場合、例えば、演算部１２は、ジョブ１３ａ，１３ｂのうち優先度の低い方の開始タイミングを遅くする。ジョブ１３ａのスケジュールを変更した場合、演算部１２は、変更後のスケジュールに従ってジョブ１３ａを起動する。一方、ジョブ１３ｂのスケジュールを変更した場合、演算部１２は、ジョブ１３ｂの起動の有無を監視し、早く起動した場合にジョブ１３ｂをサスペンドする。
【００２１】
第１の実施の形態の制御装置１０によれば、管理ジョブであるジョブ１３ａを実行予定の時間帯について、管理外ジョブの影響を含むリソース使用状況が予測される。そして、予測したリソース使用状況が所定の条件を満たす場合に、ジョブ１３ａおよびジョブ１３ａと並行して実行されると予測される管理外ジョブ（ジョブ１３ｂ）の間でスケジューリングが行われる。これにより、制御装置１０は全ての管理外ジョブの存在を考慮してジョブ１３ａのスケジューリングを行わなくてよく、スケジューリングの負荷を低減できる。
【００２２】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。
第２の実施の形態の情報処理システムは、業務で使用される各種の情報機器を集約して管理する。この情報処理システムは、クライアント２１、業務サーバ２２、ストレージ２３、通信装置２４およびジョブ管理サーバ１００を有する。クライアント２１、業務サーバ２２、ストレージ２３および通信装置２４は、ネットワーク２０に接続されている。なお、ジョブ管理サーバ１００は、第１の実施の形態の制御装置１０の一例である。
【００２３】
クライアント２１は、ユーザが操作する端末装置としてのクライアントコンピュータである。ユーザは、例えば、この情報処理システムを管理する管理者である。クライアント２１は、ユーザ操作に応じて、ユーザが入力した情報をジョブ管理サーバ１００に送信し、また、ジョブ管理サーバ１００から受信した情報をディスプレイに表示する。
【００２４】
業務サーバ２２、ストレージ２３および通信装置２４は、業務で使用される情報機器である。業務サーバ２２は、業務用のアプリケーションソフトウェアを実行するサーバコンピュータである。ストレージ２３は、業務に使用するデータを、磁気ディスクなどの不揮発性の記憶媒体に記憶しておく記憶装置である。ストレージ２３は、業務サーバ２２からアクセスされ得る。通信装置２４は、データを転送するルータやスイッチなどである。
【００２５】
ジョブ管理サーバ１００は、業務サーバ２２、ストレージ２３、通信装置２４などの情報機器を管理するジョブを制御するサーバコンピュータである。第２の実施の形態では、ジョブ管理サーバ１００がジョブのスケジューリングとジョブの実行の両方を行う。ただし、ジョブ管理サーバ１００が他のコンピュータにジョブの実行を指示するようにしてもよい。実行されるジョブには、例えば、情報機器の電源ＯＮ・ＯＦＦ、情報機器の稼働状態を示すデータの収集、情報機器に搭載されたソフトウェアの更新などが含まれる。
【００２６】
ジョブ管理サーバ１００では、複数のジョブのスケジューリングを行うスケジューラが動作している。スケジューラには、ユーザ操作に応じてクライアント２１からジョブが登録される。登録されたジョブ（管理ジョブ）の少なくとも一部は、ユーザが指定した周期（例えば、毎日、１週間に１回、１ヶ月に１回など）で繰り返し実行される。スケジューラは、ジョブ管理サーバ１００において複数の管理ジョブが円滑に実行されるように、これら複数の管理ジョブの実行順序や起動予定時刻などのスケジュールを調整する。
【００２７】
ただし、ジョブ管理サーバ１００では、上記のスケジューラに登録された管理ジョブの他に、上記のスケジューラに登録されていないジョブ（管理外ジョブ）が実行されることがある。管理外ジョブは、例えば、上記のスケジューラとは異なる他のスケジューラに登録されたものであって、上記のスケジューラに統合することが難しいジョブである。管理外ジョブの例としては、セキュリティソフトウェアが制御するウィルスチェックのジョブや、ＯＳが制御する更新プログラムの確認のジョブなどが挙げられる。管理外ジョブの中には、定期的に実行されるものもあるし、不定期で実行されるものもある。第２の実施の形態のスケジューラは、このような管理外ジョブも考慮してスケジューリングを行う。
【００２８】
次に、管理外ジョブが存在することによるスケジューリングの問題を説明する。
図３は、ジョブ間のＣＰＵリソース競合の例を示す図である。
ここでは、ジョブ管理サーバ１００のスケジューラに、管理ジョブとしてジョブ１１，１２が登録されているとする。ジョブ１１が先に起動し、ジョブ１１の予定終了時刻よりも後にジョブ１２が起動するようにスケジューリングされている。一方、ジョブ管理サーバ１００において、管理外ジョブとしてジョブＮが実行されるとする。ジョブＮが実行される時間帯は、ジョブ１１，１２の実行予定の時間帯と重複している。ジョブ１１とジョブＮの合計ＣＰＵ負荷やジョブ１２とジョブＮの合計ＣＰＵ負荷は、閾値を超える。
【００２９】
この場合、ジョブ管理サーバ１００は、ジョブ１１，１２をスケジュール通りに実行することができず、ジョブ１１，１２の終了が遅延するおそれがある。すなわち、スケジューリング時に考慮されなかったジョブＮによってＣＰＵリソースが使用され、ジョブ１１，１２の使用できるＣＰＵリソースが不足して実行速度が低下するおそれがある。管理外ジョブが存在することでＣＰＵ負荷が高くなり管理ジョブが遅延することは、管理ジョブの数が多くＣＰＵリソースの余裕度が小さい時間帯が長く続く場合に特に問題になる。
【００３０】
図４は、ジョブ間のファイル競合の例を示す図である。
ここでは、図３の場合と同様に、ジョブ管理サーバ１００のスケジューラに、管理ジョブとしてジョブ１１，１２が登録されているとする。ジョブ１１とジョブ１２とは、並行して実行されないようにスケジューリングされている。ジョブ１１，１２は、それぞれの実行中に少なくとも１回、あるファイルにアクセスする。一方、ジョブ管理サーバ１００において、管理外ジョブとしてジョブＮが実行されるとする。ジョブＮが実行される時間帯は、ジョブ１１，１２の実行予定の時間帯と重複している。ジョブＮも、その実行中に少なくとも１回、ジョブ１１，１２と同じファイルにアクセスする。
【００３１】
ジョブ１１，１２およびジョブＮのファイルアクセスとして、主に、ファイルを更新する書込アクセスのようにアクセス時に排他制御が行われるものを考える。その場合、スケジューリング時に考慮されなかったジョブＮによってファイルがロックされることで、ジョブ１１，１２のファイルアクセスが失敗し、ジョブ管理サーバ１００がジョブ１１，１２をスケジュール通りに実行できないおそれがある。ファイルアクセスに失敗すると、ジョブ１１，１２は異常終了するか、または、ファイルのロックが解除されるまで待機することになる。よって、ジョブ１１，１２が正常に完了するのが遅くなる。
【００３２】
そこで、ジョブ管理サーバ１００は、ユーザが登録した管理ジョブ以外のジョブのうち管理ジョブの実行に影響を与える可能性が高いものを、仮想ジョブとして自動的にスケジューラに登録する。スケジューラは、仮想ジョブを考慮してスケジューリングを行う。
【００３３】
図５は、ジョブの可視化例を示す図である。
ジョブ管理サーバ１００は、クライアント２１からの要求に応じて、図５に示すようなジョブ管理画面２１ａを示す情報をクライアント２１に送信する。クライアント２１は、クライアント２１が備えるディスプレイにジョブ管理画面２１ａを表示する。
【００３４】
ジョブ管理画面２１ａは、ユーザによって登録された管理ジョブとジョブ管理サーバ１００によって自動的に登録された仮想ジョブのスケジュールを示す。ジョブ管理画面２１ａでは、横方向が時間に相当し、各ジョブの実行予定の時間帯が長方形によって表現されている。図５の例では、ジョブ１〜４が管理ジョブであり、ジョブＡ，Ｂが仮想ジョブである。この例では、まずジョブ１が起動し、ジョブ１が終了した後にジョブ２が起動し、ジョブ２が終了した後にジョブ３が起動する。また、ジョブ３が起動する前にジョブＡが起動する。ジョブ３はジョブＡよりも先に終了する。また、ジョブＡが終了した後にジョブＢが起動する。このように、ジョブ管理画面２１ａによって、ユーザは、仮想ジョブも含めてジョブ間の順序関係や並行して実行されるジョブ群を確認することができる。
【００３５】
また、ジョブ管理画面２１ａには、ジョブ毎の予測されるＣＰＵ負荷やファイルアクセスの情報が表示される。例えば、あるジョブのスケジュールを示す長方形をユーザが選択すると、当該ジョブのＣＰＵ負荷やファイルアクセスを示す情報がポップアップウィンドウに表示される。ここで、ジョブ管理サーバ１００は、時間を所定幅の区間（例えば、１分）に細分化し、区間単位でＣＰＵ負荷やファイルアクセスを予測する。図５の例では、ジョブＡの１分毎のＣＰＵ使用率とファイルアクセスの予測が表示されている。
【００３６】
次に、ジョブ管理サーバ１００のハードウェアおよび機能を説明する。
図６は、ジョブ管理サーバのハードウェア例を示すブロック図である。
ジョブ管理サーバ１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。ＣＰＵ１０１は、第１の実施の形態の演算部１２の一例であり、ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１の一例である。
【００３７】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されているプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、ジョブ管理サーバ１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列実行してもよい。また、複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００３８】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性メモリである。なお、ジョブ管理サーバ１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００３９】
ＨＤＤ１０３は、ＯＳやミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、ジョブ管理サーバ１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００４０】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、ジョブ管理サーバ１００に接続されたディスプレイ３１に画像を出力する。ディスプレイ３１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００４１】
入力信号処理部１０５は、ジョブ管理サーバ１００に接続された入力デバイス３２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス３２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、ジョブ管理サーバ１００に、複数の種類の入力デバイスが接続されていてもよい。
【００４２】
媒体リーダ１０６は、記録媒体３３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体３３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体３３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４３】
通信インタフェース１０７は、ネットワーク２０に接続され、ネットワーク２０を介してクライアント２１や業務で使用される情報機器と通信を行うインタフェースである。通信インタフェース１０７は、ケーブルで通信装置と接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
【００４４】
なお、ジョブ管理サーバ１００は、媒体リーダ１０６を備えていなくてもよい。また、ジョブ管理サーバ１００は、クライアント２１からネットワーク２０経由で制御される場合には、画像信号処理部１０４や入力信号処理部１０５を備えていなくてもよい。また、ディスプレイ３１や入力デバイス３２が、ジョブ管理サーバ１００の筐体と一体に形成されていてもよい。クライアント２１や業務サーバ２２も、ジョブ管理サーバ１００と同様のハードウェアを用いて実現することが可能である。
【００４５】
図７は、ジョブ管理サーバの機能例を示すブロック図である。
ジョブ管理サーバ１００は、スケジュールデータベース１１０、ＯＳ１２０およびスケジューラ１３０を有する。スケジュールデータベース１１０は、例えば、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域として実現される。スケジューラ１３０は、例えば、ＣＰＵ１０１が実行するソフトウェアのモジュールとして実現される。
【００４６】
スケジュールデータベース１１０は、ジョブのスケジューリングに関する情報を記憶する。後述するように、スケジュールデータベース１１０は、リソース情報テーブル、管理ジョブテーブル、仮想ジョブテーブルおよびサスペンドジョブテーブルを記憶する。リソース情報テーブルは、ジョブ管理サーバ１００におけるプロセスの実行履歴を示す。第２の実施の形態では、主に１つのプロセスが１つのジョブに対応している。管理ジョブテーブルはユーザから登録された管理ジョブを示し、仮想ジョブテーブルはスケジューラ１３０によって登録された仮想ジョブを示す。サスペンドジョブテーブルは、スケジューラ１３０によって一時的に停止された（サスペンドされた）ジョブを示す。
【００４７】
ＯＳ１２０は、ジョブ管理サーバ１００におけるプロセスの実行を制御する。ＯＳ１２０は、スケジューラ１３０からの要求に応じて、現在実行されているプロセスに関する情報を提供する。また、ＯＳ１２０は、プロセスを強制終了する機能や一時停止する機能を有している。スケジューラ１３０は、ＯＳ１２０の機能を利用して、実行を取り止めたいジョブを強制終了し、実行タイミングを遅らせたいジョブをサスペンドできる。
【００４８】
スケジューラ１３０は、ユーザから登録された管理ジョブの実行に影響を与える管理外ジョブを仮想ジョブとして登録し、管理ジョブと仮想ジョブの実行を制御する。スケジューラ１３０は、リソース監視部１３１、定期ジョブ分析部１３２、仮想ジョブ制御部１３３、スケジュール部１３４およびジョブ実行部１３５を有する。
【００４９】
リソース監視部１３１は、定期的に（例えば、１分毎に）、ジョブ管理サーバ１００におけるプロセスの実行状況を示すリソース情報をＯＳ１２０から取得する。このプロセスには、管理ジョブに相当するものと管理外ジョブに相当するものが含まれる。リソース情報には、各プロセスのＣＰＵ使用率やアクセスされたファイルを示す情報が含まれる。リソース監視部１３１は、取得したリソース情報をリソース情報テーブルに追記する。なお、一定期間以上古いリソース情報は、リソース情報テーブルから削除してもよい。
【００５０】
定期ジョブ分析部１３２は、１日の所定タイミング（例えば、日付が変わったタイミング）で、リソース情報テーブルに蓄積されたリソース情報を分析し、所定の条件を満たす管理外ジョブを抽出する。抽出する管理外ジョブは、定期的に実行されている管理外ジョブのうち本日実行されると予測されるものであって、管理ジョブの実行に大きな影響を与える可能性が高いものである。管理ジョブへの影響は、ＣＰＵ使用率の観点とファイルアクセスの観点から予測される。そして、定期ジョブ分析部１３２は、抽出した管理ジョブを仮想ジョブとして仮想ジョブテーブルに登録する。なお、定期ジョブ分析部１３２は、スケジュール部１３４からの要求に応じても適宜上記の処理を実行する。
【００５１】
仮想ジョブ制御部１３３は、仮想ジョブテーブルに登録された仮想ジョブの実行を制御する。仮想ジョブは、管理ジョブと同様にスケジューラ１３０によってスケジューリングされ得る一方、スケジューラ１３０が起動するものではない。そこで、仮想ジョブ制御部１３３は、仮想ジョブの起動を監視し、スケジュールの起動予定時刻よりも早く仮想ジョブが起動した場合には、当該仮想ジョブを起動予定時刻までサスペンドする。
【００５２】
スケジュール部１３４は、ユーザ操作に応じてクライアント２１から管理ジョブの情報を受信し、管理ジョブテーブルに管理ジョブを登録する。また、スケジュール部１３４は、１日の所定タイミング（例えば、日付が変わったタイミング）で、本日実行予定の管理ジョブと仮想ジョブのスケジューリングを行う。スケジューリングは、ＣＰＵ使用率の観点とファイルアクセスの観点から行う。すなわち、スケジュール部１３４は、ＣＰＵリソースの不足やファイルアクセスの競合を解消するようにする。これにより、管理ジョブや仮想ジョブの起動予定時刻が変更されることがある。なお、スケジュール部１３４は、新しい管理ジョブが登録されたときにも、上記のスケジューリングを行う。
【００５３】
また、スケジュール部１３４は、クライアント２１からの要求に応じて、本日の管理ジョブおよび仮想ジョブのスケジュールを示すジョブ管理画面２１ａの情報をクライアント２１に送信する。また、スケジュール部１３４は、管理ジョブの実行中、突発的な管理外ジョブ（定期ジョブ分析部１３２で分析対象とされなかったもの）を監視する。所定の条件を満たす突発的な管理外ジョブが検出された場合、スケジュール部１３４は、実行中の管理ジョブと検出された管理外ジョブの何れか一方を、強制終了またはサスペンドする。検出する突発的な管理外ジョブは、ＣＰＵ使用率の観点またはファイルアクセスの観点から、実行中の管理ジョブに大きな影響を与えると予測されるものである。
【００５４】
ジョブ実行部１３５は、スケジュール部１３４の決定したスケジュールに従って、起動予定時刻を迎えた管理ジョブを起動する。また、ジョブ実行部１３５は、管理ジョブの実行状況を監視し、管理ジョブが終了するとその旨をスケジュール部１３４に通知する。
【００５５】
図８は、リソース情報テーブルの例を示す図である。
リソース情報テーブル１１１は、ジョブ管理サーバ１００のスケジュールデータベース１１０に記憶される。リソース情報テーブル１１１に登録される情報は、リソース監視部１３１によって収集される。リソース情報テーブル１１１は、時刻、合計ＣＰＵ使用率、プロセス、優先度、ＣＰＵ使用率および使用ファイルの項目を含む。
【００５６】
時刻の項目には、リソース監視部１３１がリソース情報を取得した時刻が設定される。合計ＣＰＵ使用率の項目には、ジョブ管理サーバ１００全体のＣＰＵ使用率、すなわち、ジョブ管理サーバ１００が備える全ＣＰＵリソース（複数のＣＰＵがある場合にはそれらの合計）に対する使用中のＣＰＵリソースの割合が設定される。プロセスの項目には、ジョブ管理サーバ１００で実行中の１または２以上のプロセスの名称が設定される。
【００５７】
優先度の項目には、各プロセスに相当するジョブの実行優先度を示す値が設定される。管理ジョブについては、スケジューラ１３０が使用している優先度の値を用いる。管理外ジョブについては、他のスケジューラなどが使用している優先度の値（例えば、ＮＩＣＥ値）を、管理ジョブの優先度と整合するように変換したものを用いる。ＣＰＵ使用率の項目には、プロセス毎のＣＰＵ使用率が設定される。使用ファイルの項目には、各プロセスがアクセスしているファイルの識別情報（パスやファイル名など）が設定される。アクセスしているファイルがない場合は、使用ファイルの項目は空欄になる。
【００５８】
なお、使用ファイルの項目に登録されるファイルへのアクセスは、ロック獲得を伴うものに限定してもよい。例えば、ファイルからのデータの読出（読出アクセス）とファイルへのデータの書込（書込アクセス）のうち、書込アクセスに限定してもよい。
【００５９】
図９は、管理ジョブテーブルの例を示す図である。
管理ジョブテーブル１１２は、ジョブ管理サーバ１００のスケジュールデータベース１１０に記憶される。管理ジョブテーブル１１２に登録される情報は、ユーザ入力に応じてスケジュール部１３４によって生成される。管理ジョブテーブル１１２は、ジョブ名、起動パターン、起動予定時刻、予定時間、プロセスおよび優先度の項目を有する。
【００６０】
ジョブ名の項目には、ユーザから指定された管理ジョブの名称が設定される。起動パターンの項目には、管理ジョブが実行される日の規則性が設定される。起動パターンとしては、毎日・毎週ＸＸ曜日・毎月ＸＸ日などの規則性が挙げられる。起動予定時刻の項目には、管理ジョブの起動予定の時刻が設定される。予定時間の項目には、管理ジョブが開始してから終了するまでに要する時間の見積もりが設定される。プロセスの項目には、管理ジョブに対応するプロセスの識別情報（プログラムのファイル名など）が設定される。優先度の項目には、スケジューラ１３０が管理ジョブ間の優先度を管理するために用いる値が設定される。例えば、優先度は、１以上１０以下の整数として表現することができる。
【００６１】
図１０は、仮想ジョブテーブルの例を示す図である。
仮想ジョブテーブル１１３は、ジョブ管理サーバ１００のスケジュールデータベース１１０に記憶される。仮想ジョブテーブル１１３に登録される情報は、管理外ジョブのリソース情報に基づいて定期ジョブ分析部１３２によって生成される。仮想ジョブテーブル１１３は、ジョブ名、起動パターン、起動予定時刻、予定時間、プロセス、優先度、ＣＰＵ使用率、使用ファイルおよびファイルアクセスの項目を有する。
【００６２】
ジョブ名の項目には、プロセス名に応じて生成された仮想ジョブの名称が設定される。起動パターンの項目には、仮想ジョブが実行される日の規則性の予測値が設定される。起動予定時刻の項目には、仮想ジョブの起動時刻の予測値が設定される。予定時間の項目には、仮想ジョブが開始してから終了するまでに要する時間の予測値が設定される。プロセスの項目には、仮想ジョブに対応するプロセスの識別情報（プログラムのファイル名など）が設定される。優先度の項目には、仮想ジョブの優先度を示す値であって、スケジューラ１３０が使用する評価尺度と整合するように変換されたものが設定される。
【００６３】
ＣＰＵ使用率の項目には、区間毎（例えば、１分毎）の仮想ジョブのＣＰＵ使用率の予測値が、時系列順に列挙される。予定時間が２０分であり１つの区間が１分である場合、ＣＰＵ使用率の項目には２０個のＣＰＵ使用率の予測値が列挙される。使用ファイルの項目には、仮想ジョブがアクセスするファイルの識別情報（パスやファイル名など）が設定される。使用ファイルの項目に登録されるファイルへのアクセスは、書込アクセスなどロック獲得を伴うものに限定してもよい。ファイルアクセスの項目には、区間毎の仮想ジョブのファイルアクセスの有無を示すフラグが、時系列順に列挙される。例えば、ファイルアクセスの項目には２０個のフラグが列挙される。１つの仮想ジョブが複数のファイルにアクセスする場合、使用ファイルおよびファイルアクセスの項目が繰り返される。
【００６４】
なお、上記の起動パターン、起動予定時刻、予定時間、ＣＰＵ使用率およびファイルアクセスの項目に設定する予測値は、蓄積されたリソース情報から算出されたものである。
図１１は、サスペンドジョブテーブルの例を示す図である。
【００６５】
サスペンドジョブテーブル１１４は、ジョブ管理サーバ１００のスケジュールデータベース１１０に記憶される。サスペンドジョブテーブル１１４の情報は、仮想ジョブ制御部１３３によって登録され、仮想ジョブ制御部１３３によって削除される。サスペンドジョブテーブル１１４は、プロセス、サスペンド時刻および解除予定時刻の項目を有する。
【００６６】
プロセスの項目には、仮想ジョブに対応するプロセスの識別情報（プログラムのファイル名など）が設定される。サスペンド時刻の項目には、仮想ジョブ制御部１３３が仮想ジョブをサスペンドした時刻が設定される。解除予定時刻の項目には、サスペンドした仮想ジョブを再開予定の時刻が設定される。各仮想ジョブの解除予定時刻は、例えば、スケジュール部１３４が決定した当該仮想ジョブの起動予定時刻とする。仮想ジョブ制御部１３３は、仮想ジョブをサスペンドしたときに当該仮想ジョブの情報をサスペンドジョブテーブル１１４に登録する。そして、仮想ジョブ制御部１３３は、サスペンドした仮想ジョブを再開すると、当該仮想ジョブの情報をサスペンドジョブテーブル１１４から削除する。
【００６７】
次に、ジョブ管理サーバ１００が実行する処理を説明する。
図１２は、リソース監視の手順例を示すフローチャートである。
この処理は、例えば、１分間隔で定期的に実行される。
【００６８】
（Ｓ１０）リソース監視部１３１は、ＣＰＵおよびファイルアクセスに関するリソース情報を収集する。ＣＰＵに関するリソース情報には、ジョブ管理サーバ１００の全体ＣＰＵ使用率、プロセス毎の優先度およびプロセス毎のＣＰＵ使用率が含まれる。ファイルアクセスに関するリソース情報には、プロセス毎の使用中のファイルの名称が含まれる。検出するファイルの使用は、ロック獲得を伴う書込アクセスに限定してもよい。
【００６９】
（Ｓ１１）リソース監視部１３１は、ステップＳ１０で収集したリソース情報が示すプロセスのうち管理外ジョブに相当するプロセスを抽出し、管理外ジョブの優先度の値（例えば、ＮＩＣＥ値）を、スケジューラ１３０で使用される優先度の値に変換する。各プロセスが管理ジョブに相当するものか管理外ジョブに相当するものかは、例えば、スケジュールデータベース１１０に記憶された管理ジョブテーブル１１２を参照して判断する。なお、スケジューラ１３０外で使用される優先度の値とスケジューラ１３０で使用される優先度の値との対応関係は、予めリソース監視部１３１に設定されている。
【００７０】
（Ｓ１２）リソース監視部１３１は、収集されたリソース情報に現在時刻を付加し、スケジュールデータベース１１０に記憶されたリソース情報テーブル１１１に追記する。このとき、古いリソース情報をリソース情報テーブル１１１から削除してもよい。
【００７１】
図１３は、定期ジョブ分析の手順例を示すフローチャートである。
この処理は、例えば、日付が変わったタイミングで実行される。
（Ｓ２０）定期ジョブ分析部１３２は、管理ジョブテーブル１１２を参照して、本日実行予定の管理ジョブの時間帯を特定する。そして、定期ジョブ分析部１３２は、リソース情報テーブル１１１から、管理ジョブの時間帯に属するリソース情報を検索する。すなわち、過去に実行された時間帯が管理ジョブを実行予定の時間帯と重複しているプロセスを検索する。管理ジョブの時間帯外のリソース情報は検索しなくてよい。
【００７２】
（Ｓ２１）定期ジョブ分析部１３２は、ステップＳ２０で検索されたリソース情報から管理外ジョブに相当するものを抽出し、管理外ジョブ毎にリソース情報を纏める。そして、定期ジョブ分析部１３２は、リソース情報が示す過去の起動実績に基づいて、管理外ジョブ毎に起動日の規則性を判定する。起動日の周期としては、毎日・１週間に１回・１ヶ月に１回などが考えられる。間欠的に起動される管理外ジョブについては、曜日も考慮して起動日の規則性を判定する。例えば、起動日の規則性として、毎週月曜日・１ヶ月の最初の平日・１ヶ月の最後の平日などのパターンが考えられる。
【００７３】
（Ｓ２２）定期ジョブ分析部１３２は、ステップＳ２１で判定した管理外ジョブ毎の起動日の規則性に基づいて、本日起動される管理外ジョブを予測する。また、定期ジョブ分析部１３２は、リソース情報が示す過去の起動実績に基づいて、本日実行される時間帯を予測する。例えば、定期ジョブ分析部１３２は、当該管理外ジョブの過去の起動時刻の平均と過去の実行時間の平均を、本日の起動予定時刻と本日の実行時間の予測値とする。
【００７４】
ただし、定期ジョブ分析部１３２は、リソース情報が示す過去の起動実績のうち起動日の特徴が本日と共通するもののみを使用して、本日実行される時間帯を予測してもよい。例えば、毎日起動される管理外ジョブであっても、本日が月曜日であれば過去の月曜日の起動実績に基づいて時間帯を予測してもよい。これは、曜日によって実行時間が異なる可能性があるためである。また、定期ジョブ分析部１３２は、過去の起動時刻や実行時間の変動傾向を分析して、本日実行される時間帯を予測してもよい。例えば、起動実績を時系列に並べたとき、単調増加や単調減少など実行時間の変動に明確な規則性が発見された場合には、その規則性に基づいて時間帯を予測してもよい。これは、月初から月末に向かって管理外ジョブによって処理されるデータが単調増加するなどの原因で生じ得る。
【００７５】
（Ｓ２３）定期ジョブ分析部１３２は、ステップＳ２２で予測した管理外ジョブの本日実行される時間帯について、リソース情報が示す過去の起動実績に基づいて、所定区間毎（例えば、１分毎）のＣＰＵ使用率を予測する。例えば、定期ジョブ分析部１３２は、起動してからの経過時間が同じ過去のＣＰＵ使用率を平均して予測値とする。ただし、定期ジョブ分析部１３２は、過去の起動実績のうち起動日の特徴が本日と共通するもののみを使用してもよいし、過去のＣＰＵ使用率の変動傾向を時系列に分析して本日のＣＰＵ使用率を予測してもよい。また、定期ジョブ分析部１３２は、管理外ジョブと同様に本日起動予定の管理ジョブについても、リソース情報テーブル１１１に記憶された管理ジョブのリソース情報に基づいて、所定区間毎のＣＰＵ使用率を予測する。
【００７６】
（Ｓ２４）定期ジョブ分析部１３２は、管理ジョブを実行予定の時間帯に属する区間毎に、その区間で実行される管理ジョブおよび管理外ジョブのＣＰＵ使用率の合計（合計ＣＰＵ使用率）を算出する。そして、定期ジョブ分析部１３２は、合計ＣＰＵ使用率が閾値（例えば、９０％）を超えているか判断する。合計ＣＰＵ使用率が閾値を超えている場合はステップＳ２５に処理が進み、それ以外の場合はステップＳ２６に処理が進む。
【００７７】
（Ｓ２５）定期ジョブ分析部１３２は、合計ＣＰＵ使用率が閾値を超えた区間で実行される管理外ジョブのうち当該区間でのＣＰＵ使用率が最大のものを、仮想ジョブとして選択する。そして、ステップＳ２４に処理が進む。ステップＳ２４では、定期ジョブ分析部１３２は、仮想ジョブを除外して合計ＣＰＵ使用率を算出する。
【００７８】
（Ｓ２６）定期ジョブ分析部１３２は、ステップＳ２２で予測した管理外ジョブの本日実行される時間帯について、リソース情報が示す過去の起動実績に基づいて、所定区間毎のファイルアクセスを予測する。また、定期ジョブ分析部１３２は、管理外ジョブと同様に本日起動予定の管理ジョブについても、リソース情報テーブル１１１に記憶された管理ジョブのリソース情報に基づいて、所定区間毎のファイルアクセスを予測する。
【００７９】
（Ｓ２７）定期ジョブ分析部１３２は、管理ジョブを実行予定の時間帯に属する区間毎に、その区間において管理ジョブと管理外ジョブとの間でファイル競合が発生するか確認する。ファイル競合は、管理ジョブと管理外ジョブが、同じファイルに対してロックを獲得してアクセスしようとする（例えば、同じファイルにデータを書き込もうとする）ことで生じる。ファイル競合が発生する場合、定期ジョブ分析部１３２は、管理ジョブと同じファイルにアクセスする管理外ジョブを仮想ジョブとして選択する。
【００８０】
（Ｓ２８）定期ジョブ分析部１３２は、ステップＳ２５，Ｓ２８で選択した仮想ジョブをスケジュールデータベース１１０に記憶された仮想ジョブテーブル１１３に登録する。
図１４は、再スケジューリングの手順例を示すフローチャートである。
【００８１】
この処理は、例えば、日付が変わって定期ジョブ分析部１３２がスケジューラ１３０に仮想ジョブを登録した直後に実行される。また、この処理は、ユーザが管理ジョブをスケジューラ１３０に登録したときに実行され得る。後者の場合、この処理に先立って、定期ジョブ分析部１３２により当該管理ジョブの時間帯についての仮想ジョブが抽出される。
【００８２】
（Ｓ３０）スケジュール部１３４は、本日起動予定の管理ジョブと登録された何れかの仮想ジョブとの間でファイル競合が発生するか確認する。ファイル競合が発生する場合、スケジュール部１３４は、ファイル競合が解消するように管理ジョブおよび仮想ジョブの一方の起動予定時刻を変更する。ファイル競合解消の詳細は後述する。
【００８３】
（Ｓ３１）スケジュール部１３４は、本日起動予定の管理ジョブと登録された仮想ジョブとの間でＣＰＵリソース競合が発生するか確認する。ＣＰＵリソース競合は、ＣＰＵリソースが不足している状態であり、管理ジョブと仮想ジョブのＣＰＵ使用率の合計が閾値（例えば、９０％）を超える状態である。ＣＰＵリソース競合が発生する場合、スケジュール部１３４は、ＣＰＵリソース競合が解消するように管理ジョブおよび仮想ジョブの何れか１つの起動予定時刻を変更する。ＣＰＵリソース競合解消の詳細は後述する。
【００８４】
（Ｓ３２）スケジュール部１３４は、ステップＳ３０，Ｓ３１において起動予定時刻の変更された管理ジョブがあるか判断する。起動予定時刻の変更された管理ジョブがある場合はステップＳ３３に処理が進み、ない場合は再スケジューリングが終了する。
【００８５】
（Ｓ３３）スケジュール部１３４は、ステップＳ３０，Ｓ３１の繰り返し回数（起動予定時刻の変更回数）が閾値を超えたか判断する。繰り返し回数が閾値を超えた場合はステップＳ３５に処理が進み、超えていない場合はステップＳ３４に処理が進む。
【００８６】
（Ｓ３４）スケジュール部１３４は、変更後の管理ジョブを実行予定の時間帯について仮想ジョブを抽出するよう定期ジョブ分析部１３２に要求する。定期ジョブ分析部１３２は、図１３に示したような手順で、スケジュール部１３４から指定された時間帯の仮想ジョブを抽出する。そして、ステップＳ３０に処理が進み、変更後の管理ジョブを実行予定の時間帯について、ファイル競合およびＣＰＵリソース競合の解消が行われる。
【００８７】
なお、変更後の時間帯においてもファイル競合またはＣＰＵリソース競合が発生し、それを解消するために管理ジョブの起動予定時刻が更に変更されることがある。また、そもそも、全ての区間について合計ＣＰＵ使用率が閾値以下になるようにスケジューリングを行うことが難しいこともある。そこで、ステップＳ３３において、管理ジョブの起動予定時間の変更が一定回数に達した時点でステップＳ３０，Ｓ３１の処理を打ち切っている。
【００８８】
（Ｓ３５）スケジュール部１３４は、これまでにステップＳ３０，Ｓ３１を通じて算出されたスケジュールのうち、合計ＣＰＵ使用率が最小になるスケジュールを選択する。
図１５は、ファイル競合解消の手順例を示すフローチャートである。
【００８９】
この処理は、前述のステップＳ３０において実行される。
（Ｓ４０）スケジュール部１３４は、管理ジョブと仮想ジョブの間でファイル競合が発生しているか、すなわち、同一区間で同一ファイルにアクセスする管理ジョブと仮想ジョブの組み合わせが存在するか判断する。ファイル競合が発生している場合はステップＳ４１に処理が進み、ファイル競合が発生していない場合は処理が終了する。
【００９０】
（Ｓ４１）スケジュール部１３４は、リソース情報テーブル１１１を参照して、ファイル競合に該当する管理ジョブと依存関係のある先行の管理ジョブを検索する。依存関係のある先行の管理ジョブは、該当する管理ジョブとの間で実行順序の制約がある他の管理ジョブであって、該当する管理ジョブが起動されるより前に終了していることが要求されるものである。この依存関係は、リソース情報が示す過去の起動実績に基づいて推定する。
【００９１】
（Ｓ４２）スケジュール部１３４は、ステップＳ４１の検索結果を考慮して、ファイル競合が解消されるように管理ジョブの実行予定の時間帯を前方にシフトする（起動予定時刻を早くする）ことを試みる。すなわち、スケジュール部１３４は、依存関係のある先行の管理ジョブの終了予定時刻よりも後に起動されるという条件のもと、仮想ジョブと同一区間で同一ファイルにアクセスしないように、管理ジョブの起動予定時刻を変更することを試みる。そして、スケジュール部１３４は、ファイル競合が解消するように管理ジョブの実行予定の時間帯を前方にシフト可能か判断する。前方にシフト可能である場合はステップＳ４３に処理が進み、シフト可能でない場合はステップＳ４４に処理が進む。
【００９２】
（Ｓ４３）スケジュール部１３４は、ステップＳ４２で検討したように、ファイル競合に該当する管理ジョブの起動予定時刻を早くする。起動予定時刻の変更先に複数の候補がある場合、スケジュール部１３４は、できる限りシフト量が小さくなる起動予定時刻を選択してもよい。そして、ファイル競合解消の処理が終了する。
【００９３】
（Ｓ４４）スケジュール部１３４は、管理ジョブテーブル１１２および仮想ジョブテーブル１１３を参照して、ファイル競合に該当する管理ジョブと仮想ジョブの間で優先度を比較し、管理ジョブの優先度が仮想ジョブより高いか判断する。管理ジョブの優先度が仮想ジョブより高い場合はステップＳ４５に処理が進み、それ以外の場合（管理ジョブの優先度が仮想ジョブの優先度以下である場合）はステップＳ４６に処理が進む。
【００９４】
（Ｓ４５）スケジュール部１３４は、ファイル競合に該当する仮想ジョブの起動予定時刻を遅くする。これは、管理ジョブを優先的に実行することを意味する。起動予定時刻の変更先に複数の候補がある場合、スケジュール部１３４は、できる限りシフト量が小さくなる起動予定時刻を選択してもよい。そして、ファイル競合解消の処理が終了する。
【００９５】
（Ｓ４６）スケジュール部１３４は、ファイル競合に該当する管理ジョブの起動予定時刻を遅くする。これは、仮想ジョブを優先的に実行することを意味する。起動予定時刻の変更先に複数の候補がある場合、スケジュール部１３４は、できる限りシフト量が小さくなる起動予定時刻を選択してもよい。
【００９６】
図１６は、ファイル競合の解消例を示す図である。
ここでは、ある管理ジョブが連続する８区間（例えば、８分間）にわたって実行され、ある仮想ジョブが連続する８区間にわたって実行されるとする。また、管理ジョブがその起動から６，７区間目でファイルｆ１にアクセスし、仮想ジョブがその起動から２，３区間目でファイルｆ１にアクセスするとする。そして、当初のスケジュールでは、管理ジョブが起動されてから４区間後に仮想ジョブが起動されると予測されるとする。
【００９７】
この場合、当初のスケジュールのままでは、管理ジョブと仮想ジョブが同一区間で同一のファイルｆ１にアクセスすることになり、ファイル競合が発生することになる（ケースＡ）。そこで、スケジュール部１３４は、管理ジョブの起動予定時刻を早くすることが可能か（前方にシフト可能か）判断し、可能であればファイル競合が解消するように管理ジョブの起動予定時刻を変更する。例えば、スケジュール部１３４は、管理ジョブの起動を２区間だけ早くすることによって、ファイル競合を解消できる（ケースＢ）。
【００９８】
前方にシフト可能でない場合、スケジュール部１３４は、管理ジョブと仮想ジョブの間で優先度を比較する。管理ジョブの優先度が仮想ジョブより高い場合、スケジュール部１３４は、ファイル競合が解消するように仮想ジョブの起動予定時刻を遅くする。例えば、スケジュール部１３４は、仮想ジョブの起動を２区間だけ遅くすることによって、ファイル競合を解消できる（ケースＣ）。一方、管理ジョブの優先度が仮想ジョブの優先度以下である場合、スケジュール部１３４は、ファイル競合が解消するように管理ジョブの起動予定時刻を遅くする。例えば、スケジュール部１３４は、管理ジョブの起動を２区間だけ遅くすることによって、ファイル競合を解消できる（ケースＤ）。
【００９９】
なお、ファイル競合をするにあたり、可能であれば各ジョブの起動予定時刻を遅くするよりも早くする方が好ましい。これは、あるジョブの実行予定の時間帯を後方にシフトしてしまうと、当該ジョブより更に後に実行予定の他のジョブについてスケジューリングの自由度が小さくなってしまうためである。ただし、仮想ジョブはスケジューラ１３０外で起動されるものであるため、仮想ジョブの実行予定の時間帯を前方にシフトすることは難しい。一方、仮想ジョブの実行予定の時間帯を後方にシフトすることは、スケジュールよりも早く起動された仮想ジョブをサスペンドすることによって実現できる。
【０１００】
図１７は、管理ジョブのシフト例を示す図である。
前述の通り、管理ジョブの起動予定時刻を早くするにあたっては、当該管理ジョブと依存関係のある先行の管理ジョブを検索し、先行の管理ジョブのスケジュールから起動予定時刻の移動先の候補を判定する。先行の管理ジョブは、リソース情報テーブル１１１に記憶されたリソース情報が示す過去の起動実績に基づいて推定される。
【０１０１】
具体的には、スケジュール部１３４は、過去の起動実績において、スケジュールを変更する管理ジョブが起動するよりも常に前に終了している他の管理ジョブを検索する。例えば、管理ジョブ３が実行される日には常に、管理ジョブ３が起動するより前に管理ジョブ１，２が終了しているとする。一方、管理ジョブ５は、管理ジョブ３と同じ日に実行されることもあれば、実行されないこともあるとする。また、管理ジョブ６は、管理ジョブ３が起動するより前に終了していることもあれば、終了していないこともあるとする。
【０１０２】
この場合、管理ジョブ１，２が、管理ジョブ３と依存関係のある先行の管理ジョブとして検索される。管理ジョブ１，２が本日実行予定であれば、管理ジョブ１，２の何れの終了予定時刻よりも後の範囲で、管理ジョブ３の起動予定時刻を早くすることができる。
【０１０３】
図１８は、ＣＰＵリソース競合解消の手順例を示すフローチャートである。
この処理は、前述のステップＳ３１において実行される。
（Ｓ５０）スケジュール部１３４は、管理ジョブと仮想ジョブの間でＣＰＵリソース競合が発生しているか、すなわち、予測される合計ＣＰＵ使用率が閾値（例えば、９０％）を超えた区間が存在するか判断する。ＣＰＵリソース競合が発生している場合はステップＳ５１に処理が進み、ＣＰＵリソース競合が発生していない場合は処理が終了する。
【０１０４】
（Ｓ５１）スケジュール部１３４は、リソース情報テーブル１１１を参照して、ＣＰＵリソース競合に該当する管理ジョブと依存関係のある先行の管理ジョブを検索する。この依存関係は、前述のように、リソース情報が示す過去の起動実績に基づいて推定する。
【０１０５】
（Ｓ５２）スケジュール部１３４は、ステップＳ５１の検索結果を考慮して、ＣＰＵリソース競合が解消されるように管理ジョブの実行予定の時間帯を前方にシフトする（起動予定時刻を早くする）ことを試みる。すなわち、スケジュール部１３４は、依存関係のある先行の管理ジョブの終了予定時刻よりも後に起動されるという条件のもと、何れの区間も合計ＣＰＵ使用率が閾値以下となるように、管理ジョブの起動予定時刻を変更することを試みる。そして、スケジュール部１３４は、ＣＰＵリソース競合が解消するように管理ジョブの実行予定の時間帯を前方にシフト可能か判断する。前方にシフト可能である場合はステップＳ５３に処理が進み、シフト可能でない場合はステップＳ５４に処理が進む。
【０１０６】
（Ｓ５３）スケジュール部１３４は、ステップＳ５２で検討したように、ＣＰＵリソース競合に該当する管理ジョブの起動予定時刻を早くする。起動予定時刻の変更先に複数の候補がある場合、スケジュール部１３４は、できる限りシフト量が小さくなる起動予定時刻を選択してもよい。そして、ＣＰＵリソース競合解消の処理が終了する。
【０１０７】
（Ｓ５４）スケジュール部１３４は、管理ジョブテーブル１１２および仮想ジョブテーブル１１３を参照して、ＣＰＵリソース競合に該当する管理ジョブと仮想ジョブの間で優先度を比較し、管理ジョブの優先度が仮想ジョブより高いか判断する。管理ジョブの優先度が仮想ジョブより高い場合はステップＳ５５に処理が進み、それ以外の場合（管理ジョブの優先度が仮想ジョブの優先度以下である場合）はステップＳ５６に処理が進む。
【０１０８】
（Ｓ５５）スケジュール部１３４は、ＣＰＵリソース競合に該当する仮想ジョブの起動予定時刻を遅くする。起動予定時刻の変更先に複数の候補がある場合、スケジュール部１３４は、できる限りシフト量が小さくなる起動予定時刻を選択してもよい。そして、ＣＰＵリソース競合解消の処理が終了する。
【０１０９】
（Ｓ５６）スケジュール部１３４は、ＣＰＵリソース競合に該当する管理ジョブの起動予定時刻を遅くする。起動予定時刻の変更先に複数の候補がある場合、スケジュール部１３４は、できる限りシフト量が小さくなる起動予定時刻を選択してもよい。
【０１１０】
図１９は、ＣＰＵリソース競合の解消例を示す図である。
ここでは、ある管理ジョブが連続する９区間（例えば、９分間）にわたって実行され、ある仮想ジョブが連続する１３区間にわたって実行されるとする。また、９区間における管理ジョブのＣＰＵ使用率の予測は、｛３ｐ，４ｐ，３ｐ，８ｐ，９ｐ，８ｐ，５ｐ，３ｐ，２ｐ｝（ｐはＣＰＵ使用率の所定単位）であるとする。１３区間における仮想ジョブのＣＰＵ使用率の予測は、｛７ｐ，６ｐ，６ｐ，６ｐ，５ｐ，４ｐ，３ｐ，３ｐ，３ｐ，３ｐ，３ｐ，２ｐ，１ｐ｝であるとする。そして、当初のスケジュールでは、管理ジョブが起動されてから５区間後に仮想ジョブが起動されると予測されるとする。
【０１１１】
この場合、当初のスケジュールのままでは、管理ジョブが起動されてから５区間後の合計ＣＰＵ使用率が１５ｐとなり、６区間後の合計ＣＰＵ使用率が１１ｐとなる。合計ＣＰＵ使用率の閾値を１０ｐとすると、ＣＰＵリソース競合が発生することになる（ケースＡ）。そこで、スケジュール部１３４は、管理ジョブの起動予定時刻を早くすることが可能か（前方にシフト可能か）判断し、可能であればＣＰＵリソース競合が解消するように管理ジョブの起動予定時刻を変更する。例えば、スケジュール部１３４は、管理ジョブの起動を２区間だけ早くすることによって、管理ジョブが実行される全ての区間について合計ＣＰＵ使用率を閾値以下にでき、ＣＰＵリソース競合を解消できる（ケースＢ）。
【０１１２】
前方にシフト可能でない場合、スケジュール部１３４は、管理ジョブと仮想ジョブの間で優先度を比較する。管理ジョブの優先度が仮想ジョブより高い場合、スケジュール部１３４は、ＣＰＵリソース競合が解消するように仮想ジョブの起動予定時刻を遅くする。例えば、スケジュール部１３４は、仮想ジョブの起動を２区間だけ遅くすることによって、管理ジョブが実行される全ての区間について合計ＣＰＵ使用率を閾値以下にできる（ケースＣ）。一方、管理ジョブの優先度が仮想ジョブの優先度以下である場合、スケジュール部１３４は、ＣＰＵリソース競合が解消するように管理ジョブの起動予定時刻を遅くする。例えば、スケジュール部１３４は、管理ジョブの起動を１３区間だけ遅くすることによって、管理ジョブが実行される全ての区間について合計ＣＰＵ使用率を閾値以下にできる（ケースＤ）。なお、前述のように、ＣＰＵリソース競合をするにあたり、可能であれば各ジョブの起動予定時刻を遅くするよりも早くする方が好ましい。
【０１１３】
以上では、定期的に実行される管理外ジョブを考慮したスケジューリングを説明した。次に、突発的に実行される管理外ジョブの制御について説明する。
図２０は、ジョブ実行制御の手順例を示すフローチャートである。
【０１１４】
（Ｓ６０）スケジュール部１３４は、スケジュールデータベース１１０に記憶された管理ジョブテーブル１１２を参照して、起動予定時刻が到来した管理ジョブを検出する。
（Ｓ６１）スケジュール部１３４は、検出した管理ジョブの起動をジョブ実行部１３５に指示する。ジョブ実行部１３５は、スケジュール部１３４から指定された管理ジョブを起動し、起動した管理ジョブの実行状況を監視する。管理ジョブが終了すると、ジョブ実行部１３５からスケジュール部１３４にその旨が通知される。
【０１１５】
（Ｓ６２）スケジュール部１３４は、管理ジョブテーブル１１２を参照して、起動された管理ジョブが使用予定のファイルを確認する。使用予定のファイルがある場合、スケジュール部１３４は、使用予定のファイルをバックアップ（コピーを保存）しておく。
【０１１６】
（Ｓ６３）スケジュール部１３４は、リソース監視部１３１によって最新のリソース情報が収集されると、仮想ジョブとして登録されていない突発的な管理外ジョブが実行されていないか確認する。突発的な管理外ジョブは、単発的に実行されるものや起動時刻が不規則なものなどを含む。スケジュール部１３４は、ステップＳ６１で起動された管理ジョブと突発的な管理外ジョブとの間でファイル競合が発生する可能性を判定し、ファイル競合が発生し得る場合はそれを解消する。ファイル競合監視の詳細は後述する。
【０１１７】
（Ｓ６４）スケジュール部１３４は、現在の合計ＣＰＵ使用率が高いか、すなわち、ステップＳ６１で起動された管理ジョブと突発的な管理外ジョブとの間でＣＰＵリソース競合が発生しているか判定する。スケジュール部１３４は、ＣＰＵリソース競合が発生している場合はそれを解消する。ＣＰＵリソース競合監視の詳細は後述する。
【０１１８】
（Ｓ６５）スケジュール部１３４は、ステップＳ６１で起動された管理ジョブがまだ実行中であるか判断する。実行中である場合はステップＳ６３に処理が進み、終了した場合は当該管理ジョブについてのジョブ実行制御が終了する。なお、管理ジョブが終了した場合は、ステップＳ６２で作成したバックアップファイルを破棄してもよい。
【０１１９】
図２１は、ファイル競合監視の手順例を示すフローチャートである。
この処理は、前述のステップＳ６３において実行される。
（Ｓ７０）スケジュール部１３４は、リソース監視部１３１によって収集された最新のリソース情報から、実行中の突発的な管理外ジョブを検索する。検索する突発的な管理外ジョブは、実行中のジョブのうち、管理ジョブテーブル１１２に登録された管理ジョブと仮想ジョブテーブル１１３に登録された仮想ジョブとを除いたものである。
【０１２０】
（Ｓ７１）スケジュール部１３４は、ステップＳ７０で検索された管理外ジョブの中から、実行中の管理ジョブが使用予定のファイルにアクセスした管理外ジョブを抽出する。
（Ｓ７２）スケジュール部１３４は、ステップＳ７１で該当する管理外ジョブが抽出されたか判断する。該当する管理外ジョブが抽出された場合はステップＳ７３に処理が進み、抽出されなかった場合はファイル競合監視の処理が終了する。
【０１２１】
（Ｓ７３）スケジュール部１３４は、管理外ジョブの優先度を確認する。このとき、スケジュール部１３４は、スケジューラ１３０外で使用されている管理外ジョブの優先度の値（例えば、ＮＩＣＥ値）を、スケジューラ１３０で使用されている優先度の値に変換する。そして、スケジュール部１３４は、管理ジョブと管理外ジョブの間で優先度を比較し、管理ジョブの優先度が管理外ジョブより高いか判断する。管理ジョブの優先度が管理外ジョブより高い場合はステップＳ７４に処理が進み、それ以外の場合（管理ジョブの優先度が管理外ジョブの優先度以下である場合）はステップＳ７５に処理が進む。
【０１２２】
（Ｓ７４）スケジュール部１３４は、ステップＳ７１で抽出された管理外ジョブを強制終了する。これは、管理ジョブによるファイルアクセスが阻害されないように、管理ジョブを優先的に実行することを意味する。管理外ジョブの強制終了には、例えば、ＯＳ１２０の機能を利用する。強制終了された管理外ジョブは、例えば、管理ジョブが終了した後に再起動される。そして、ステップＳ７６に処理が進む。
【０１２３】
（Ｓ７５）スケジュール部１３４は、実行中の管理ジョブを強制終了する。これは、管理外ジョブによるファイルアクセスが阻害されないように、管理外ジョブを優先的に実行することを意味する。管理ジョブの強制終了には、例えば、ＯＳ１２０の機能を利用する。強制終了された管理ジョブは、例えば、管理外ジョブが終了した後に再起動される。
【０１２４】
（Ｓ７６）スケジュール部１３４は、管理ジョブが起動してから、管理ジョブと管理外ジョブの何れが先に実際にファイルにアクセスしたか確認する。そして、スケジュール部１３４は、ステップＳ７４またはステップＳ７５において、先にファイルにアクセスしたジョブを強制終了したか判断する。先にファイルにアクセスしたジョブを強制終了した場合はステップＳ７７に処理が進み、それ以外の場合はステップＳ７８に処理が進む。
【０１２５】
（Ｓ７７）スケジュール部１３４は、上記のステップＳ６２で作成したバックアップファイルを用いて、強制終了したジョブによって更新されたファイルをロールバックする。すなわち、スケジュール部１３４は、更新されたファイルをバックアップファイルで上書きすることで、ジョブの実行結果とファイルの内容との整合性を維持する。
【０１２６】
（Ｓ７８）スケジュール部１３４は、ステップＳ７１で抽出された管理外ジョブを、仮想ジョブとして仮想ジョブテーブル１１３に登録する。突発的な管理外ジョブに相当する仮想ジョブも、ジョブ管理画面２１ａに表示されることになる。ただし、突発的な管理外ジョブの実行時間を予測することは難しいため、例えば、ジョブ管理画面２１ａには、実行時間を既定値（例えば、１５分）としてこのような仮想ジョブが表示される。
【０１２７】
図２２は、ＣＰＵリソース競合監視の手順例を示すフローチャートである。
この処理は、前述のステップＳ６４において実行される。
（Ｓ８０）スケジュール部１３４は、リソース監視部１３１によって収集された最新のリソース情報に基づいて、現在の合計ＣＰＵ使用率が閾値（例えば、９０％）を超えているか判断する。合計ＣＰＵ使用率が閾値を超えている場合はステップＳ８１に処理が進み、それ以外の場合はＣＰＵリソース監視の処理が終了する。
【０１２８】
（Ｓ８１）スケジュール部１３４は、実行中の突発的な管理外ジョブを検索する。
（Ｓ８２）スケジュール部１３４は、合計ＣＰＵ使用率を実行中のジョブの数で割ることで、ジョブ１つ当たりの平均ＣＰＵ使用率を算出する。実行中のジョブには、管理ジョブと仮想ジョブと突発的な管理外ジョブとが含まれる。スケジュール部１３４は、ステップＳ８１で検索された突発的な管理外ジョブのうち、ＣＰＵ使用率が高い管理外ジョブとして、現在のＣＰＵ使用率が平均ＣＰＵ使用率以上であるものを抽出する。
【０１２９】
（Ｓ８３）スケジュール部１３４は、ステップＳ８２で該当する管理外ジョブが抽出されたか判断する。該当する管理外ジョブが抽出された場合はステップＳ８４に処理が進み、抽出されなかった場合はＣＰＵリソース競合監視の処理が終了する。
【０１３０】
（Ｓ８４）スケジュール部１３４は、管理ジョブと管理外ジョブの間で優先度を比較し、管理ジョブの優先度が管理外ジョブより高いか判断する。管理ジョブの優先度が管理外ジョブより高い場合はステップＳ８５に処理が進み、それ以外の場合（管理ジョブの優先度が管理外ジョブの優先度以下である場合）はステップＳ８６に処理が進む。
【０１３１】
（Ｓ８５）スケジュール部１３４は、ステップＳ８２で抽出された管理外ジョブをサスペンド（一時停止）する。これは、管理ジョブの実行が遅延しないように、管理ジョブを優先的に実行することを意味する。管理外ジョブのサスペンドには、例えば、ＯＳ１２０の機能を利用する。サスペンドされた管理外ジョブは、例えば、合計ＣＰＵ使用率が十分に低くなったときに再開される。そして、ステップＳ８７に処理が進む。
【０１３２】
（Ｓ８６）スケジュール部１３４は、実行中の管理ジョブをサスペンドする。これは、管理外ジョブの実行が遅延しないように、管理外ジョブを優先的に実行することを意味する。管理ジョブのサスペンドには、例えば、ＯＳ１２０の機能を利用する。サスペンドされた管理ジョブは、例えば、合計ＣＰＵ使用率が十分に低くなったときに再開される。
【０１３３】
（Ｓ８７）スケジュール部１３４は、ステップＳ８２で抽出された管理外ジョブを、仮想ジョブとして仮想ジョブテーブル１１３に登録する。突発的な管理外ジョブに相当する仮想ジョブも、ジョブ管理画面２１ａに表示されることになる。
【０１３４】
次に、仮想ジョブの実行時の制御について説明する。
図２３は、仮想ジョブ制御の手順例を示すフローチャートである。
（Ｓ９０）仮想ジョブ制御部１３３は、ＯＳ１２０によるジョブの起動指示を監視し、仮想ジョブテーブル１１３に登録された何れかの仮想ジョブが起動されたか判断する。仮想ジョブが起動した場合、仮想ジョブ制御部１３３は当該仮想ジョブに相当するプロセスをフッキング（プロセスの制御を横取り）し、ステップＳ９１に処理が進む。フッキングによって、仮想ジョブに相当するプロセスの前に、スケジューラ１３０による事前処理を割り込ませることができる。仮想ジョブが起動していない場合、図２３のフローが一旦終了し、ステップＳ９０におけるジョブ起動の監視が繰り返される。
【０１３５】
（Ｓ９１）仮想ジョブ制御部１３３は、現在時刻が、スケジュール部１３４によって決定された起動予定時刻より早いか判断する。現在時刻が起動予定時刻より早い場合はステップＳ９２に処理が進み、それ以外の場合はステップＳ９４に処理が進む。
【０１３６】
（Ｓ９２）仮想ジョブ制御部１３３は、ステップＳ９０で検出した仮想ジョブをサスペンド（一時停止）する。仮想ジョブ制御部１３３がプロセスをフッキングしていることから、制御をプロセスに戻さないことで仮想ジョブをサスペンドすることができる。
【０１３７】
（Ｓ９３）仮想ジョブ制御部１３３は、スケジュールデータベース１１０に記憶されたサスペンドジョブテーブル１１４に、プロセス名とサスペンド時刻と解除予定時刻を登録する。解除予定時刻は、スケジュール部１３４が決定した起動予定時刻とする。
【０１３８】
（Ｓ９４）仮想ジョブ制御部１３３は、サスペンドジョブテーブル１１４を参照して、サスペンドされている仮想ジョブのうち解除予定時刻に達した仮想ジョブを検索する。解除予定時刻に達した仮想ジョブがある場合はステップＳ９５に処理が進み、解除予定時刻に達した仮想ジョブがない場合は仮想ジョブ制御の処理が終了する。
【０１３９】
（Ｓ９５）仮想ジョブ制御部１３３は、サスペンドしている仮想ジョブを再開（レジューム）する。これにより、仮想ジョブに相当するプロセスに制御が戻る。
（Ｓ９６）仮想ジョブ制御部１３３は、サスペンドジョブテーブル１１４から、再開した仮想ジョブの情報（プロセス名とサスペンド時刻と解除予定時刻）を削除する。
【０１４０】
以上、管理ジョブと管理外ジョブとの間のファイル競合およびＣＰＵリソース競合を解消する方法について説明した。ところで、ある仮想ジョブが本日起動されると予測したにもかかわらず、当該仮想ジョブが予測に反して本日起動されないこともあり得る。これは、通常は月初に行う業務を翌日に先送りする場合や、通常は月末に行う業務を前日に前倒しする場合など、ユーザが業務のスケジュールを臨時的に変更した場合に生じ得る。
【０１４１】
ある仮想ジョブが予測に反して起動されないとき、当該仮想ジョブに関連する他の仮想ジョブも合わせて起動されなくなることがある。すなわち、複数の仮想ジョブが纏めて起動されなくなる可能性がある。一方、仮想ジョブを考慮してスケジューリングが行われているため、予測に反して複数の仮想ジョブが纏めて起動されなくなると、大量の空きリソースが発生して非効率になってしまう。そこで、ジョブ管理サーバ１００は、ある仮想ジョブが起動されなかった場合、当該仮想ジョブと関連する後続の仮想ジョブも起動されない可能性が高いか判定し、起動されない可能性が高い場合は再スケジューリングを行う。
【０１４２】
図２４は、仮想ジョブ非起動時の再スケジューリング例を示す図である。
スケジュール部１３４は、ある仮想ジョブが本日起動しないと判定したとき、リソース情報テーブル１１１に記憶されたリソース情報が示す過去の起動実績に基づいて、当該仮想ジョブ（基準の仮想ジョブ）と依存関係のある後続の仮想ジョブを検索する。依存関係のある後続の仮想ジョブは、次の条件１，２，３の全てを満たすものである。
【０１４３】
条件１：基準の仮想ジョブと起動日および非起動日が一致していること。すなわち、過去に基準の仮想ジョブが起動した日には起動しており、過去に基準の仮想ジョブが起動しなかった日には起動していないこと。条件２：基準の仮想ジョブが起動するよりも常に後に起動していること。条件３：基準の仮想ジョブとの間の起動時刻の差が、ほぼ一定であること（例えば、起動時刻の差の変動幅または分散度が閾値以下であること）。なお、条件３に関して、ある日の起動時刻の差が他の日と比べて顕著に長い場合、スケジュール部１３４は、当該日の合計ＣＰＵ使用率を確認し、ＣＰＵリソース不足がその原因であるか判定してもよい。スケジュール部１３４は、ＣＰＵリソース不足による起動時刻の差の顕著な違いについては無視して、条件３を判定することができる。
【０１４４】
そして、スケジュール部１３４は、次の事象１，２の両方が発生したとき、依存関係のある後続の仮想ジョブが本日起動しないものとして再スケジューリングを行う。事象１：ある仮想ジョブ（基準の仮想ジョブ）が、過去の起動実績における最も遅い起動時刻を経過しても起動しないこと。事象２：基準の仮想ジョブと依存関係のある後続の仮想ジョブのうち最先の仮想ジョブが、その起動予定時刻を経過しても起動しないこと。スケジュール部１３４は、再スケジューリングにおいて、例えば、依存関係のある後続の仮想ジョブよりも更に後に起動予定であった管理ジョブを前方にシフトする。
【０１４５】
例えば、スケジュール部１３４は、仮想ジョブＡ，Ｂ，Ｃ，Ｄが本日起動すると予測し、仮想ジョブＡ，Ｂ，Ｃ，Ｄと管理ジョブ７のスケジューリングを行ったとする。また、仮想ジョブＢ，Ｃは仮想ジョブＡと依存関係のある後続の仮想ジョブであり、仮想ジョブＢ，Ｃのうち仮想ジョブＢが先に起動すると予測したとする。この場合に、仮想ジョブＡが起動されず、かつ、仮想ジョブＢの起動予定時刻になっても仮想ジョブＢが起動されなかった場合、スケジュール部１３４は、予測に反して仮想ジョブＡ，Ｂ，Ｃの全てが本日起動されなくなったと判定する。すると、スケジュール部１３４は、仮想ジョブＢ，Ｃが存在しないものとして再スケジューリングする。これにより、スケジュール部１３４は、管理ジョブ７の起動予定時刻を当初のスケジュールよりも早くすることができる。
【０１４６】
ただし、本日起動されなかった複数の仮想ジョブは、予測される周期に該当しない後日（例えば、翌日）に纏めて起動される可能性がある。そこで、スケジュール部１３４は、非起動ジョブリスト１１５に、本日起動されなかった基準の仮想ジョブと依存関係のある後続の仮想ジョブとを対応付けて、非起動ジョブリスト１１５に登録しておく。非起動ジョブリスト１１５は、スケジュールデータベース１１０に記憶される。
【０１４７】
スケジュール部１３４は、後日、予測しなかった管理外ジョブの起動を検出すると、当該管理外ジョブが先日起動されなかった仮想ジョブとして非起動ジョブリスト１１５に登録されているか確認する。登録されている場合、スケジュール部１３４は、非起動ジョブリスト１１５を参照して、起動された管理外ジョブと依存関係のある後続の管理外ジョブを特定し、依存関係のある後続の管理外ジョブを仮想ジョブとして登録する。そして、スケジュール部１３４は、登録した仮想ジョブを考慮して再スケジューリングを行う。例えば、スケジュール部１３４は、再スケジューリングにおいて、依存関係のある後続の仮想ジョブが挿入されたことに伴い管理ジョブを後方にシフトする。
【０１４８】
例えば、非起動ジョブリスト１１５に仮想ジョブＡ，Ｂ，Ｃが登録されているとする。また、仮想ジョブＡに相当する管理外ジョブは本日起動しないと予測していたとする。この場合に、予測に反して仮想ジョブＡに相当する管理外ジョブが起動されると、スケジュール部１３４は、仮想ジョブＢ，Ｃに相当する管理外ジョブも本日起動されると判定し、仮想ジョブＢ，Ｃを登録する。そして、スケジュール部１３４は、仮想ジョブＢ，Ｃが存在するものとして再スケジューリングする。この結果、スケジュール部１３４は、管理ジョブ７の起動予定時刻を当初のスケジュールよりも遅くすることがある。
【０１４９】
なお、上記では、非起動ジョブリスト１１５に基準の仮想ジョブとして登録された管理外ジョブが起動したとき、その基準の仮想ジョブと依存関係のある後続の仮想ジョブとして登録された管理外ジョブも本日起動するとみなして再スケジューリングした。これに対し、スケジュール部１３４は、非起動ジョブリスト１１５に登録されていない管理外ジョブが起動したときも、当該管理外ジョブと依存関係のある後続の管理外ジョブを検索して本日起動するとみなし、再スケジューリングするようにしてもよい。
【０１５０】
第２の実施の形態の情報処理システムによれば、スケジューラ１３０が管理しない管理外ジョブを考慮してスケジューリングが行われる。よって、管理ジョブと管理外ジョブとの間のＣＰＵリソース競合やファイル競合によって生じる意図しないジョブ遅延を抑制することができる。また、抽出された管理ジョブを仮想ジョブとしてスケジューラ１３０に登録し可視化することで、ユーザによるスケジュールの確認や調整が容易になる。
【０１５１】
また、事前のスケジューリング段階では、管理ジョブを実行予定の時間帯に限定して、管理ジョブに影響のある管理外ジョブが抽出される。よって、全ての管理外ジョブを抽出する場合と比べて、スケジューラ１３０のスケジューリングの負荷が軽減される。また、管理ジョブの起動予定時刻を変更するにあたり、過去の起動実績から管理ジョブ間の依存関係が推定され、依存関係に応じて起動予定時刻の変更先の候補が限定される。よって、管理ジョブ間の依存関係がユーザによって明示されていなくても、スケジューリングにおいて複数の管理ジョブの間の整合性を維持することができる。
【０１５２】
また、管理ジョブまたは管理外ジョブを強制終了するにあたり、強制終了するジョブによってアクセスされたファイルがバックアップファイルを用いてロールバックされる。よって、ファイルアクセスを行うジョブを強制終了しても、ジョブの実行結果とファイルの内容との整合性を維持することができる。また、予測に反してある管理外ジョブが起動されなかった場合や、予測に反してある管理外ジョブが起動された場合に、過去の起動実績から関連する管理外ジョブが推定され、関連する管理外ジョブを含めて再スケジューリングが行われる。よって、起動予測が外れた場合でも早期に適切な対応を取ることができ、ＣＰＵリソースの有効活用や意図しないジョブ遅延の抑制を図れる。
【０１５３】
なお、前述のように、第１の実施の形態の情報処理は、制御装置１０にプログラムを実行させることで実現することができる。また、第２の実施の形態の情報処理は、ジョブ管理サーバ１００にプログラムを実行させることで実現することができる。
【０１５４】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体３３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からＨＤＤなどの他の記録媒体（例えば、ＨＤＤ１０３）にプログラムを複製して（インストールして）実行してもよい。
【符号の説明】
【０１５５】
１０  制御装置
１１  記憶部
１１ａ  履歴情報
１２  演算部
１３ａ，１３ｂ，１３ｃ  ジョブ
【図１】
2015049550.tif 000003
【図２】
2015049550.tif 000004
【図３】
2015049550.tif 000005
【図４】
2015049550.tif 000006
【図５】
2015049550.tif 000007
【図６】
2015049550.tif 000008
【図７】
2015049550.tif 000009
【図８】
2015049550.tif 000010
【図９】
2015049550.tif 000011
【図１０】
2015049550.tif 000012
【図１１】
2015049550.tif 000013
【図１２】
2015049550.tif 000014
【図１３】
2015049550.tif 000015
【図１４】
2015049550.tif 000016
【図１５】
2015049550.tif 000017
【図１６】
2015049550.tif 000018
【図１７】
2015049550.tif 000019
【図１８】
2015049550.tif 000020
【図１９】
2015049550.tif 000021
【図２０】
2015049550.tif 000022
【図２１】
2015049550.tif 000023
【図２２】
2015049550.tif 000024
【図２３】
2015049550.tif 000025
【図２４】
2015049550.tif 000026