(57)【要約】【課題】タスク数の上限を設けることなく、また、実行中のタスクを中断することなく、タスクを処理するコンピュータの性能と各タスクの処理の高低を考慮し、タスクを効率よく実行すること。【解決手段】複数のタスクを並行して実行可能なホストコンピュータに設けられたタスク起動制御部１０１は、新たなタスクを起動する場合に、実行待ちタスク管理部１０３で管理される、該起動するタスクに指定可能な実行値の範囲の中で、該起動するタスクに指定する実行値と、実行中タスク管理部１０２で管理される、実行中の各タスクの実行値の合計値との和が、コンピュータの性能から決定される上限実行値（性能計測部１０４により計測されるコンピュータで並行して実行可能な複数のタスクの実行値の合計値の最大値）を超えないように、該起動するタスクに指定する実行値を決定して起動する。【選択図】図１
2011164876.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクを並行して実行可能なタスク処理装置であって、
タスクの実行時の処理負荷の高低を示す実行値を指定してタスクを起動する起動制御手段と、
前記起動制御手段によりタスクに指定された実行値に応じた処理量で前記タスクを実行する実行手段と、
タスクに指定可能な実行値の範囲をタスク毎に保持管理する第１のタスク管理手段と、
実行中のタスクの実行値をタスク毎に保持管理する第２のタスク管理手段と、
当該タスク処理装置の性能から当該タスク処理装置で並行して実行可能な複数のタスクの実行値の合計値の最大値を示す上限実行値を決定する決定手段とを有し、
前記起動制御手段は、新たにタスクを起動する場合に、該起動するタスクに指定可能な実行値の範囲で、該起動するタスクに指定する実行値と前記実行中の各タスクの実行値の合計値との和が前記上限実行値を超えないように、該起動するタスクの実行値を決定することを特徴とするタスク処理装置。
【請求項２】
前記起動制御手段は、前記起動するタスクに指定可能な実行値の範囲で、前記上限実行値と前記実行中の各タスクの実行値の合計値との差を超えない最大値を、前記起動するタスクに指定する実行値に決定することを特徴とする請求項１に記載のタスク処理装置。
【請求項３】
前記起動制御手段は、前記起動するタスクに指定可能な実行値の最小値と前記実行中の各タスクの実行値の合計値との和が前記上限実行値を超える場合、前記実行中のタスクの実行値を下方に変更制御し、
該起動するタスクに指定する実行値と前記実行中の各タスクの実行値の合計値との和が前記上限実行値を超えないように、前記起動するタスクに指定する実行値を決定することを特徴とする請求項１又は２に記載のタスク処理装置。
【請求項４】
前記起動制御手段は、前記実行中のタスクの実行値を下方に変更した場合、前記起動するタスクに指定可能な実行値の最小値を、前記起動するタスクに指定する実行値に決定することを特徴とする請求項３に記載のタスク処理装置。
【請求項５】
前記起動制御手段は、起動するタスクが存在しない場合、前記実行中の各タスクの実行値の合計値が、前記上限実行値を超えない範囲で最大となるように、前記実行中のタスクの実行値を上方に変更制御することを特徴とする請求項１乃至４のいずれか１項に記載のタスク処理装置。
【請求項６】
前記起動制御手段は、前記実行中のタスクの実行値を変更する場合、前記実行中のタスクで指定可能な実行値の範囲で変更するように制御することを特徴とする請求項３乃至５のいずれか１項に記載のタスク処理装置。
【請求項７】
前記実行手段は、前記起動制御手段からタスクに対して指定された実行値に応じた数の処理を並行して実行して前記タスクを処理し、
前記起動制御手段から実行中のタスクに対して変更するように要求された実行値が、前記実行中のタスクの実行値より小さい場合、前記実行中の処理のうち、前記要求された実行値と前記実行中のタスクの実行値との差に応じた数の処理を終了し、
前記起動制御手段から実行中のタスクに対して変更するように要求された実行値が、前記実行中のタスクの実行値より大きい場合、前記要求された実行値と前記実行中のタスクの実行値との差に応じた数の処理を起動することを特徴とする請求項１乃至６のいずれか１項に記載のタスク処理装置。
【請求項８】
ネットワーク上の機器と通信する通信手段を有し、
前記タスクは、前記機器と通信する処理を含むものであり、
前記タスクに指定可能な実行値の最大値は、前記通信手段が同時に通信可能な前記機器の数に規定値を加算した値を示すことを特徴とする請求項７に記載のタスク処理装置。
【請求項９】
前記第１のタスク管理手段に、タスクに指定可能な実行値の範囲を設定する設定手段を有することを特徴とする請求項１乃至８のいずれか１項に記載のタスク処理装置。
【請求項１０】
複数のタスクを並行して実行可能なコンピュータにおけるタスク処理方法であって、
コンピュータが、第１のタスク管理手段にタスク毎に保持管理される、タスクの実行時の処理負荷の高低を示す実行値の指定可能な範囲の中で、実行値を指定してタスクを起動する起動制御ステップと、
コンピュータが、前記起動制御ステップによりタスクに指定された実行値に応じた処理量で前記タスクを実行する実行ステップと、
コンピュータが、実行中のタスクの実行値をタスク毎に保持管理する第２のタスク管理手段に、実行中のタスクの実行値を登録するステップと、
コンピュータが、当該コンピュータの性能から当該コンピュータで並行して実行可能な複数のタスクの実行値の合計値の最大値を示す上限実行値を決定する決定ステップとを有し、
前記起動制御ステップでは、新たにタスクを起動する場合に、該起動するタスクに指定可能な実行値の範囲で、該起動するタスクに指定する実行値と前記実行中の各タスクの実行値の合計値との和が前記上限実行値を超えないように、該起動するタスクの実行値を決定することを特徴とするタスク処理方法。
【請求項１１】
複数のタスクを並行して実行可能なコンピュータを、請求項１乃至９のいずれか１項に記載されたタスク処理装置の手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のタスクを並行して実行する際のタスクの制御に関する。
【背景技術】
【０００２】
従来より、実行可能なジョブの上限数を決めておき、この上限数を超えない範囲でジョブの起動を制御する制御方法があった（特許文献１参照）。
また、各ジョブに割り当てられている優先度に応じて実行するジョブを決定し、且つ、実行中の非優先実行ジョブの実行を一時停止し、優先実行が指定されているジョブを優先的に実行する制御方法があった（特許文献２参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１０−１７７４９０号公報
【特許文献２】特開平８−１６４１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、特許文献１のように、実行可能なジョブの上限数を決める方法では、ジョブ毎の処理量を考慮していない。このため、例えば、稼働しているジョブの処理量が少なく計算資源に余裕がある場合でも、ジョブ数が上限に達していると更なるジョブの起動は制限されることになり、ホストの計算資源を必ずしも有効に使用できないという問題があった。
【０００５】
また、特許文献２のように、非優先実行ジョブの実行を一時停止する方法では、例えば、ネットワーク上の機器と通信を行うジョブが、機器に要求を送信し、その要求に対する応答の受信待ち状態で停止状態になった場合、ジョブは機器からの応答は受信できない。或いは、ジョブが、機器に対して、印刷データなどの大量データを送信中に停止状態になった場合、そのデータは機器側でエラー処理されなければならない。このように、本来、停止すべきでない箇所でジョブが停止させられることにより、例外処理、エラー処理やリトライ処理が必要になったり、ネットワーク上に無駄なデータが流れたりすることになるという問題があった。
【０００６】
本発明は、上記の問題点を解決するためになされたものである。本発明の目的は、タスクを処理する装置の性能と各タスクの処理負荷の高低を考慮し、タスクを効率よく実行する仕組みを提供することである。
【課題を解決するための手段】
【０００７】
本発明は、複数のタスクを並行して実行可能なタスク処理装置であって、タスクの実行時の処理負荷の高低を示す実行値を指定してタスクを起動する起動制御手段と、前記起動制御手段によりタスクに指定された実行値に応じた処理量で前記タスクを実行する実行手段と、タスクに指定可能な実行値の範囲をタスク毎に保持管理する第１のタスク管理手段と、実行中のタスクの実行値をタスク毎に保持管理する第２のタスク管理手段と、当該タスク処理装置の性能から当該タスク処理装置で並行して実行可能な複数のタスクの実行値の合計値の最大値を示す上限実行値を決定する決定手段とを有し、前記起動制御手段は、新たにタスクを起動する場合に、該起動するタスクに指定可能な実行値の範囲で、該起動するタスクに指定する実行値と前記実行中の各タスクの実行値の合計値との和が前記上限実行値を超えないように、該起動するタスクの実行値を決定することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、タスクを処理する装置の性能と各タスクの処理負荷の高低を考慮し、タスクを効率よく実行することができる等の効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】本発明に係るタスクの実行を制御するためのシステムの構成の概念を示すブロック図である。
【図２】本発明に係るタスクの実行を制御するためのシステムが動作するホストコンピュータのハードウェア構成を示すブロック図である。
【図３】本発明に係るタスクの実行を制御するためのシステムをネットワークデバイス管理ソフトウェアに応用した場合のネットワーク上の各機器の構成図である。
【図４】実行待ちタスクテーブルの一例を示す図である。
【図５】実行中タスクテーブルの例を示す図である。
【図６】タスク起動制御部のタスク起動時の処理の流れを示すフローチャートである。
【図７】実行中のタスクとこれから起動しようとする実行待ちタスクの実行値との関係の一例を示す図である。
【図８】実行中タスクの実行値の下方調整処理の流れの一例を示すフローチャートである。
【図９】タスクを起動するクラスのＵＭＬのクラス図である。
【図１０】タスクのメイン処理の例を示すフローチャートである。
【図１１】各スレッドにより実行されるアドレス帳取得処理の一例を示すフローチャートである。
【図１２】本実施例のスレッド管理テーブルの一例を示す図である。
【図１３】タスク処理プログラム内の実行値変更処理の流れの一例を示すフローチャートである。
【図１４】実行中タスクの実行値の上方調整処理の流れの一例を示すフローチャートである。
【図１５】各タスクが処理する対象要素を示すタスク対象要素テーブルの一例を示す図である。
【図１６】タスクの作成時にタスクの最大実行値と最小実行値を個別に指定するためのユーザインタフェースの一例を示す図である。
【図１７】実施例２の実行待ちタスクテーブルの一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、本発明を実施するための形態について図面を用いて説明する。
【実施例１】
【００１１】
図１は、本発明の実施例１に係るタスクの実行を制御するためのシステムの構成の概念を示すブロック図である。
図１において、１０１はタスクの起動を制御するタスク起動制御部である。タスク起動制御部１０１内には、現在実行中のタスクの管理を行う実行中タスク管理部１０２、実行待ちのタスクの管理を行う実行待ちタスク管理部１０３、本システムが動作するホストコンピュータの性能を計測する性能計測部１０４が存在する。
【００１２】
実行中タスク管理部１０２は、実行中のタスクの現在実行値の合計を集計する現在実行値集計部１０２ａを有する。１０５、１０６、及び１０７は実行中のタスクであり、実行中タスク管理部１０２により管理されている。
【００１３】
実行待ちタスク管理部１０３は、実行待ちタスクの最大実行値と最小実行値を求める実行値取得部１０３ａを有する。１０８及び１０９は実行待ちのタスクであり、実行待ちタスク管理部１０３により管理されている。
【００１４】
性能計測部１０４は、上限実行値決定部１０４ａを有する。上限実行値決定部１０４ａは、本システムが動作するホストコンピュータの性能を計測し、実行可能なタスクの実行値の合計の最大値（以下、上限実行値と呼ぶ）を決定するものである。上限実行値決定部１０４ａは、例えば、ベンチマーク処理の実行時間を計測することにより上限実行値（後述する図７の７０３）を決定する。さらに、上限実行値決定部１０４ａは、この上限実行値にネットワークの転送速度を加味することも考えられる。なお、上限実行値決定部１０４ａは、タスク起動制御部１０１の起動時等に、上述の上限実行値を決定してホストコンピュータ３０１のＲＡＭ２０３や外部記憶装置２０９内に格納しておくものとする。
【００１５】
図２は、図１に示したタスクの実行を制御するためのシステムが動作するホストコンピュータ（即ち、タスク処理装置）のハードウェア構成を示すブロック図である。
図２に示すように、ホストコンピュータ２０１は、ＣＰＵ２０２、ＲＡＭ２０３、ＲＯＭ２０４、外部記憶装置２０９を備える。ＣＰＵ２０２は、ＲＯＭ２０４や外部記憶装置２０９にコンピュータ読み取り可能に記録された、或いはＬＡＮ２１３よりダウンロードしたソフトウェア（プログラム）を実行し、システムバス２１１に接続された各デバイスを総括的に制御する。ＲＡＭ２０３は、ＣＰＵ２０２の主メモリあるいはワークエリアなどとして機能する。
【００１６】
外部記憶装置２０９は、ハードディスク（ＨＤ）、フロッピー（登録商標）ディスク（ＦＤ）等からなる。外部記憶装置２０９は、ブートプログラム、オペレーティングシステム、認証サーバ、認証クライアントを含む各種のアプリケーション、データベースデータ、ユーザファイル等を記憶する。
【００１７】
さらに、ホストコンピュータ２０１において、２０６はキーボードコントローラ（ＫＢＤＣ）であり、キーボード（ＫＢＤ）２０５や図示しないポインティングデバイスからの入力情報をＣＰＵ２０２に送る。２０８はビデオコントローラ（ＶＣ）であり、ＣＲＴやＬＤＣ等からなる表示装置２０７の表示を制御する。２１０はディスクコントローラ（ＤＫＣ）であり、外部記憶装置２０９とのアクセスを制御する。２１２は通信コントローラ（ＣＯＭＭ Ｉ／Ｆ）であり、これを介してローカルエリアネットワーク（ＬＡＮ）２１３に接続される。
【００１８】
図３は、本発明のタスクの実行を制御するためのシステムをネットワークデバイス管理ソフトウェアに応用した場合のネットワーク上の各機器の構成図である。
図３において、３０１はネットワークデバイス管理ソフトウェアが動作するホストコンピュータ（即ち、タスク処理装置）である。３０２はネットワークデバイス管理ソフトウェアを操作するためのＷＥＢブラウザが動作するホストコンピュータである。ネットワーク管理者等のネットワークデバイス管理ソフトウェアのユーザは、３０２上で動作するＷＥＢブラウザを経由して３０１で動作するネットワークデバイス管理ソフトウェアを利用する。
【００１９】
３０３及び３０４はネットワークに接続された印刷装置である。３０５及び３０６はネットワークに接続されたデジタル複合機（ＭＦＰ）である。ネットワークデバイス管理ソフトウェアは、これら印刷装置やデジタル複合機と通信し、装置の監視や設定を行うものである。
【００２０】
なお、図１に示したタスク起動制御部１０１は、ホストコンピュータ３０１のＣＰＵ２０２が、ホストコンピュータ３０１の外部記憶装置２０９等に記録されたソフトウェア（プログラム）を実行することにより実現される機能に対応する。なお、プログラムは、ＬＡＮ２１３よりダウンロードしたものでもよい。また、タスク起動制御部１０１により起動されるタスク（図１の１０５〜１０７）は、ホストコンピュータ３０１のＣＰＵ２０２がホストコンピュータ３０１の外部記憶装置２０９等に記録されたソフトウェア（プログラム）を実行することにより起動実行される。
【００２１】
図４は、実行待ちのタスクの一覧（実行待ちタスクテーブル）の一例を示す図である。
実行待ちタスク管理部１０３は、この実行待ちタスクテーブルを例えばホストコンピュータ３０１のＲＡＭ２０３内に記憶し管理する。タスク起動制御部１０１は、実行待ちタスクテーブルから、実行予定日時を過ぎた実行待ちタスクを検索し、実行予定時刻を過ぎたタスクを起動し、そのタスクに対応するレコードを実行待ちタスクテーブルから削除する。
【００２２】
各実行待ちタスクは、タスクを一意に識別する登録ＩＤ、ユーザが識別可能なタスク名、実行予定日時、タスクの実行を司るクラスのクラス名、実行時の最小実行値及び最大実行値を属性として持つ。これら各実行待ちタスクの属性（登録ＩＤ４０１、タスク名４０２、実行予定日時４０３、クラス名４０４、最小実行値４０５、及び、最大実行値４０６）が、実行待ちタスクテーブルに格納され管理されている。
【００２３】
タスク名４０２は、ユーザがタスクを識別するために、ユーザ或いはシステムが付けた名前である。実行予定日時４０３は、そのタスクを実行する日時を示す。この時刻を経過したタスクがタスク起動制御部１０１により起動される。クラス名４０４は、タスクの実行を行うクラスのクラス名であり、クラスはタスクの実行制御を行うためのインターフェイスを実装している。実行時の最小実行値４０５及び最大実行値４０６は、そのタスクの実行時の処理負荷の高低を示す値（例えば整数値）が取りうる値の範囲を規定する。本実施例のネットワークデバイス管理ソフトウェアにおけるタスクの場合、例えば、同時に通信可能なデバイス（図３の３０３〜３０６等の各種機器）の数に、規定値を加算した値が実行値となる。即ち、本実施例の場合、「同時に通信可能なデバイスの数＋規定値」が実行値となる。
【００２４】
なお、実施例１では、各タスクの最小実行値４０５、及び、最大実行値４０６は、タスクの種類に固有の値とする。例えば、アドレス帳取得タスクは、どの実行待ちタスクや実行中タスクも、最小実行値３、最大実行値７を持つ。即ち、実行待ちタスクテーブル（図４）は、実行待ちタスクに指定可能な実行値の範囲（最小実行値４０５、及び、最大実行値４０６）を含む実行待ちタスクの情報をタスク毎に保持管理（第１のタスク管理）するものである。
【００２５】
図５は、実行中タスクの一覧（実行中タスクテーブル）の例を示す図である。
実行中タスク管理部１０２は、この実行中タスクテーブルを例えばホストコンピュータ３０１のＲＡＭ２０３内に記憶し管理する。実行中タスク管理部１０２は、この実行中タスクテーブルを用いて、ホストコンピュータ３０１のＣＰＵ２０２により実行中のタスクの現在実行値を集計したり、実行中のタスクの実行値を変更するための要求を実行中のタスクに送信したりする。タスクの実行が終了すると、そのタスクに対応するレコードは実行中タスクテーブルから削除される。
【００２６】
各実行中タスクは、実行中のタスクを一意に識別する実行ＩＤ５０１、ユーザが識別可能なタスク名５０２、各実行中タスクと通信する際に使用するポート番号５０３、タスクの開始日時５０４、及びタスクの現在実行値５０５、最小実行値５０６、最大実行値５０７を属性として持つ。なお、タスク名５０２、最小実行値５０６、最大実行値５０７は、実行待ちタスクの属性（タスク名４０２、最小実行値４０５、最大実行値４０６）がそのまま使用される。これら各実行中タスクの属性（実行ＩＤ５０１、タスク名５０２、ポート番号５０３、開始日時５０４、現在実行値５０５、最小実行値５０６、及び、最大実行値５０７）が、実行中タスクテーブルに格納され管理されている。即ち、実行中タスクテーブル（図５）は、実行中のタスクの現在の実行値を含む実行中のタスクの情報をタスク毎に保持管理（第２のタスク管理）するものである。
なお、図４、図５に示すタスクは、ほんの一例であり、本発明は、これに限定されるものではない。
【００２７】
図６は、タスク起動制御部１０１のタスク起動時の処理の流れを示すフローチャートである。なお、このフローチャートの処理は、タイマー等により定期的に呼び出される。また、このフローチャートの処理は、ホストコンピュータ３０１のＣＰＵ２０２が、ホストコンピュータ３０１の外部記憶装置２０９等にコンピュータ読み取り可能に記録されたソフトウェア（プログラム）を実行することにより実現される。なお、プログラムは、ＬＡＮ２１３よりダウンロードしたものでもよい。なお、ホストコンピュータ３０１のＣＰＵ２０２がタスク起動制御部１０１の処理を実現するプログラムを実行することにより実行される動作を、以下、タスク起動制御部１０１を主語として、「タスク起動制御部１０１が行う」等と表現する。
【００２８】
図７は、実行中のタスクとこれから起動しようとする実行待ちタスクの実行値との関係の一例を示す図である。
図７において、高さはタスクの実行値の量を示す。７０１は現在実行中のタスク群を示す。７０２は現在実行中のタスクの現在実行値の合計、７０３は性能計測部１０４が決定した上限実行値、７０４は現在実行中のタスクの最小実行値の合計を示す。７０５はこれから起動しようとしている起動待ちのタスクを示す。７０６は起動待ちタスク７０５の最小実行値、７０７は起動待ちタスク７０５の最大実行値を示す。
【００２９】
以下、図６の処理を、図７の例を参照しながら順に説明する。
タスク起動制御部１０１は、先ずステップＳ６０１において、実行待ちタスク管理部１０３の実行値取得部１０３ａを用いて実行待ちタスクテーブル（図４）から、既に実行予定日時を経過した実行待ちタスクのリストを取得する。なお、ステップＳ６０１にて、リストを実行開始日時の早い順に作成すると、実行日時の順番を優先して実行待ちタスクの起動を行ことになる。また、ステップＳ６０１にて、リストを最小実行値の小さい順に作成すると、可能な限り多くの実行待ちタスクの起動を行うことになる。
【００３０】
次に、ステップＳ６０２において、タスク起動制御部１０１は、上記Ｓ６０１で作成したリストが空（起動する実行待ちタスクが存在しない）と判定した場合、ステップＳ６１５において、実行中タスクの実行値の上方調整処理を呼び出した後、処理を終了する。なお、上記ステップＳ６１５の上方調整処理については後に詳細を記す。
【００３１】
一方、ステップＳ６０２において、上記ステップＳ６０１で作成したリストが空でない場合（起動する実行待ちタスクが存在する場合）、タスク起動制御部１０１は、ステップＳ６０３に処理を進める。
【００３２】
次に、ステップＳ６０３以降において、タスク起動制御部１０１は、上記ステップＳ６０１で作成したリストから実行待ちタスクを順に取り出し、各実行タスクに対する起動処理（Ｓ６０４〜Ｓ６１４）を行う。なお、全ての実行待ちタスクの処理が終了すると終了する。
【００３３】
まず、ステップＳ６０３において、タスク起動制御部１０１は、上記ステップＳ６０１で作成したリストから実行待ちタスクを１つ取り出す処理を実行し、ステップＳ６０４において、リストが終了でないか（実行待ちタスクを取り出せたか）否かを判定する。そして、ステップＳ６０４において、リストが終了でない（実行待ちタスクを取り出せた）と判定した場合、タスク起動制御部１０１は、ステップＳ６０５に処理を進める。ステップＳ６０５では、タスク起動制御部１０１は、実行中タスク管理部１０２の現在実行値集計部１０２ａを用いて、現在実行中のタスクの現在実行値の合計７０２を求める。
【００３４】
次に、ステップＳ６０６において、タスク起動制御部１０１は、Ａ＝（上限実行値７０３−現在実行値の合計７０２−実行待ちタスクの最小実行値７０６）を計算する。
そして、ステップＳ６０７において、上記ステップＳ６０６の計算結果Ａが０以上（Ａ≧０）と判定した場合、タスク起動制御部１０１は、ステップＳ６０８において、実行待ちタスク７０５の実行値を決定する。この実行値は、上限実行値７０３と現在実行時の合計７０２の差と、実行待ちタスク７０５の最大実行値７０７を比較して、大きくない方の値に決定する。即ち、起動するタスクに指定可能な実行値の範囲で、上限実行値７０３と実行中の各タスクの現在の実行値の合計値７０２との差を超えない最大値を、起動するタスクに指定する実行値に決定する。なお、この場合の各実行値間の関係は図７（ａ）に対応する。
【００３５】
そして、最後に、ステップＳ６１４において、タスク起動制御部１０１は、ステップＳ６０８で決定した実行値を指定して実行待ちタスク７０５を起動する。なお、タスクの起動については図９を用いて後述する。そして、タスク起動制御部１０１は、ステップＳ６０３に処理を戻し、次の実行待ちタスクに対する起動処理を行う。
【００３６】
一方、ステップＳ６０７において、上記ステップＳ６０６の計算結果Ａが負（Ａ＜０）と判定した場合、タスク起動制御部１０１は、ステップＳ６０９に処理を進める。ステップＳ６０９では、タスク起動制御部１０１は、実行中タスク管理部１０２の現在実行値集計部１０２ａを用いて、現在実行中のタスクの最小実行値の合計７０４を計算する。
【００３７】
次に、ステップＳ６１０において、タスク起動制御部１０１は、Ｂ＝（上限実行値７０３−最小実行値の合計７０４−最小実行値７０６）の値を計算する。
そして、ステップＳ６１１において、上記ステップＳ６１０の計算結果Ｂが負（Ｂ＜０）と判定した場合、実行待ちタスク７０５は起動できないため、タスク起動制御部１０１は、ステップＳ６０３に処理を戻し、次の実行待ちタスクに対する起動処理を行う。この場合の各実行値間の関係は図７（ｃ）に対応する。
【００３８】
一方、ステップＳ６１１において、上記ステップＳ６１０の計算結果Ｂが０以上（Ａ≧０）と判定した場合、タスク起動制御部１０１は、ステップＳ６１２〜Ｓ６１４に処理を進める。この場合、実行中のタスクの現在実行値を減じ、上限実行値７０３と現在実行値の合計７０２との差が実行待ちタスク７０５の最小実行値７０６と等しくすることにより、実行待ちタスク７０５を起動することが可能となる。この場合の各実行値間の関係は図７（ｂ）に対応する。
【００３９】
まず、ステップＳ６１２において、タスク起動制御部１０１は、実行中のタスクの実行値を変更して実行待ちタスク７０５の最小実行値７０６の空きを作るための下方調整処理（後述する図８）を呼び出す。なお、呼び出しの際、タスク起動制御部１０１は、実行待ちタスク７０５の起動に必要な最小実行値７０６を下方調整処理（図８）に渡す。
【００４０】
上記Ｓ６１２の下方調整処理が終了すると、タスク起動制御部１０１は、ステップＳ６１３において、実行待ちタスク７０５の実行値を、そのタスクの最小実行値７０６（実行待ちタスク７０５に指定可能な実行値の最小値）に決定する。そして、最後に、ステップＳ６１４において、タスク起動制御部１０１は、ステップＳ６１３で決定した実行値を指定して実行待ちタスク７０５を起動する。なお、タスクの起動については図９を用いて後述する。そして、タスク起動制御部１０１は、ステップＳ６０３に処理を戻し、次の実行待ちタスクに対する起動処理を行う。
【００４１】
そして、上記ステップＳ６０４において、リスト終了（もう取り出すタスクがないため実行待ちタスクを取り出せなかった）と判定した場合、タスク起動制御部１０１は、本フローチャートの処理を終了する。
【００４２】
以下、図８を参照して、図６のステップＳ６１２の実行中タスクの実行値の下方調整処理に関して説明する。
図８は、図６のステップＳ６１２の実行中タスクの実行値の下方調整処理の流れの一例を示すフローチャートである。即ち、このフローチャートの処理は、ホストコンピュータ３０１のＣＰＵ２０２が、ホストコンピュータ３０１の外部記憶装置２０９等にコンピュータ読み取り可能に記録されたソフトウェア（プログラム）を実行することにより実現される。なお、プログラムは、ＬＡＮ２１３よりダウンロードしたものでもよい。
【００４３】
この下方調整処理は、これから起動するタスクに指定可能な実行値の最小値（最小実行値７０６）と実行中の各タスクの現在の実行値の合計値７０２との和が上限実行値７０３を超える場合、実行中のタスクの現在の実行値を下方に変更制御（調整）する処理である。なお、図６のステップＳ６１２で示したように、下方調整処理の呼び出しの際、実行待ちタスク７０５の起動に必要な最小実行値７０６が下方調整処理に渡されている。
【００４４】
下方調整処理が呼び出されると、まず、ステップＳ８０１において、タスク起動制御部１０１は、上限実行値７０３から現在実行中のタスクの実行値の合計７０２と最小実行値７０６を引いた数を計算し、変数Ｘに格納する。即ち、Ｘ＝（上限実行値７０３−現在実行値の合計７０２−最小実行値７０６）を計算する。なお、現在実行中のタスクの現在実行値の合計７０２は、実行中タスク管理部１０２の現在実行値集計部１０２ａを用いて求められる。
【００４５】
なお、現在実行中のタスクの現在実行値の合計を、上記ステップＳ８０１で求めたＸだけ減ずれば、最小実行値７０６だけの空きが出来るので、実行待ちタスク７０５を起動することが出来るようになる。本下方調整処理では、現在実行値と最小実行値の差の大きい実行中タスクから順に、現在実行中のタスクの現在実行値を減ずることにより、この空きを作る。なお、差が同じ実行中タスクが複数ある場合は、実行中タスクテーブル（図５）の上位にあるものから順に現在実行値を減ずる。以下、詳細に説明する。
【００４６】
次に、タスク起動制御部１０１は、ステップＳ８０２において、実行中タスクテーブル（図５）から、タスクの実行ＩＤ，現在実行値、最小実行値からなるテーブル（以下、テーブルＴ）をホストコンピュータ３０１のＲＡＭ２０３内に作成する。
【００４７】
次に、ステップＳ８０３において、タスク起動制御部１０１は、このテーブルＴを「現在実行値−最小実行値」の大きい順に並べ替える。ここで、（現在実行値−最小実行値）が同じ値を取る場合は、実行中タスクテーブル（図５）で上位にあるものが上位になるように並べ替える。
【００４８】
次に、タスク起動制御部１０１は、ステップＳ８０４において、上記テーブルＴの最初にあるタスクのテーブル内の現在実行値を「１」減じ、ステップＳ８０５において、Ｘの値を「１」減じる。
【００４９】
そして、ステップＳ８０６において、タスク起動制御部１０１は、Ｘの値が「０」でない場合（Ｘ＞０の場合）、ステップＳ８０３〜Ｓ８０６の処理を繰り返す。
一方、ステップＳ８０６において、タスク起動制御部１０１は、Ｘの値が「０」になった場合（Ｘ＝０の場合）、実行中のタスクの実行値をテーブルＴ内の現在実行値に変更する処理を行う（Ｓ８０７〜Ｓ８１１）。以下、詳細に説明する。
【００５０】
まず、ステップＳ８０７において、タスク起動制御部１０１は、上記テーブルＴからデータを１行ずつ取り出す処理を実行する。そして、ステップＳ８０８において、タスク起動制御部１０１は、取出成功（行を取り出せた）と判定した場合、ステップＳ８０９において、取り出した実行中タスクのテーブル内の現在実行値と、実際の実行中タスクの現在実行値を比較する。
【００５１】
そして、ステップＳ８１０において、タスク起動制御部１０１は、テーブル内の現在実行値と実際の実行中タスクの現在実行値が一致する（同じ）と判定した場合は、ステップＳ８０７に処理を戻し、次の行に対する処理を続ける。
【００５２】
一方、ステップＳ８１０において、タスク起動制御部１０１は、テーブル内の現在実行値と実際の実行中タスクの現在実行値が一致しない（異なる）と判定した場合は、ステップＳ８１１に処理を進める。
【００５３】
ステップＳ８１１において、タスク起動制御部１０１は、現在実行中のタスクの実行値を、上記ステップＳ８０７で取り出したテーブルＴ内の現在実行値に変更する処理を行う。なお、各実行中のタスクは、図５の実行中タスクテーブルのポート番号５０３で示されるＴＣＰ／ＩＰのポートを受信待ち状態にして、実行値の変更要求を受け付けている。上記Ｓ８１１等の実行値の変更要求の送信側は、例えばＸＭＬで記載された変更要求を、ローカルホストのこのポートに送信する。タスクの実行処理をしているプログラムは、受信したＸＭＬの内容に従って、タスクの実行値を動的に変更する。この処理の詳細は図１３を用いて後述する。
【００５４】
上記Ｓ８１１の処理が終了すると、タスク起動制御部１０１は、ステップＳ８０７に処理を戻し、次の行に対する処理を続ける。そして、ステップＳ８０８において、全行終了（もう取り出す行がないため行を取り出せなかった）と判定した場合、タスク起動制御部１０１は、下方調整処理を終了する。
【００５５】
図９は、タスクを起動するクラスのＵＭＬのクラス図の一例を示す図である。
タスクを起動する各クラスは、共通のインターフェイスＩＥｘｅｃｕｔｅＴａｓｋ９０１を実装する。共通インターフェイス９０１は、メンバメソッドとしてＥｘｅｃｕｔｅメソッドを定義している。Ｅｘｅｃｕｔｅメソッドは、引数として、実行待ちタスクの登録ＩＤと、タスクの実行値を持つ。
【００５６】
図９に示した例では、ＩＥｘｅｃｕｔｅＴａｓｋ９０１のサブクラスとして、９０２、９０３、９０４、・・・が示されている。９０２は、デジタル複合機（ＭＦＰ）のアドレス帳取得用のタスクを起動するクラスである。また、９０３は、印刷装置の各種カウンタ（例えば、総印刷枚数、カラー印刷枚数、両面印刷枚数等）を取得するタスクを起動するクラスである。９０４は、印刷装置の設定を取得するタスクを起動する。また、図示しないが、ＩＥｘｅｃｕｔｅＴａｓｋ９０１のサブクラスとして、印刷装置を探索するタスクを起動するクラス、印刷装置の設定を配信するタスクを起動するクラス、印刷装置のログを取得するタスクを起動するクラス等も定義されている。なお、ここに示すタスクを起動するクラスは、ほんの一例であり、本発明は、これに限定されるものではない。
【００５７】
これらのクラスが、図４の実行待ちタスクテーブルのクラス名に記載される。タスクを実行する各クラスが共通インターフェイスを実装するため、図６のステップＳ６１４のタスクの起動処理では、タスク起動制御部１０１は、図４の実行待ちタスクテーブルのクラス名で示されるクラスのインスタンスを作成する。そして、Ｅｘｅｃｕｔｅメソッドを呼び出すことにより、タスクの起動を行う。ホストコンピュータ３０１のＣＰＵ２０２は、例えば、起動されたタスクの処理を実行するプログラムに適当な引数を指定してプログラムを起動することにより、指定されたタスクの実行を行う。なお、ホストコンピュータ３０１のＣＰＵ２０２がタスクの処理を実行するプログラムを実行することにより実行される動作を、以下、タスクを主語として、「タスクが行う」等と表現する。なお、実行されるタスクの例を図１０に示す。
【００５８】
図１０は、指定された実行値に従って処理を行うタスクのメイン処理の例を示すフローチャートである。このフローチャートの処理は、ホストコンピュータ３０１のＣＰＵ２０２が、ホストコンピュータ３０１の外部記憶装置２０９等にコンピュータ読み取り可能に記録されたソフトウェア（プログラム）を実行することにより実現される。なお、プログラムは、ＬＡＮ２１３よりダウンロードしたものでもよい。
【００５９】
ここでは、タスクとして、ＭＦＰからファクシミリの送信先等のアドレス帳情報を取得するアドレス帳取得タスクを例にしてい説明する。なお、アドレス帳取得タスクは、実行待ちタスクテーブル（図４）に示すように、最小実行値として「３」を、最大実行値として「７」を持つ。
【００６０】
なお、図６のステップＳ６１４で示したように、タスクの起動の際、登録タスクの登録ＩＤと、タスクの実行値とが、タスクのメイン処理に渡されている。
メイン処理において、タスクは、まずステップＳ１００１において、実行するタスクの登録タスクＩＤを取得する。
次に、タスクは、ステップＳ１００２において、ホストコンピュータ３０１の外部記憶装置２０９に格納されるタスク対象要素テーブル（後述する図１５）から、上記Ｓ１００１で取得した登録ＩＤに関連付けられた、アドレス帳を取得するＭＦＰの一覧を取得する。さらに、タスクは、上記取得した一覧から対象ＭＦＰのリスト（以下、リストＬ）をホストコンピュータ３０１のＲＡＭ２０３に作成し、次に処理するＭＦＰを示す処理ポインタ（ホストコンピュータ３０１のＲＡＭ２０３内に設けられる）を「０」にする。
【００６１】
図１５は、各タスクが処理する対象要素を示すタスク対象要素テーブルの一例を示す図である。図１５に示すように、タスク対象要素テーブルは、タスクの登録ＩＤと、そのタスクが処理する対象要素１５０２を示すデバイス名が格納されている。このタスク対象要素テーブルは、ユーザ又はコンピュータにより実行される処理により作成されて、ホストコンピュータ３０１の外部記憶装置２０９に格納されているものとする。なお、ユーザがこのタスク対象要素テーブルを作成する場合、ユーザは、ホストコンピュータ３０２からの操作によりこのタスク対象要素テーブルを作成可能である。
【００６２】
以下、図１０の説明に戻る。続いて、タスクは、ステップＳ１００３において、スレッド管理テーブル（後述する図１２）をホストコンピュータ３０１のＲＡＭ２０３に作成する。さらに、タスクは、ステップＳ１００４において、タスクの起動時に指定された実行値を取得する。
【００６３】
次に、タスクは、ステップＳ１００５において、上記Ｓ１００４で取得した「指定された実行値」から「２」を減じた「指定された実行値−２」の数のスレッドを作成する。即ち、実行値「３」が指定された場合は「１」つのスレッド、実行値「４」が指定された場合は「２」つのスレッド、また、実行値「７」が指定された場合は「５」つのスレッドを作成する。なお、「指定された実行値」から「２」を減じるのは、本タスクのメイン処理の実行により使用されたコンピュータ資源（本タスクのメイン処理の実行値）を考慮するためである。この「指定された実行値」から減じる値「２」は、上述した「規定値」に対応するものであり、「２」に限定されるものではない。
【００６４】
次に、タスクは、ステップＳ１００６において、上記Ｓ１００５で作成した各スレッドに一意なＩＤを付け、このＩＤと、ＭＦＰからアドレス帳を取得するための処理を指定して、作成したスレッドを起動し、これをスレッド管理テーブル（図１２）に登録する。なお、スレッド管理テーブルは、後述する図１２に示すように、スレッドのＩＤ１２０１と、スレッドの稼働状況１２０２とを含む。稼働状況１２０２は、「実行中」、「終了処理中」、「終了」の３つの状態を取る。
【００６５】
このように、本実施例のタスクは、タスクに指定された実行値に応じた数のスレッドを実行する（タスクに指定された実行値に応じた数の処理を並行して実行する）ものである。言い換えると、本実施例のタスクは、タスクに指定された実行値に応じた処理量でタスクを処理するものである。
【００６６】
最後に、ステップＳ１００７において、タスクは、上記Ｓ１００６で起動した全てのスレッドの終了を待ち、全てのスレッドの終了を確認して、アドレス帳の取得処理を終了する。なお、タスクは、スレッド管理テーブル（図１２）内の全てのスレッドの稼働状況１２０２が「終了」であることにより、全てのスレッドの終了を確認するものとする。また、タスクは、タスクを終了する際、実行中タスクテーブル（図５）から、そのタスクに対応するレコードは削除する。
【００６７】
なお、上記Ｓ１００６にて、タスクによりスレッドが起動されると、ホストコンピュータ３０１のＣＰＵ２０２は、例えば、指定されたスレッドの処理を実行するプログラムを起動することにより、指定されたスレッドの実行を行う。なお、ホストコンピュータ３０１のＣＰＵ２０２がスレッドの処理を実行するプログラムを実行することにより実行される動作を、以下、スレッドを主語として、「スレッドが行う」等と表現する。なお、実行されるスレッドの例を後述する図１１に示す。
【００６８】
図１１は、図１０のステップＳ１００６により指定される、各スレッドにより実行されるアドレス帳取得処理（以下、単に取得処理と記す）の一例を示すフローチャートである。このフローチャートの処理は、ホストコンピュータ３０１のＣＰＵ２０２が、ホストコンピュータ３０１の外部記憶装置２０９等にコンピュータ読み取り可能に記録されたソフトウェア（プログラム）を実行することにより実現される。なお、プログラムは、ＬＡＮ２１３よりダウンロードしたものでもよい。
【００６９】
なお、図１０のステップＳ１００６で示したように、スレッドの起動の際、タスクのメイン処理から、スレッドＩＤが取得処理に渡されている。
取得処理が開始されると、スレッドは、ステップＳ１１０１において、処理ポインタ（図１０のＳ１００２に示した処理ポインタ）をロックする。処理ポインタは、複数のスレッドから参照され更新される可能性があるため、ここでは、他のスレッドからの参照と更新がなされないように処理ポインタを一時的にロックする。
【００７０】
次に、スレッドは、ステップＳ１１０２において、ロックされた処理ポインタの値を取得し、これを変数Ｐ（ホストコンピュータ３０１のＲＡＭ２０３に設けられる）に格納し、該変数Ｐに格納された処理ポインタの値に１加える。
【００７１】
次に、ステップＳ１１０３において、スレッドは、上記Ｓ１１０３でロックした処理ポインタをアンロックする。
次に、ステップＳ１１０４において、スレッドは、変数Ｐの値と上記Ｓ１１０２にて作成されたＭＦＰのリストＬの要素数を比較する。そして、ステップＳ１１０４の比較の結果、変数Ｐの値が要素数よりも小さいと判定した場合（Ｓ１１０５で「Ｐ＜要素数」）、スレッドは、ステップＳ１１０６に処理を進める。ステップＳ１１０６では、スレッドは、ＭＦＰのリストＬから「変数Ｐの値＋１」番目のＭＦＰ情報を取り出し、該ＭＦＰ情報を用いて対象ＭＦＰからアドレス帳を取得し、該取得してアドレス帳をホストコンピュータ３０１の外部記憶装置２０９に保存する。
【００７２】
次に、スレッドは、ステップＳ１１０７において、スレッド管理テーブル（図１２）の自身のスレッドＩＤに対応する稼働状況１２０２の値を調べる（確認する）。そして、ステップＳ１１０８において、稼働状況１２０２が「実行中」と判定した場合、スレッドは、ＭＦＰのリストＬ中の次のＭＦＰに対する処理を続行するために、ステップＳ１１０１に処理を戻す。
【００７３】
そして、変数Ｐの値がリストＬの要素数と同じ或いは大きいと判定した場合（Ｓ１１０５で「Ｐ≧要素数」）、リストＬ中の全てのＭＦＰに対する処理が実行済あるいは実行中であることを意味するため、スレッドは、ステップＳ１１０９に処理を進める。
【００７４】
また、ステップＳ１１０８において、スレッド管理テーブル（図１２）内の稼働状況１２０２が「終了処理中」と判定した場合、スレッドは、ステップＳ１１０９に処理を進める。
【００７５】
ステップＳ１１０９では、スレッドは、スレッド管理テーブル（図１２）の自身のスレッドＩＤに対応する稼働状況１２０２を「終了」に変更して、処理を終了する。
図１２は、図１０のステップＳ１００３で作成されるスレッド管理テーブルの一例を示す図である。
スレッド管理テーブルには、指定した処理（例えば図１１に示した取得処理）を行う各スレッドを一意に識別するスレッドＩＤ１２０１と、そのスレッドの稼働状況１２０２を示す文字列が格納されている。
【００７６】
例えば、稼働状況１２０２が「実行中」の場合、そのスレッドは実行中であることを示す。また、稼働状況１２０２が「終了」の場合、そのスレッドは処理を終了し、スレッドが存在しないことを示す。また、稼働状況１２０２が「終了処理中」の場合、実行値の変更要求により、そのスレッドの実行終了がスレッド外から指示されたことを示す。なお、稼働状況１２０２が「終了処理中」であることを検出したスレッドは、図１１のステップＳ１１０７に示すように、直ちに処理を終了する。
【００７７】
以下、図１３を参照して、タスク処理プログラム内の実行値変更処理について説明する。
図１３は、図８のステップＳ８１１や後述する図１４のステップＳ１４１３等により、処理中のタスクの実行値の変更要求を受け付けた、タスク処理プログラム内の実行値変更処理の流れの一例を示すフローチャートである。このフローチャートの処理は、ホストコンピュータ３０１のＣＰＵ２０２が、ホストコンピュータ３０１の外部記憶装置２０９等にコンピュータ読み取り可能に記録されたソフトウェア（プログラム）を実行することにより実現される。なお、プログラムは、ＬＡＮ２１３よりダウンロードしたものでもよい。
【００７８】
タスクは、ＸＭＬで記載された変更要求を受信すると、本フローチャートに示す実行値変更処理を開始する。実行値変更処理では、タスクは、まずステップＳ１３０１において、変更要求の送信先から送信されたＸＭＬを解析して、要求された実行値を求める。
【００７９】
次に、タスクは、ステップＳ１３０２において、「要求された実行値−現在の実行値」を計算し、変数Ｄに格納する。なお、現在の実行値は、自身が管理するスレッド管理テーブル（図１２）の稼働状況１２０２が「実行中」のスレッドの数に対応する。なお、Ｓ１３０２で計算したＤの値は、実行値変更処理で増減するスレッドの数を示す。
【００８０】
そして、ステップＳ１３０３において、タスクは、Ｄの値が「０」と判定した場合（Ｓ１３０３で「Ｄ＝０」）、要求された実行値と現在の実行値の値が等しいため、何もせず実行値変更処理を終了する。
【００８１】
また、ステップＳ１３０３において、Ｄの値が正であると判定した場合（Ｓ１３０３で「Ｄ＞０」）、タスクは、スレッドの数をＤ増やす。即ち、ステップＳ１３０４において、タスクは、Ｄ個のスレッドを作成し、処理（例えば、図１１の取得処理）を指定して作成したスレッドを起動し、スレッド管理テーブル（図１２）に作成したスレッドを登録し、実行値変更処理を終了する。
【００８２】
また、ステップＳ１３０３において、Ｄの値が負であると判定した場合（Ｓ１３０３で「Ｄ＜０」）、タスクは、スレッドの数を「−Ｄ」だけ減らす。即ち、タスクは、ステップＳ１３０５において、スレッド管理テーブル（図１２）の先頭から（−Ｄ）個の稼働状況１２０２が「実行中」のスレッドの稼働状況１２０２を「終了処理中」に変更し、実行値変更処理を終了する。実行中のスレッドは、図１１のステップＳ１１０７に示したように、スレッド管理テーブル（図１２）の稼働状況１２０２を参照し、「稼働状況１２０２が「終了処理中」の場合は、処理の実行を終了することになる。
【００８３】
以下、図１４を用いて、図６のステップＳ６１５の実行中タスクの実行値の上方調整処理の流れを説明する。
図１４は、図６のステップＳ６１５の実行中タスクの実行値の上方調整処理の流れの一例を示すフローチャートである。このフローチャートの処理は、ホストコンピュータ３０１のＣＰＵ２０２が、ホストコンピュータ３０１の外部記憶装置２０９等にコンピュータ読み取り可能に記録されたソフトウェア（プログラム）を実行することにより実現される。なお、プログラムは、ＬＡＮ２１３よりダウンロードしたものでもよい。
【００８４】
この上方修正処理は、起動するタスクが存在しない場合で、実行中タスクの現在実行値の合計が、上限実行値よりも小さく、且つ、実行中タスクの現在実行値が最大実行値よりも小さい場合に、実行中タスクの実行値を増加させる処理である。即ち、起動するタスクが存在しない場合、実行中の各タスクの現在の実行値の合計値７０２が、前記上限実行値を超えない範囲で最大となるように、前記実行中のタスクの現在の実行値を上方に変更制御（調整）する処理である。
【００８５】
上方調整処理が呼び出されると、タスク起動制御部１０１は、まずステップＳ１４０１において、上限実行値７０３から現在実行中のタスクの実行値の合計７０２を引いた数を変数Ｚに格納する。即ち、Ｚ＝（上限実行値７０３−現在実行値の合計７０２）を計算する。なお、現在実行中のタスクの現在実行値の合計７０２は、実行中タスク管理部１０２の現在実行値集計部１０２ａを用いて求められる。なお、上記Ｓ８０１で算出したＺの値が「０」の場合、タスク起動制御部１０１は、実行中のタスクの現在実行値の合計が上限実行値に達しているため、上方修正処理は処理を終了する（図示せず）。
【００８６】
次に、タスク起動制御部１０１は、ステップＳ１４０２において、実行中タスクテーブル（図５）から、タスクの実行ＩＤ，現在実行値、最大実行値からなるテーブル（以下、テーブルＴＢＬ）をホストコンピュータ３０１のＲＡＭ２０３内に作成する。
【００８７】
次に、ステップＳ１４０３において、タスク起動制御部１０１は、このテーブルＴＢＬを「最大実行値−最小実行値」の大きい順に並べ替える。ここで、「最大実行値−最小実行値」が同じ値を取る場合は、実行中タスクテーブル（図５）で上位にあるものが上位になるように並べ替える。
【００８８】
続いて、ステップＳ１４０４において、タスク起動制御部１０１は、上記Ｓ１４０３で並べ替えたテーブルの先頭の行の現在実行値と最大実行値とを比較する。そして、ステップＳ１４０５において、上記先頭の行の現在実行値と最大実行値が等しいと判定した場合、全ての実行中タスクの現在実行値が最大実行値であることを意味する。この場合、タスク起動制御部１０１は、ステップＳ１４０９以降の、実行中のタスクに対して実行値の変更要求を送信する処理へと移行する。
【００８９】
一方、Ｓ１４０５において、上記先頭の行の現在実行値と最大実行値が等しくない（異なる）と判定した場合、上方修正処理は、ステップＳ１４０６においてテーブルの先頭の現在実行値の値を「１」増やし、ステップＳ１４０７にてＺの値を「１」減ずる。
【００９０】
次に、ステップＳ１４０８において、Ｚの値が「０」でないと判定した場合（Ｚ≠０の場合）、タスク起動制御部１０１は、ステップＳ１４０３〜Ｓ１４０８の処理を繰り返す。
【００９１】
一方、Ｓ１４０８において、Ｚの値が「０」と判定した場合（Ｚ＝０の場合）、タスク起動制御部１０１は、実行中タスクの現在実行値の値を、上記Ｓ１４０３〜Ｓ１４０８の処理により求めた新しい現在実行値に変更する処理を行う（Ｓ１４０９〜Ｓ１４１３）。以下、詳細に説明する。
【００９２】
まず、タスク起動制御部１０１は、ステップＳ１４０９にて、テーブルＴＢＬから１行取り出す処理を実行する。そして、ステップＳ１４１０において、タスク起動制御部１０１は、取出成功（行を取り出せた）と判定した場合、ステップＳ１３１１において、取り出した実行中タスクのテーブル内の現在実行値と、実際の実行中タスクの現在実行値を比較する。
【００９３】
そして、ステップＳ１４１２において、タスク起動制御部１０１は、テーブル内の現在実行値と実際の実行中タスクの現在実行値が一致する（同じ）と判定した場合は、ステップＳ１４０９に処理を戻し、次の行に対する処理を続ける。
【００９４】
一方、ステップＳ１４１２において、タスク起動制御部１０１は、テーブル内の現在実行値と実際の実行中タスクの現在実行値が一致しない（異なる）と判定した場合は、ステップＳ１４１３に処理を進める。
【００９５】
ステップＳ１４１３において、タスク起動制御部１０１は、現在実行中のタスクの実行値を、上記ステップＳ１４０９で取り出したテーブルＴＢＬ内の現在実行値に変更する処理を行う。なお、各実行中のタスクは、図５の実行中タスクテーブルのポート番号５０３で示されるＴＣＰ／ＩＰのポートを受信待ち状態にして、実行値の変更要求を受け付けている。上記Ｓ１４１３等の実行値の変更要求の送信側は、例えばＸＭＬで記載された変更要求を、ローカルホストのこのポートに送信する。タスクの実行処理をしているプログラムは、図１３に示したように、受信したＸＭＬの内容に従って、タスクの実行値を動的に変更する。
【００９６】
上記Ｓ１４１３の処理が終了すると、タスク起動制御部１０１は、ステップＳ１４０９に処理を戻し、次の行に対する処理を続ける。そして、ステップＳ１４１０において、全行終了（もう取り出す行がないため行を取り出せなかった）と判定した場合、タスク起動制御部１０１は、上方調整処理を終了する。
【００９７】
本実施例によれば、従来のように、タスクの数に上限を設けることなく、また、実行中のタスクを中断することなく、タスクを処理するホストコンピュータの性能と各タスクの処理負荷の高低を考慮し、タスクの実行を効率的に制御することが可能となる。
【実施例２】
【００９８】
上記実施例１では、各タスクの最大実行値及び最小実行値が、タスクの種類に固有の値である場合について説明した。例えば、アドレス帳取得タスクは、どの実行待ちタスクや実行中タスクも、最小実行値３、最大実行値７を持つ構成であった。しかし、ある特定のタスクに対しては実行時間を出来る限り短縮したい、といった場合がある。本実施例は、タスクの作成時に、タスクの最大実行値と最小実行値を個別に指定可能な構成とする。
【００９９】
図１６は、タスクの作成時にタスクの最大実行値と最小実行値を個別に指定するためのユーザインタフェース（ＵＩ）の一例を示す図である。この画面（タスク実行値指定画面）１６００は、タスク起動制御部１０１が実行するタスク作成処理により、ホストコンピュータ３０１の表示装置２０７、又は、ホストコンピュータ３０２で動作するＷＥＢブラウザ上に表示される。
【０１００】
タスク起動制御部１０１は、ユーザによる「登録」ボタン１６０５の押下を検出すると、ラジオボタン１６０１，１６０２の内容を検出する。「デフォルトを使用する」１６０１が選択されている場合、タスク起動制御部１０１は、タスクの最大実行値と最小実行値として規定値である「３」と「７」をそれぞれ指定して、実行待ちタスクテーブル（図４）に、作成したタスクを追加する。
【０１０１】
「実行値を指定する」１６０２が選択されている場合、タスク起動制御部１０１は、１６０３に入力された最大実行値、及び、１６０４に入力された最小実行値を検査する。そして、最大実行値及び最小実行値とも規定の範囲（デフォルト）内で、且つ、入力された最大実行値が最小実行値以下の場合に、タスク起動制御部１０１は、入力された最大実行値及び最小実行値を使用してタスクを作成し、実行待ちタスクテーブルに追加する。
【０１０２】
一方、検査の結果、最大実行値及び最小実行値の少なくとも１つが規定の範囲（デフォルト）外、又は、入力された最大実行値が最小実行値より小さい場合に、タスク起動制御部１０１は、ユーザに警告を出力する。例えば、タスク実行値指定画面１６００を表示している画面上に、入力値が不正である旨（エラーメッセージ）を表示して、タスクの作成処理を続ける。
【０１０３】
例えば、ユーザが、図１６のように、「実行値を指定する」１６０２を選択し、１６０３に「６」、１６０４に「７」を入力し、「登録」ボタン１６０５の押下すると、図１７の１７０２に示すようなタスクが実行待ちタスクテーブル（図４）に登録される。
【０１０４】
図１７は、実施例２の実行待ちタスクテーブルの一例を示す図である。
実施例２では、図１７の１７０１、１７０２に示すように、最小実行値、最大実行値が異なる「アドレス帳取得タスク」を作成し、実行待ちタスクテーブルに登録可能である。
本実施例によれば、ある特定のタスクに対しては、最小実行値や最大実行値を大きくして、実行時間を短縮したりすることが可能となる。
【実施例３】
【０１０５】
上記実施例１では、図１０のＳ１００５に示したように、タスクのメイン処理において起動するスレッド（並行して実行される処理）の数を、「指定された実行値−規定値（図１０の例では「２」）」と決定する例を示した。しかし、起動するスレッドの決定方法はタスクの種類毎に異なるものである。例えば、あるタスクでは、「起動するスレッドの数＝（１／２）×（指定された実行値）−（規定値）」としてもよいし、他のタスクでは、「起動するスレッドの数＝（１／３）×（指定された実行値）−（規定値）」、「起動するスレッドの数＝（２）×（指定された実行値）−（規定値）」等としてもよい。即ち、「起動するスレッドの数」を、「指定された実行値」の傾き正の一次関数値としてもよい。
【０１０６】
（他の実施例）
なお、上述した各種データの構成及びその内容はこれに限定されるものではなく、用途や目的に応じて、様々な構成や内容で構成されることは言うまでもない。
以上、一実施形態について示したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【０１０７】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【０１０８】
また、本発明は、複数の機器から構成されるシステムに適用しても、１つの機器からなる装置に適用してもよい。
本発明は上記実施例に限定されるものではなく、本発明の趣旨に基づき種々の変形（各実施例の有機的な組合せを含む）が可能であり、それらを本発明の範囲から除外するものではない。即ち、上述した各実施例及びその変形例を組み合わせた構成も全て本発明に含まれるものである。
【図１】
2011164876.tif 000003
【図２】
2011164876.tif 000004
【図３】
2011164876.tif 000005
【図４】
2011164876.tif 000006
【図５】
2011164876.tif 000007
【図６】
2011164876.tif 000008
【図７】
2011164876.tif 000009
【図８】
2011164876.tif 000010
【図９】
2011164876.tif 000011
【図１０】
2011164876.tif 000012
【図１１】
2011164876.tif 000013
【図１２】
2011164876.tif 000014
【図１３】
2011164876.tif 000015
【図１４】
2011164876.tif 000016
【図１５】
2011164876.tif 000017
【図１６】
2011164876.tif 000018
【図１７】
2011164876.tif 000019