図1を参照して、本実施形態の印刷システムの一例の構成を説明する。例示のシステムは、LAN(ローカル・エリア・ネットワーク)等のネットワーク150を介して接続されたクライアントPC(パーソナルコンピュータ)100とプリントサーバ200とを備える。プリントサーバ200には、LAN又は通信ケーブル等のデータ通信路を介してプリンタ400が接続されている。クライアントPC100は、ユーザの操作に応じて印刷指示データ(ジョブと呼ぶ)を生成し、プリントサーバ200に対して送信する。プリントサーバ200は、クライアントPC100から受信したジョブをプリンタ400に印刷させるための制御を行う。図にはクライアントPC100を1つしか示さなかったが、1つのプリントサーバ200は複数のクライアントPC100からジョブを受け付けてもよい。
より詳しくは、クライアントPC100では、例えばアプリケーション110が開いているファイルに対してユーザが印刷指示を行うと、プリンタドライバ120がジョブを生成する。ジョブは、例えば図2に示すように、用紙サイズや印刷部数などの印刷属性を表す制御データ510と、印刷対象の画像をPDL(ページ記述言語)で記述した印刷データ520とを含んでいる。この例の制御データ510は、ジョブ種別512の情報を含んでいるが、この情報については後で詳細に説明する。生成されたジョブは、ネットワークI/F(インタフェース)130によりプリントサーバ200へと送信される。
クライアントPC100から送信されたジョブは、プリントサーバ200のネットワークI/F210を介してジョブ受信部220により受信される。受信されたジョブは、HDD(ハードディスクドライブ)240に格納される。ジョブ制御部230は、受信されたジョブ群の実行順序の制御を行う。ジョブ制御部230は、基本的には、受信されたジョブ群が、FIFO(先入れ先出し)方式で受信順に実行されるように制御する。また、ジョブ制御部230は、クライアントPC100からの指示に応じて、処理待ちのジョブを削除したり、処理待ちのジョブの実行順序を変更したりする。ジョブ制御部230は、受信された各ジョブに対してそれぞれ一意なジョブID(識別情報)を付与し、ジョブIDを用いてそれらジョブを管理する。このようなジョブ制御部230の機能は、従来のプリントサーバも持っているものであり、これ以上の説明は省略する。
プリントサーバ200内の画像処理部300は、ジョブの印刷データ520に基づきプリンタ400に提供する画像データを生成するユニットである。PDLで記述された印刷データ520を解釈してラスター画像を生成するユニットは従来RIP(Raster Image Processer)として知られている。この例の画像処理部300は、このようなRIPの機能以外に、1以上の画像処理機能を備える。すなわち、画像処理部300は複数の画像処理機能を備える。RIP以外の画像処理機能には、例えば、印刷データ520をPDF形式の画像データに変換するPDF化機能、PDF形式の画像データに対して色補正等の画像処理を行うPDF画像処理機能などがある。これら複数の画像処理機能には、直列的な処理順序が規定されている。ジョブは、この順序に従って、画像処理機能から次の画像処理機能へと順に受け渡され、処理されていく。別言すれば、画像処理部300は、一連の複数の処理段階(すなわち画像処理機能)を含んでいると言える。
ここで、プリントサーバ200に入力されるジョブのすべてに、画像処理部300内のすべての画像処理機能が必要なわけではない。例えばPDF化機能によりPDF形式に変換されPDF画像処理機能により処理を受けた後RIP機能によりラスター画像に変換されるジョブもあれば、単にPDF形式の画像処理を行わずに単にRIP機能によりラスター画像に変換されるジョブもある。従来のプリントサーバではこのように必要な画像処理機能が異なるジョブを同一のキュー(待ち行列)に入れて順に処理していたので、後のジョブは前のジョブが処理されるまで待っていた。例えば、先に入力されたジョブAがPDF化機能により処理されており、その後のPDF画像処理機能とRIP機能は使用されていない状況があったとする。このような状況において、RIP機能のみを必要とするジョブBが入力された場合、従来のサーバではジョブBの処理順序はジョブAの後になり、ジョブBのRIP処理はジョブAのRIP処理が終了するまで待たされる。これに対し、この例の画像処理部300は、各画像処理機能を並列動作可能とし、ジョブを必要な画像処理機能に応じて各画像処理機能に振り分けることで、空いている画像処理機能が有効利用されるようにする。画像処理部300の更なる詳細については後で説明する。
プロセス解析部250は、そのようなジョブの振り分けのための解析処理を行う。すなわちプロセス解析部250は、ジョブの制御データ510中のジョブ種別512を読み取り、そのジョブ種別512からそのジョブの処理を開始すべき処理段階(画像処理機能)を判定する。プロセス解析部250は、例えば、ジョブ種別ごとに、そのジョブ種別のジョブの処理を開始すべき処理段階(「開始段階」)を登録した判定情報(図3参照)を持っており、この判定情報を用いて上述の判定を行う。図3の判定情報を用いる場合、受信されたジョブのジョブ種別が「3」であれば、そのジョブの開始段階は「RIP」と判定される。判定された開始段階の情報は、当該ジョブに対応づけて画像処理部300に渡される。
なお、ジョブ中のジョブ種別512の情報は、クライアントPC100のプリンタドライバ120が作成する。プリンタドライバ120は、例えば、ユーザから印刷モードの選択を受け付け、その選択に応じてジョブ種別を判定すればよい。例えば、PDF画像処理を行う(その後RIP処理)モードと、PDF画像処理は行わずにRIP処理を行うモードとがある場合、前者は図3のジョブ種別「1」に対応し、後者はジョブ種別「3」に対応する。また、プリンタドライバ120は、ジョブ種別の判定の際に、印刷対象のデータのデータ形式を考慮してもよい。例えば、ユーザがPDFファイルの印刷を指示し、印刷モードとしてPDF画像処理を行うモードを選択した場合、ジョブ種別は「2」となる。また、ユーザがRIP処理済みのラスター画像の印刷を指示した場合、ジョブ種別は「4」となる。
なお、図3ではジョブ種別を整数で表したが、これは便宜的な例に過ぎない。個々のジョブ種別に対して、ユーザの観点から識別名称が付けられていてももちろんよい。また「ジョブ種別」という概念自体も便宜的なものに過ぎない。ジョブの開始段階に対応づけられた情報であれば、どのようなものも「ジョブ種別」の代わりに用いることができる。
再び図1に戻り、画像データ送信部260は、画像処理部300から出力される印刷用の画像データを、ネットワークI/F270を介してプリンタ400に送信する。プリンタ400は、その画像データを用紙に印刷する。
上述のような画像処理部300では、ジョブ種別に応じた振り分けを行うと、処理効率はよいが、ジョブの実行順序がジョブの入力順と変わってしまう。一方、ユーザ側のニーズとして、入力順にジョブを処理させたい場合もあり得る。そこで、画像処理部300にいくつかの動作モードを設け、ユーザが動作モードを選択できるようにしてもよい。動作モードとしては、処理効率を優先するモード(「効率優先モード」と呼ぶ)、ジョブを入力順に実行するモード(「順序優先モード」と呼ぶ)などがある。個々の動作モードの詳細な例については後で説明する。
モード管理部280は、このような画像処理部300の動作モードを管理する。ユーザは、入力装置290を操作して、動作モードを選択する。入力装置290は、キーボード又は液晶タッチパネルなどである。ユーザは、動作モードの選択画面を呼び出し、その画面上に表示されたモードの中から、所望のものを選択する。パスワード保護等の保護をかけることで、システム管理者などのような限られたユーザだけしか動作モードの選択をできないようにしてもよい。なお、ネットワーク150上のPCからプリントサーバ200にアクセスして動作モードが選択できるようにしてももちろんよい。
次に、図4を参照して、画像処理部300の内部構成の一例を説明する。この例の画像処理部300は、画像処理機能を実現するモジュールとして、PDF化モジュール310A、PDF画像処理モジュール310B、RIPモジュール310Cを備える。以下では、それら3つのモジュールに共通した事柄を説明する場合には、3つのモジュール310A〜Cを「モジュール310」と総称する。これら3つのモジュール310には順序が規定されている。すなわち、PDF化モジュール310Aで処理されたジョブは、次にPDF画像処理モジュール310Bにより処理され、その後RIPモジュール310Cにより処理された後、画像データ送信部260に渡される。
PDF化モジュール310Aは、ジョブの印刷データ520をPDF形式の画像データファイルに変換する。PDF画像処理モジュール310Bは、PDF形式の画像データに対し、色補正等の所定の画像処理を施す。RIPモジュール310Cは、印刷データをプリンタ400にて取扱可能なラスター形式等の印刷画像データに変換する。例えば、RIPモジュール310Cは、PDL形式の印刷データを印刷画像データに変換する機能と、PDF形式の画像データを印刷画像データに変換する機能とを備えていてもよい。各モジュール310が行う処理は従来公知の処理であり、各モジュール310としては従来公知のモジュールを利用してもよい。
また、画像処理部300は、各モジュール310A,310B及び310Cに対応して、処理待ちキュー320A,320B及び320Cを備える。例えば、処理待ちキュー320Aには、対応するモジュール310Aによる処理を待っているジョブが保持される。また、画像処理部300は、画像データ送信部260の処理を待つジョブを保持する処理待ちキュー320Dを備える。この処理待ちキュー320Dには、RIP処理後のジョブが保持される。共通の事柄を説明する場合、それら処理待ちキュー320A〜Dを「処理待ちキュー320」と総称する。処理待ちキュー320はFIFO形式の待ち行列であり、新たに投入されたジョブは処理待ちキュー320の末尾に追加される。
各処理待ちキュー320A〜Dの先頭には「処理中」キュー325A〜Dが設けられる。共通の事柄を説明する場合、処理中キュー325A〜Dを「処理中キュー325」と総称する。処理中キュー325には、対応するモジュール310で現に処理中のジョブが入る。モジュール310がジョブの処理を完了すると、そのジョブが処理中キュー325から取り出され、次の処理段階へと送られる。
この例では、各処理段階の処理待ちキュー320は、それぞれ有効化又は無効化することができる。画像処理部300は、各処理段階の処理待ちキュー320が有効か無効かを示すキュー管理情報340(図4参照)を備える。図4には、処理待ちキュー320A〜Dのすべてが有効に設定されているキュー管理情報340が示されるが、これは一例に過ぎない。キュー管理情報340は、例えばモード管理部280により作成及び更新される。
有効な処理待ちキュー320には、外部(すなわち直前の処理段階又は投入制御部330)からジョブを投入することができる。したがって、ある処理段階の処理待ちキュー320が有効である場合、その直前の処理段階から送られてきたジョブはいったん処理待ちキュー320に入り、順番が来ると処理中キュー325に送られて、対応するモジュール310により処理されることになる。これに対し、無効な処理待ちキュー320は、外部からのジョブを受け入れない。したがって、ある処理段階の処理待ちキュー320が無効な場合、その処理段階は、処理中キュー325が空いて初めて、直前の段階からジョブを受け入れることになる。
このようなジョブ実行制御のために、処理段階ごとに実行制御部315A〜C(実行制御部315と総称)を備える。各実行制御部315A〜Cは、それぞれ図5〜図7に例示する手順を実行する。
まず実行制御部315は、図5に例示するように、対応する処理中キュー325が空か否かを調べる(S11)。処理中キュー325が空であれば、次に処理すべきジョブを処理中キュー325に受け入れるために、実行制御部315はステップS12〜S16の処理を行う。次のジョブは、処理待ちキュー320が有効であればその処理待ちキュー320から受け入れ、無効であれば直前の処理段階から受け入れる。このために、実行制御部315は、対応する処理待ちキュー320が有効か無効かをキュー管理情報340に基づき判定する(S12)。無効であれば、所定時間の経過後に再びステップS11を繰り返す。処理中キュー325に直前の処理段階からジョブが投入されるまで、ステップS11及びS12が繰り返される。
ステップS12で、対応する処理待ちキュー320が有効と判定した場合、実行制御部315は、その処理待ちキュー320内にジョブがあるか否かを調べ(S13)、無ければ所定時間間隔の後に再度ステップS13の処理を繰り返す。処理待ちキュー320にジョブがあれば、そのうちの先頭のジョブを取り出す(S14)。そして、当該実行制御部315の処理段階が、取り出したジョブの開始段階以降の段階であるか否かを判定する(S15)。ここで、取り出したジョブの開始段階は、当該ジョブのジョブ種別512(図2参照)から求められる。例えば、プロセス解析部250がジョブの開始段階を判定した際に、その開始段階の値をジョブの属性として記録してもよい。
ステップS15の判定の結果、当該実行制御部315の処理段階が、取り出したジョブの開始段階以降の段階であれば、実行制御部315は、そのジョブを対応する処理中キュー325に入れ(S16)、ステップS11に戻る。このときは、処理中キュー325にはジョブがあるので、ステップS11の判定の結果、実行制御部315は図6に示す処理手順に進む。
すなわち、図6の手順では、実行制御部315は処理中キュー325内のジョブの処理を、対応するモジュール310に依頼し(S21)、そのモジュール310から処理完了を報せる通知が到来するのを待つ(S22)。そして、処理完了通知を受け取ると、実行制御部315は、対応する処理中キュー325にあるそのジョブを次の処理段階に送るための処理(S23:詳細は図7を参照して後述)を実行する。ジョブを次の処理段階に送ると、実行制御部315は処理中キュー325からそのジョブを削除し(S24)、ステップS11(図5参照)に戻る。
一方、ステップS15の判定の結果、当該実行制御部315の処理段階が、取り出したジョブの開始段階より前の段階であれば、そのジョブにはこの処理段階の処理が必要ない。したがって、この場合、実行制御部315は、対応するモジュール310にそのジョブの処理を依頼することはせずに、そのジョブを次の処理段階に送るための処理(S17)を実行し、その後ステップS13に戻って処理待ちキュー320内の次のジョブを調べる。
ステップS17及びS23で行われるジョブ送り処理の詳細について、図7を参照して説明する。図7の手順では、実行制御部315は、次の処理段階の処理待ちキュー320が有効か否かをキュー管理情報340に基づき判定し(S31)、有効であれば、送り対象のジョブを、次段階の処理待ちキュー320に投入する(S32)。一方、次段階の処理待ちキュー320が無効であれば、そのキュー320にジョブを投入することができないので、実行制御部315は当該次段階の処理中キュー325が空か否かを判定する(S33)。この判定の結果が否定、すなわち次段階の処理中キュー325内にジョブがある場合は、そのジョブがまだ処理中なので、実行制御部315はそのジョブの処理が終わってその処理待ちキュー325が空になるまで待つ(S33の繰り返し)。ステップS33の判定の結果、次段階の処理待ちキュー320が空であることがわかれば、実行制御部315は送り対象のジョブを当該次段階の処理中キュー325に投入する(S34)。このようにして次段階の処理中キュー325にジョブが投入されると、次段階の実行制御部315がステップS11でそれを検知し、既述の図6の手順によりそのジョブの処理を行うことになる。
図5〜図7に示したジョブ実行制御の処理手順はあくまで一例に過ぎない。同様の制御を実現できる手順であれば、どのような手順を用いてもよい。例えば、図5〜図7の例は処理段階ごとの制御であったが、この代わりにすべての処理段階の処理待ちキュー320及び処理中キュー325の状態を監視し、上述と同様の処理段階間でのジョブの受け渡しを行うような全体的な制御を採用してももちろんよい。
なお、画像データ送信部260の処理手順は、例えば以下のようなものでよい。すなわち、画像データ送信部260は、処理待ちキュー320Dから先頭のジョブを取り出して処理中キュー325Dに入れ、プリンタ400にそのジョブの印刷を依頼する。すなわち、そのジョブのラスター画像データをプリンタ400に送信する。その後、プリンタ400からそのジョブの印刷完了通知を待つ。そして、印刷完了通知を受け取ると、そのジョブを処理中キュー325Dから削除し、処理待ちキュー320Dから先頭のジョブを取り出して処理中キュー325に入れ、プリンタ400にそのジョブの印刷を依頼する。
図4の説明に戻り、投入制御部330は、処理対象として新たに画像処理部300に投入されたジョブを、いずれかの処理段階の処理待ちキュー320A〜Dに振り分ける制御を行う。この制御の際、投入制御部330は、キュー管理情報340を参照し、無効な処理待ちキュー320にはジョブを投入しないようにする。
図4に示されたキュー管理情報340の例では、処理待ちキュー320A〜Dのすべてが有効となっている。この場合、投入制御部330は、入力されたジョブを、そのジョブの種別に対応する開始段階(例えば図3参照)の処理待ちキュー320に投入すればよい。一方、入力されたジョブの種別に対応する開始段階の処理待ちキュー320が無効である場合には、投入制御部330は、そのジョブをそのキュー320に投入することはできない。この場合、投入制御部330は、開始段階の処理待ちキュー320以前の処理待ちキュー320のうち、有効で、かつ、最も後ろのものに、そのジョブを投入する。
このような投入制御部330の制御を実現するための処理手順の一例を、図8を参照して説明する。図8の手順は、例えば、クライアントPC100からジョブが入力された場合に実行される。
このような場合、まずプロセス解析部250が、入力されたジョブの制御データ510中からジョブ種別512を読み出し(S41)、そのジョブ種別512に対応する開始段階を、例えば図3に例示した判定情報に基づき、判定する(S42)。プロセス解析部250は、そのジョブのジョブIDと対応づけてその判定結果を投入制御部330に渡す。投入制御部330は、キュー管理情報340(図4参照)に「有効」と示された処理段階のうち、その開始段階以前で最も順番が後の処理段階を特定する(S43)。そして、特定した処理段階の処理待ちキュー320に対して、そのジョブを投入する(S44)。
以上に説明した図8の手順は、すべての処理段階が「有効」である場合、「無効」の処理段階が1以上存在する場合、のどちらにも適用可能である。
なお、ある処理待ちキュー320に対して、投入制御部330と直前の段階の実行制御部315とから同時にジョブが入力された場合には、それらジョブのうち受信時刻が早い方がより早く処理されるようにそれらジョブをそのキュー320に投入すればよい。
以上の処理の中で、例えば、プロセス解析部250が、処理待ちキュー320に投入したジョブの管理情報の一項目として、ステップS32で判定した開始段階の情報を登録してもよい。このようなジョブの管理情報の一例を図9に示す。この例では、ジョブの管理情報は、そのジョブに対してジョブ制御部230が付与したジョブID602,ジョブ受信部220がそのジョブを受信した受信時刻604,及びプロセス解析部250が判定した開始段階606を含む。ジョブの管理情報には、この他に、ジョブの制御データ510や印刷データ520などといった他の情報が含まれてもよい。開始段階の情報をジョブの管理情報に含める場合、実行制御部315は、前述の図5の手順におけるステップS15の処理の際、当該ジョブの開始段階の属性値を参照すればよい。
図8の手順はジョブを受信した場合のものであったが、受信した後HDD240内に保存されているジョブに対し、ユーザが印刷を指示した場合にも、同様の処理を行えばよい。この場合、ジョブの管理情報における受信時刻604は、印刷指示を受けた時刻とすればよい。また、受信時に判定した開始段階の値をジョブのデータと対応づけてHDD240に保存しておけば、その保存ジョブの印刷が指示された場合には、ステップS42(開始段階の判定)は省略できる。
なお、クライアントPC100から受信したジョブそのものではなく、そのジョブに対する画像処理部300の処理結果の印刷画像データがHDD240に保存される場合も考えられる。この場合、その印刷画像データには、開始段階として「データ送信」の値を対応づけて保存しておき、その印刷画像データの印刷が指示された場合に、保存された開始段階の値を読み出すようにしてもよい。同様に、PDF化モジュール310Aにより生成されたPDFデータがHDD240に保存する場合には開始段階として「PDF画像処理」を、PDF画像処理モジュール310Bによる画像処理結果のPDFデータが保存される場合には「RIP」を、それぞれ対応づけて保存すればよい。
以上、画像処理部300の内部構成の例を、図4等を参照して説明した。図4に例示した3つのモジュール310A〜310Cを備えた画像処理部300はあくまで一例に過ぎない。この例の制御方式は、直列に並んだ2以上の画像処理モジュールを備えるプリントサーバ200一般に適用可能であり、個々の画像処理モジュールの種類は特に限定されない。
次に、モード管理部280による画像処理部300の動作モード管理の一例を説明する。この例では、画像処理部300は、「効率優先」、「順序優先」、「カスタム」の3種類のモードを有する。効率優先モードは、入力されたジョブをその種別に応じた開始段階の処理待ちキュー320に投入することで、ジョブが速やかに処理されるようにするモードである。効率優先モードでは、すべての処理段階の処理待ちキュー320が有効化される。順序優先モードは、プリントサーバ200がジョブを受信した順序通り(すなわち受信時刻の古い順)にジョブを処理するモードである。HDD240内に保存されたジョブに対して印刷指示がなされた場合は、その指示の時刻を受信時刻とする。順序優先モードでは、最初の処理段階の処理待ちキュー320のみが有効化される。カスタムモードは、各処理待ちキュー320の有効・無効をユーザが自由に指定できるモードである。
モード管理部280は、ユーザに対してモード選択用のUI(ユーザインタフェース)画面を提供し、その画面を用いてユーザが指定したモードに従って、キュー管理情報340を設定する。モード管理部280の処理手順の一例を、図10に示す。
図10の手順では、モード管理部280は、UI画面を用いてユーザからのモード指定を受け付けると(S51)、指定されたモードが、現在のモード(すなわち指定されたモードの前のモード)と同じかどうかを判定する(S52)。同じであれば、モード管理部280はキュー管理情報340を変更しないまま、処理を終了する。
指定されたモードが現在のモードと異なる場合(モード未指定の状態においてモードが指定された場合もこの場合に該当する)、モード管理部280は、指定されたモードが、効率優先、順序優先、及びカスタムのいずれであるかを判定する(S53)。モード管理部280は、指定されたモードが効率優先であれば、キュー管理情報340におけるすべての処理段階の値を「有効」に設定する(S54)。したがって、効率優先モードの場合、投入制御部330は、入力されたジョブの開始段階に対応した処理段階の処理待ちキュー320に対し、そのジョブを投入することになる。
また、指定されたモードが順序優先であれば、キュー管理情報340における先頭の処理段階(図4の例では「PDF化」)のみの値を「有効」に設定し、他の処理段階の値を「無効」に設定する(S55)。したがって、順序優先モードの場合、投入制御部330は、入力されたジョブの開始段階がいずれであっても、そのジョブを先頭の処理段階の処理待ちキュー320に対し投入することになる。この制御は、従来のジョブ投入制御と同じである。
また、指定されたモードがカスタムモードである場合、モード管理部280は、カスタム設定のための設定画面を提供し、その設定画面を介してユーザからの設定を受け付ける。この例では、設定画面として、処理段階ごとに、ジョブがその処理段階を「追い越す」ことを可能とするか否かを設定する画面を提供し、ユーザから設定を受け付ける(S56)。このような設定画面を用いてユーザが処理段階ごとに追い越しの可否を指定すると、モード管理部280は、キュー管理情報340のうち、一連の処理段階のうちの先頭の処理段階の値と、追い越し可能と指定された各処理段階の次の処理段階の値とを「有効」に設定し、残りは「無効」に設定する(S57)。このように、ある処理段階が追い越し可能に設定された場合は、投入制御部330は、ジョブが、その処理段階を追い越して次の処理段階に投入されるようにすることができる(もちろん、そのジョブの開始段階が当該「次の処理段階」以後である場合に限る)。
カスタムモードにおいて、上述のように処理段階ごとに追い越しの可否の指定を受け付ける代わりに、一連の処理段階のうちの先頭の処理段階からどの処理段階までを追い越し可能とするかの指定を受け付けてもよい。この例では、先頭の処理段階からユーザの指定した処理段階までが追い越し可能であり、ユーザの指定した段階より後の段階が追い越し不可となる。したがって、この場合、先頭の処理段階からユーザの指定した処理段階の次の段階までの処理待ちキュー320が「有効」に設定され、それより後の段階の処理待ちキュー320が「無効」に設定されることになる。
なお、カスタムモードにおいて、処理段階を追い越し可能とするか否かをユーザに設定させる代わりに、処理段階の処理待ちキュー320の有効・無効をユーザに設定させてももちろんよい。
次に、図11〜図14を参照して、具体例を挙げて、入力されるジョブ群が画像処理部300内でどのように処理されていくかを説明する。ここでは、図4の例において、カスタムモードで、4つの処理段階のうち「PDF化」のみが追い越し可能と設定され、残りが追い越し不可と設定された場合を想定する。この場合、「PDF化」及びその次の「PDF画像処理」の処理待ちキュー320A及び320Bが有効であり、残りの「RIP」及び「画像データ送信」の処理待ちキュー320C及び320Dは無効である。このような設定の画像処理部300に対し、図11に例示する6つのジョブ「Job1」〜「Job6」がこの順に入力される場合を考える。図11には、各ジョブ「Job1」〜「Job6」のジョブ種別に対応する開始段階が示される。
まず、最初に入力されたJob1の開始段階「PDF化」であり、「PDF化」の処理待ちキュー320Aは有効なので、Job1は投入制御部330により処理待ちキュー320Aに投入される。そして、その後処理中キュー325Aに移動して、PDF化モジュール310Aで処理される。図12上段の状態(A)は、このときの画像処理部300のキュー群の状態である。その後、Job1のPDF化が完了する前に次のJob2が入力されたとする。Job2の開始段階は「RIP」であるが、「RIP」の処理待ちキュー320Cは無効なので、Job2はそれ以前で最も後ろの有効な「PDF画像処理」の処理待ちキュー320Bに投入され、処理中キュー325Bに移動する。図12下段の状態(B)は、このときの画像処理部300のキュー群の状態である。ここで、Job2は開始段階がRIP処理なので、PDF画像処理は不要であり、またその次のRIP処理の処理中キュー325Cは空いている。このため、処理中キュー325Bに入ったJob2はすぐに処理中キュー325Cに送られ、RIPモジュール310Cの処理を受ける。
その後、Job1がPDF化を終えてPDF画像処理に進み、Job2のRIP処理が終わらない時点で、PDF画像処理を開始段階とするJob3が入力されると、Job3は処理待ちキュー320Bに投入され、Job1のPDF画像処理が完了するまで待つ(図13上段の状態(C))。またその後、Job2がRIP処理を終えて画像データ送信の段階に進み、Job1がPDF画像処理を終えてRIP処理の段階に進むと、Job3が処理中キュー325Bに進んでPDF画像処理を受ける。このときに開始段階が画像データ送信であるJob4が入力されると、Job4は、画像データ送信以前で最も後ろの有効な処理待ちキュー320Bに投入される(図13下段の状態(D))。
この後、Job1に対するRIP処理が終了したとしても、Job2の画像データのプリンタ400への送信が完了していなければJob1は画像データ送信の段階に進めず、この影響でJob3もRIP段階に進めない。この時にJob5が入力されると、Job5はその開始段階であるPDF化の処理待ちキュー320Aに入力される。この時点では処理中キュー325Aは空いているので、Job5はすぐにPDF化モジュール310に処理される(図14上段の状態(E))。その後、プリンタ400へのJob2の画像データ送信が完了すると、Job1は画像データ送信へ、Job3はRIPへと進み、Job4が処理中キュー325Bに移行する。Job4は、開始段階が画像データ送信(すなわちJob4は既にラスター画像である)なので、PDF画像処理もRIP処理も必要がないが、Job3のRIPが終わるまでは処理中キュー325Bで待たされることになる。このとき、開始段階がRIPであるJob6が入力されると、キュー群の状態は図14下段の状態(F)となる。
以上、カスタムモードの場合を例にとって説明したが、効率優先モードの場合は、入力されたジョブがそのジョブの種別に応じた開始段階の処理待ちキュー320に投入される点がカスタムモードの場合と異なるだけなので、当業者なら上述の説明から容易に理解できるであろう。また、順序優先モードでのジョブ実行の流れは従来と同様なので説明を要さないであろう。
次に、図15及び図16を参照して、ジョブ制御部230が提供するジョブ管理画面の例を説明する。図15は、効率優先モードの場合のジョブ管理画面の例を示す。例示のジョブ管理画面には、処理中又は処理待ちのジョブの状態を示す第1領域710と、処理が完了した後もユーザ指示等に従ってHDD240に残された保持ジョブについての情報を示す第2領域720が表示される。
第1領域710には、処理待ちキュー320A〜D又は処理中キュー325A〜Dのいずれかにあるジョブが、当該プリントサーバ200から出力される順に上から下へと配列表示されている。第1領域710のジョブ名欄711にはジョブの名称が、受信時刻欄712にはジョブの受信時刻がそれぞれ示される。また、第1領域710には、PDF化,PDF画像処理,RIP及びデータ送信の各処理段階のジョブ表示欄713〜716が処理段階の順に左から右に配列されている。ジョブ名欄711に表示された各ジョブは、現在そのジョブが存在する処理段階のジョブ表示欄713,714,715又は716に表示される。各処理段階のジョブ表示欄713〜716には、それぞれ、当該処理段階にあるジョブが処理順序に従って上から下へと配列される。そして、処理中キュー325にあるジョブについては「処理中」である旨とその処理の進捗度合い(例えばパーセンテージ)とが表示され、処理待ちキュー320にあるジョブについては「処理待ち」である旨が表示される。このジョブ管理画面では、ジョブ群の処理が進むごとに、あるジョブはある処理段階のジョブ表示欄内を1つずつ登っていき、その処理段階の処理が終わると次の処理段階、すなわち1つ右のジョブ表示欄の末尾に移動することとなる。
また、第2領域720には、個々の保持ジョブについて、そのジョブのジョブ名、受信時刻、データサイズ、所有者(ジョブを送信してきたユーザ)、開始段階(これは受信されたときに判定されている)、及び、ユーザ(所有者又は管理者など)が入力したコメントが表示される。ユーザは、第2領域720にある保持ジョブを選択して、印刷を指示することができる。
図16は、カスタムモードにおいて、PDF化が追い越し可と設定され、他の処理段階が追い越し不可と設定された場合のジョブ管理画面の例を示す。図16の例は、第1領域710のジョブ表示欄717に、PDF画像処理、RIP及びデータ送信という連続する3つの処理段階にあるジョブをまとめて表示する点が図15(効率優先モード)の場合と異なる。ジョブ表示欄717には、データ送信、RIP、及びPDF画像処理の各段階の処理中のジョブがその順に上から下に配列されると共に、その下に、処理待ちの各ジョブが処理される順に配列されている。それら処理待ちのジョブは、PDF画像処理の処理待ちキュー320Bに保持されたジョブである。ジョブ表示欄717に表示されたジョブは、ジョブ群の処理が進むにつれて上へと移動する。なお、ジョブ表示欄717には、処理待ちの各ジョブの開始段階が表示される。例えば、上から4番目のジョブは「データ送信待ち」と表示されているが、これはそのジョブの開始段階が「画像データ送信」であることを示す。
このように図16の例では、処理待ちキュー320が有効な各処理段階(図16の例ではPDF化とPDF画像処理)に対応してジョブ表示欄713及び717が設けられる。この点では、図15も同様である。順序優先モードの場合、先頭の処理段階であるPDF化の処理待ちキュー320Aにすべての種別のジョブが投入されるので、その場合のジョブ管理画面の第1領域にはそのキュー320Aに対応した1つのジョブ表示欄があればよい。このジョブ表示欄におけるジョブの配列順序は、図16のジョブ表示欄717と同様でよい。
なお、カスタムモード及び順序優先モードの場合も、図15と同様、処理段階ごとにジョブ表示欄713〜716を設けてもよい。この場合、処理待ちキュー320が無効な処理段階のジョブ表示欄には処理待ちのジョブが表示されないが、これ以外は図15と同様である。
次に、画像制御部300の動作モードの変更が指示された場合における、画像処理部300内の処理待ちキュー320群の過渡制御の一例を、図17を参照して説明する。
図17に示すように、この過渡制御では、モード管理部280に対してユーザからモード変更が指示された場合、まず、画像処理部300は、モード変更により、当該処理待ちキュー320が無効なキューが増加するか否かを判定する(S61)。この例では、カスタムモードにおいて、一連の処理段階のうちの先頭の処理段階からどの処理段階までを追い越し可能とするかの指定を受け付ける場合を想定している。モード変更の前よりも後の方が、追い越し可能とする最後尾の処理段階がより前の段階となる場合、モード変更により無効なキューが増加することとなる。
ステップS61の判定結果が肯定(Yes)の場合、画像処理部300は、モード変更の結果新たに無効となる(すなわちモード変更の前は有効)各処理待ちキュー320に対し投入制御部330又は直前の処理段階からジョブが投入されないように制御し(S62)、それら各キュー320内にジョブが残っていれば、それら残っているジョブを、順番に、対応するモジュール310に処理させる(S63)。それら各キュー320が空になると、画像処理部300は、それら各キュー320を無効化(S64)して過渡制御を終了し、上述の通常の制御(図5〜図7参照)に移行する。
モードが変更されると無効な処理待ちキュー320の数が変化するので、ステップS61の判定結果が否定(No)の場合、無効なキューがモード変更前より無効な処理待ちキュー320が減り、有効な処理待ちキュー320が増えることになる。この場合、画像処理部300は、当該モード変更の前において有効な処理待ちキュー320のうち最後尾のキュー320にある各ジョブを、それぞれ各ジョブの開始段階に応じて、モード変更後に新たに有効となる各処理待ちキュー320に振り分ける(S65)。この振り分け処理では、図8に例示したステップS43及びS44と同様、ジョブの開始段階以前で最も後ろの有効な処理待ちキュー320に対し、当該ジョブを投入すればよい。振り分けられたジョブの振り分け先のキュー320での配列順序は、それらジョブの受信時刻の早い順とすればよい。画像処理部300は、この振り分けが完了した後、それら新たに有効となるべきキュー320を有効化(S66)して過渡制御を終了し、上述の通常の制御(図5〜図7参照)に移行する。
以下、このような過渡制御の具体例を説明する。例えば、画像処理部300のモードが、図12に例示したPDF化及びPDF画像処理の処理待ちキュー320が有効なカスタムモードから順序優先モードに変更された場合、PDF画像処理の処理待ちキュー320Bが新たに無効へと変更されることになる。ここで、モード変更の時点で処理待ちキュー320Bにジョブが残っていなければ、そのキュー320Bは即座に無効化される。一方、モード変更の時点でそのキュー320Bにジョブが残っている場合は、それら残存ジョブがPDF処理モジュール310Bで処理された後、そのキュー320Bが無効化される。以上の例は、モード変更により無効な処理待ちキュー320が増える場合の例である。
また、画像処理部300のモードが、順序優先モードからPDF化及びPDF画像処理の処理待ちキュー320が有効なカスタムモードに変更された場合、PDF画像処理の処理待ちキュー320Bが無効から有効に変更されることになる。そして、モード変更前における最後尾の有効な処理待ちキューである処理待ちキュー320A(PDF化)内にジョブがある場合、それらが各々の開始段階に応じて、当該キュー320Aと新たに有効となる処理待ちキュー320Bに振り分けられる。例えば、処理待ちキュー320Aに「PDF画像処理」、「RIP」、「画像データ送信」、及び「PDF化」をそれぞれ開始段階とするジョブが1つずつ存在した場合、そのうち開始段階が「PDF画像処理」、「RIP」、又は「画像データ送信」であるジョブは処理待ちキュー320Bへ振り分けられ、開始段階が「PDF化」のジョブは処理待ちキュー320Aに残る。そして、この処理の完了後に処理待ちキュー320Bが有効化され、投入制御部330及び直前の処理段階からジョブの投入を受け入れる。
以上説明した例では、無効に設定された処理待ちキュー320に対しては、投入制御部330からも直前の処理段階からもジョブが投入されないようにした。しかし、このような制御は一例に過ぎない。変形例として、無効に設定された処理待ちキュー320が、投入制御部330からのジョブを受け入れないが、直前の処理段階から送られてきたジョブは受け入れるようにしてもよい。この変形例では、実行制御部315が、ジョブ送り処理として、図7に例示した手順の代わりに、図18に例示する手順を実行すればよい。すなわち、この例では、実行制御部315は、対応するモジュール310での処理が完了したジョブ(S23)、又はそのモジュールでの処理を必要としないジョブ(S17)を、次の処理段階の処理待ちキュー320に投入すればよい。なお、図18に例示したジョブ送り処理以外の制御については、図5,図6、図8,及び図10に例示したものと同様の手順を用いればよい。この変形例では、各処理段階での処理が終わったジョブは、次の処理段階でのジョブの処理完了を待たずに、即座に次の処理段階の処理待ちキュー320に送られる。
例えば、画像処理部300のキュー群が図13の状態(D)であるときに、Job2のプリンタ400への送信が終了する前にJob1のRIP処理が完了した場合、図7の手順では、Job1は画像データ送信の段階に進むことができないので、RIPの処理待ちキュー325Cに留まる。したがって、仮にその時点でJob3のPDF画像処理が終了していたとしても、Job3はRIPの段階に進めない。これに対し、この変形例では、Job2は画像データ送信の処理待ちキュー320に進み、Job3はその結果空いたRIPの処理中キュー325に進むこととなる。
なお、この変形例でのジョブ管理画面は、図15に例示したのと同様、すべての処理段階についてジョブ表示欄713〜716を持つものでよい。
また、以上の例では、ユーザから指定された動作モードに応じて各処理待ちキューの有効又は無効を切り換えたが、これは一例に過ぎない。この代わりに、そのような動作モードを設けず、各処理段階の追い越し可能又は不可(或いは各処理待ちキュー320の有効又は無効)をユーザに直接指定させるようなユーザインタフェースを採用してもよい。これは、すべてカスタムモードとして取り扱う場合に相当する。
また、以上の例は、1つの処理段階のモジュール310が一時に1つのジョブしか処理しない場合の例であったが、これはあくまで一例に過ぎない。モジュール310が一時にn個(nは2以上)のジョブを並列処理できる場合は、対応する処理中キュー325にn個のジョブが入れられるようにし、そのモジュール310が処理中キュー325内の1以上のジョブを並列処理すればよい。この場合、モジュール310の処理が完了したジョブは次の処理段階に送り、空いた処理中キュー325に次のジョブを受け入れればよい。
また、以上の例において、優先処理するジョブの指定を受け付け可能としてもよい。この場合、優先処理対象として指定されたジョブには、ジョブ管理情報に優先処理対象である旨の情報を含める。各処理段階の実行制御部315は、対応する処理待ちキュー320に優先処理対象のジョブがあれば、そのジョブを優先して取り出し、対応するモジュール310に処理させた後、次の処理段階に送ればよい(当該モジュールでの処理が不要の場合は、単に次の処理段階に送ればよい)。また、実行制御部315は、直前の処理段階から優先処理対象のジョブを受け取った場合、その時対応するモジュール310でのジョブの処理が完了し次第、対応する処理待ちキュー320内のジョブより先にその優先処理対象のジョブをそのモジュール310に実行させればよい。
以上に例示したプリントサーバ200は、例えば、汎用のコンピュータに上述の各機能モジュールの処理を表すプログラムを実行させることにより実現される。ここで、コンピュータは、例えば、ハードウエアとして、図19に示すように、CPU1000等のマイクロプロセッサ、ランダムアクセスメモリ(RAM)1002およびリードオンリメモリ(ROM)1004等のメモリ(一次記憶)、HDD(ハードディスクドライブ)1006を制御するHDDコントローラ1008、各種I/O(入出力)インタフェース1010、ローカルエリアネットワークなどのネットワークとの接続のための制御を行うネットワークインタフェース1012等が、たとえばバス1014を介して接続された回路構成を有する。また、そのバス1014に対し、例えばI/Oインタフェース1010経由で、CDやDVDなどの可搬型ディスク記録媒体に対する読み取り及び/又は書き込みのためのディスクドライブ1016、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体に対する読み取り及び/又は書き込みのためのメモリリーダライタ1018、などが接続されてもよい。上に例示した各機能モジュールの処理内容が記述されたプログラムがCDやDVD等の記録媒体を経由して、又はネットワーク等の通信手段経由で、ハードディスクドライブ等の固定記憶装置に保存され、VPNルータにインストールされる。固定記憶装置に記憶されたプログラムがRAM1002に読み出されCPU1000等のマイクロプロセッサにより実行されることにより、上に例示した機能モジュール群が実現される。なお、それら機能モジュール群のうちの一部又は全部を、専用LSI(Large Scale Integration)、ASIC(Application Specific Integrated Circuit、特定用途向け集積回路)又はFPGA(Field Programmable Gate Array)等のハードウエア回路として構成してもよい。
100 クライアントPC、110 アプリケーション、120 プリンタドライバ、130 ネットワークI/F、150 ネットワーク、200 プリントサーバ、210 ネットワークI/F、220 ジョブ受信部、230 ジョブ制御部、240 HDD、250 プロセス解析部、260 画像データ送信部、270 ネットワークI/F、280 モード管理部、290 入力装置、300 画像処理部、310A PDF化モジュール、310B PDF画像処理モジュール、310C RIPモジュール、315A〜315C 実行制御部、320A〜320D 処理待ちキュー、325A〜325D 処理中キュー。