(57)【特許請求の範囲】
【請求項１】
ネットワークに、複数の印刷装置が接続され、前記複数の印刷装置の少なくとも２以上の印刷装置で印刷ジョブに基づく印刷を行う分散印刷システムであって、
各印刷装置は、
コネクション型のプロトコルを用いる通信を行う通信部であって、前記通信のためのコネクションを保持する通信部と、
前記コネクションを介して前記印刷ジョブを受信する印刷ジョブ受信部であって、並行して受信可能な印刷ジョブの数はｍ（ｍは自然数）である印刷ジョブ受信部と、
前記受信された印刷ジョブについて、並行して印刷処理を実行する印刷実行部と、
を備え、
前記通信部が同時に保持するコネクションの数は、ｍ以下に設定されており、
前記複数の印刷装置のうちの所定の印刷装置は、
前記印刷ジョブを２以上の前記印刷装置である分散先印刷装置に対して送信可能な印刷制御装置を備え、
前記印刷制御装置は、
前記ネットワークに接続された前記複数の印刷装置の中から、前記印刷制御装置が備え付けられた印刷装置と同一の機種であって、かつ、印刷が可能な状態にある印刷装置を分散先印刷装置として選択し、
前記所定の印刷装置の通信部に対し、選択した分散先印刷装置の通信部との間で、コネクションの確立処理を行わせ、コネクションが確立された分散先印刷装置に対して前記印刷ジョブを送信する、
分散印刷システム。
【請求項２】
請求項１に記載の分散印刷システムにおいて、
前記印刷制御装置は、２以上の前記分散先印刷装置に対する前記印刷ジョブの送信を、前記印刷ジョブを複数のパケットに分割し、前記パケットを前記コネクションが確立された２以上の前記分散先印刷装置に対してそれぞれ送信するパケット分散を、前記分割されたパケットごとに繰り返し実行することによって行う、分散印刷システム。
【請求項３】
請求項１又は請求項２に記載の分散印刷システムにおいて、
前記各印刷装置の前記印刷実行部は、
前記受信された印刷ジョブを解釈して印刷要求を発行する解釈処理を実行する印刷ジョブ解釈部であって、前記ｍ個の印刷ジョブについて前記解釈処理を並行して実行可能な印刷ジョブ解釈部と、
前記発行された印刷要求に基づいて前記印刷ジョブの印刷結果を出力する印刷部と、
を有する分散印刷システム。
【請求項４】
請求項３に記載の分散印刷システムにおいて、
前記各印刷装置の前記印刷部は、各印刷ジョブの印刷結果を所定枚数ずつ出力することを繰り返すことによって、複数の前記印刷ジョブの印刷結果を出力する、分散印刷システム。
【請求項５】
請求項４に記載の分散印刷システムにおいて、
前記各印刷装置は、さらに、
前記印刷部によって出力された印刷結果を、前記印刷ジョブごとに複数の収納部に分けて収納するソータ機構を備える、分散印刷システム。
【請求項６】
請求項５に記載の分散印刷システムにおいて、
前記各印刷装置における前記並行して受信可能な印刷ジョブの数ｍは、前記ソータ機構が有する収容部の数である、分散印刷システム。
【請求項７】
請求項１ないし請求項６のいずれかに記載の分散印刷システムにおいて、
前記各印刷装置が並行して受信可能な前記印刷ジョブの数ｍは、前記各印刷装置の状態に応じて変化する、分散印刷システム。
【請求項８】
請求項５に記載の分散印刷システムであって、
前記各印刷装置が前記並行して受信可能な印刷ジョブの数ｍは、前記ソータ機構が有する収容部のうち印刷結果を収容できる状態にある収容部の数である、分散印刷システム。
【請求項９】
請求項３に記載の分散印刷システムであって、
前記各印刷装置の前記印刷部は、ｍ個備えられている、分散印刷システム。
【請求項１０】
ネットワークに、複数の印刷装置が接続され、前記複数の印刷装置の少なくとも２以上の印刷装置で印刷ジョブに基づく印刷を行う印刷方法であって、
前記複数の印刷装置のうちの所定の印刷装置は、前記印刷ジョブを２以上の前記印刷装置である分散先印刷装置に対して送信可能な印刷制御装置を備え、
前記印刷方法は、前記印刷制御装置が、
前記複数の印刷装置の中から所定の条件を満たす印刷装置を分散先印刷装置として選択し、選択した印刷装置に対しコネクションの確立要求を行う工程と、
コネクションの確立が行われた前記分散先印刷装置に対し、前記印刷ジョブを送信する工程と、を備え、
前記所定の条件を満たす印刷装置は、
前記所定の印刷装置と同一の機種であって、かつ、印刷が可能な状態にある印刷装置であり、
前記ネットワークに接続された各印刷装置は、
コネクション型のプロトコルを用いる通信を行う通信部であって、前記通信のためのコネクションを保持する通信部と、前記コネクションを介して印刷ジョブを受信する印刷ジョブ受信部であって、並行して受信可能な印刷ジョブの数はｍ（ｍは自然数）である印刷ジョブ受信部と、前記受信された印刷ジョブについて、並行して印刷処理を実行する印刷実行部と、を備え、
さらに前記印刷方法は、前記各印刷装置のうち、前記所定の印刷装置からコネクションの確立要求を受信した印刷装置の前記通信部が、
前記確立要求を受信した時点において、保持しているコネクションの数がｍ未満である場合は、前記確立要求に応じて前記所定の印刷装置との間でコネクションを確立し、
前記確立要求を受信した時点において、保持しているコネクションの数がｍ以上である場合は、保持しているコネクションの数がｍ未満となるまで新たなコネクションの確立を行わない工程を、有する、
印刷方法。
【請求項１１】
ネットワークに、複数の印刷装置が接続され、前記複数の印刷装置の少なくとも２以上の印刷装置で印刷ジョブに基づく印刷を実現させるためのコンピュータプログラムであって、
前記各印刷装置に、
コネクション型のプロトコルを用いる通信を行う第１の機能であって、前記通信のためのコネクションを保持する第１の機能と、
前記コネクションを介して前記印刷ジョブを受信する第２の機能であって、並行して受信可能な印刷ジョブの数はｍ（ｍは自然数）である第２の機能と、
前記受信された印刷ジョブについて、並行して印刷処理を実行する第３の機能と、
同時に保持するコネクションの数を、ｍ以下に設定する第４の機能と、を実現させ、
前記複数の印刷装置のうちの所定の印刷装置に、さらに、
前記印刷ジョブを２以上の前記印刷装置である分散先印刷装置に対して送信可能な第５の機能と、
前記ネットワークに接続された前記複数の印刷装置の中から、前記所定の印刷装置と同一の機種であって、かつ、印刷が可能な状態にある印刷装置を分散先印刷装置として選択する第６の機能と、
選択した分散先印刷装置との間で、コネクションの確立要求を行い、コネクションが確立された分散先印刷装置に対して前記印刷ジョブを送信する第７の機能と、を実現させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の印刷ジョブを処理可能な印刷装置に関し、特に、分散印刷の分散先として用いられる印刷装置に関する。
【背景技術】
【０００２】
複数の印刷装置に接続された印刷制御装置が、複数の印刷装置に印刷ジョブを分散する分散印刷システムが知られている（例えば、特許文献１）。上記技術では、印刷すべき部数を複数の印刷装置に適切に配分し、並行して印刷を行うことにより、短時間で複数部数の印刷を完了することができる。
【０００３】
【特許文献１】特開２００１−２７３１１３号公報
【特許文献２】特開２００１−１００９６３号公報
【特許文献３】特開平６−２１４９２０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、このような分散印刷システムにおいて、印刷ジョブを複数のパケットに分けて分散する方法がある。この分散方法では、パケットを複数の分散先プリンタに分散する処理を、パケットごとに繰り返し実行することにより、印刷ジョブを分散する。こうすれば、例えば、クライアントとしての計算機からネットワークを介して印刷ジョブを受信し、受信された印刷ジョブを複数の印刷装置に分散する場合に、印刷制御装置が備えるバッファの容量が小さくクライアントとしての計算機から全ての印刷ジョブを一度に受信することができない場合でも、印刷制御装置は、印刷ジョブを分散することができる。
【０００５】
しかしながら、上記従来技術において、上述の分散方法を用いると、分散先の印刷装置によっては円滑な分散印刷が妨げられるおそれがあった。例えば、印刷装置が、印刷ジョブを受信するためのコネクションを複数個同時に保持できる一方で、印刷ジョブは１つずつしか処理できない場合、その印刷装置は、一般的に、先に確立されたコネクションから順番に印刷ジョブを受信し、その印刷ジョブの処理が終了してから次のコネクションからの印刷ジョブを受信する。このような、印刷装置を分散先として、上述した分散方法を用いると、順番待ちの状態にあるコネクションにパケットを送信した場合に、そのパケットが受信されるまで分散処理を停止せざるを得なくなる。
【０００６】
特に、複数の印刷制御装置が共通する複数の印刷装置を分散先として、上述した分散方法により印刷ジョブを分散すると、分散処理が完全に停止してしまうおそれがあった。
【０００７】
本発明は、上記課題を解決するためになされたものであり、円滑な分散印刷処理を実現することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題の少なくとも一部を解決するために本発明は、印刷装置を提供する。本発明に係る印刷装置は、コネクション型のプロトコルを用いる通信を行う通信部であって、前記通信のためのコネクションを保持する通信部と、前記コネクションを介して印刷ジョブを受信する印刷ジョブ受信部であって、並行して受信可能な印刷ジョブの数はｍ（ｍは自然数）である印刷ジョブ受信部と、前記受信された印刷ジョブについて、並行して印刷処理を実行する印刷実行部と、を備え、前記通信部が同時に保持するコネクションの数は、ｍ以下に設定されることを特徴とする。
【０００９】
本発明に係る印刷装置によれば、並行して受信可能な印刷ジョブの数ｍを超える数のコネクションが保持されることはないので、コネクションを介して印刷ジョブを送信する機器を待機状態にすることがない。特に、分散先印刷装置として用いられる場合には、分散印刷処理を円滑に進めることができる。
【００１０】
本発明に係る印刷装置は、前記印刷ジョブを複数のパケットに分割し、前記パケットを２以上の分散先印刷装置に対してそれぞれ送信するパケット分散を、前記分割されたパケットごとに繰り返し実行することによって、前記印刷ジョブを２以上の前記分散先印刷装置に対してそれぞれ送信可能な印刷制御装置と接続されると共に、前記分散先印刷装置として用いられても良い。こうすれば、このような印刷制御装置による分散印刷処理において起こり得るデッドロックを防止することができる。
【００１１】
本発明に係る印刷装置において、前記印刷実行部は、前記受信された印刷ジョブを解釈して印刷要求を発行する解釈処理を実行する解釈部であって、前記ｍ個の印刷ジョブについて前記解釈処理を並行して実行可能な解釈部と、前記発行された印刷要求に基づいて前記印刷ジョブの印刷結果を出力する印刷部と、を有しても良い。こうすれば、並行して受信された印刷ジョブを並行して解釈するので、より円滑な印刷処理を実現できる。
【００１２】
本発明に係る印刷装置において、前記印刷部は、各印刷ジョブの印刷結果を所定枚数ずつ出力することを繰り返すことによって、複数の前記印刷ジョブの印刷結果を出力しても良い。こうすれば、印刷部がｍ個より少ない場合であっても、複数の印刷ジョブについて並行して印刷処理を進めることができる。
【００１３】
本発明に係る印刷装置は、さらに、前記印刷部によって出力された印刷結果を、前記印刷ジョブごとに複数の収納部に分けて収納するソータ機構を備えても良い。かかる場合、前記並行して受信可能な印刷ジョブの数ｍは、前記ソータ機構が有する収容部の数であっても良い。こうすれば、並行して処理された印刷ジョブの印刷結果が混じり合う不都合を避けることできる。
【００１４】
本発明に係る印刷装置において、前記並行して受信可能な印刷ジョブの数ｍは、前記印刷装置の状態に応じて変化しても良い。例えば、前記並行して受信可能な印刷ジョブの数ｍは、前記ソータ機構が有する収容部のうち印刷結果を収容できる状態にある収容部の数であっても良い。
【００１５】
本発明に係る印刷装置において、前記印刷部は、ｍ個備えられていても良い。こうすれば、受信可能な印刷ジョブごとに印刷部を使用することができるので、複数の印刷ジョブを並行して円滑に進めることができる。
【００１６】
なお、本発明は、上記した印刷装置としての構成の他、その印刷方法などの方法発明としての態様で実現することも可能である。さらには、それら方法や装置を構築するためのコンピュータプログラムとしての態様や、そのようなコンピュータプログラムを記録した記録媒体としての態様や、上記コンピュータプログラムを含み搬送波内に具現化されたデータ信号など、種々の態様で実現することも可能である。
【発明を実施するための最良の形態】
【００１７】
以下、本発明に係る印刷装置について、図面を参照しつつ、実施例に基づいて説明する。
【００１８】
Ａ．実施例：
・分散印刷システムの構成：
図１および図２を参照して、本発明の実施例における分散印刷システムの構成について説明する。図１は、本発明の実施例における分散印刷システムの概略構成を示す説明図である。図２は、実施例における分散印刷システムを構成する各機器の内部構成を示すブロック図である。
【００１９】
この分散印刷システムは、図１に示すように、クライアントとしての複数の計算機（以下、単にクライアントという。）ＣＬａ、ＣＬｂと、複数のプリンタＰＲＴ１〜ＰＲＴ４を含む。クライアントＣＬａ、ＣＬｂと、プリンタＰＲＴ１〜ＰＲＴ４は、ローカルエリアネットワーク（ＬＡＮ）を介して互いに接続されている。各機器間の通信は、ＴＣＰ／ＩＰプロトコルを用いて行われるため、各機器にはそれぞれＩＰアドレスが割り振られる。説明の便宜上、クライアントＣＬａ、ＣＬｂにはそれぞれ「ＩＰａ」「ＩＰｂ」、プリンタＰＲＴ１〜ＰＲＴ４には、それぞれ「ＩＰ１」〜「ＩＰ４」なるＩＰアドレスが設定されているものとする。なお、厳密に言えば、これらＩＰアドレスは、クライアントＣＬａ、ＣＬｂ、プリンタＰＲＴ１〜ＰＲＴ４自体に設定されているわけではなく、ＴＣＰ／ＩＰのネットワークから見た場合のノード（すなわち、具体的には、ＴＣＰ／ＩＰ通信を行うためにネットワークに接続されているネットワークボードなど）に設定されている。
【００２０】
これらプリンタのうち、プリンタＰＲＴ１およびＰＲＴ４には、カスタムネットワークボード１００がそれぞれ取り付けられている。このカスタムネットワークボード１００は、クライアントＣＬａ、ＣＬｂから受信した印刷ジョブを他のプリンタに分散して、分散印刷を実行するための分散印刷制御機能を備えており、請求項における印刷制御装置に相当する。プリンタＰＲＴ２およびＰＲＴ３には、それぞれ、標準のネットワークボード２００が取り付けられている。
【００２１】
図１において、実線で示す矢印は、クライアントＣＬａからプリンタＰＲＴ１のカスタムネットワークボード１００に印刷ジョブが送信され、プリンタＰＲＴ１のカスタムネットワークボード１００からプリンタＰＲＴ１〜ＰＲＴ４にその印刷ジョブが分散される様子を概念的に示している。破線で示す矢印は、クライアントＣＬｂからプリンタＰＲＴ４のカスタムネットワークボード１００に印刷ジョブが送信され、プリンタＰＲＴ４のカスタムネットワークボード１００からプリンタＰＲＴ１〜ＰＲＴ４にその印刷ジョブが分散される様子を概念的に示している。このように、プリンタＰＲＴ１〜ＰＲＴ４は、プリンタＰＲＴ１およびプリンタＰＲＴ２のカスタムネットワークボード１００のいずれからも分散印刷の分散先とされ得る。以下において、各プリンタＰＲＴ１〜ＰＲＴ４を区別する必要のない場合には、符号の末尾の数字を省略しプリンタＰＲＴともいう。また、クライアントＣＬａ、ＣＬｂを区別する必要のない場合には、符号の小文字の英字を省略しクライアントＣＬともいう。
【００２２】
プリンタＰＲＴ１は、図２に示すように、プリンタ本体ＰＲＢと、上述したカスタムネットワークボード１００とを備えている。プリンタ本体ＰＲＢは、中央演算装置（ＣＰＵ）６０と、メモリ７０と、プリンタエンジン８０と、ソータ８５とを備えている。ＣＰＵ６０は、プリンタ本体ＰＲＢの全体を制御するコントローラとして機能する。メモリ７０は、ＣＰＵ６０が制御のためのプログラムやデータを一時的に格納するためのメモリである。プリンタエンジン８０は、実際に印刷を行う機構部分であり、本実施例では、静電気によってトナー粉が付着する現象を利用して印刷用紙上に画像を形成するいわゆるレーザー式のプリンタエンジンである。ソータ８５は、印刷された紙（以下、印刷紙という。）を収納しておく収納部として３つの排紙ビンを備え、プリンタエンジン８０から送られてきた印刷紙を各排紙ビンに選択的に収納する機構を備える。
【００２３】
ＣＰＵ６０は、メモリ７０より、プリンタ本体ＰＲＢを制御するためのソフトウェアなどのプログラムを読み出して、実行することにより、様々な制御機能をソフトウエア的に実現する。なお、各機能をハードウェア的に構築しても構わない。メモリ７０によって実現される機能には、印刷ジョブ解釈部９０が含まれる。印刷ジョブ解釈部９０は、サブ機能ブロックとして複数のサブ解釈部を備える。本実施例では、３つのサブ解釈部が備えられており、それぞれ第１解釈部９１、第２解釈部９２、第３解釈部９３と呼ぶこととする（図２参照）。３つの解釈部はそれぞれ、印刷ジョブを解釈して画像データを生成し、生成された画像データと共に印刷要求を発行する処理（以下、解釈処理ともいう。）を行う。これらの３つの解釈部は、それぞれ独立して機能する。この結果、印刷ジョブ解釈部９０は、並行して３つの解釈処理を実行することができる。プリンタエンジン８０は、印刷ジョブ解釈部９０から画像データと印刷要求を受信し、これらに基づいて印刷を実行する。
【００２４】
カスタムネットワークボード１００は、主として、ＣＰＵ２０と、メモリ３０とを備えている。また、この他、実際にネットワーク通信を行うための通信用インタフェースなども備えているが、説明の便宜上、省略している。
【００２５】
ＣＰＵ２０は、メモリ３０より、分散印刷やデータ通信を実行するためのソフトウェアなどのプログラムを読み出して、実行することにより、図示した各機能をソフトウェア的に実現する。なお、各機能をハードウェア的に構築しても構わない。
【００２６】
ＣＰＵ２０によって実現される機能ブロックには、ＴＣＰ／ＩＰ部１０と、分散制御部４０と、印刷ジョブ受信部５０が含まれる。ＴＣＰ／ＩＰ部１０は、ＴＣＰ／ＩＰプロトコルを解釈して、主としてネットワークを介して外部との通信を行う。ＴＣＰ／ＩＰプロトコルにおいてトランスポート層の処理を行うプロトコルとして、ＴＣＰ（Transmission Control Protocol）とＵＤＰ（User Datagram Protocol）がある。ＴＣＰは、信頼性の高いコネクション型の通信を実現するプロトコルである。一方、ＵＤＰは、高速なコネクションレス型の通信を実現するプロトコルである。ＴＣＰ／ＩＰ部１０は、後述する印刷ジョブの通信をＴＣＰを用いて行うと共に、後述するＳＮＭＰによる通信をＵＤＰを用いて行う。
【００２７】
分散制御部４０は、分散印刷を指定した印刷ジョブ（以下、分散印刷ジョブともいう。）を受信して、分散先に印刷ジョブを分散する。分散制御部４０が実行する処理については、さらに後述する。
【００２８】
印刷ジョブ受信部５０は、サブ機能ブロックとして複数のサブ受信部を備える。本実施例では、３つのサブ受信部が備えられており、それぞれ第１受信部５１、第２受信部５２、第３受信部５３と呼ぶこととする（図２参照）。３つの受信部はそれぞれ、分散印刷を指定していない通常の印刷ジョブ（以下、通常印刷ジョブという。）を受信してプリンタ本体ＰＲＢに供給する。これらの３つの受信部は、それぞれ独立して機能する。この結果、印刷ジョブ受信部５０は、並行して３つの印刷ジョブを並行して受信することができる。
【００２９】
メモリ３０は、上述の機能を実現するためのプログラムを格納する他、主として印刷ジョブ受信部５０により受信された印刷ジョブを一時的に格納する受信バッファとして機能する。
【００３０】
プリンタＰＲＴ２は、図２に示すように、プリンタ本体ＰＲＢおよび上述したネットワークボード２００を備えている。プリンタ本体ＰＲＢの構成は、上述したプリンタＰＲＴ１のプリンタ本体ＰＲＢと同一の構成を有しているので、各構成要素にプリンタＰＲＴ１のプリンタ本体ＰＲＢの構成要素と同一の符号を付しその説明を省略する。ネットワークボード２００は、上述したカスタムネットワークボード１００が有する機能のうち、分散制御部４０を除く構成要素を有している。すなわち、ネットワークボード２００は、ＴＣＰ／ＩＰ部１０と、印刷ジョブ受信部５０と、メモリ３０を有している。ネットワークボード２００の各構成要素は、カスタムネットワークボード１００の同名の構成要素と同様の機能や構成を有しているのでその説明を省略する。
【００３１】
ここで、上記説明から解るように、プリンタＰＲＴ１およびＰＲＴ４に搭載されたカスタムネットワークボード１００は、プリンタＰＲＴ２およびプリンタＰＲＴ３に搭載されたネットワークボード２００の備える機能を全て備えている。すなわち、カスタムネットワークボード１００の分散制御部４０からみて、プリンタＰＲＴ１〜プリンタＰＲＴ４は、全て等価であり、後述する分散印刷処理において全て分散先プリンタとして指定され得る。分散制御部４０は、分散制御部４０自体が内蔵されているプリンタＰＲＴ１についても、他のプリンタについても区別なく扱うことができる。
【００３２】
クライアントＣＬａは、図２に示すように、アプリケーション１１の他、機能ブロックとして、ＴＣＰ／ＩＰ部１３と印刷ジョブ送信部１２とを有している。ＴＣＰ／ＩＰ部１３は、ＴＣＰ／ＩＰプロトコルを解釈して、主としてネットワークを介して外部との通信を行う。印刷ジョブ送信部１２は、アプリケーション１１の印刷要求に応じて印刷ジョブを生成し、ＴＣＰ／ＩＰ部１３を介して生成された印刷ジョブをプリンタＰＲＴに送信する。なお、分散印刷を指定する分散印刷ジョブは、カスタムネットワークボード１００を備えるプリンタＰＲＴ１およびＰＲＴ４にのみ送信することができ、分散印刷を指定しない通常印刷ジョブは、プリンタＰＲＴ１〜ＰＲＴ４のいずれにも送信することができる。
【００３３】
プリンタＰＲＴ４は、上述したプリンタＰＲＴ１と同様の構成を有し、プリンタＰＲＴ３は、上述したプリンタＰＲＴ２と同様の構成を有している。クライアントＣＬｂは、上述したクライアントＣＬａと同様の構成を有している。これらについては、詳しい説明を省略する。
【００３４】
なお、以上の説明からも解るように、本実施例におけるＴＣＰ／ＩＰ部１０は、請求項における通信部に、プリンタ本体ＰＲＢは、請求項における印刷実行部に、プリンタエンジン８０は、請求項における印刷部に、それぞれ相当する。
【００３５】
・分散印刷処理：
次に、図３〜図５を参照して、分散印刷処理について詳細に説明する。図３は、印刷ジョブのデータ構造を示す概念図である。図４は、分散印刷処理の処理ルーチンを示すフローチャートである。図５は、印刷ジョブが複数の印刷ジョブ受信部５０に送信される通信シーケンスの一例を示す説明図である。
【００３６】
分散印刷処理は、カスタムネットワークボード１００のＣＰＵ２０が備える分散制御部４０によって実行される処理である。分散制御部４０は、指定された印刷部数を、分散先のプリンタに配分して印刷する。分散制御部４０は、印刷部数を１００部とした分散印刷ジョブを受信した場合には、例えば、印刷部数を２５部とした通常印刷ジョブをプリンタＰＲＴ１〜ＰＲＴ４にそれぞれ送信する。これによって、分散印刷システム全体として１００部の印刷が実行される。
【００３７】
印刷ジョブは、ＴＣＰ／ＩＰプロトコルに従った形式の通信データとして送信される。この通信データは、図３（ａ）に示すように、ヘッダ４００と、データ部４５０とに分かれている。このうち、ヘッダ４００には、その通信データの送信元である機器のＩＰアドレス（送信元ＩＰアドレス）と、その機器内における送信元であるソフトウェアを特定するポート番号（送信元ポート番号）と、を含む他、その通信データの送信先である機器のＩＰアドレス（送信先ＩＰアドレス）と、その機器内における送信先であるソフトウェアを特定するポート番号（送信先ポート番号）とを含んでいる。送信元である機器のソフトウェアから発信された通信データは、送信先ＩＰアドレスに従って、そのＩＰアドレスを有する機器に送信され、さらに、受信したその機器内では、送信先ポート番号に従って、その番号のポートで待機しているソフトウェアに渡される。データ部４５０は、送受信の対象となるデータが格納される部分であり、本実施例では、後述する印刷ジョブデータ５００が格納される。
【００３８】
印刷ジョブデータ５００は、図３（ｂ）に示すように、ジョブ制御言語部５０１と、ページ記述言語部５０２を有している。ページ記述言語部５０２は、印刷内容が所定のページ記述言語を用いて記述されている部分である。ページ記述言語としては、ESC/PageやPostscriptなどが用いられ得る。ジョブ制御言語部５０１は、印刷部数、印刷用紙サイズ、ページ記述言語部５０２の記述に使用されているページ記述言語の種別を始め、ページ記述言語部５０２に記述された印刷内容を印刷するために必要な属性が記述されている。ジョブ制御言語部５０１は、所定のジョブ制御言語、本実施例ではＥＪＬ（Epson Job Language）を用いて記述されている。
【００３９】
分散印刷を行う際には、ユーザは、クライアント（例えば、クライアントＣＬａ（図１））におけるプリンタドライバにおいて、送信先ポート番号の設定を、通常の「９１００」から特定の「５９１００」に変更する。すなわち、本実施例では、ここでのポート番号の設定を切り換えることにより、通常の「９１００」では通常印刷を、特定の「５９１００」では分散印刷を、それぞれ選択することになる。ポート番号「９１００」で待ち受けているのは、上述した印刷ジョブ受信部５０である。一方、ポート番号「５９１００」で待ち受けているのは、上述した分散制御部４０である。
【００４０】
図４を参照しながら、分散印刷処理を順を追って説明していく。カスタムネットワークボード１００が搭載されたプリンタ（例えば、プリンタＰＲＴ１）が印刷ジョブを受け付ける状態にあるとき、分散制御部４０は、ポート番号「５９１００」に印刷ジョブが着信するまで待機している（ステップＳ１０２）。
【００４１】
クライアントＣＬから送信先ポート番号として「５９１００」を指定した印刷ジョブ（分散印刷ジョブ）を含む通信データがプリンタＰＲＴ１に着信すると（ステップＳ１０２：ＹＥＳ）、ＴＣＰ／ＩＰ部１０は、ポート番号「５９１００」で待機している分散制御部４０に印刷ジョブを渡す。分散制御部４０は、受け取った印刷ジョブの最初の部分（後述するパケットＰ１）を、メモリ３０に一時的に格納しておく（ステップＳ１０４）。
【００４２】
ここで、印刷ジョブデータ５００の大きさは、一部あたりの印刷量に応じて大きくなるのに対し、メモリ３０において、印刷ジョブデータ５００の格納に用いられる記憶領域の容量は限られているので、印刷ジョブデータ５００は、その記憶領域の容量より小さなデータの固まり（以下、パケットという。）に分割して取得される。図３（ｃ）では、印刷ジョブデータ５００は、各パケットＰ１〜Ｐ８に分けられている。上述したステップＳ１０２で印刷ジョブが着信した時点では、パケットＰ１のみが取得され、メモリ３０に格納されている。
【００４３】
図４に戻って、説明を続ける。次に、分散制御部４０は、分散先プリンタを選択するための処理（ステップＳ１０６〜Ｓ１１４）を実行する。先ず、分散制御部４０は、ネットワーク上に接続された機器のＩＰアドレスを取得する（ステップＳ１０６）。例えば、分散制御部４０は、ＳＮＭＰを用いてＬＡＮに対し、ブロードキャストでＬＡＮに接続されている各機器のＩＰアドレスを問い合わせ、応答されたＩＰアドレスを取得する。あるいは、分散制御部４０は、分散先指定ファイルが設定されている場合には、分散先指定ファイルを参照して、ＩＰアドレスを取得する。分散先指定ファイルには、例えば、分散先として使用したいプリンタのＩＰアドレスが列挙して記載されている。このような分散先指定ファイルは、例えば、サービスマンが、プリンタＰＲＴ１を設置して初期設定する際に、そのプリンタＰＲＴ１に設定用コンピュータなどを接続して、インストールすることにより、メモリ３０に格納することができる。また、ＬＡＮを介してインストールするようにしてもよい。なお、このような分散先指定ファイルを用いる場合、分散先として自己のプリンタＰＲＴ１も使用したい場合には、自己プリンタＰＲＴ１のＩＰアドレス「ＩＰ１」も、分散先指定ファイルに記載しておく必要がある。
【００４４】
次に、分散制御部４０は、取得されたＩＰアドレスを割り当てられた各機器に関する情報を取得する（ステップＳ１０８）。具体的には、分散制御部４０は、ＳＮＭＰを用いて、マルチキャストで各機器に対して問い合わせを行い、問い合わせの応答として機種名およびステータスを取得する。
【００４５】
分散制御部４０は、取得された機種名およびステータスに基づいて、ネットワーク上に接続された機器の中から所定の条件を満たすプリンタを検索し、検索されたプリンタを分散先プリンタとして選択する（ステップＳ１１０）。本実施例では、分散先プリンタとして、上述したプリンタＰＲＴ１〜ＰＲＴ４の一部または全部が分散先プリンタとして選択されるものとする。プリンタが分散先プリンタとして選択されるための条件を、以下に示す。
１．自己プリンタ（例えば、プリンタＰＲＴ１）と同一の機種であること。
２・電源が投入されていること。
３．トナー残量が所定の閾値以上であること。
４．オンライン状態にあること。
５．印刷中でないこと（プリンタエンジン８０が駆動中でないこと）。
【００４６】
自己プリンタＰＲＴ１と同一機種であることを、分散先プリンタとして選択する条件とするのは、分散印刷を行う際に、各分散先プリンタにおいて、印刷ジョブのデータ変換などをすることなく、適正な印刷を行わせるためである。この結果、各分散先プリンタでの印刷物の品質、例えば、解像度やフォントなどを統一することができる。
【００４７】
２〜５の条件は、すぐに印刷できないプリンタを分散先プリンタとして選択することを防ぐためである。オンライン状態とは、用紙切れや紙詰まりといったエラーを起こしている状態（オフライン状態）ではない正常な状態のことを指す。
【００４８】
そして、分散制御部４０は、１台以上の分散先プリンタが選択されたか否かを判断する（ステップＳ１１２）。一台の分散先プリンタも選択されていない場合（ステップＳ１１２：ＮＯ）には、分散制御部４０は、所定期間待機して（ステップＳ１１４）、ステップＳ１０６〜ステップＳ１１２の処理を繰り返す。
【００４９】
分散先プリンタが一台以上選択されると（ステップＳ１１２：ＹＥＳ）には、分散制御部４０は、選択された各分散先プリンタとの間に、分散制御部４０から分散先プリンタの印刷ジョブ受信部５０に印刷ジョブを送信するためのコネクションを確立する（ステップＳ１１６）。具体的には、分散制御部４０は、カスタムネットワークボード１００のＴＣＰ／ＩＰ部１０に、分散先プリンタのＴＣＰ／ＩＰ部１０との間で、コネクションの確立処理を行わせる。カスタムネットワークボード１００から分散先プリンタへの第１の確立要求を示すＴＣＰパケット（ＳＹＮパケット）と、第１の確立要求に対する受信確認と分散先プリンタからカスタムネットワークボード１００への第２の確立要求とを兼ねるＴＣＰパケット（ＡＣＫ／ＳＹＮパケット）と、第２の確立要求に対する受信確認を示すＴＣＰパケット（ＡＣＫパケット）とが、２つのＴＣＰ／ＩＰ部１０間において、順次やり取りされると、コネクションが確立される。
【００５０】
分散制御部４０は、確立された各コネクションを介して、各分散先プリンタに印刷ジョブを送信する（ステップＳ１１８）。送信される印刷ジョブのジョブ制御言語部５０１には、分散先ごとに配分される印刷部数が記述される。また、送信される印刷ジョブは、送信先ポート番号を「９１００」として送信される。ここで、図５を参照して分散印刷処理における分散制御部４０から分散先プリンタ（印刷ジョブ受信部５０）への印刷ジョブの送信について、さらに説明する。図５では、プリンタＰＲＴ１の分散制御部４０がクライアントＣＬａから印刷ジョブを受信し、２つのプリンタＰＲＴ２およびプリンタＰＲＴ３の各印刷ジョブ受信部５０に対して、その印刷ジョブを送信（分散）する様子を示している。
【００５１】
図３（ｃ）を参照して上述したように、印刷ジョブデータ５００は、所定のパケットに分けてクライアントから取得される。このため、分散制御部４０から分散先プリンタの印刷ジョブ受信部５０への印刷ジョブの送信は、パケット単位で複数回に分けて行う必要がある。図５に示す例では、図３（ｃ）に示す８つのパケットＰ１〜Ｐ８に分けられた印刷ジョブデータ５００が送信される場合を示している。
【００５２】
分散制御部４０が印刷ジョブの送信（ステップＳ１１８）を開始すると、まず、最初にメモリ３０に格納されているパケットＰ１（ジョブ制御言語部５０１を含む印刷ジョブの最初のパケット）をプリンタＰＲＴ２およびプリンタＰＲＴ３の印刷ジョブ受信部５０にそれぞれ送信する。以下、このようにパケットを複数の分散先プリンタの印刷ジョブ受信部５０にそれぞれ送信することをパケット分散という。図５において、記号ＰＤで示す破線で囲まれた矢印の集合は、１回のパケット分散に対応している。
【００５３】
最初のパケットＰ１のパケット分散ＰＤの終了が確認されると、分散制御部４０は、図５に示すようにクライアントＣＬａから次のパケットＰ２を受信する。パケット分散ＰＤの終了の確認は、ＴＣＰプロトコルにしたがって送信元と送信先のＴＣＰ／ＩＰ部１０が行う。分散制御部４０は、メモリ３０に格納されたパケットＰ１を消去して、新たに受信されたパケットＰ２をメモリ３０に格納する。分散制御部４０は、メモリ３０に格納されたパケットＰ２について、パケットＰ１と同様にパケット分散ＰＤを実行する。同様の処理を印刷ジョブデータ５００を構成する残りのパケットＰ３〜Ｐ８について繰り返し実行することにより、印刷ジョブデータ５００の全体が、最終的にプリンタＰＲＴ２およびプリンタＰＲＴ３の印刷ジョブ受信部５０にそれぞれ送信される。
【００５４】
・分散先プリンタにおける処理：
次に、図６〜図８を参照して、分散先プリンタとしてのプリンタＰＲＴにおける処理について説明する。図６は、コネクション確立処理の処理ルーチンを示すフローチャートである。図７は、印刷処理の処理ルーチンを示す第１のフローチャートである。図８は、印刷処理の処理ルーチンを示す第２のフローチャートである。図９は、複数の印刷処理が並行して実行される様子を概念的に示す説明図である。
【００５５】
先ず、プリンタＰＲＴのＴＣＰ／ＩＰ部１０が実行するコネクション確立処理について説明する。プリンタＰＲＴに電源が投入されている場合には、常時、このコネクション確立処理が実行されている。ＴＣＰ／ＩＰ部１０は、現在、保持されているコネクションの数が３未満であるか否かを判断する（ステップＳ２０２）。コネクションが、既に３つ保持されていると判断すると（ステップＳ２０２：ＮＯ）、ＴＣＰ／ＩＰ部１０は、保持されているコネクションの数が３未満になるまで待機する。つまり、ＴＣＰ／ＩＰ部１０は、３つ以上のコネクションが同時に保持されないように、新たなコネクションの確立を行わない。コネクションの最大保持数（本実施例では、３）は、プリンタＰＲＴが並行して受信して処理可能な印刷ジョブの数（本実施例では、３）に等しくなるように設定される。
【００５６】
一方、ＴＣＰ／ＩＰ部１０は、現在確立されているコネクションの数が３未満であると判断すると（ステップＳ２０２：ＹＥＳ）、ＴＣＰ／ＩＰ部１０は、コネクションの確立要求の有無を監視する（ステップＳ２０４）。印刷ジョブを送信しようとする機器（以下、送信機器ともいう。）は、印刷ジョブの送信に先立ってコネクションを確立する必要があるため、先ず、コネクションの確立要求（ＳＹＮパケット）を送信してくる。送信機器には、例えば、上述のカスタムネットワークボード１００（分散制御部４０）、あるいは、クライアントＣＬが該当する。ＴＣＰ／ＩＰ部１０は、コネクションの確立要求を受信すると（ステップＳ２０４：ＹＥＳ）、コネクションの確立要求を送信してきた機器から印刷ジョブを受信するためのコネクションを確立する（ステップＳ２０６）。ＴＣＰ／ＩＰ部１０は、その後、ステップＳ２０２にリターンする。
【００５７】
図７〜８を参照して、上述したコネクション確立処理によってコネクションが確立された場合に実行される印刷処理について説明する。コネクションが確立されると、コネクションを介して送信機器から印刷ジョブが送信されてくる。第１受信部５１〜第３受信部５３の中で別の印刷ジョブの受信中でないサブ受信部は、印刷ジョブが送信されてくるのを待機しており（ステップＳ３０２）、印刷ジョブが送信されてくると、送信されてくる印刷ジョブを受信する（ステップＳ３０４）。以下、第１受信部５１が印刷ジョブを受信するとして説明を続ける。第１受信部５１は受信した印刷ジョブをメモリ３０に格納しておく必要があるので、一度に受信できるデータ量は限られている。このため、第１受信部５１は、一度に受信可能な所定データ量分だけ印刷ジョブを先頭から順次受信する。
【００５８】
続いて、第１解釈部９１は、受信された印刷ジョブを解釈して画像データを生成する（ステップＳ３０６）。生成された画像データは、メモリ７０に格納される。次に、１ページ分の画像データが生成されたか否かが調べられる（ステップＳ３０８）。１ページ分の画像データが生成されたか否かは、改ページ要求まで印刷ジョブを解釈したか否かによって判断される。１ページ分の画像データが生成されていると（ステップＳ３０８：ＹＥＳ）、第１解釈部９１は、生成された１ページ分の画像データについて印刷要求を発行する（ステップＳ３１０）。１ページ分の印刷要求が発行されるか、あるいは、１ページ分の画像データが生成されていない場合には（ステップＳ３０８：ＮＯ）、既に受信されていながら未処理の印刷ジョブが有るか否かが調べられる（ステップＳ３１２）。未処理の印刷ジョブが有る場合には（ステップＳ３１２：ＹＥＳ）、未処理の印刷ジョブを解釈するため、ステップＳ３０６に戻る。
【００５９】
一方、未処理の印刷ジョブがない場合には（ステップＳ３１２：ＮＯ）、送信機器からコネクションの終了要求が有るか否かが調べられる（ステップＳ３１４）。送信機器は、印刷ジョブを全て送信し終わると、コネクションの終了要求を送信してくる。従って、送信機器からコネクションの終了要求がない場合には（ステップＳ３１４：ＮＯ）、送信機器からさらに印刷ジョブが送信されてくるので、ステップＳ３０４に戻って上述のステップ（Ｓ３０４〜Ｓ３１２）を繰り返す。
【００６０】
一方で、送信機器からコネクションの終了要求が有った場合には（ステップＳ３１４：ＹＥＳ）、印刷ジョブは全て受信されたことになるので、コネクションは終了される（ステップＳ３１６）。その後、メモリ７０に、まだ印刷要求が未発行の画像データが有るか否かが調べられる（ステップＳ３１８）。未発行の画像データがない場合には（ステップＳ３１８：ＮＯ）、本処理は終了される。一方、未発行の画像データが有る場合には（ステップＳ３１８：ＹＥＳ）、第１解釈部９１は、未発行の画像データについて１ページ分の印刷要求を発行し（ステップＳ３２０）、本処理は終了される。ここで、ステップＳ３１８において、未発行の画像データの有無を調べるのは、印刷ジョブの最後に改ページ要求がある場合と、改ページ要求がない場合とがあるからである。印刷ジョブの最後に改ページ要求がある場合は、コネクションの終了後に未発行の画像データはないので（ステップＳ３１８：ＮＯ）、そのまま処理が終了される。一方、印刷ジョブの最後に改ページ要求がない場合には、コネクション終了後に未発行の画像データがメモリ７０に残るので（ステップＳ３１８：ＹＥＳ）、上述のステップＳ３２０の処理が必要になる。
【００６１】
以上のように、印刷ジョブを受信しながら、１ページ分の印刷要求を順次発行していく。画像データを格納するメモリ７０には限界があるので、メモリ７０の残容量がなくなると、本処理は一時中断される。後述する図８の処理によって、１ページ分の印刷要求に応じて印刷が実行されると印刷済みの画像データを消去して、本処理は再開される。
【００６２】
図７に示す処理と並行して、図８に示すように印刷要求に応じて、印刷を実行する処理が行われる。本処理では、印刷要求が発行される（図７：ステップＳ３１２、Ｓ３１４）のを待ち受けており（ステップＳ４０２）、発行された印刷要求を受信すると（ステップＳ４０２：ＹＥＳ）、プリンタエンジン８０が別の印刷ジョブの印刷中であるか否かが調べられる（ステップＳ４０４）。プリンタエンジン８０が別の印刷ジョブの印刷中である場合には（ステップＳ４０４：ＹＥＳ）、直ちに印刷を実行できないため本処理における印刷ジョブの印刷順が来るまで待機する（ステップＳ４０６）。プリンタエンジン８０が印刷中でない場合には（ステップＳ４０４：ＮＯ）、本処理のためにプリンタエンジン８０が占有され（ステップＳ４０８）、プリンタエンジン８０は、図７に示す処理において生成された画像データに基づいて１ページ分の印刷を実行する（ステップＳ４１０）。例えば、５ページを一部とする印刷物を１０部印刷する印刷ジョブである場合において、１ページ目の印刷要求が受信されたとすると、本ステップにおいて１ページ目が１０部印刷される。
【００６３】
印刷された紙（印刷紙）はソータ８５に送られ、ソータ８５は印刷紙を複数の排紙ビンのうちの特定の排紙ビンに収納する（ステップＳ４１２）。特定の排紙ビンは、印刷ジョブごとに定められており、１の印刷ジョブに係る印刷紙は、１の排紙ビンに収納される。１ページ分の印刷が終了すると、プリンタエンジン８０は、本処理による占有から解放される（ステップＳ４１４）。つまり、印刷順が来るまで待機している他の印刷処理が存在する場合には、他の印刷処理にプリンタエンジン８０の占有を譲ることになる。
【００６４】
続いて、印刷されたページが最終ページか否かが判断され（ステップＳ４１６）、最終ページではないと判断されると（ステップＳ４１６：ＮＯ）、ステップＳ４０２に戻って次ページの印刷要求が受信されるのを待つ。一方、印刷されたページが最終ページか最終ページであると判断されると（ステップＳ４１６：ＹＥＳ）、本処理は終了される。
【００６５】
プリンタＰＲＴは、以上説明した印刷処理を、３つまで並行して処理することができる。上記の説明では、印刷ジョブの受信（ステップＳ３０２）と印刷ジョブの解釈処理（ステップＳ３０４）は、それぞれ第１受信部５１と第１解釈部９１により実行されている。複数の印刷処理が並行して処理される場合には、これらの処理は、第１受信部５１と第１解釈部９１、第２受信部５２と第２解釈部９２、あるいは、第３受信部５３と第３解釈部９３によって、それぞれ別々に処理されるので、互いに影響を与えることなく処理される。図９には、３つの送信機器（クライアントＣＬａ、プリンタＰＲＴ４の分散制御部４０、および、プリンタＰＲＴ１の分散制御部４０）からそれぞれ送信された印刷ジョブがプリンタＰＲＴにおいて並行して処理される様子が示されている。
【００６６】
ただし、プリンタＰＲＴのプリンタエンジン８０は１つであるので、並行して処理される複数の印刷処理において、プリンタエンジン８０を排他的に使用する必要がある。本実施例では、上述した図８に示す処理から解るように、各印刷処理は、一枚ずつ印刷を実行するごとに、プリンタエンジン８０の占有を解放する。このようにして、各印刷処理が交代でプリンタエンジン８０を順次占有することによって、並行して複数の印刷処理を進めることができる。言い換えれば、プリンタＰＲＴは、複数の印刷ジョブについて一枚ずつ印刷することによって、複数の印刷ジョブを並行して処理することができる。
【００６７】
以上説明した本実施例におけるプリンタＰＲＴによれば、印刷ジョブを受信するためのコネクションが同時に保持される数は、並行して受信可能な印刷ジョブの数（３つ）以下に制限される。この結果、送信機器とプリンタＰＲＴとのコネクションが確立されれば、コネクションを介して送信された印刷ジョブは必ずプリンタＰＲＴによって受信されるので、送信機器はいわゆる待機状態にされることがない。
【００６８】
従って、実施例におけるプリンタＰＲＴを分散印刷処理における分散先プリンタとして用いれば、分散印刷処理におけるデッドロックの発生を防止することができる。ここで、デッドロックとは、分散印刷処理が完全に停止してしまう不具合をいうものとする。例えば、２以上のカスタムネットワークボード１００（分散制御部４０）と、２以上のカスタムネットワークボード１００のそれぞれが印刷ジョブの分散先として指定可能な２以上の分散先プリンタとを含む分散印刷システムがあるとする。このシステムにおいて、２以上のカスタムネットワークボード１００が、分散印刷処理によって、ほぼ同時に２以上の分散先プリンタに対して印刷ジョブを送信しようとした場合に、従来はデッドロックが発生する場合があった。
【００６９】
ここで、理解の容易のため、図１０〜図１２を参照して、デッドロックが発生するメカニズムについて説明する。図１０は、従来のプリンタにおける印刷ジョブの受信を概念的に示す説明図である。図１１は、デッドロックの発生する場合の通信シーケンスを示す説明図である。図１２は、デッドロックが発生する場合を概念的に示す説明図である。
【００７０】
先ず、図１０を参照して、従来のプリンタによる印刷ジョブの受信について説明する。従来のプリンタは、同時に保持可能なコネクションの数は、並行して受信可能な印刷ジョブの数より多かった。例えば、図１０に示す従来のプリンタＰＲは、同時に保持可能なコネクションの数は８つであり、並行して受信可能な印刷ジョブの数は１つである。
【００７１】
図１０は、このようなプリンタＰＲに対して、３つのクライアントＣＬａ〜ＣＬｃとが、並行して印刷ジョブを送信しようとする様子を概念的に示している。記号ＣＮ１〜ＣＮ３と、クライアントＣＬａ〜ＣＬｃの各ＴＣＰ／ＩＰ部１３とプリンタＰＲのＴＣＰ／ＩＰ部１との間で確立されたコネクションを示しており、符号の末尾の数字は、コネクションが確立された時間的な順番を示している。すなわち、クライアントＣＬａのＴＣＰ／ＩＰ部１３が１番先に、クライアントＣＬｃのＴＣＰ／ＩＰ部１３が２番目に、クライアントＣＬｂのＴＣＰ／ＩＰ部１３が３番目に、それぞれプリンタＰＲのＴＣＰ／ＩＰ部１とコネクションを確立したことを示している。
【００７２】
上述したように、ＴＣＰ／ＩＰ部１は複数のコネクションを保持できるのに対して、プリンタＰＲの受信部２は１つずつ印刷ジョブを受信するように構成されている。プリンタＰＲのプリンタ本体（図示せず。）が並行して複数の印刷ジョブを処理することができないからである。受信部２は、先に確立されたコネクションを介して送信される印刷ジョブを優先して受信する。図１０に示す具体例では、受信部２は、最初に確立されたコネクションＣＮ１を介して、クライアントＣＬａから送信される印刷ジョブを、最初に受信する（図１０（ａ））。受信部２は、印刷プロトコルに従って、受信された印刷ジョブをプリンタ本体に供給する。受信部２がクライアントＣＬａから送信される印刷ジョブを受信している間、他のクライアントＣＬｂ、ＣＬｃは、コネクションＣＮ３、２を保持したまま、待機させられる。さらに、詳しく説明するとＴＣＰプロトコルを用いた通信では、データのフロー制御（データの流れを許可したり禁止したりする制御）がなされており、コネクションを介してＴＣＰ／ＩＰ部１の上位アプリケーションである受信部２が印刷ジョブを受信しない（ＴＣＰ／ＩＰ部１から受け取らない）場合は、ＴＣＰ／ＩＰ部１はフロー制御によりデータの流れを禁止する。すなわち、送信元のＴＣＰ／ＩＰ部（この例ではクライアントＣＬｂ、ＣＬｃのＴＣＰ／ＩＰ部１３）に対して、データを送信しないように通知する。この状態では、クライアントＣＬｂ、ＣＬｃは、データを送信することができず、データの送信が許可されるまで待機することになる。以下、このような状態を待機状態という。
【００７３】
そして、受信部２がクライアントＣＬａから送信される印刷ジョブを全て受信すると、ＴＣＰ／ＩＰ部１は、コネクションＣＮ１を終了する。コネクションＣＮ１が終了された後、図１０（ｂ）に示すように、受信部２は、２番目に確立されたコネクションＣＮ２を介して、クライアントＣＬｃから印刷ジョブを受信する。受信部２がコネクションＣＮ２を介して送信されてきた印刷ジョブを受信する（ＴＣＰ／ＩＰ部１から受け取る）ようになると、ＴＣＰ／ＩＰ部１は上述したフロー制御によりデータの流れを許可する。すなわち、ＴＣＰ／ＩＰ部１は、送信元（クライアントＣＬｃ）のＴＣＰ／ＩＰ部１３に、データの送信を許可する。こうして、クライアントＣＬｃは、待機状態から解放されて、印刷ジョブを送信できるようになる。
【００７４】
このように、受信部２が、コネクションが確立された順番に印刷ジョブを順次受信し、受信された印刷ジョブをプリンタ本体に順次供給することによって、クライアントのアクセス順に印刷が順次実行される。
【００７５】
以上の説明した従来のプリンタＰＲを２台（プリンタＰＲ２とプリンタＰＲ３と呼ぶ。）分散先プリンタとして用いて、例えば、プリンタＰＲＴ１の分散制御部４０とプリンタＰＲＴ４の分散制御部４０が、それぞれほぼ同時に分散印刷処理を実行する場合を考える。プリンタＰＲＴ１の分散制御部４０とプリンタＰＲＴ４の分散制御部４０は、２台のプリンタＰＲ２、ＰＲ３に対して印刷ジョブを送信するためにそれぞれコネクションを確立したとする。上述したように、プリンタＰＲ２、ＰＲ３のＴＣＰ／ＩＰ部１は、複数のコネクションを同時に保持することができるので、各コネクションの確立は成功する。図１１において、白抜きの丸は、プリンタＰＲＴ１の分散制御部４０とプリンタＰＲ２およびプリンタＰＲ３の各受信部２との間のコネクションが確立されたタイミングを示している。一方、黒塗りの丸は、プリンタＰＲＴ４の分散制御部４０とプリンタＰＲ２およびプリンタＰＲ３の各受信部２との間のコネクションが確立されたタイミングを示している。
【００７６】
図１１に示すように、プリンタＰＲ２の受信部２とのコネクションは、プリンタＰＲＴ１の分散制御部４０が先に確立している。従って、プリンタＰＲ２の受信部２は、プリンタＰＲＴ１の分散制御部４０から送信されてくる印刷ジョブを優先的に受信し、この印刷ジョブの受信が全て終了するまで、プリンタＰＲＴ４の分散制御部４０は待機状態にされる。
【００７７】
一方、図１１に示すように、プリンタＰＲ３の受信部２とのコネクションは、プリンタＰＲＴ４の分散制御部４０が先に確立している。従って、プリンタＰＲ３の受信部２は、プリンタＰＲＴ４の分散制御部４０から送信されてくる印刷ジョブを優先的に受信し、この印刷ジョブの受信が全て終了するまで、プリンタＰＲＴ１の分散制御部４０は待機状態にされる。図１１において、太い実線は、優先的に印刷ジョブを受信するコネクションＣＮ１２、ＣＮ４３を示し、細い実線は、待機状態にされているコネクションＣ４２、Ｃ１３を示している。
【００７８】
このような状態から、プリンタＰＲＴ１の分散制御部４０は、確立されたコネクションＣ１２、Ｃ１３を介して、上述したパケット分散ＰＤ（図５）を実行してプリンタＰＲ２、ＰＲ３の各受信部２に印刷ジョブを送信しようとする。かかる場合には、プリンタＰＲ２の受信部２に送信されるパケットＰ１は、コネクションＣＮ１２の優先順位が高いため直ちに受信されるが、プリンタＰＲ３の受信部２に送信されるパケットＰ１は、コネクションＣＮ１３の優先順位が低いために受信されない。そのため、プリンタＰＲＴ１の分散制御部４０は、１回目のパケット分散ＰＤを終了することができず待機状態になる。
【００７９】
同様にして、プリンタＰＲＴ４の分散制御部４０は、確立されたコネクションＣ４２、Ｃ４３を介して、プリンタＰＲ２、ＰＲ３の各受信部２に印刷ジョブを送信しようとする。かかる場合には、プリンタＰＲ３の受信部２に送信されるパケットＰ１は、コネクションＣＮ４３の優先順位が高いため直ちに受信されるが、プリンタＰＲ２の受信部２に送信されるパケットＰ１は、コネクションＣＮ４２の優先順位が低いために受信されない。そのため、プリンタＰＲＴ１の分散制御部４０と同様に、プリンタＰＲＴ４の分散制御部４０は、１回目のパケット分散ＰＤを終了することができず待機状態になる。
【００８０】
この結果、プリンタＰＲＴ１の分散制御部４０およびプリンタＰＲＴ４の分散制御部４０による分散印刷処理は、両方とも完全に停止状態に陥ってしまう。プリンタＰＲＴ１の分散制御部４０の待機状態は、プリンタＰＲＴ４の分散制御部４０による分散印刷処理が終了するまで解消されず、一方でプリンタＰＲＴ４の分散制御部４０の待機状態は、プリンタＰＲＴ１の分散制御部４０による分散印刷処理が終了するまで解消されないためである。
【００８１】
図１１に示すようなデッドロックは、図１２に示すような場合に起こる。概念的に説明すると、印刷ジョブの送信側である複数の分散制御部と、受信側である複数の受信部があり、分散制御部と受信部間の通信のためのコネクションによって、分散制御部と受信部とを交互に結ぶ閉じた環が形成され得るシステムにおいて、デッドロックが起きうる。上述したようにコネクションの環が確立され、環上にある全ての受信部に少なくとも待機状態になるコネクションが１つ以上ある状態で、分散印刷処理が実行されるとデッドロック状態になる。図１２において、コネクションに付されている番号は、１が即時受信状態のコネクション、２が待機状態のコネクションを示している。
【００８２】
本実施例に係るプリンタＰＲＴを分散先プリンタとして上述したような分散印刷処理を実行すれば、印刷ジョブを送信しようとする分散制御部４０が待機状態にされることはないので、上述したデッドロックの発生を防止することができる。例えば、図１１に示すようなタイミングでコネクションの確立がおこなわれたとしても、プリンタＰＲＴ１の分散制御部４０から送信される印刷ジョブとプリンタＰＲＴ４の分散制御部４０から送信される印刷ジョブとを並行して受信し、並行して印刷処理を実行することができるからである。また、並行して受信可能な数（本実施例では３つ）を超える数のコネクションが確立されることはない（図６）。
【００８３】
さらに、本実施例におけるプリンタＰＲＴの印刷ジョブ解釈部９０は、複数のサブ解釈部（第１解釈部９１〜第３解釈部９３）を備え、並行して印刷ジョブを解釈することができる。この結果、並行して受信されて複数の印刷ジョブを速やかに解釈して印刷処理を進めることができる。
【００８４】
また、各印刷ジョブについて１ページずつ印刷することを繰り返して、複数の印刷ジョブを処理していくので、プリンタＰＲＴは全ての印刷ジョブを一度に受信する必要がない。この結果、プリンタＰＲＴに搭載するメモリ３０およびメモリ７０の容量を低減することができる。
【００８５】
さらに、複数の印刷ジョブ（最大３つ）を並行して処理する場合でも、印刷紙は３つの収容部を備えるソータ８５によって印刷ジョブごとに分けて収納される。この結果、複数の印刷ジョブの印刷紙が混じり合う不都合は解消される。
【００８６】
Ｂ．変形例：
プリンタＰＲＴが並行して受信できる印刷ジョブの数ｍは、上記実施例で示した３に限られない。本実施例では、ソータ８５の収容部（排紙ビン）の数３に合わせて設定されているが、さらに多数の収容部を備えるソータを用いる場合には収容部の数に応じてｍの値も増加させても良い。また、プリンタＰＲＴが受信できる印刷ジョブの数ｍは、プリンタＰＲＴごとに常に一定値である必要はなく、プリンタＰＲＴの状態に応じて動的に変化させても良い。例えば、ソータ８５の排紙ビンのうち印刷紙を収容できる状態にある排紙ビンの数に応じてｍの値を設定することができる。具体的には、ソータ８５の排紙ビンごとに印刷紙が排紙ビンに収容されているか否かを検出するセンサを設け、印刷紙が収容されていない排紙ビンの数を、ｍの値としても良い。いずれにしても、その時に設定されているｍの値に対して、同時に保持できるコネクション数ｎは、ｍ以下の自然数に制限される。こうすることによって上述した作用・効果が得られる。
【００８７】
上記実施例では、プリンタＰＲＴごとにプリンタエンジン８０は１つであるが、プリンタＰＲＴごとに複数のプリンタエンジン８０を備えても良い。例えば、上記実施例において１つのプリンタＰＲＴに３つのプリンタエンジン８０がある場合には、３つのサブ解釈部（第１解釈部９１〜第３解釈部９３）ごとに１つのプリンタエンジン８０を割り当てることができるので、より高速に印刷処理を実行することができる。
【００８８】
上記実施例では、複数の印刷ジョブを並行して処理する場合、各印刷ジョブについて１ページずつ印刷することを繰り返しているが、繰り返しの単位は１ページずつに限られない。例えば、２ページずつあるいは３ページずつ繰り返すこととしても良い。これは、画像データを一時的に格納するためのメモリ７０の容量などに応じて適宜変更することができる。
【００８９】
上記実施例におけるプリンタエンジン８０は、種々のタイプのものが用いられ得る。例えば、レーザー式に限らず、インクジェット式、昇華型、ドットインパクト式、熱転写型など、あらゆるタイプのプリンタエンジンが用いられ得る。
【００９０】
以上、本発明の実施例および変形例について説明したが、本発明はこれらの実施例および変形例になんら限定されるものではなく、その要旨を逸脱しない範囲内において種々の態様での実施が可能である。
【図面の簡単な説明】
【００９１】
【図１】実施例における分散印刷システムの概略構成を示す説明図。
【図２】分散印刷システムを構成する各機器の内部構成を示すブロック図。
【図３】印刷ジョブのデータ構造を示す概念図。
【図４】分散印刷処理の処理ルーチンを示すフローチャート。
【図５】印刷ジョブが複数の印刷ジョブ受信部に送信される通信シーケンスの一例を示す説明図。
【図６】コネクション確立処理の処理ルーチンを示すフローチャート。
【図７】印刷処理の処理ルーチンを示す第１のフローチャート。
【図８】印刷処理の処理ルーチンを示す第２のフローチャート。
【図９】複数の印刷処理が並行して実行される様子を概念的に示す説明図。
【図１０】従来のプリンタにおける印刷ジョブの受信を概念的に示す説明図。
【図１１】デッドロックの発生する場合の通信シーケンスを示す説明図。
【図１２】デッドロックが発生する場合を概念的に示す説明図。
【符号の説明】
【００９２】
１０...ＴＣＰ／ＩＰ部
１１...アプリケーション
１２...印刷ジョブ送信部
１３...ＴＣＰ／ＩＰ部
２０...ＣＰＵ
３０...メモリ
４０...分散制御部
５０...印刷ジョブ受信部
５１...第１受信部
５１...第１受信部
５２...第２受信部
５３...第３受信部
６０...ＣＰＵ
７０...メモリ
８０...プリンタエンジン
８５...ソータ
９０...印刷ジョブ解釈部
９１...第１解釈部
９２...第２解釈部
９３...第３解釈部
１００...カスタムネットワークボード
２００...ネットワークボード
４００...ヘッダ
４５０...データ部
５００...印刷ジョブデータ
５０１...ジョブ制御言語部
５０２...ページ記述言語部
ＰＲＴ、ＰＲ...プリンタ
ＣＬａ〜ＣＬｃ...クライアント
【図１】
0004438698.tif 000002
【図２】
0004438698.tif 000003
【図３】
0004438698.tif 000004
【図４】
0004438698.tif 000005
【図５】
0004438698.tif 000006
【図６】
0004438698.tif 000007
【図７】
0004438698.tif 000008
【図８】
0004438698.tif 000009
【図９】
0004438698.tif 000010
【図１０】
0004438698.tif 000011
【図１１】
0004438698.tif 000012
【図１２】
0004438698.tif 000013