(57)【要約】【課題】  バッチ処理のジョブ実行スケジュールを最適化する。【解決手段】  ジョブ実行制御部１１３は、ジョブ格納部１６１に格納されているジョブの実行順序を決定し、順次ジョブを取得する。ジョブ実行時間算出部１１２は、取得されたジョブの実行時間を算出し、当該ジョブの終了時刻を求める。ジョブ実行制御部１１３は、当該ジョブが指定された時間内に終了するか否かを判別する。ジョブ実行制御部１１３は、指定時間内に終了しないジョブに指定されている条件に基づいて、実行するか繰下実行するかを決定し、繰下実行する場合には新たなジョブスケジュールを設定する。ジョブ実行部１１４は、実行するジョブを順次実行する。ジョブ実行制御部１１３は、既定時間帯経過後に実行が継続されているジョブについて中断するか否かを判別し、中断する場合には当該ジョブの実行スケジュールを再設定する。【選択図】  図２
2006065566.tif 000002
【特許請求の範囲】
【請求項１】
所定の時間帯にバッチ処理をおこなうバッチ処理装置において、
バッチ処理対象のジョブ毎の実行時間を予め算出する実行時間算出手段と、
各ジョブが前記所定の時間帯に終了するか否かを判別する実行時間判別手段と、
前記実行時間判別手段の判別結果に応じて、各ジョブの実行スケジュールを設定するスケジュール設定手段と、
前記スケジュール設定手段が設定した実行スケジュールに基づいてジョブを実行するジョブ実行手段と、を備え、
前記スケジュール設定手段は、ジョブの実行が前記所定時間帯内に終了しない場合、各ジョブ毎に指定されている条件に基づいて、ジョブの実行スケジュールを再設定する、
ことを特徴とするバッチ処理装置。
【請求項２】
ジョブの実行にかかる動作を規定する属性情報を記憶する属性情報記憶手段をさらに備え、
前記実行時間算出手段は、各ジョブ毎に指定されている条件と、前記属性情報記憶手段に記憶されている属性情報とに基づいて実行時間を算出し、
前記スケジュール設定手段は、各ジョブ毎に指定されている条件に基づいて、各ジョブの実行スケジュールを設定する、
ことを特徴とする請求項１に記載のバッチ処理装置。
【請求項３】
前記実行時間算出手段は、算出した実行時間に基づいて、各ジョブの終了時刻を算出し、
前記実行時間判別手段は、前記実行時間算出手段が算出した終了時刻に基づいて、各ジョブが前記所定の時間帯内で終了するか否かを判別する、
ことを特徴とする請求項１または２に記載のバッチ処理装置。
【請求項４】
前記スケジュール設定手段は、各ジョブ毎に指定されている条件に基づいて、当該ジョブの実行が前記所定時間帯内に終了しない場合、次回のバッチ処理時に繰り下げて実行するようスケジュールを設定する、
ことを特徴とする請求項１乃至３のいずれか１項に記載のバッチ処理装置。
【請求項５】
前記スケジュール設定手段は、各ジョブ毎に指定されている条件に基づいて、当該ジョブの実行が前記所定時間帯内に終了しない場合であっても、当該ジョブを実行するようスケジュールを設定する、
ことを特徴とする請求項１乃至４のいずれか１項に記載のバッチ処理装置。
【請求項６】
前記スケジュール設定手段は、各ジョブ毎に指定されている条件に基づいて、当該ジョブの実行が前記所定時間帯内に終了しない場合、当該ジョブを該所定時間帯まで実行し、未完了となる処理を次回のバッチ処理時に繰り下げて実行するようスケジュールを設定する、
ことを特徴とする請求項１乃至５のいずれか１項に記載のバッチ処理装置。
【請求項７】
前記所定の時間帯の経過時以降に前記ジョブ実行手段が実行しているジョブがあるか否かを判別する実行ジョブ判別手段と、
前記実行ジョブ判別手段が実行ジョブがあると判別した場合、当該ジョブを中断すべきか否かを判別する中断判別手段と、をさらに備え、
前記ジョブ実行手段は、前記中断判別手段が中断すべきと判別したジョブの実行を中断し、
前記スケジュール設定手段は、前記ジョブ実行手段が中断したジョブの実行スケジュールを設定する、
ことを特徴とする請求項１乃至６のいずれか１項に記載のバッチ処理装置。
【請求項８】
前記中断判別手段は、ジョブの実行が当該バッチ処理以外の処理に影響するか否かを判別し、影響する場合に当該ジョブを中断すべきと判別する、
ことを特徴とする請求項７に記載のバッチ処理装置。
【請求項９】
複数のジョブの実行順序を決定する実行順序決定手段と、
前記実行順序決定手段が決定した実行順に前記ジョブを順次指定するジョブ指定手段と、をさらに備え、
前記実行時間算出手段は、前記ジョブ指定手段が指定したジョブと、当該ジョブの前に実行されるジョブの実行時間を算出する、
ことを特徴とする請求項１乃至８のいずれか１項に記載のバッチ処理装置。
【請求項１０】
前記実行時間算出処理は、前記ジョブ指定手段が指定したジョブの１つ前のジョブについての終了時刻を起点に、該指定されたジョブの終了時刻を算出する、
ことを特徴とする請求項９に記載のバッチ処理装置。
【請求項１１】
前記実行時間算出処理は、前記ジョブ指定手段が指定したジョブの数に応じて、各ジョブの実行時間を可変的に算出する、
ことを特徴とする請求項９または１０に記載のバッチ処理装置。
【請求項１２】
コンピュータにバッチ処理を実行させるためのプログラムであって、
前記コンピュータに、
バッチ処理にかかる動作を規定する属性情報を記憶する機能と、
バッチ処理対象となるジョブの処理時間を算出する機能と、
各ジョブ毎に指定されている条件と、算出された処理時間とに基づいて指定されている時間内に終了しないジョブについて、そのまま実行するか次回バッチ処理時に繰り下げて実行するかを判別する機能と、
繰り下げて実行するジョブの実行スケジュールを設定する機能と、
指定された終了時間経過後も実行しているジョブについて、バッチ処理以外の要件に基づいて中断要否を判別し、中断すべきと判別した場合にジョブの実行を中断する機能と、
中断したジョブを再度実行するための実行スケジュールを設定する機能と、
を実現させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バッチ処理装置、および、プログラムに関し、特に、効率的なバッチ処理を実行可能なバッチ処理装置、および、プログラムに関する。
【背景技術】
【０００２】
コンピュータを用いた処理において、複数のジョブを所定の時間帯に一括して処理するバッチ処理が知られている。例えば、通信により営業所などから事務処理センタに受注データなどを送信するような業務処理の場合などにバッチ処理が適用される。このような場合、通常、データの受付をおこなう時間帯が規定されており、その時間帯に送信するために、各ジョブ毎に実行する時間帯が予め指定されている。そして、時間帯内にジョブが終了しない場合には、ジョブの優先度を上げることで、時間内で終了できるようにすることが従来行われている。
【０００３】
しかしながら、ジョブの優先度を上げても時間帯内に終了しない場合もあり、時間帯を経過してもジョブの実行が継続される事態も生じている。通常、バッチ処理は、通常の業務時間とは異なる時間帯（例えば、終業後や始業前など）におこなうが、このように設定されている時間帯が終了してもバッチ処理が継続されていると、通常の業務に影響することになる。
【０００４】
このような問題を解消するため、時間内に終了しないジョブについては翌サービス時に持ち越すようバッチ処理をスケジュールする手法が提案されている（例えば、特許文献１）。
【０００５】
しかしながら、このような手法では、時間内に終了しないジョブについては一律に翌サービス時に持ち越されてしまうので、例えば、バッチ処理後の通常業務に必要なジョブについても持ち越されてしまい、バッチ処理結果を業務に反映させることができないという問題があった。
【特許文献１】特開２０００−１１２８８７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明は、上記実状に鑑みてなされたものであり、効率的なバッチ処理の実行を可能とするバッチ処理装置等を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明の第１の観点にかかるバッチ処理装置は、
所定の時間帯にバッチ処理をおこなうバッチ処理装置において、
バッチ処理対象のジョブ毎の実行時間を予め算出する実行時間算出手段と、
各ジョブが前記所定の時間帯に終了するか否かを判別する実行時間判別手段と、
前記実行時間判別手段の判別結果に応じて、各ジョブの実行スケジュールを設定するスケジュール設定手段と、
前記スケジュール設定手段が設定した実行スケジュールに基づいてジョブを実行するジョブ実行手段と、を備え、
前記スケジュール設定手段は、ジョブの実行が前記所定時間帯内に終了しない場合、各ジョブ毎に指定されている条件に基づいて、ジョブの実行スケジュールを再設定する、
ことを特徴とする。
【０００８】
上記バッチ処理装置は、
ジョブの実行にかかる動作を規定する属性情報を記憶する属性情報記憶手段をさらに備えていることが望ましく、この場合、
前記実行時間算出手段は、各ジョブ毎に指定されている条件と、前記属性情報記憶手段に記憶されている属性情報とに基づいて実行時間を算出し、
前記スケジュール設定手段は、各ジョブ毎に指定されている条件に基づいて、各ジョブの実行スケジュールを設定することが望ましい。
【０００９】
上記バッチ処理装置において、
前記実行時間算出手段は、算出した実行時間に基づいて、各ジョブの終了時刻を算出し、
前記実行時間判別手段は、前記実行時間算出手段が算出した終了時刻に基づいて、各ジョブが前記所定の時間帯内で終了するか否かを判別することが望ましい。
【００１０】
上記バッチ処理装置において、
前記スケジュール設定手段は、各ジョブ毎に指定されている条件に基づいて、当該ジョブの実行が前記所定時間帯内に終了しない場合、次回のバッチ処理時に繰り下げて実行するようスケジュールを設定することができる。
【００１１】
上記バッチ処理装置において、
前記スケジュール設定手段は、各ジョブ毎に指定されている条件に基づいて、当該ジョブの実行が前記所定時間帯内に終了しない場合であっても、当該ジョブを実行するようスケジュールを設定することができる。
【００１２】
上記バッチ処理装置において、
前記スケジュール設定手段は、各ジョブ毎に指定されている条件に基づいて、当該ジョブの実行が前記所定時間帯内に終了しない場合、当該ジョブを該所定時間帯まで実行し、未完了となる処理を次回のバッチ処理時に繰り下げて実行するようスケジュールを設定することができる。
【００１３】
上記バッチ処理装置は、
前記所定の時間帯の経過時以降に前記ジョブ実行手段が実行しているジョブがあるか否かを判別する実行ジョブ判別手段と、
前記実行ジョブ判別手段が実行ジョブがあると判別した場合、当該ジョブを中断すべきか否かを判別する中断判別手段と、をさらに備えていてもよく、この場合、
前記ジョブ実行手段は、前記中断判別手段が中断すべきと判別したジョブの実行を中断し、
前記スケジュール設定手段は、前記ジョブ実行手段が中断したジョブの実行スケジュールを設定することが望ましい。
【００１４】
上記バッチ処理装置において、
前記中断判別手段は、ジョブの実行が当該バッチ処理以外の処理に影響するか否かを判別し、影響する場合に当該ジョブを中断すべきと判別することが望ましい。
【００１５】
上記バッチ処理装置は、
複数のジョブの実行順序を決定する実行順序決定手段と、
前記実行順序決定手段が決定した実行順に前記ジョブを順次指定するジョブ指定手段と、をさらに備えていることが望ましく、この場合、
前記実行時間算出手段は、前記ジョブ指定手段が指定したジョブと、当該ジョブの前に実行されるジョブの実行時間を算出することが望ましい。
【００１６】
また、前記実行時間算出処理は、前記ジョブ指定手段が指定したジョブの１つ前のジョブについての終了時刻を起点に、該指定されたジョブの終了時刻を算出することが望ましい。
【００１７】
さらに、前記実行時間算出処理は、前記ジョブ指定手段が指定したジョブの数に応じて、各ジョブの実行時間を可変的に算出することが望ましい。
【００１８】
上記目的を達成するため、本発明の第２の観点にかかるプログラムは、
コンピュータにバッチ処理を実行させるためのプログラムであって、
前記コンピュータに、
バッチ処理にかかる動作を規定する属性情報を記憶する機能と、
バッチ処理対象となるジョブの処理時間を算出する機能と、
各ジョブ毎に指定されている条件と、算出された処理時間とに基づいて指定されている時間内に終了しないジョブについて、そのまま実行するか次回バッチ処理時に繰り下げて実行するかを判別する機能と、
繰り下げて実行するジョブの実行スケジュールを設定する機能と、
指定された終了時間経過後も実行しているジョブについて、バッチ処理以外の要件に基づいて中断要否を判別し、中断すべきと判別した場合にジョブの実行を中断する機能と、
中断したジョブを再度実行するための実行スケジュールを設定する機能と、
を実現させることを特徴とする。
【発明の効果】
【００１９】
本発明によれば、所定の時間帯内に終了しないジョブについて、各ジョブ毎に指定されている条件に基づいて実行スケジュールを設定する。ここで、条件に応じて、ジョブを実行するか繰り下げて実行するかを決定してスケジュールを設定する。また、バッチ処理をおこなうための時間帯を経過してもジョブの実行が継続している場合は、他の処理への影響に基づいてジョブの実行を中断し、再度実行されるようスケジュールが設定される。これにより、例えば、バッチ処理後の業務に必要となるジョブなどについては、バッチ処理時間帯内で終了できるよう優先的に実行され、実行結果を業務処理に反映させることができる。また、他の処理に影響がある場合のみ、時間帯経過後のバッチ処理が中断されるので、時間帯内に終了しないジョブについても、可能な限り実行を継続させることができる。
【発明を実施するための最良の形態】
【００２０】
（実施形態１）
以下、本発明を実施するための形態を図面を参照して説明する。本実施形態では、複数のジョブをパラレル（並列）に実行することでバッチ処理をおこなう場合を例に説明する。本実施形態では、バッチ処理装置１００によりこのようなバッチ処理をおこなう。なお、バッチ処理装置１００は、バッチ処理のために予め規定されている時間帯（以下、「既定時間帯」とする）にバッチ処理を実行するものとし、本実施形態では、既定時間帯を８：００〜９：００とする。また、バッチ処理装置１００は、既定時間帯の間はバッチ処理をおこなうが、その他の時間帯については、他の用途（以下、「通常用途」とする）に用いられるものとする。
【００２１】
バッチ処理装置１００の構成を図１を参照して説明する。図１は、バッチ処理装置１００の構成を示すブロック図である。バッチ処理装置１００は、例えば、ワークステーションやパーソナルコンピュータなどといった情報処理装置であり、図示するように、制御部１１０と、通信制御部１２０と、入力制御部１３０と、出力制御部１４０と、プログラム格納部１５０と、記憶部１６０と、から構成される。
【００２２】
制御部１１０は、例えば、ＣＰＵ（Central Processing Unit：中央演算処理装置）やワークエリアとなる所定の記憶装置（ＲＡＭ（Random Access Memory）など）から構成され、バッチ処理装置１００の各部を制御するとともに、プログラム格納部１５０に格納されている所定の動作プログラムに基づいて後述する各処理を実行する。なお、制御部１１０は、例えば、タイマ回路などといった計時動作をおこなうための構成を有しているものとし、現在時刻を取得したり動作時間の算出などをおこなうものとする。このような構成は、ソフトウェア処理により実現されてもよい。
【００２３】
通信制御部１２０は、例えば、ＮＩＣ（Network Interface Card）やルータ、モデム、などといった通信装置や、シリアル転送もしくはパラレル転送用のコネクタ類などから構成され、バッチ処理装置１００と外部装置とを接続して通信をおこなう。外部装置との通信は、所定の通信ネットワークや接続ケーブルなどを介して行われる。通信制御部１２０は、例えば、ＬＡＮ（Local Area Network：構内通信網）やＷＡＮ（Wide Area Network：広域通信網）などを介して、バッチ処理装置１００と他の情報処理装置等（パーソナルコンピュータなど）とを接続する。
【００２４】
入力制御部１３０は、例えば、キーボードやポインティング・デバイスなどの所定の入力装置１３を接続し、入力装置１３から入力された指示などを制御部１１０に伝達する。
【００２５】
出力制御部１４０は、例えば、ディスプレイ装置やプリンタなどの所定の出力装置１４を接続し、制御部１１０の処理結果などを必要に応じて出力装置１４に出力する。
【００２６】
プログラム格納部１５０は、例えば、ハードディスク装置やＲＯＭ（Read Only Memory）などといった所定の記憶装置から構成され、制御部１１０が実行する種々の動作プログラムが格納されている。プログラム格納部１５０に格納される動作プログラムは、バッチ処理装置１００の基本動作を司る任意のＯＳ（Operating System：基本ソフトウェア）の他に、後述する各処理を実現するための動作プログラムが格納されている。後述するバッチ処理装置１００による処理は、制御部１１０がこれらの動作プログラムを実行することで実現される。
【００２７】
すなわち、プログラム格納部１５０に格納されている動作プログラムを実行することで、制御部１１０は、図２に示すような構成として機能する。図示するように、制御部１１０は、ジョブ要求受信部１１１、ジョブ実行制御部１１２、ジョブ実行時間算出部１１３、ジョブ実行部１１４、として機能する。
【００２８】
ジョブ要求受信部１１１は、バッチ処理対象となるジョブ（以下、「バッチジョブ」とする）の入力を受け付ける。バッチジョブは、例えば、バッチ処理装置１００のユーザが入力装置１３などを操作することにより入力される他、通信制御部１２０を介して外部装置等から入力される。
【００２９】
ジョブ実行時間算出部１１２は、実行対象となるバッチジョブの実行時間を、予め規定されている条件に基づいて算出する。
【００３０】
ジョブ実行制御部１１３は、算出された実行時間に基づいて、ジョブ毎の実行可否の判定や、既定の実行時間内に終了しない場合の繰下実行の設定などをおこなう。
【００３１】
ジョブ実行部１１４は、実行対象となるジョブを実行する。
【００３２】
本実施の形態では、制御部１１０がプログラム格納部１５０に格納されているプログラムを実行することにより、いわゆるソフトウェア処理で上記機能を実現するが、これらの機能に特化した回路（いわゆる、ＡＳＩＣ（Application Specific Integrated Circuit））などをバッチ処理装置１００に構成することで、いわゆるハードウェア処理によって上記機能が実現されてもよい。
【００３３】
記憶部１６０は、例えば、ＲＡＭやハードディスク装置などといった所定の記憶装置から構成され、種々のデータを格納する。本実施形態では、プログラム格納部１５０に格納されている動作プログラムを実行することにより、制御部１１０が記憶部１６０を制御する。これにより、記憶部１６０は、図２に示すような、ジョブ格納部１６１、属性情報格納部１６２、実行結果格納部１６３、として機能する。
【００３４】
ジョブ格納部１６１は、ジョブ要求受信部１１１が受け付けたジョブを格納するための記憶領域であり、いわゆる、スプール用の記憶領域として機能する。ジョブ格納部１６１に記録される情報の例を図３（ａ）に示す。
【００３５】
図示するように、ジョブ格納部１６１には「ジョブスケジュールテーブル」が作成され、ジョブ要求受信部１１１が受け付けたジョブの実行スケジュールや実行時の条件等が記録される。本実施形態では、バッチ処理装置１００にジョブが投入（入力）される際、当該ジョブの実行条件が指定されて入力される。このような実行条件は、ユーザにより入力可能な他、所定のプログラムの実行により自動的に入力される。また、各ジョブは、ユーザがバッチ処理装置１００に対し入力する他、例えば、通信制御部１２０を介して外部装置などから入力される。理解を容易にするため、本実施形態では、図３（ａ）に示す、「ジョブＡ」、「ジョブＢ」、「ジョブＣ」、「ジョブＤ」の４つのジョブを対象として以下説明する。
【００３６】
図３（ａ）に示すように、「ジョブスケジュールテーブル」には、投入されたジョブ毎に、「実行優先度」、「実行指定」、「繰下実行」、「ジョブ要求時間」、「実行ジョブ種別」、「実行動作」、「終了予定時刻」、などの項目が用意される。
【００３７】
「実行優先度」には、当該ジョブを実行する際の優先度を示す情報が記録される。本実施形態では、優先度を１〜１００の数値で表し、数値が大きいほど優先度が高いことを示すものとする。
【００３８】
「実行指定」には、当該ジョブの実行時期を規定する情報が記録される。当該ジョブを実行する時間帯が決められている場合には、「日付」と「時間」の項目に、それぞれ所望する日時情報が記録される。また、日時を指定せず、すぐに実行させたいジョブについては「即実行」が記録される。
【００３９】
「繰下実行」には、日時指定されたジョブが指定された時刻までに終了できない場合の動作を規定する情報が記録される。本実施形態では、指定時刻までに終了できないことが予想される場合に、当該ジョブを次回バッチ処理時に繰り下げて実行するか否かを示す情報を記録する。本実施形態では、繰下実行してもよいジョブには「許可」が指定される。一方、例えば、実行結果がすぐに必要となるジョブについては、繰下実行してしまうと、要求された時期に実行結果を得ることができない。したがって、このようなジョブについては「不許可」が指定される。
【００４０】
「ジョブ要求時間」には、当該ジョブについて所望される実行開始時刻を示す情報が記録される。
【００４１】
「実行ジョブ種別」には、当該ジョブの種別（例えば、「アプリケーション」など）を示す情報が記録される。
【００４２】
「実行動作」には、当該ジョブにより実行される処理を示す情報が記録される。本実施形態では、バッチ処理装置１００により実行可能な処理が予め複数用意されており、当該ジョブが必要とする処理を示す情報が記録される。各処理毎の詳細は、属性情報格納部１６２に記録されている。
【００４３】
「終了予定時刻」には、各ジョブ毎に算出される終了予定時刻が記録される。終了予定時刻は、実行するジョブ数に応じて変動するので、算出される毎に更新される。
【００４４】
次に、属性情報格納部１６２について説明する。属性情報格納部１６２は、バッチ処理装置１００が実行する各処理についての属性情報を格納する。属性情報格納部１６２に記録される情報の例を図３（ｂ）に示す。
【００４５】
図示するように、属性情報格納部１６２には「動作情報テーブル」が作成され、各ジョブが要求する処理を実行する際の動作を規定する属性情報が記録されている。本実施形態では、理解を容易にするため、「処理１」、「処理２」、「処理３」、「処理４」の４つの処理を対象として以下説明する。
【００４６】
図３（ｂ）に示すように、「動作情報テーブル」には、実行される処理毎に、「実行アプリケーション」、「ＣＰＵ最大使用率」、「ＣＰＵ使用時間」、「終了コード」、などの項目が用意されている。
【００４７】
「実行アプリケーション」には、当該処理で用いられるアプリケーションを指定する情報が記録されている。
【００４８】
「ＣＰＵ最大使用率」は、当該アプリケーションを単独で実行した場合に割り当てられているＣＰＵ使用率を示す情報が記録されている。
【００４９】
「ＣＰＵ使用時間」には、規定されているＣＰＵ最大使用率で当該アプリケーションを実行した場合のＣＰＵ使用時間、すなわち、当該処理の実行時間を示す情報が記録されている。
【００５０】
「終了コード」には、当該処理の終了時のステータスを示すコードが記録されている。終了コードは各処理毎に予め割り当てられているものであり、終了の形態毎にコードが用意されている。終了形態として、例えば、「正常終了」（「正常」）、「エラー終了」（「エラー」）、「繰下終了」（「繰下」）、などが想定される。ここで、「正常終了」は、当該処理が完了した場合をいい、「エラー終了」は、当該処理がエラーにより中止・中断等された場合をいい、「繰下終了」は、当該処理が繰り下げて実行されることになったために中止・中断された場合をいう。ここで、「繰下終了」には、実行前に算出する終了予定時刻が指定時間を超過するため実行しなかった場合、および、指定時間を超過した実行を中断して繰下実行とした場合などが含まれ、これらの違いをコードにより示すものとする。
【００５１】
次に実行結果格納部１６３について説明する。実行結果格納部１６３は、実行したバッチジョブの実行結果を示す情報を格納する。実行結果格納部１６３に格納される情報の例を図３（ｃ）に示す。
【００５２】
図示するように、実行結果格納部１６３には「実行結果テーブル」が作成され、バッチ処理により実行されたジョブ毎の実行結果を示す情報が記録される。図示するように、「実行結果テーブル」には、実行したジョブ毎に、「開始日時」、「終了日時」、「終了コード」、「再設定ジョブ」、「処理結果」、などの項目が用意される。
【００５３】
「開始日時」には、当該ジョブの実行を開始した日時を示す情報が記録され、「終了日時」には、当該ジョブの実行が終了した日時を示す情報が記録される。
【００５４】
「終了コード」には、当該ジョブを終了したときのステータスを示す終了コードが記録される。
【００５５】
「再設定ジョブ」には、当該ジョブが繰下実行される場合に再設定されたジョブを指定する情報が記録される。すなわち、繰下実行の場合、当初設定されたスケジュールでは実行せずに翌営業日などに実行するため、当該ジョブの実行スケジュールや実行条件を再設定することとなる。「再設定ジョブ」にはこのように再設定されたジョブ名などを示す情報が記録される。
【００５６】
「処理結果」には、当該ジョブの実行により生成されたデータやファイルなどが格納される。
【００５７】
このような構成のバッチ処理装置１００の動作を以下説明する。本実施形態では、バッチ処理装置１００が所定のアプリケーション等を実行することにより、投入された複数のジョブをパラレル（並列）に実行することでバッチ処理をおこなう。バッチ処理装置１００によりバッチジョブを実行するための「バッチジョブ実行処理」を図４に示すフローチャートを参照して説明する。本実施形態では、バッチ処理をおこなう時間帯が予め規定されているものとし、このような規定の時間帯となったことを契機に「バッチジョブ実行処理」が開始されるものとする。
【００５８】
処理が開始されると、ジョブ実行制御部１１３が、今回のバッチ処理の対象となるジョブがいずれであるかを特定する（ステップＳ１１０１）。ここでは、ジョブ要求受信部１１１が受け付けて、ジョブ格納部１６１の「ジョブスケジュールテーブル」に格納されたジョブを実行対象とする。本実施形態では、理解を容易にするため、図３（ａ）に示した、「ジョブＡ」、「ジョブＢ」、「ジョブＣ」、「ジョブＤ」の４つのジョブを実行対象とする。
【００５９】
実行対象となるジョブを特定すると、ジョブ実行制御部１１３は、これらのジョブの実行順序Ｐを決定する（ステップＳ１１０２）。ここでは、ジョブ格納部１６１の「ジョブスケジュールテーブル」を参照して実行順序を決定する。実行順序は、指定されている日時が現在日時を過ぎているもので、実行優先度がより高いジョブを優先する。また、実行優先度が同じ場合は、「ジョブ要求時間」の順とする。実行順序Ｐは、例えば、１〜ｐの数値で表し、１から順に実行していく。本実施形態では、「ジョブＡ」の実行順序が１となり、以下、「ジョブＣ」、「ジョブＢ」、「ジョブＤ」の順となる。すなわち、実行順序Ｐの範囲は１〜４となり、最終順序ｐは「４」となる。以下、この実行順序に従って処理を説明する。
【００６０】
実行順序を決定すると、ジョブ実行制御部１１３は、実行順序Ｐが「１」となるジョブ、すなわち、１番目に実行するジョブを指定する（ステップＳ１１０３）。本実施形態では「ジョブＡ」が該当する。
【００６１】
１番目に実行するジョブが指定されると、ジョブ実行時間算出部１１２により、ジョブの実行時間を算出するための「実行時間算出処理」が実行される（ステップＳ１２００）。この「実行時間算出処理」を図５に示すフローチャートを参照して説明する。
【００６２】
ジョブ実行時間算出部１１２は、まず、現在処理しているジョブの総数をＮとする（ステップＳ１２０１）。ここでは、１番目に実行するジョブを対象としているので、Ｎ＝１となる。
【００６３】
次にジョブ実行時間算出部１１２は、当該ジョブを単独で実行した場合の実行時間である単独実行時間Δｔを算出する（ステップＳ１２０２）。ここでは、属性情報格納部１６２の「動作情報テーブル」（図３（ｂ））で規定されている「最大ＣＰＵ使用率」と「ＣＰＵ使用時間」に基づいて数１を演算することにより単独実行時間Δｔを算出する。
【００６４】
【数１】
2006065566.tif 000003
【００６５】
ここでは、ジョブＡを対象としているので、ジョブＡの単独実行時間Δｔは「２５分」となる。
【００６６】
ジョブ実行時間算出部１１２は、現在の対象ジョブ数が複数であるか否かを判別する（ステップＳ１２０３）。ここでは、１番目に実行するジョブＡのみを対象としているので、Ｎ＝１となる（ステップＳ１２０３：Ｎｏ）。すなわち、現在のジョブ数が１であるので、ステップＳ１２０２で求めた単独実行時間Δｔが、現時点でのジョブＡの予想実行時間となる。この場合、ジョブ実行時間算出部１１２は、ステップＳ１２０９に進む。
【００６７】
ジョブ実行時間算出部１１２は、求めた実行時間に基づき、当該ジョブの終了時刻に換算し、終了予定時刻とする（ステップＳ１２０９）。ここで、ジョブＡの指定開始時刻が８：００であるので、ジョブＡの終了予定時刻は８：２５となる（図８（ａ））。ジョブ実行制御部１１３は「ジョブスケジュールテーブル」にアクセスし、ジョブ実行時間算出部１１２が算出したジョブＡの終了予定時刻を、ジョブＡについての「終了予定時刻」に記録する。
【００６８】
終了時刻に換算すると、「実行時間算出処理」を終了し、「バッチジョブ実行処理」（図４）のフローに戻る。
【００６９】
ジョブ数が１の場合の「実行時間算出処理」が終了すると、ジョブ実行制御部１１３により「実行最適化処理」が実行される（ステップＳ１３００）。「実行最適化処理」は、算出した終了時刻と、各ジョブ毎に指定されている実行条件とに基づいて、ジョブの実行を最適化するための処理である。この「実行最適化処理」を図６に示すフローチャートを参照して説明する。
【００７０】
まず、ジョブ実行制御部１１３は、実行順序がＰ番目のジョブに実行日時が指定されているか否かを判別する（ステップＳ１３０１）。ここでは、ジョブ格納部１６１の「ジョブスケジュールテーブル」（図３（ａ））を参照して判別する。現在、Ｐ番目のジョブはジョブＡであるので、実行日時が指定されている（ステップＳ１３０１：Ｙｅｓ）。
【００７１】
実行日時が指定されている場合、ジョブ実行制御部１１３は、「実行時間算出処理」で求めた終了予定時刻に基づいて、当該ジョブが指定された時刻までに終了するか否かを判別する（ステップＳ１３０２）。ジョブＡについての指定時間は、８：００〜９：００であり、算出された終了予定時刻は「８：２５」である。したがって、指定時間内に終了することになる（ステップＳ１３０２：Ｙｅｓ）。
【００７２】
現在対象としているジョブが指定時間内に終了する場合、ジョブ実行制御部１１３は、当該ジョブを実行することにより、既に実行しているジョブに影響があるか否かを判別する（ステップＳ１３０３）。ここでは、１番目に実行するジョブＡを対象としているので、これより前に実行しているジョブは存在しない。したがって、ジョブＡの実行が、既実行ジョブには影響することはない（ステップＳ１３０３：Ｎｏ）。
【００７３】
この場合、「実行最適化処理」を終了し、「バッチジョブ実行処理」（図４）のフローに戻る。
【００７４】
「実行最適化処理」が終了すると、ジョブ実行部１１４により、当該ジョブ（ジョブＡ）の実行が開始される（ステップＳ１１０４）。
【００７５】
ジョブの実行が開始されると、ジョブ実行制御部１１３により、現在指定されている実行順序Ｐが最終であるか否かを判別する（ステップＳ１１０５）。ここでは、ジョブＡの実行順序Ｐが「１」であり、最終の実行順序ｐは「４」であるので、次が存在する（ステップＳ１１０５：Ｎｏ）。この場合、ジョブ実行制御部１１３は、現在の実行順序Ｐを＋１して次の実行順序を指定し（ステップＳ１１０６）、指定された順序のジョブについて「実行時間算出処理」を実行する（ステップＳ１２００）。
【００７６】
すなわち、実行順序が２番目のジョブＣについて処理される。「実行時間算出処理」が開始されると（図５参照）、現在のジョブ総数が特定される（ステップＳ１２０１）。この場合、既にジョブＡが実行されているので、現在対象となっているジョブの総数は、ジョブＡとジョブＣの２つとなる（Ｎ＝２）。
【００７７】
ジョブ実行時間算出部１１２は、ジョブＡとジョブＣそれぞれについての単独実行時間Δｔを算出すると（ステップＳ１２０２）、現在のジョブ数が複数（Ｎ＝２）であるので（ステップＳ１２０３：Ｙｅｓ）、各ジョブについての基準実行時間ＴＥを算出する（ステップＳ１２０４）。
【００７８】
基準実行時間ＴＥは、複数のジョブを並列に実行する場合に、当該ジョブ数で算出した各ジョブの実行時間をいう。すなわち、複数のジョブを並列に実行する場合、１つのＣＰＵで複数のジョブを実行することになるので、各ジョブはそれぞれの最大ＣＰＵ使用率では実行されない。本実施形態では、複数のジョブを並列に実行する場合、ＣＰＵ使用率はすべてのジョブに均等に割り当てるものとする。したがって、ジョブ数がＮの場合の各ジョブのＣＰＵ使用率は「１００／Ｎ（％）」となる。
【００７９】
ここで、実行するジョブ数Ｎが増加すると、各ジョブ毎のＣＰＵ使用率は、既定のＣＰＵ最大使用率よりも低下する。そして、ＣＰＵ使用率が低下すると、各ジョブに要するＣＰＵ使用時間は増大する。したがって、この増大率を示す係数（以下、「時間増分係数α」とする）を求め、各ジョブの単独実行時間Δｔに乗算することで、基準実行時間ＴＥが求めることができる。ここで、時間増分係数αは数２を演算することにより算出され、基準実行時間ＴＥは数３を演算することにより算出される。
【００８０】
【数２】
2006065566.tif 000004
【００８１】
（数３）
ＴＥ＝Δt×α
【００８２】
ジョブＡとジョブＣの場合（Ｎ＝２）の各基準実行時間ＴＥを演算すると、図８（ｂ）に示すように、ジョブＡの基準実行時間ＴＥａは「３０分」となり、ジョブＣの基準実行時間ＴＥｃは「２０分」となる。
【００８３】
ここで、ジョブＡが指定されたときのジョブＡの基準実行時間ＴＥａは「２５分」であり、ジョブＣが指定されたときに算出されたジョブＡの基準実行時間ＴＥａ（３０分）と異なる。これは、複数のジョブを並列に実行する場合、実行するジョブの数に応じて、各ジョブに割り当てられるＣＰＵ使用率が変化するためである。したがって、ジョブ実行時間算出部１１２は、指定されたジョブの数に応じて、各ジョブの実行時間を可変的に算出する。この結果、指定されたジョブの数に応じて、各ジョブ毎に算出される実行時間は随時変動することになる。
【００８４】
各ジョブについての基準実行時間ＴＥを算出すると、ジョブ実行時間算出部１１２は、各基準実行時間ＴＥのうち、最小となる最小実行時間ＴＥminを特定する（ステップＳ１２０５）。ここでは、ジョブＣの基準実行時間ＴＥｃが最小実行時間ＴＥminとなる。
【００８５】
最小実行時間ＴＥminを特定すると、ジョブ実行時間算出部１１２は、最小実行時間ＴＥminとなるジョブがＰ番目のジョブ、すなわち、現在指定されているジョブであるか否かを判別する（ステップＳ１２０６）。ここでは、現在指定されているジョブがジョブＣであり、ジョブＣについての基準実行時間ＴＥｃが最小実行時間ＴＥminである（ステップＳ１２０６：Ｙｅｓ）。
【００８６】
この場合、ジョブ実行時間算出部１１２は、（Ｐ−１）番目までのジョブについての残実行時間を算出する（ステップＳ１２０７）。すなわち、現在指定されているジョブＣの基準実行時間ＴＥｃが最小実行時間ＴＥminであるので、最小実行時間ＴＥminをそのままジョブＣの実行時間Ｔｃとすることができる。
【００８７】
一方、既に実行されているジョブＡについては、ジョブＣの終了後も継続して実行される。この場合、図８（ｃ）に示すように、ジョブＣが終了するまでの２０分間は、ジョブ数「２」（ｎ＝２）で処理されるが、ジョブＣが終了した後は、ジョブＡは単独で実行されることになる（ｎ＝１）。
【００８８】
したがって、ジョブ実行時間算出部１１２は、継続して実行するジョブの基準実行時間ＴＥから、最小実行時間ＴＥminを減算した暫定残実行時間ＴＲ１を算出する（図８（ｃ））。ジョブ実行時間算出部１１２はさらに、暫定残実行時間ＴＲ１をそのときの実行ジョブ数に応じて最適化する。
【００８９】
すなわち、現在のジョブＡの基準実行時間ＴＥａは「３０分」であり、最小実行時間ＴＥminは「２０分」なので、ジョブＡについての暫定残実行時間ＴＲ１ａは「１０分」となる。ここで、暫定残実行時間ＴＲ１ａは、ジョブ数が２の場合の実行時間なので、ジョブＡを単独で実行した場合の実行時間に最適化する。これは、継続して実行するジョブについて、実行するジョブ数Ｎが減少するにしたがってＣＰＵ使用率が高くなるため、その分実行時間が短くなるためである。この時間短縮率を表す係数（以下、「時間短縮係数β」とする）を求め、暫定残実行時間ＴＲ１に乗じることで、修正した残実行時間（以下、「修正残時間ＴＲ２」とする）を求めることができる。ここで、算出対象のジョブ数をｎとすると、時間短縮係数βは、ｎ＝１の場合は数４を演算することで求められ、ｎ≧２の場合は数５を演算することで求められる。また、修正残時間ＴＲ２は数６を演算することで求められる。
【００９０】
【数４】
2006065566.tif 000005
【００９１】
【数５】
2006065566.tif 000006
【００９２】
（数６）
ＴＲ２＝ＴＲ１×β
【００９３】
ここでは、ジョブＣ終了後は、ジョブＡが単独で実行されることになる。したがって、算出対象のジョブ数ｎは１となるので、上記数４で時間短縮係数βを求めると、ジョブＡの修正残時間ＴＲ２ａは、図８（ｄ）に示すように「８分」となる。
【００９４】
ステップＳ１２０７では、（Ｐ−１）番目までのジョブについての残実行時間を求めるが、ジョブＡより以前から実行されているジョブはないので、残実行時間の算出はここで終了する。この場合、ジョブＡについての実行時間Ｔａは、最小実行時間ＴＥminにジョブＡの修正残時間ＴＲ２ａを加算した「２８分」となる。
【００９５】
Ｐ番目のジョブ（ジョブＣ）の実行時間と、（Ｐ−１）番目までのジョブ（ジョブＡ）の実行時間が求められると、ジョブ実行時間算出部１１２は、時刻換算して、各ジョブの終了予定時刻を求める（ステップＳ１２０９）。ジョブＣの実行時間Ｔｃは「２０分」であり、ジョブＡの実行時間Ｔａは「２８分」であるので、図８（ｄ）に示すように、ジョブＡの終了予定時刻は「８：２８」、ジョブＣの終了予定時刻は「８：２０」となる。ジョブ実行制御部１１３は、「ジョブスケジュールテーブル」にアクセスし、ジョブＣについての終了予定時刻を記録するとともに、ジョブＡについての終了予定時刻を更新する。
【００９６】
終了予定時刻が算出されると「実行時間算出処理」を終了し、「バッチジョブ実行処理」（図４）のフローに戻る。ここでは、続いて「実行最適化処理」が実行される（ステップＳ１３００）。
【００９７】
「実行最適化処理」（図６参照）ではまず、ジョブ実行制御部１１３が、Ｐ番目のジョブについて実行時間の指定があるか否かを判別する（ステップＳ１３０１）。現在、Ｐ番目のジョブはジョブＣであるので、ジョブＣについての実行条件を「ジョブスケジュールテーブル」（図３（ａ））から取得する。ジョブＣについては「即実行」が指定されているので、実行時間の指定はない（ステップＳ１３０１：Ｎｏ）。この場合、ジョブＣの終了時刻については考慮する必要がないので、指定時間内の終了判別（ステップＳ１３０２）をスキップする。
【００９８】
この場合、ジョブ実行制御部１１３は、ジョブＣの実行により、既に実行されているジョブ（ジョブＡ）に影響するか否かを判別する（ステップＳ１３０３）。ここで、「既実行ジョブへの影響」とは、現在処理対象としているジョブを実行することにより、既に実行しているジョブが、指定時間内に終了しなくなることをいう。ジョブＣが処理対象となっている場合、ステップＳ１２０８において、ジョブＡの終了予定時刻が「８：２８」となっており、ジョブＡは、指定された時間内に終了することになる。したがって、ジョブＣの実行がジョブＡに影響することはない（ステップＳ１３０３：Ｎｏ）。
【００９９】
ここで、上述したように、指定されたジョブ数に応じて、各ジョブの実行時間が変動するが、これに伴い、各ジョブ毎に算出される終了予定時刻も随時変動する。ジョブ実行制御部１１３は、指定されたジョブ数に応じて変動する終了予定時刻に基づいて、既実行ジョブへの影響の有無を随時判別する。
【０１００】
ステップＳ１３０３で、ジョブＣの実行がジョブＡに影響することがないと判別された場合、ジョブＣをジョブＡと並列に実行しても問題がない（指定されたスケジュール通りに実行可能）ため「実行最適化処理」を終了して、「バッチジョブ実行処理」（図４）のフローに戻る。「バッチジョブ実行処理」では、ジョブ実行部１１４によりジョブＣの実行が開始される（ステップＳ１１０４）。
【０１０１】
ジョブＣの次の実行順となるジョブ（ジョブＢ）が存在するので（ステップＳ１１０５：Ｙｅｓ）、次の実行順序を指定して（ステップＳ１１０６）、「実行時間算出処理」を実行する（ステップＳ１２００）。すなわち、次に実行するジョブＢを「Ｐ番目のジョブ」として処理をおこなう。
【０１０２】
「実行時間算出処理」（図５参照）ではまず、ジョブ実行時間算出部１１２が、現在の対象ジョブ数Ｎを「３」（ジョブＡ、ジョブＣ、ジョブＢ）とし（ステップＳ１２０１）、各ジョブの単独実行時間Δtを算出する（ステップＳ１２０２）。
【０１０３】
ジョブ数が複数なので（ステップＳ１２０３：Ｙｅｓ）、ジョブ実行時間算出部１１２は、ジョブ数が「３」（Ｎ＝３）の場合の基準実行時間ＴＥを算出する（ステップＳ１２０４）。この場合、図９（ａ）に示すように、ジョブＡの基準実行時間ＴＥａは「４５分」となり、ジョブＣの基準実行時間ＴＥｃは「３０分」となり、ジョブＢの基準実行時間ＴＥｂは「９０分」となる。
【０１０４】
ジョブ実行時間算出部１１２は、各ジョブの基準実行時間ＴＥから最小実行時間ＴＥminを特定する（ステップＳ１２０５）。ここでは、ジョブＣの基準実行時間ＴＥｃ（３０分）が最小実行時間ＴＥminに該当する。この場合、Ｐ番目のジョブであるジョブＢではないので（ステップＳ１２０６：Ｎｏ）、ジョブ実行時間算出部１１２は、Ｐ番目のジョブまでの残実行時間の算出をおこなう（ステップＳ１２０８）。
【０１０５】
ジョブＣについては、最小実行時間ＴＥminがそのままジョブＣの実行時間Ｔｃとなる。したがって、ジョブ実行時間算出部１１２は、ジョブＣ終了後のジョブＡとジョブＢについての残実行時間を算出する。ジョブ実行時間算出部１１２はまず、各ジョブの暫定残実行時間ＴＲ１を算出する。この場合、図９（ｂ）に示すように、ジョブＡの暫定残実行時間ＴＲ１ａは「１５分」となり、ジョブＢの暫定残実行時間ＴＲ１ｂは「６０分」となる。
【０１０６】
さらに、ジョブ実行時間算出部１１２は、ジョブＡとジョブＢの２つのジョブが実行される場合の修正残時間ＴＲ２を求める。すなわち、ｎ＝２であるので、上記数５で算出した時間短縮係数βを用いて修正残時間ＴＲ２を求める。この結果、図９（ｃ）に示すように、ジョブＡの修正残時間ＴＲ２ａは「１０分」となり、ジョブＢの修正残時間ＴＲ２ｂは「４０分」となる。
【０１０７】
対象ジョブが複数ある場合、ジョブ実行時間算出部１１２は、算出した修正残時間ＴＲ２のうち、最小となる最小実行時間ＴＲ２minを特定する。ここでは、ジョブＡの修正残時間ＴＲ２が最小実行時間ＴＲ２minとなるので、最小実行時間ＴＥmin（３０分）に最小実行時間ＴＲ２min（１０分）を加算した時間である「４０分」をジョブＡの実行時間Ｔａとする。
【０１０８】
ジョブＢについては、ジョブＡの終了後も継続して実行するので、ジョブ実行時間算出部１１２は、ジョブＢについての残実行時間をさらに算出する。この場合、ジョブＢの修正残時間ＴＲ２ｂから最小実行時間ＴＲ２minを減算した時間である「３０分」を暫定実行時間ＴＲ１として、ジョブＢの残実行時間を算出する。この場合、算出対象のジョブはジョブＢのみであるので、ｎ＝１の場合の時間短縮係数βを用いて修正残時間ＴＲ２ｂを新たに算出する。この場合、ジョブＢの修正残時間ＴＲ２ｂは「２１分」となる。
【０１０９】
ここでは、他のジョブがないため（ｎ＝１）、ジョブ実行時間算出部１１２は、最小実行時間ＴＥmin（３０分）に、最小実行時間ＴＲ２min（１０分）と、修正残時間ＴＲ２ｂ（２１分）を加算した時間である「６１分」をジョブＢの実行時間Ｔｂとする。
【０１１０】
各ジョブの実行時間が求められると、ジョブ実行時間算出部１１２は、時刻換算して、各ジョブの終了予定時刻を求める（ステップＳ１２０９）。すなわち、ジョブＡの実行時間Ｔａは「４０分」、ジョブＣの実行時間Ｔｃは「３０分」、ジョブＢの実行時間は「６１分」であるので、図９（ｄ）に示すように、ジョブＡの終了予定時刻は８：４０、ジョブＣの終了予定時刻は８：３０、ジョブＢの終了予定時刻は９：０１となる。ジョブ実行制御部１１３は、「ジョブスケジュールテーブル」にアクセスし、ジョブＢについての終了予定時刻を記録するとともに、ジョブＡとジョブＣについての終了予定時刻を更新する。
【０１１１】
終了予定時刻が算出されると「実行時間算出処理」を終了し、「バッチジョブ実行処理」（図４）のフローに戻る。ここでは、続いて「実行最適化処理」が実行される（ステップＳ１３００）。
【０１１２】
「実行最適化処理」（図６参照）では、ジョブ実行制御部１１３により、Ｐ番目のジョブ（ジョブＢ）に実行時間が指定されているか否かが判別される（ステップＳ１３０１）。「ジョブスケジュールテーブル」（図３（ａ））より、ジョブＢには実行時間が指定されているので（ステップＳ１３０１：Ｙｅｓ）、ジョブ実行制御部１１３は、ジョブＢが指定時間内に終了するか否かを判別する（ステップＳ１３０２）。
【０１１３】
ジョブＢの終了予定時刻は「９：０１」であるので、指定された終了時刻である９：００を超過する（ステップＳ１３０２：Ｎｏ）。この場合、ジョブ実行制御部１１３は、ジョブＢ（Ｐ番目のジョブ）の繰下実行が許可されているか否かを判別する（ステップＳ１３０４）。
【０１１４】
ここでは、「ジョブスケジュールテーブル」（図３（ａ））を参照し、当該ジョブにおける繰下実行が許可されているか否かを判別する。ジョブＢについては、繰下実行が許可されていない（ステップＳ１３０４：Ｎｏ）。すなわち、ジョブＢについては、終了時刻が指定時刻を超過してしまう場合であっても、そのまま実行を継続することが指示されている。
【０１１５】
この場合、ジョブ実行制御部１１３は、ジョブＢの実行により、既に実行しているジョブに影響するか否かを判別する（ステップＳ１３０６）。ここでは、ジョブＢの実行以前に、ジョブＡとジョブＣが実行されているので、これらのジョブの終了時刻がジョブＢの実行により指定時刻を超過してしまうか否かを判別する。
【０１１６】
「実行時間算出処理」のステップＳ１２０８において、ジョブＡの終了予定時刻が８：４０となっているので、ジョブＡは指定された時間内に終了することになる。また、ジョブＣは「即実行」が指定されているので、終了時刻を考慮する必要がない。したがって、ジョブＢを実行しても、ジョブＡとジョブＣには影響しないことになる（ステップＳ１３０６：Ｎｏ）。
【０１１７】
この場合、ジョブＡ、ジョブＣ、ジョブＢを並列に実行しても問題ないので、「実行最適化処理」を終了し、「バッチジョブ実行処理」（図４）のフローに戻る。
【０１１８】
「バッチジョブ実行処理」では、ジョブ実行部１１４がジョブＢの実行を開始する（ステップＳ１１０４）。次に実行するジョブ（ジョブＤ）が残っているので（ステップＳ１１０５：Ｎｏ）、次の実行順序となるジョブを指定し（ステップＳ１１０６）、当該ジョブ（ジョブＤ）を対象とした「実行時間算出処理」を実行する（ステップＳ１２００）。
【０１１９】
「実行時間算出処理」（図５参照）では、ジョブ数が「３」（Ｎ＝３）の場合と同様の処理により、ジョブＡ、ジョブＣ、ジョブＢ、ジョブＤが実行される場合（Ｎ＝４）の各ジョブ終了予定時刻がそれぞれ求められる（ステップＳ１２０１〜Ｓ３０９）。ここでは、図９（ｅ）に示すように、ジョブＡの終了予定時刻が「８：５５」、ジョブＣの終了予定時刻が「８：４０」、ジョブＢの終了予定時刻が「９：１５」、ジョブＤの終了予定時刻が「９：１５」となる。ジョブ実行制御部１１３は、「ジョブスケジュールテーブル」にアクセスし、各ジョブの終了予定時刻を記録・更新する。終了予定時刻が求められると、続いて「実行最適化処理」が実行される（ステップＳ１３００）。
【０１２０】
「実行最適化処理」（図６参照）では、ジョブＤは実行時間が指定されているので（ステップＳ１３０１：Ｙｅｓ）、ジョブ実行制御部１１３は、ジョブＤが指定された時間に終了するか否かを判別する（ステップＳ１３０２）。ジョブＤの終了予定時刻が９：１５であるので、指定された時刻を超過する（ステップＳ１３０２：Ｎｏ）。この場合、ジョブ実行制御部１１３は、ジョブＤに繰下実行が許可されているか否かを判別する（ステップＳ１３０４）。
【０１２１】
「ジョブスケジュールテーブル」（図３（ａ））より、ジョブＤは繰下実行が許可されているので（ステップＳ１３０４：Ｙｅｓ）、ジョブ実行制御部１１３は、ジョブＤを実行対象から除外し（ステップＳ１３０５）、繰下実行の実行スケジュールを設定する（ステップＳ１３０９）。ここでは、ジョブＤの実行スケジュールを、次回バッチ処理時（例えば、翌日もしくは翌営業日の既定時間帯）に更新し、例えば、「ジョブＤ’」とする。これにより、ジョブＤは当初の実行指定日時には実行されず、更新されたスケジュールにしたがって実行される。繰下実行のスケジュールが設定されると、「実行最適化処理」を終了し、「バッチジョブ実行処理」のフローに戻る。
【０１２２】
ここで、対象となっているジョブに繰下実行が許可されていない場合であって、当該ジョブの実行により既実行ジョブに影響する場合（ステップＳ１３０４：Ｎｏ、Ｓ１３０６：Ｙｅｓ）の処理例を説明する。この場合、ジョブ実行制御部１１３は、影響を受ける既実行ジョブ（すなわち、対象となっているジョブを実行することにより、指定時間内に終了しない既実行ジョブ）に繰下実行が許可されているか否かを判別する（ステップＳ１３０７）。
【０１２３】
該当する既実行ジョブに繰下実行が許可されている場合（ステップＳ１３０７：Ｙｅｓ）、ジョブ実行部１１４は当該ジョブの実行を中断し、現在の実行対象から除外し（ステップＳ１３０８）、当該ジョブを繰下実行する際の実行スケジュールを設定して（ステップＳ１３０９）、「実行最適化処理」を終了する。
【０１２４】
一方、該当する既実行ジョブには繰下実行が許可されていない場合（ステップＳ１３０７：Ｎｏ）、当該ジョブについては指定された時間を超過しても実行を継続することになるので、そのまま「実行最適化処理」を終了する。
【０１２５】
「実行最適化処理」が終了すると、「バッチジョブ実行処理」（図４）のステップＳ１１０４において、現在対象となっているジョブ（Ｐ番目のジョブ）の実行が開始されるが、「実行最適化処理」のステップＳ１３０５において、当該ジョブが実行対象から除外された場合は、この処理はスキップされる。ジョブＤの場合、繰下実行により実行対象から除外されているため、ステップＳ１１０４でジョブＤは実行されない。
【０１２６】
本例では、ジョブＡ、ジョブＣ、ジョブＢ、ジョブＤを対象としているので、ジョブＤ以降に処理対象となるジョブは存在しない（ステップＳ１１０５：Ｙｅｓ）。すなわち、対象となるすべてのジョブについて、実行開始もしくは繰越実行の設定がなされたので、ジョブ実行制御部１１３は、既定時間帯経過時の最適化をおこなうための「ジョブ終了処理」を実行する（ステップＳ１４００）。この「ジョブ終了処理」を図７に示すフローチャートを参照して説明する。「ジョブ終了処理」は、現在時刻が既定時間帯の終了時刻（すなわち、９：００）となった時点で開始されるものとする。
【０１２７】
処理が開始されると、ジョブ実行制御部１１３は、現時点で実行されているジョブがあるか否かを判別する（ステップＳ１４０１）。すなわち、既定時間帯を経過しても実行が継続されているジョブがあるか否かを判別する。
【０１２８】
実行中のジョブがある場合（ステップＳ１４０１：Ｙｅｓ）、ジョブ実行制御部１１３は、当該ジョブの実行が通常処理に影響するか否かを判別する（ステップＳ１４０２）。すなわち、バッチ処理装置１００は、既定時間帯の間はバッチ処理をおこなうが、その他の時間帯については通常用途に用いられるため、バッチ処理の延長が通常用途のための処理（通常処理）に影響する場合がある。したがって、ジョブ実行制御部１１３は、通常処理のためのプログラムの実行状態や、延長して実行されているバッチジョブのＣＰＵ使用率や終了予定時刻などに基づき、バッチジョブの延長実行が通常処理に影響するか否かを判別する。
【０１２９】
ここで、「通常処理への影響」とは、例えば、バッチジョブを実行しているために、通常処理のためのプログラムを実行できなかったり、正常に動作できない場合などをいうものとする。なお、既定時間帯以外の時間帯においては、バッチジョブの実行よりも通常処理が優先されるものとする。
【０１３０】
ステップＳ１４０２の判別では、例えば、「排他的な実行が要求されるプログラムが実行されたことによる割り込みが発生した場合」や、「現在実行しているバッチジョブの予定終了時刻が、予め実行開始時間がスケジュールされているプログラムの実行開始時刻以降となっている場合」、「現在実行しているバッチジョブのＣＰＵ使用率と、実行しようとするプログラムが必要とするＣＰＵ使用率の合計が１００％を超える場合」、「現在実行しているバッチジョブによるメモリの使用により、実行しようとするプログラムの実行に必要なメモリ量を確保できない場合」などに「通常処理に影響する」と判別される。
【０１３１】
バッチジョブの延長実行が通常処理に影響する場合（ステップＳ１４０２：Ｙｅｓ）、ジョブ実行部１１４は、現在実行しているジョブを中断し（ステップＳ１４０３）、当該ジョブを繰下実行対象とする（ステップＳ１４０４）。
【０１３２】
ここでは、上記「バッチジョブ実行処理」により、既定時間帯を過ぎて実行してもよいジョブのみが現在実行されていることになるが、既定時間帯以外の時間帯では通常処理が優先されるので、繰下実行の許否にかかわらず、現在実行されているバッチジョブを中断する。そして、ジョブ実行制御部１１３は、中断したバッチジョブについて、次回のバッチ処理時に実行されるよう実行スケジュールを再設定する。
【０１３３】
この場合、ジョブ実行部１１４は、実行結果格納部１６３の「実行結果テーブル」に、中断したジョブをキーとするレコードを作成し、必要な情報を記録する（ステップＳ１４０５）。ここでは、中断した時刻を「終了日時」に記録するとともに、当該ジョブに割り当てられている「繰下終了」を示す終了コードを「終了コード」に記録する。さらに、次回バッチ処理用に再設定したジョブ情報を「再設定ジョブ」に記録する。
【０１３４】
なお、バッチジョブの延長実行が通常処理に影響しない場合（ステップＳ１４０２：Ｎｏ）は、全ジョブが終了するまで上記処理を繰り返す（ステップＳ１４０６：Ｎｏ）。
【０１３５】
一方、既定時間帯経過後に実行しているバッチジョブがない場合（ステップＳ１４０１：Ｎｏ）、ジョブ実行部１１４は、既定時間帯に終了したバッチジョブについてのレコードを「実行結果テーブル」に作成し、必要な情報を記録する。
【０１３６】
すなわち、「ジョブ終了処理」では、既定時間帯を経過しても実行されているジョブについて、中断すべきか否かが判別され、中断する場合には、当該ジョブを再度実行するためのスケジュールが設定されることになる。
【０１３７】
実行対象となっていたバッチジョブのすべてが終了すると（ステップＳ１４０６：Ｙｅｓ）、「ジョブ終了処理」を終了して「バッチジョブ実行処理」（図４）のフローに戻り、バッチ処理にかかる全処理を終了する。
【０１３８】
以上説明したように、上記実施形態にかかるバッチ処理装置１００によれば、複数のジョブを並列に実行するバッチ処理において、バッチジョブを優先順に順次実行する過程において、既定の時間帯に処理が終了するか否かを随時判別する。そして、既定時間帯に終了しないことが予想されるジョブについては、繰下実行の可否を判別し、繰下実行してもよいジョブについては次回のバッチ処理時に繰り下げるよう実行スケジュールを再設定する。これにより、繰下実行することができないジョブの実行が優先され、できるだけ既定時間帯内でバッチ処理が終了できるよう最適化することができる。
【０１３９】
また、既定時間帯の経過後にバッチジョブが延長実行されている場合においては、通常処理に対する影響によってバッチジョブの中断要否を判別し、通常処理に影響がでる場合には、バッチジョブの実行を中断し、繰下実行するようバッチジョブの実行スケジュールを再設定する。これにより、通常処理に影響しない範囲で、可能な限りバッチジョブを実行させることができる。
【０１４０】
（実施形態２）
上記実施形態１では、複数のジョブを並列（パラレル）に実行する場合を例示したが、複数のジョブを直列（シリアル）に順次実行する場合にも本発明を適用することができる。例えば、印刷動作のバッチ処理をおこなう場合において、印刷を実行する装置（プリンタ）とシリアル接続されている場合、印刷データはシリアルにプリンタに送られることになる。このような場合を実施形態２として以下説明する。本実施形態では、図１０に示すように、バッチ処理装置２００と、バッチ処理装置２００に接続されたプリンタ３００によって処理をおこなう。
【０１４１】
バッチ処理装置２００は、例えば、ワークステーションやパーソナルコンピュータなどの情報処理であり、プリンタ３００に印刷ジョブを送信して、バッチ処理による印刷を実行する。プリンタ３００に送出される印刷ジョブはバッチ処理装置２００によって作成されたり、例えば、ＬＡＮなどの通信ネットワーク等を介してバッチ処理装置２００に接続されている他の情報処理装置（例えば、パーソナルコンピュータなど）で作成される。他の装置で作成された印刷ジョブは、ＬＡＮなどを介してバッチ処理装置２００に入力される。この場合、バッチ処理装置２００は、いわゆるプリントサーバとして機能することになる。
【０１４２】
このようなバッチ処理装置２００の構成を図１１を参照して説明する。図１１は、バッチ処理装置２００の構成を示すブロック図である。
【０１４３】
図示するように、バッチ処理装置２００は、制御部２１０と、通信制御部２２０と、入力制御部２３０（入力装置２３）と、出力制御部２４０（出力装置２４）と、プログラム格納部２５０と、記憶部２６０と、から構成される。これらは、実施形態１におけるバッチ処理装置１００の制御部１１０と、通信制御部１２０と、入力制御部１３０（入力装置１３）と、出力制御部１４０（出力装置１４）と、プログラム格納部１５０と、記憶部１６０のそれぞれと同様の構成である。
【０１４４】
なお、本実施形態にかかる通信制御部２２０は、少なくとも、プリンタ３００に印刷ジョブをシリアル転送するための構成を有しているものとし、所定のケーブル等を介してバッチ処理装置２００とプリンタ３００とを接続する。また、通信制御部２２０は、プリンタ３００との通信の他、他の情報処理装置とバッチ処理装置２００とを接続するための構成を有していてもよい。この場合、通信制御部２２０は、例えば、ＬＡＮやＷＡＮを介してバッチ処理装置２００と他の情報処理装置とを接続する。
【０１４５】
本実施形態では、プログラム格納部２５０に格納されている動作プログラムを実行することで、制御部２１０は、図１２に示すような構成として機能する。図示するように、制御部２１０は、ジョブ要求受信部２１１、実行時間算出部２１２、実行量算出部２１３、ジョブ実行制御部２１４、ジョブ実行部２１５、として機能する。
【０１４６】
ジョブ要求受信部２１１は、バッチ処理対象となる印刷ジョブの入力を受け付ける。印刷ジョブは、例えば、バッチ処理装置２００のユーザが入力装置２３などを操作することにより入力される他、通信制御部２２０を介して外部装置等から入力される。
【０１４７】
実行時間算出部２１２は、印刷ジョブのバッチ処理にかかる実行時間を算出する。本実施形態では、プリンタ３００への印刷ジョブの転送が完了するまでの時間や、実行した印刷ジョブについての印刷が完了するまでの時間などを算出するとともに、これらに基づいて、転送が完了する時刻（予定転送完了時刻）などを算出する。
【０１４８】
実行量算出部２１３は、印刷ジョブのバッチ処理による実行量を算出する。本実施形態では、プリンタ３００に転送可能な印刷データ量に応じた印刷量（ページ数）などを算出する。
【０１４９】
ジョブ実行制御部２１４は、各印刷ジョブ毎に設定されている実行条件や算出された転送時間などに基づいて、印刷ジョブ毎の実行可否の判定や、指定された時間内に終了できない場合の繰下実行の設定などをおこなう。
【０１５０】
ジョブ実行部２１５は、通信制御部２２０を制御し、実行対象となった印刷ジョブをプリンタ３００に送信し、プリンタ３００に印刷を実行させる。
【０１５１】
本実施の形態では、制御部２１０がプログラム格納部２５０に格納されているプログラムを実行することにより、いわゆるソフトウェア処理で上記機能を実現するが、これらの機能に特化した回路（ＡＳＩＣ）などをバッチ処理装置２００に構成することで、いわゆるハードウェア処理によって上記機能が実現されてもよい。
【０１５２】
また、本実施形態では、プログラム格納部２５０に格納されている動作プログラムを実行することにより、制御部２１０が記憶部２６０を制御する。これにより、記憶部２６０は、図１２に示すような、ジョブ格納部２６１、属性情報格納部２６２、実行結果格納部２６３、として機能する。
【０１５３】
ジョブ格納部２６１は、ジョブ要求受信部２１１が受け付けた印刷ジョブを格納するための記憶領域である。ジョブ格納部２６１に記録される情報の例を図１３に示す。
【０１５４】
図示するように、ジョブ格納部２６１には「印刷ジョブスケジュールテーブル」が作成され、ジョブ要求受信部２１１が受け付けた印刷ジョブの実行スケジュールや実行時の条件等が記録される。本実施形態では、バッチ処理装置２００に印刷ジョブが投入（入力）される際、当該印刷ジョブの実行条件が指定されて入力される。このような実行条件は、ユーザにより入力可能な他、所定のプログラムの実行により自動的に入力される。また、各印刷ジョブは、ユーザがバッチ処理装置１００に対し入力する他、例えば、通信制御部２２０を介して外部装置などから入力される。理解を容易にするため、本実施形態では、図１３に示した、「ジョブＸ」、「ジョブＹ」、「ジョブＺ」の３つの印刷ジョブを対象として以下説明する。
【０１５５】
図１３に示すように、「印刷ジョブスケジュールテーブル」には、投入された印刷ジョブ毎に、「実行優先度」、「実行指定」、「繰下実行」、「ジョブ要求時間」、「実行ジョブ種別」、「出力先」、「印刷データ」、「データ量」、「ページ数」、「転送完了予定時刻」、「印刷完了予定時刻」、などの項目が用意される。
【０１５６】
「実行優先度」には、各印刷ジョブ毎に、実行する優先度を示す情報が記録される。本実施形態では、優先度を１〜１００の数値で表し、数値が大きいほど優先度が高いことを示すものとする。
【０１５７】
「実行指定」には、各印刷ジョブ毎の実行時期を規定する情報が記録される。当該印刷ジョブを実行する時間帯が決められている場合には、「日付」と「時間」の項目に、それぞれ所望する日時情報が記録される。また、日時を指定せず、すぐに実行させたい印刷ジョブについては「即実行」が記録される。
【０１５８】
「繰下実行」には、日時指定された印刷ジョブについて、バッチ処理装置２００の処理が指定された時刻までに完了できない場合の動作を規定する情報が記録される。本実施形態では、バッチ処理装置２００の処理は印刷ジョブをプリンタ３００に転送するまでをいう。したがって、「バッチ処理装置２００の処理が指定時刻までに完了できない」とは、当該印刷ジョブのプリンタ３００への転送が指定時刻までに完了しないことをいう。
【０１５９】
本実施形態では、指定時刻までに印刷ジョブの転送が完了しないと予想される場合には、指定時刻までに転送可能な分の印刷データを転送し、転送できない分の印刷データを印刷するための印刷ジョブの実行を次回バッチ処理時に繰り下げる。このような繰下実行をしてもよい印刷ジョブには「許可」が指定される。一方、例えば、印刷結果がすぐに必要となる印刷ジョブについては、繰下実行してしまうと、要求された時期にすべてのページを得ることができない。したがって、このような印刷ジョブについては「不許可」が指定される。
【０１６０】
「ジョブ要求時間」には、当該印刷ジョブについて所望される実行開始時刻を示す情報が記録される。
【０１６１】
「実行ジョブ種別」には、当該ジョブの種別を示す情報が記録される。本実施形態では、印刷ジョブを対象としているので、例えば、「印刷」が記録される。
【０１６２】
「出力先」には、当該印刷ジョブの出力先となるプリンタが指定される。本実施形態では、バッチ処理装置２００の印刷ジョブの出力先がプリンタ３００であるので、プリンタ３００を特定するための情報や印刷ジョブをプリンタ３００に送信するために規定される情報が記録される。ここでは、例えば、プリンタ３００に割り当てられている識別情報が記録される。プリンタ３００の識別情報として、例えば、プリンタ３００に割り当てられているプリンタ名（例えば「プリンタ１」）などが記録される。
【０１６３】
「印刷データ」には、当該印刷ジョブが印刷対象としているデータ（印刷データ）を指定する情報が記録される。例えば、当該印刷データのファイル名や、格納場所を示すパスなどが記録される。印刷データは、例えば、文書作成ソフトウェア等で作成された文書ファイルなどである。
【０１６４】
「データ量」には、当該印刷ジョブが印刷対象としている印刷データのデータ量が記録される。また、「対象ページ」には、印刷対象となるページ範囲を示す情報が記録される。すなわち、印刷対象となるページ数を示す。ここで、本実施形態では、理解を容易にするため、１ページ分のデータ量を「１００ＫＢ」とする。
【０１６５】
「予定転送完了時刻」には、実行時間算出部２１２が算出する、予定転送完了時刻が記録され、「予定印刷完了時刻」には、実行時間算出部２１２が算出する予定印刷完了時刻が記録される。
【０１６６】
次に、属性情報格納部２６２について説明する。属性情報格納部２６２は、バッチ処理装置２００とプリンタ３００による印刷動作について規定されている情報が記録される。属性情報格納部２６２に記録される情報の例を図１４（ａ）および図１４（ｂ）に示す。
【０１６７】
図１４（ａ）は、属性情報格納部２６２に作成される「性能情報テーブル」の例を示す図である。この「性能情報テーブル」には、バッチ処理装置２００とプリンタ３００の協働による、バッチ処理による印刷動作の性能に関する情報が記録される。すなわち、図示するように、「性能情報テーブル」には、プリンタの性能に関する「プリンタ性能」に関する情報と、バッチ処理装置２００のスプール処理性能に関する「スプール性能」に関する情報が記録される。
【０１６８】
「プリンタ性能」に関連する情報について、図１４（ａ）を参照して説明する。図示するように、項目「プリンタ性能」には、プリンタ３００（プリンタ１）について、「転送速度」、「印刷速度」、「受信バッファ容量」、「通信情報」、などの項目が用意される。
【０１６９】
「転送速度」には、バッチ処理装置２００からプリンタ３００にデータ転送する際の転送速度が記録される。ここでは、１秒間に転送可能なデータ量により転送速度を示す。本実施形態では、理解を容易にするため転送速度を「１０ＫＢ／秒」とする。すなわち、１０秒間で１ページ分のデータが転送可能ということになる。
【０１７０】
「印刷速度」には、プリンタ３００の印刷速度が記録される。本実施形態では、１分間に印刷可能なページ数により印刷速度を示す。本実施形態では、印刷速度を「６ページ／秒」とする。
【０１７１】
「受信バッファ容量」には、プリンタ３００が有する受信バッファの容量が記録される。本実施形態では、受信バッファ容量を「５００ＫＢ」とする。受信バッファについての詳細は後述する。
【０１７２】
「通信情報」には、印刷ジョブを通信によりプリンタ３００に転送させるのに必要な情報が記録される。例えば、バッチ処理装置２００とプリンタ３００とが、シリアル接続により直接接続されている場合には、プリンタ３００と接続しているポートを示すポート名などが記録される。また、バッチ処理装置２００とプリンタ３００とが、例えば、TCP/IP（Transmission Control Protocol/Internet Protocol）に基づくＬＡＮなどを介して接続されている場合には、プリンタ３００に割り当てられているＩＰアドレスなどが記録される。
【０１７３】
次に、「性能情報テーブル」に記録される「スプール性能」に関する情報について説明する。ここで、本実施形態にかかるバッチ処理装置２００は、印刷ジョブを実行する際に、例えば、記憶部２６０を構成するＲＡＭ（Random Access Memory）やハードディスク装置などの記憶領域を用いて印刷ジョブをスプールしてからプリンタ３００に送信するものである。
【０１７４】
図１４（ａ）に示す項目「スプール性能」には、バッチ処理装置２００がスプール処理をおこなう際の能力を示す情報が記録される。図示するように、「スプール性能テーブル」には、バッチ処理装置２００が印刷ジョブをスプールする際の「最大ＣＰＵ使用率」と「スプール速度」を示す情報などが格納されている。
【０１７５】
「最大ＣＰＵ使用率」には、バッチ処理装置２００のＣＰＵがスプール処理のために使用できる使用率（ＣＰＵ使用率）の最大値が記録される。本実施形態では、バッチ処理装置２００によるスプール処理時の最大ＣＰＵ使用率を「５０％」とする。
【０１７６】
「スプール速度」には、バッチ処理装置２００が、ＣＰＵ使用率に制限がない状態（すなわち、ＣＰＵ使用率が１００％）で印刷データをスプールする際の処理速度が記録される。本実施形態では、１ページ分の印刷データのスプール処理に要するＣＰＵ使用時間によりスプール速度を示す。本実施形態では、スプール速度を「０．５秒／ページ」とする。
【０１７７】
次に実行結果格納部２６３について説明する。実行結果格納部２６３は、実行した印刷ジョブの実行結果を示す情報を格納する。実行結果格納部２６３に格納される情報の例を図１４（ｂ）に示す。
【０１７８】
図示するように、実行結果格納部２６３には「実行結果テーブル」が作成され、バッチ処理により実行された印刷ジョブ毎の実行結果を示す情報が記録される。図示するように、「実行結果テーブル」には、実行した印刷ジョブ毎に、「開始日時」、「終了日時」、「指定ページ」、「転送済ページ」、「再設定ジョブ」、などの項目が用意される。
【０１７９】
「開始日時」には、当該印刷ジョブのプリンタ３００への送信開始日時を示す情報が記録され、「終了日時」には、当該印刷ジョブの実行により印刷ジョブの転送が終了した日時を示す情報が記録される。
【０１８０】
「指定ページ」には、当該印刷ジョブが指定した印刷対象のページ範囲を示す情報が記録される。
【０１８１】
「転送済ページ」には、当該印刷ジョブが対象とする印刷データの総ページ数のうち、プリンタ３００へ転送が完了した印刷データのページ範囲を示す情報が記録される。
【０１８２】
「再設定ジョブ」には、転送が未完了の印刷データの印刷を繰下実行する場合に、繰下実行用に再設定した印刷ジョブを指定する情報が記録される。
【０１８３】
次にプリンタ３００について説明する。プリンタ３００は、印刷対象となっているデータに基づいて、用紙等に画像を形成して印刷するページプリンタなどであり、例えば、シリアル接続によりバッチ処理装置２００と接続される。プリンタ３００は、バッチ処理装置２００からの指示により印刷動作を実行するものであり、バッチ処理装置２００から転送される印刷ジョブにしたがって、順次印刷をおこなう。
【０１８４】
また、プリンタ３００は、バッチ処理装置２００から転送された印刷ジョブをバッファするための「受信バッファ」を有しているものとする。この受信バッファは、バッチ処理装置２００から受信した印刷ジョブをバッファすることで、バッチ処理装置２００を転送動作から早期に解放する。本実施形態では、受信バッファの容量を「５００ＫＢ」とする。すなわち、５ページ分のデータをバッファすることができる。本実施形態では、受信バッファにより５ページ分の転送時間が吸収されるものとし、バッファした印刷データの印刷時間により生じる転送時間の誤差については考慮しないもとのする。
【０１８５】
このような構成のバッチ処理装置２００およびプリンタ３００の動作を以下説明する。本実施形態では、バッチ処理により印刷を実行するが、実施形態１と同様、バッチ処理をおこなう時間帯（既定時間帯）が予め規定されているものとする。本実施形態における「既定時間帯」は、例えば、８：００〜９：００とする。
【０１８６】
バッチ処理装置２００がプリンタ３００に印刷ジョブを送出するまでの動作である「印刷ジョブ実行処理」を図１５に示すフローチャートを参照して説明する。この「印刷ジョブ実行処理」は、現在時刻が既定時間帯の開始時刻となったことを契機に開始されるものとする。なお、バッチ処理装置２００は、既定時間帯では印刷ジョブのバッチ処理をおこなうが、その他の時間帯では、他の用途で用いられるものとする。
【０１８７】
処理が開始されると、ジョブ実行制御部２１４が、今回のバッチ処理の対象となる印刷ジョブがいずれであるかを特定する（ステップＳ２１０１）。ここでは、ジョブ要求受信部２１１が受け付けて、ジョブ格納部２６１の「印刷ジョブスケジュールテーブル」に格納された印刷ジョブを実行対象とする。本実施形態では、理解を容易にするため、図１３に示した、「ジョブＸ」、「ジョブＹ」、「ジョブＺ」の３つのジョブを実行対象とする。
【０１８８】
実行対象となる印刷ジョブを特定すると、ジョブ実行制御部２１４は、これらの印刷ジョブの実行順序Ｐ（１〜ｐ）を決定する（ステップＳ２１０２）。実行順序の決定方法は、実施形態１と同様とする。ジョブＸ、ジョブＹ、ジョブＺの場合、「ジョブＸ」の実行順序が１となり、以下、「ジョブＺ」、「ジョブＹ」の順となる。すなわち、実行順序Ｐの範囲は１〜３となり、最終順序ｐは「３」となる。以下、この実行順序に従って処理を説明する。
【０１８９】
実行順序を決定すると、ジョブ実行制御部２１４は、実行順序Ｐが「１」となる印刷ジョブ、すなわち、１番目に実行する印刷ジョブを指定する（ステップＳ２１０３）。本実施形態では「ジョブＸ」が該当する。
【０１９０】
１番目に実行する印刷ジョブが指定されると、実行時間算出部２１２により、当該ジョブにかかるバッチ処理装置２００の処理時間を算出するための「処理時間算出処理」が実行される（ステップＳ２２００）。この「処理時間算出処理」を図１６に示すフローチャートを参照して説明する。
【０１９１】
実行時間算出部２１２はまず、バッチ処理装置２００による当該印刷ジョブのスプール処理にかかる処理時間（スプール処理時間）を算出する（ステップＳ２２０１）。ここで、本実施形態では、対象となる印刷データを、例えば、記憶部２６０を構成するハードディスクなどにスプールして処理することで、バッチ処理装置２００のＣＰＵを効率的に使用する。なお、本実施形態でのスプール処理は、１ページ目の印刷データのスプール後、印刷データの転送を開始するものとする。
【０１９２】
ここでは、「性能情報テーブル」（図１４（ａ））の「スプール性能」に記録されている情報に基づき、印刷データのページ数に応じたスプール処理時間が算出される。ここで、バッチ処理装置２００が１ページ分の印刷データをスプールするのに要する時間（以下、「単位スプール時間Δs」とする）は、スプール速度と最大ＣＰＵ使用率により数７を演算することで求められる。
【０１９３】
【数７】
2006065566.tif 000007
【０１９４】
本実施形態では、スプール速度が０．５秒／ページであり、最大ＣＰＵ使用率が５０％であるので、単位スプール時間Δsは「１秒」となる。なお、このような単位スプール時間を「性能情報テーブル」に予め記録しておいてもよい。
【０１９５】
ここで、ジョブＸの総ページ数は「１００ページ」であるので、単位スプール時間Δsをページ数で乗じることで、ジョブＸの印刷データのスプール処理に要する時間を求めることができる。この場合、ジョブＸについてのスプール処理時間は、図１９（ａ）に示すように、「１００秒」ということになる。
【０１９６】
次に、実行時間算出部２１２は、当該印刷ジョブのプリンタ３００への転送にかかる転送時間を算出する（ステップＳ２２０２）。本実施形態では、１ページ分のデータ量が１００ＫＢであり、転送速度が１０ＫＢ／秒であるので、１ページ分のデータの転送時間（単位転送時間）は「１０秒」となる。したがって、単位転送時間に総ページ数を乗じることで、全ページ分の転送時間が求められることになるが、本実施形態では、プリンタ３００の受信バッファの効果により、５ページ分の転送時間が吸収される。したがって、総ページ数から５ページ分差し引いたページ数に基づいて転送時間を算出する。
【０１９７】
ジョブＸの総ページ数は１００ページであるので、９５ページ分の転送時間を算出する。１ページ当たりの転送時間が１０秒なので、ジョブＸについての転送時間は、図１９（ａ）に示すように、「９５０秒」となる。
【０１９８】
実行時間算出部２１２が転送時間を算出すると、ジョブ実行制御部２１４は、現在対象としているＰ番目の印刷ジョブが、２番目以降の実行順序（Ｐ≧２）であるか否かを判別する（ステップＳ２２０３）。
【０１９９】
ジョブＸは、実行順序が１番目の印刷ジョブ（Ｐ＝１）であるから該当しない（ステップＳ２２０３：Ｎｏ）。この場合、当該印刷ジョブの実行開始時刻に基づいた予定転送完了時刻を算出をおこなう（ステップＳ２２０５）。ここでは、バッチ処理装置２００が、当該印刷ジョブについての処理開始から、プリンタ３００への印刷データの転送が完了するまでの時間を算出することで、予定転送完了時刻を求める。本実施形態では、スプール処理をおこなうので、各印刷ジョブに関するバッチ処理装置２００の処理の起点は、スプール処理の開始時点となる。したがって、スプール処理を開始してから、印刷データの転送が完了するまでの時間を算出する。
【０２００】
本実施形態では、１ページ目がスプールされると転送が開始される。１ページ分のスプール処理時間は１秒であるので、スプール開始の１秒後に印刷データの転送が開始されることになる。したがって、ステップＳ２２０２で求めた転送時間に＋１秒した時間が、スプールを開始してから転送が完了するまでの時間となる。印刷データの転送完了後の印刷動作はプリンタ３００の動作であるので、印刷データのバッチ処理に関してバッチ処理装置２００が行う処理は、スプール処理と転送処理となる。したがって、スプール開始から印刷データの転送が完了するまでの時間を、以下「装置処理時間」とする。
【０２０１】
ジョブＸの場合、算出した転送時間が「９５０秒」であるので、図１９（ａ）に示すように、ジョブＸについての装置処理時間は「９５１秒」となる。ここで、ジョブＸについて指定されている実行時間帯が「８：００〜９：００」となっているので、バッチ処理装置２００は、８：００にジョブＸの処理を開始することになる。したがって、ジョブＸの予定転送完了時刻は、図２０（ａ）に示すように、８：００から９５１秒後の「８：１５：５１」となる。ジョブ実行制御部２１４は、実行時間算出部２１２が算出した予定転送完了時刻を、「印刷ジョブスケジュールテーブル」（図１３）のジョブＸのレコードに記録する。
【０２０２】
予定転送完了時刻を算出すると、「処理時間算出処理」を終了し、「印刷ジョブ実行処理」（図１５）のフローに戻る。
【０２０３】
「印刷ジョブ実行処理」では、続いて、当該印刷ジョブの実行スケジュールを最適化するための「ジョブスケジュール最適化処理」が実行される（ステップＳ２３００）。「ジョブスケジュール最適化処理」を図１７に示すフローチャートを参照して説明する。
【０２０４】
ジョブ実行制御部２１４は、「印刷ジョブスケジュールテーブル」（図１３）にアクセスし、現在対象となっているＰ番目の印刷ジョブ（ジョブＸ）に、実行時間帯が指定されているか否かを判別する（ステップＳ２３０１）。
【０２０５】
ジョブＸについては、実行時間帯が指定されているので（ステップＳ２３０１：Ｙｅｓ）、ジョブ実行制御部２１４は、当該印刷ジョブ（ジョブＸ）について算出した予定転送完了時刻が指定された実行時間帯を超過するか否かを判別する（ステップＳ２３０２）。ここでは、「処理時間算出処理」（図１６）のステップＳ２２０３で算出した予定転送完了時刻に基づいて判別する。
【０２０６】
ジョブＸについて指定されている実行時間帯は「８：００〜９：００」であり、ステップＳ２２０３で算出したジョブＸの予定転送完了時刻は「８：１５：５１」であるので、ジョブＸの転送は、指定された実行時間帯を超過せずに完了することになる（ステップＳ２２０２：Ｎｏ）。
【０２０７】
この場合、ジョブ実行制御部２１４は、「ジョブスケジュール最適化処理」を終了し、「印刷ジョブ実行処理」（図１５）のフローに戻る。
【０２０８】
「印刷ジョブ実行処理」では、ジョブ実行部２１５がＰ番目の印刷ジョブの実行を開始する（ステップＳ２１０４）。すなわち、ジョブＸのスプール処理を開始する。そして、印刷データの１ページ目がスプールされると、ジョブ実行部２１５は、印刷データの転送を開始する。実行を開始すると、ジョブ実行部２１５は、開始日時を「実行結果テーブル」（図１４（ｂ））の「開始日時」に記録する。
【０２０９】
Ｐ番目の印刷ジョブの実行を開始すると、ジョブ実行制御部２１４は、次の実行順序があるか否かを判別する（ステップＳ２１０５）。本実施形態では、ｐ＝３であり、ジョブＸの実行順序は１であるので、次の実行順序が存在する（ステップＳ２１０５：Ｎｏ）。
【０２１０】
この場合、ジョブ実行制御部２１４は、現在の実行順序Ｐを＋１し（ステップＳ２１０６）、新たな実行順序Ｐに対応する印刷ジョブ（すなわち、ジョブＺ）を対象として、「処理時間算出処理」を実行する（ステップＳ２２００）。
【０２１１】
ここでは、ジョブＸの場合と同様に、実行時間算出部２１２が、ジョブＺについてのスプール処理時間と転送時間を算出する（ステップＳ２２０１、Ｓ２２０２）。
【０２１２】
次にジョブ実行制御部２１４は、現在対象としている印刷ジョブの実行順序が２番目以降（Ｐ≧２）であるか否かを判別する（ステップＳ２２０３）。ジョブＺの実行順序は「２」であるので該当する（ステップＳ２２０３：Ｙｅｓ）。
【０２１３】
この場合、ジョブ実行制御部２１４は、「印刷ジョブスケジュールテーブル」にアクセスし、（Ｐ−１）番目の印刷ジョブについて算出された予定転送完了時刻を取得する（ステップＳ２２０４）。
【０２１４】
そして、実行時間算出部２１２は、（Ｐ−１）番目の印刷ジョブの予定転送完了時刻を起点として、Ｐ番目の印刷ジョブの予定転送完了時刻を算出する（ステップＳ２２０５）。すなわち、バッチ処理装置２００からプリンタ３００への印刷データの転送はシリアルにおこなわれるので、前の印刷データについての処理が完了しなければ、バッチ処理装置２００は次の印刷データを処理することができない。したがって、１つ前の印刷ジョブ（すなわち、（Ｐ−１）番目の印刷ジョブ）についての転送完了後に次の印刷ジョブ（すなわち、Ｐ番目の印刷ジョブ）の処理を開始した場合の転送完了時刻を算出する。
【０２１５】
ここで、ジョブＺについての対象ページ数は「５０ページ」であるため、ジョブＺについてのスプール処理時間は、図１９（ｂ）に示すように、「５０秒」となる。また、４５ページ分の転送時間は「４５０秒」となる。したがって、ジョブＺについての装置処理時間は「４５１秒」となる。ここで、ジョブＸの予定転送完了時刻は「８：１５：５１」なので、ジョブＺの予定転送完了時刻は、図２０（ｂ）に示すように、８：１５：５１から４５１秒後の「８：２３：２２」となる。
【０２１６】
実行時間算出部２１２が予定転送完了時刻を算出すると、ジョブ実行制御部２１４は、算出された予定転送完了時刻を「印刷ジョブスケジュールテーブル」のジョブＺのレコードに記録する。
【０２１７】
ジョブＺについての予定転送完了時刻が算出されると、「処理時間算出処理」を終了し、「印刷ジョブ実行処理」（図１５）のフローに戻る。ここでは、続いて、ジョブＺについての「ジョブスケジュール最適化処理」が実行される（ステップＳ２３００）。
【０２１８】
「ジョブスケジュール最適化処理」（図１７参照）では、ジョブ実行制御部２１４が、Ｐ番目のジョブ（ジョブＺ）に実行時間帯の指定があるか否かを判別する（ステップＳ２３０１）。「印刷ジョブスケジュールテーブル」（図１３）より、ジョブＺについては「即実行」が指定されているので、実行時間帯の指定はない（ステップＳ２３０１：Ｎｏ）。すなわち、終了時刻を考慮する必要がないので、「ジョブスケジュール最適化処理」を終了し、「印刷ジョブ実行処理」（図１５）のフローに戻る。
【０２１９】
この場合、ジョブ実行部２１５が、Ｐ番目の印刷ジョブ（ジョブＺ）の実行を開始する。ここでは、（Ｐ−１）番目の印刷ジョブであるジョブＸの印刷データの転送完了後に、ジョブＺのスプール処理が開始されることになる。印刷ジョブの実行を開始すると、ジョブ実行部２１５は、開始日時を「実行結果テーブル」（図１４（ｂ））の「開始日時」に記録する。
【０２２０】
Ｐ番目の印刷ジョブが実行開始されると、ジョブ実行制御部２１４は、次の実行順序があるか否かを判別する（ステップＳ２１０５）。ジョブＺの実行順序Ｐは２であり、ｐ＝３であるので、次の実行順序が存在する（ステップＳ２１０５：Ｎｏ）。したがって、ジョブ実行制御部２１４は、実行順序Ｐを＋１し（ステップＳ２１０６）、Ｐ番目の印刷ジョブ（すなわち、ジョブＹ）について「処理時間算出処理」を実行する（ステップＳ２２００）。
【０２２１】
ここでは、上記ジョブＺの場合と同様、２番目以降の印刷ジョブについての処理であるので、実行時間算出部２１２は、（Ｐ−１）番目の印刷ジョブ（ジョブＺ）の予定転送完了時刻を起点として、Ｐ番目の印刷ジョブ（ジョブＹ）の予定転送完了時刻を算出する（ステップＳ２２０１、Ｓ２２０２、Ｓ２２０３：Ｙｅｓ、Ｓ２２０４、Ｓ２２０５）。
【０２２２】
ジョブＹの対象ページ数は「１０００ページ」であるので、ジョブＹのスプール処理時間は、図１９（ｃ）に示すように、「１０００秒」となる。また、９９５ページ分の転送時間は「９９５０秒」となる。したがって、ジョブＹについてのバッチ処理装置２００の装置処理時間は「９９５１秒」となる。そして、（Ｐ−１）番目のジョブＺの予定転送完了時刻が「８：２３：２２」なので、ジョブＹの予定転送完了時刻は、図２０（ｃ）に示すように、８：２３：２６から９９５１秒後の「１１：０９：１３」となる。
【０２２３】
ジョブＹについての予定転送完了時刻が算出されると、ジョブ実行制御部２１４は、算出された予定転送完了時刻を「印刷ジョブスケジュールテーブル」（図１３）のジョブＹのレコードに記録し、「処理時間算出処理」を終了する。
【０２２４】
続いて「ジョブスケジュール最適化処理」が実行される（図１５、ステップＳ２３００）。「ジョブスケジュール最適化処理」（図１７参照）では、ジョブ実行制御部２１４が、ジョブＹに実行時間帯が指定されているか否かを判別する（ステップＳ２３０１）。「印刷ジョブスケジュールテーブル」（図１３）より、ジョブＹについては、実行時間帯が指定されているので（ステップＳ２３０１：Ｙｅｓ）、ジョブ実行制御部２１４はさらに、ジョブＹの予定転送完了時刻が指定されている終了時刻を超過するか否かを判別する（ステップＳ２３０２）。
【０２２５】
ジョブＹに指定されている終了時刻は「９：００」であり、ジョブＹについて算出された予定転送完了時刻は「１１：０９：１３」であるので、ジョブＹの予定転送完了時刻は指定された終了時刻を超過する（ステップＳ２３０２：Ｙｅｓ）。
【０２２６】
この場合、ジョブ実行制御部２１４は、当該印刷ジョブについて繰下実行が許可されているか否かを判別する（ステップＳ２３０３）。「印刷ジョブスケジュールテーブル」（図１３）より、ジョブＹは繰下実行が許可されている（ステップＳ２３０３：Ｙｅｓ）。
【０２２７】
この場合、実行量算出部２１３は、指定されている終了時刻までに転送可能なページ数を算出する（ステップＳ２３０４）。ここでは、指定終了時刻が９：００であるので、８：５９：５９までに転送可能なページ数を算出することとする。この場合、（Ｐ−１）番目の印刷ジョブ（ジョブＺ）についてのバッチ処理装置２００の処理が終了した時点から８：５９：５９までの間に転送可能なページ数を算出する。
【０２２８】
ジョブＺの予定転送完了時刻が「８：２３：２２」であるので、８：２３：２２から８：５９：５９までの時間は「３６分３７秒間」となる。ここで、８：２３：２２からジョブＺのスプール処理が開始されるので、スプール開始と転送開始の時間差である１秒を除外した「３６分３６秒間（２１９６秒間）」で転送可能なページ数を算出する。本実施形態では、転送速度が１０ＫＢ／秒なので、２１９６秒間では、２１９６０ＫＢ分のデータを転送できる。１ページ分のデータ量が１００ＫＢなので、２１９６秒間に転送可能なページ数は「２１９ページ」となる。ここで、プリンタ３００の受信バッファの効果により、５ページ分の転送時間を無視できるので、５ページ分加算した「２２４ページ」分を転送できることになる。
【０２２９】
転送可能ページ数が算出されると、ジョブ実行制御部２１４は、当該印刷ジョブの再設定をおこなう（ステップＳ２３０５）。ここでは、算出された転送可能ページまでが印刷範囲となるよう現在の印刷ジョブを更新すると共に、指定時刻までに転送できないページを次回バッチ処理時に処理するための新たな印刷ジョブを設定する。
【０２３０】
ジョブＹの場合、指定時刻までに転送可能なページ数が２２４ページなので、ジョブ実行制御部２１４は、「印刷ジョブスケジュールテーブル」（図１３）のジョブＹのレコードにおける「対象ページ」を、現在の「１〜１０００」から、「１〜２２４」に更新する。ジョブ実行制御部２１４はさらに、次回バッチ処理時に繰下実行する新たな印刷ジョブ（例えば、「ジョブＹ’」とする）を設定する。ここでは、ジョブＹのレコードをコピーした上で、実行指定日を、例えば、＋１日することで、翌日のバッチ処理時を指定する。さらに、「対象ページ」を、今回転送できないページ範囲である「２２５〜１０００」とする。
【０２３１】
このように印刷ジョブの再設定がされると、「ジョブスケジュール最適化処理」を終了し、「印刷ジョブ実行処理」（図１５）のフローに戻る。
【０２３２】
なお、予定転送完了時刻が指定終了時刻を超過する場合であって、当該印刷ジョブに繰下実行が許可されていない場合（ステップＳ２３０２：Ｙｅｓ、Ｓ２３０４：Ｎｏ）は、印刷ジョブの再設定をおこなわずに、当該印刷ジョブの実行を開始する。これは、当該印刷ジョブには、指定終了時刻までに転送が完了しない場合であっても、印刷データの転送処理を継続するよう指定されているためである。
【０２３３】
「印刷ジョブ実行処理」では、ジョブ実行部２１５が、Ｐ番目の印刷ジョブの実行を開始する（ステップＳ２１０４）。ここでは、ジョブＹの実行が開始されるが、ステップＳ２３０５で再設定がされているので、指定時間内に転送可能なページ分の処理が開始される。すなわち、ジョブＹの印刷データについて、１〜２２４ページまでのスプール処理と転送処理がおこなわれる。印刷ジョブの実行を開始すると、ジョブ実行部２１５は、開始日時を「実行結果テーブル」（図１４（ｂ））の「開始日時」に記録する。なお、繰下実行のために新たに作成された印刷ジョブ（ジョブＹ’）は、次回のバッチ処理時に実行対象として処理される。
【０２３４】
ジョブＹの実行順序Ｐは３であり、最終順序ｐが３であるので、ジョブＹが最終となる（ステップＳ２１０５：Ｙｅｓ）。すなわち、実行対象となっているすべての印刷ジョブについて、バッチ処理装置２００が実行する処理がおこなわれたことになる。したがって、ジョブ実行制御部２１４は「印刷ジョブ実行処理」を終了する。
【０２３５】
実行対象の印刷ジョブがすべて実行されると、「中断判別処理」が実行される（ステップＳ２４００）。この「中断判別処理」は、既定時間帯が経過した時点で実行されているバッチ処理装置２００のバッチ処理動作を継続するか中断するかを判別するための処理である。したがって、「中断判別処理」は、既定時間帯が経過した時点（すなわち、９：００）で開始される。「中断判別処理」の詳細を図１８に示すフローチャートを参照して説明する。
【０２３６】
処理が開始されると、ジョブ実行制御部２１４は、現在、すなわち、既定時間帯の経過後に実行している印刷ジョブがあるか否かを判別する（ステップＳ２４０１）。ここでは、バッチ処理装置２００が処理を継続している印刷ジョブの有無が判別される。すなわち、バッチ処理装置２００によるスプール処理もしくはプリンタ３００への転送処理が継続されている印刷ジョブが対象となる。
【０２３７】
ここでは、終了時刻が指定されていない印刷ジョブや、繰下実行が不許可となっている印刷ジョブについての処理が、既定時間帯を経過しても実行されている可能性がある。このような印刷ジョブがある場合（ステップＳ２４０１：Ｙｅｓ）、ジョブ実行制御部２１４は、当該印刷ジョブの実行継続が、バッチ処理装置２００の通常処理に影響するか否かを判別する（ステップＳ２４０２）。
【０２３８】
上述したように、バッチ処理装置２００は、既定時間帯にはバッチ処理を実行するが、その他の時間帯については、その他の通常処理のために用いられる。ここで、既定時間帯以外の時間帯では、通常処理が優先されるものとする。したがって、ステップＳ２４０２では、既定時間帯経過後の印刷ジョブの実行が通常処理に影響するか否かを判別する。ここでの判別要件や判別例は、実施形態１の「終了処理」におけるステップＳ１４０２と同様とする。
【０２３９】
通常処理に影響する場合（ステップＳ２４０２：Ｙｅｓ）、ジョブ実行部２１５は、実行している印刷ジョブを中断する（ステップＳ２４０３）。ジョブ実行部２１５は、中断した日時を「実行結果テーブル」（図１４（ｂ））の「終了日時」に記録する。
【０２４０】
続いて、実行量算出部２１３が、中断した印刷ジョブについて、プリンタ３００に転送された印刷データのページ数を算出する（ステップＳ２４０４）。ここでは、例えば、「実行結果テーブル」（図１４（ｂ））に記録されている「開始日時」と「終了日時」に基づいてページ数を算出する。すなわち、「開始日時」にはバッチ処理装置２００がスプール処理を開始した時刻が記録されているので、この時刻の１秒後から、「終了日時」に記録されている印刷ジョブの実行が中断された時刻までの時間が、転送時間となる。そして、この転送時間と、転送速度、ページ当たりのデータ量、および、受信バッファによって吸収されるページ数に基づいて、実行が中断されるまでにプリンタ３００に転送された印刷データのページ数（転送済ページ数）を求めることができる。
【０２４１】
ジョブ実行部２１５は、実行量算出部２１３が算出した転送済ページの範囲を、「実行結果テーブル」（図１４（ｂ））の「転送済ページ」に記録するとともに、当該印刷ジョブに当初指定されていたページ範囲を「指定ページ数」に記録する。
【０２４２】
次にジョブ実行制御部２１４は、転送できなかったページについての印刷ジョブを再設定する（ステップＳ２４０５）。ここでは、転送できなかったページに印刷を、次回バッチ処理時に実行するための新たな印刷ジョブを設定する。ジョブ実行制御部２１４は、「印刷ジョブスケジュールテーブル」の当該印刷ジョブのレコードをコピーした上で、実行指定日を、例えば、＋１日することで、翌日のバッチ処理時を指定する。さらに、「対象ページ」を、今回転送できなかったページ範囲とする。
【０２４３】
なお、バッチジョブの延長実行が通常処理に影響しない場合（ステップＳ２４０２：Ｎｏ）は、全ジョブが終了するまで上記処理を繰り返す（ステップＳ２４０６：Ｎｏ）。
【０２４４】
一方、既定時間帯経過後に実行しているバッチジョブがない場合（ステップＳ２４０１：Ｎｏ）、ジョブ実行部２１５は、既定時間帯に終了した印刷ジョブについての終了日時などを「実行結果テーブル」に記録する。
【０２４５】
実行対象となっていたバッチジョブのすべてが終了すると（ステップＳ２４０６：Ｙｅｓ）、「中断判別処理」を終了して「印刷ジョブ実行処理」（図１５）のフローに戻り、バッチ処理にかかる全処理を終了する。
【０２４６】
以上説明したように、本実施形態にかかるバッチ処理装置２００によれば、複数のジョブをシリアルでバッチ処理する場合、１つ前のジョブの処理終了時刻に基づいて次のジョブの処理時間を算出しながら、ジョブスケジュールを最適化する。
【０２４７】
また、本実施形態で示した印刷処理のように、所定単位の実行結果が随時得られるような処理（ページ単位の印刷など）においては、ジョブの実行が完了しない場合に、途中までの結果物が得られるようにジョブを実行し、残りの結果物を得るための処理を再スケジュールすることができる。ここで、既定時間帯を延長したジョブの実行によって通常処理に影響する場合、ジョブを中断するとともに、中断によって得られなかった結果物を得るための処理を再設定する。
【０２４８】
したがって、予め規定されている時間帯内で可能な限り処理が完了できるようにジョブを実行することができる。また、既定時間帯を延長してジョブを実行する場合、通常処理に影響しない範囲でジョブの実行を継続することができる。
【０２４９】
上記実施形態２では、バッチ処理装置２００が前のジョブの転送完了後に次のジョブの処理を開始するようにしたが、例えば、プリンタ３００の印刷動作が終了しなければ次の印刷データを転送できない場合などには、各印刷ジョブ毎の印刷終了時刻を算出し、これに基づいて印刷ジョブの実行スケジュールを設定してもよい。この場合、実行時間算出部２１２は、「性能情報テーブル」（図１４（ｂ））に記録されているプリンタ３００の印刷速度に基づいて、印刷処理時間を算出する（図１９参照）。
【０２５０】
上記実施形態２の例では、１ページ分の転送時間が１０秒であるため、プリンタ３００では、バッチ処理装置２００による転送処理の開始から１０秒後に印刷動作が開始される。転送処理の開始は、スプール開始の１秒後なので、算出した印刷処理時間に１１秒を加算した時間が、スプール開始から印刷が終了するまでの時間となる。この時間と、スプール開始時刻とに基づいて、実行時間算出部２１２は、印刷終了時刻を求めることができる。この場合、１つ前の印刷ジョブについての印刷終了時刻を起点として、次の印刷ジョブについての処理時間を算出することになる。
【０２５１】
このような処理により、プリンタ３００の印刷動作が終了しなければバッチ処理装置２００が次の動作を実行できない場合や、バッチ処理に使える時間帯がプリンタ３００にも規定されている場合などにおいて、印刷完了時刻に基づいてジョブの実行スケジュールを最適化することができる。
【０２５２】
また、上記実施形態２にかかるバッチ処理装置２００の構成をプリンタ３００が有していてもよい。この場合、プリンタ３００に接続される情報処理装置などから印刷ジョブ（印刷データ）を受け付けて、バッチ処理対象の印刷ジョブについて、バッチ処理装置２００と同様の処理をおこなう。この場合、各印刷ジョブ毎に印刷完了時刻を算出しながら、実行スケジュールを設定して印刷をおこなう。
【０２５３】
上記各実施形態は一例であり、本発明の適用範囲はこれに限られない。すなわち、種々の応用が可能であり、あらゆる実施の形態が本発明の範囲に含まれる。
【０２５４】
例えば、上記実施形態１はパラレル（並列）処理の場合を示し、実施形態２はシリアル処理の場合を示したが、実施形態１と実施形態２を組み合わせて実施してもよい。この場合、バッチ処理装置が、投入されたジョブ毎に、パラレル処理であるかシリアル処理であるかを判別しながら、実行時間の算出等をおこなってもよい。
【０２５５】
また、実施形態１に示したパラレル処理においても、処理結果を随時取得できるような処理内容であれば、ジョブを途中まで実行して、残りの実行を再設定する処理をおこなってもよい。
【０２５６】
上記実施形態２では、シリアル処理の例としてプリンタへの印刷ジョブの転送を示したが、これに限らず、種々の処理に本発明を適用することができる。例えば、ＷＡＮなどを介して遠隔の装置にデータを転送する場合などに適用してもよい。
【０２５７】
また、上記実施形態２では、バッチ処理装置２００に接続されているプリンタが１台の場合を例示したが、複数のプリンタに対しバッチ処理をおこなってもよい。この場合、「性能情報テーブル」に各プリンタの性能情報を記録しておき、プリンタ性能に応じて負荷分散させながら、印刷ジョブが指定された時間内に転送完了できるようスケジュール設定してもよい。
【０２５８】
上記各実施形態で示した計算方法は一例であり、実行時間や実行量などは任意の計算方法で算出してもよい。例えば、実施形態２では、データ量に基づいてページ数を求めたが、印刷データにページを示すコード等を付加することにより、転送可能なページ数や転送済のページ数を算出するようにしてもよい。
【０２５９】
また、上記各実施形態では、バッチ処理を１日に１度実施する例を示したが、バッチ処理の実行頻度や実行時間帯などは任意である。また、上記各実施形態で示した、ジョブの実行条件は一例であり、任意に条件を設定してもよい。
【０２６０】
また、上記各実施形態では、実行順序に従って、１つずつジョブを実行したが、例えば、実行対象となるジョブを特定後、全ジョブについての終了時刻をまとめて算出して、今回実行するジョブと繰り下げるジョブとを決定した上で、全ジョブの実行を開始するようにしてもよい。
【０２６１】
上記実施の形態にかかるバッチ処理装置１００、２００は、専用装置によって実現可能なことはもとより、汎用のコンピュータシステムによって構成することもできる。この場合、上記各処理を実現するためのプログラムを汎用コンピュータシステムにインストールしてＯＳとの協働により実行することで、汎用コンピュータシステムを上記バッチ処理装置１００、２００として機能させることができる。
【０２６２】
このようなプログラムの提供方法は任意であり、ＣＤ−ＲＯＭなどの記録媒体に格納して提供可能なことはもとより、例えば、インターネットなどの通信媒体を介して提供してもよい。
【図面の簡単な説明】
【０２６３】
【図１】本発明の実施形態１にかかるバッチ処理装置の構成を示すブロック図である。
【図２】図１に示す制御部と記憶部の機能構成を示す機能ブロック図である。
【図３】図１、２に示す記憶部に記録される情報の例を示す図であり、（ａ）はジョブ格納部に記録される情報の例を示し、（ｂ）は属性情報格納部に記録される情報の例を示し、（ｃ）は実行結果格納部に記録される情報の例を示す。
【図４】本発明の実施形態１にかかる「バッチジョブ実行処理」を説明するためのフローチャートである。
【図５】図４に示す「バッチジョブ実行処理」で実行される「実行時間算出処理」を説明するためのフローチャートである。
【図６】図４に示す「バッチジョブ実行処理」で実行される「実行最適化処理」を説明するためのフローチャートである。
【図７】図４に示す「バッチジョブ実行処理」で実行される「ジョブ終了処理」を説明するためのフローチャートである。
【図８】本発明の実施形態１におけるジョブ実行時間の算出を説明するための図であり、（ａ）は投入ジョブ数が１のときのジョブ実行時間の例を示し、（ｂ）〜（ｄ）は、投入ジョブ数が２のときのジョブ実行時間の例を示す。
【図９】本発明の実施形態１におけるジョブ実行時間の算出を説明するための図であり、（ａ）〜（ｄ）は投入ジョブ数が３のときのジョブ実行時間の例を示し、（ｅ）は、投入ジョブ数が４のときのジョブ実行時間の例を示す。
【図１０】本発明の実施形態２にかかる構成を説明するための模式図である。
【図１１】本発明の実施形態２にかかるバッチ処理装置の構成を示すブロック図である。
【図１２】図１１に示す制御部と記憶部の機能構成を示す機能ブロック図である。
【図１３】図１２に示すジョブ格納部に記録される情報の例を示す図である。
【図１４】図１１，１２に示す記憶部に記録される情報の例を示す図であり、（ａ）は属性情報格納部に記録される情報の例を示し、（ｂ）は実行結果格納部に記録される情報の例を示す。
【図１５】本発明の実施形態２にかかる「印刷ジョブ実行処理」を説明するためのフローチャートである。
【図１６】図１５に示す「印刷ジョブ実行処理」で実行される「処理時間算出処理」を説明するためのフローチャートである。
【図１７】図１５に示す「印刷ジョブ実行処理」で実行される「ジョブスケジュール最適化処理」を説明するためのフローチャートである。
【図１８】図１５に示す「印刷ジョブ実行処理」で実行される「中断判別処理」を説明するためのフローチャートである。
【図１９】本発明の実施形態２におけるジョブ処理時間の算出を説明するための図であり、（ａ）〜（ｃ）はそれぞれ、実施形態２で例示したジョブ毎に算出される処理時間の例を示す。
【図２０】本発明の実施形態２における予定転送完了時刻の算出を説明するための図であり、（ａ）は投入ジョブ数が１のときの予定転送完了時刻の例を示し、（ｂ）は投入ジョブ数が２のときの予定転送完了時刻の例を示し、（ｃ）は投入ジョブ数が３のときの予定転送完了時刻の例を示す。
【符号の説明】
【０２６４】
１００…バッチ処理装置、１１１…ジョブ要求受信部、１１２…ジョブ実行時間算出部、１１３…ジョブ実行制御部、１１４…ジョブ実行部、１６１…ジョブ格納部、１６２…属性情報格納部、１６３…実行結果格納部、２００…バッチ処理装置、２１１…ジョブ要求受信部、２１２…実行時間算出部、２１３…実行量算出部、２１４…ジョブ実行制御部、２１５…ジョブ実行部、２６１…ジョブ格納部、２６２…属性情報格納部、２６３…実行結果格納部、３００…プリンタ
【図１】
2006065566.tif 000008
【図２】
2006065566.tif 000009
【図３】
2006065566.tif 000010
【図４】
2006065566.tif 000011
【図５】
2006065566.tif 000012
【図６】
2006065566.tif 000013
【図７】
2006065566.tif 000014
【図８】
2006065566.tif 000015
【図９】
2006065566.tif 000016
【図１０】
2006065566.tif 000017
【図１１】
2006065566.tif 000018
【図１２】
2006065566.tif 000019
【図１３】
2006065566.tif 000020
【図１４】
2006065566.tif 000021
【図１５】
2006065566.tif 000022
【図１６】
2006065566.tif 000023
【図１７】
2006065566.tif 000024
【図１８】
2006065566.tif 000025
【図１９】
2006065566.tif 000026
【図２０】
2006065566.tif 000027