(57)【特許請求の範囲】
【請求項１】
ＰＤＬ形式の印刷データを受信し、受信バッファへ格納する受信制御手段と、
前記印刷データを中間ＰＤＬコマンドに変換し、前記中間ＰＤＬコマンドから画像データを形成する画像データ形成手段と、
前記中間ＰＤＬコマンドを記憶するコマンド記憶部と、
複数のコアを有するＣＰＵと、
前記画像データ形成手段を実現する画像形成スレッドに、前記受信制御手段を実現する受信制御スレッドよりも優先的に前記コアを割り当てるシステム制御手段と、
前記画像形成スレッドの各々の１頁当りの処理時間を計測する計測手段と、
前記処理時間を元に算出される平均処理時間を前記画像形成スレッドの数毎に記録する記憶手段と、を含み、
前記システム制御手段は、前記画像形成スレッドの数を、前記平均処理時間が最も短くなる数に決定することを特徴とする印刷装置。
【請求項２】
ＰＤＬ形式の印刷データを受信し、受信バッファへ格納する受信制御手段と、
前記印刷データを中間ＰＤＬコマンドに変換し、前記中間ＰＤＬコマンドから画像データを形成する画像データ形成手段と、
前記中間ＰＤＬコマンドを記憶するコマンド記憶部と、
複数のコアを有するＣＰＵと、
前記画像データ形成手段を実現する画像形成スレッドに、前記受信制御手段を実現する受信制御スレッドよりも優先的に前記コアを割り当てるシステム制御手段と、
前記画像形成スレッドの各々の１頁当りの処理時間を計測する計測手段と、
前記処理時間を元に算出される平均処理時間を用紙サイズ毎且つ前記画像形成スレッドの数毎に記録する記憶手段と、を含み、
前記システム制御手段は、前記画像形成スレッドの数を、前記平均処理時間が最も短くなる数に決定することを特徴とする印刷装置。
【請求項３】
請求項１または２に記載の印刷装置において、
前記画像データ形成手段は、
前記印刷データを前記中間ＰＤＬコマンドに変換する第１の画像データ形成手段と、
前記中間ＰＤＬコマンドから前記画像データを形成する第２の画像データ形成手段と、を含み、
前記画像形成スレッドは、複数起動する場合には、
前記第１の画像データ形成手段を実現する第１の画像形成スレッドと
前記第２の画像データ形成手段を実現する第２の画像形成スレッドと、を含み、
前記第１の画像形成スレッドと前記第２の画像形成スレッドは、互いに並列に動作可能な異なるスレッドであることを特徴とする印刷装置。
【請求項４】
請求項３に記載の印刷装置において、
前記コマンド記憶部は、
第１のコマンド記憶部と、
第２のコマンド記憶部と、を含み、
前記画像形成スレッドが複数起動する場合には、
前記第１の画像形成スレッドが前記中間ＰＤＬコマンドを前記第１のコマンド記憶部へ出力する期間、前記第２の画像形成スレッドは前記中間ＰＤＬコマンドを前記第２のコマンド記憶部から取得し、
前記第１の画像形成スレッドが前記中間ＰＤＬコマンドを前記第２のコマンド記憶部へ出力する期間、前記第２の画像形成スレッドは前記中間ＰＤＬコマンドを前記第１のコマンド記憶部から取得することを特徴とする印刷装置。
【請求項５】
請求項４に記載の印刷装置において、
前記画像形成スレッドが複数起動する場合には、
前記第１の画像形成スレッドは、前記第２の画像形成スレッドへ処理を要求する毎に、前記第１のコマンド記憶部と前記第２のコマンド記憶部を交互に切り替えて利用することを特徴とする印刷装置。
【請求項６】
請求項１乃至請求項５のいずれか１つに記載の印刷装置において、
前記画像形成スレッドの数は、前記ＣＰＵが有するコアの数に応じて決定することを特徴とする印刷装置。
【請求項７】
請求項１乃至請求項５のいずれか１つに記載の印刷装置において、
前記画像形成スレッドの数は、前記印刷装置が処理に利用するメモリの記憶容量に応じて決定することを特徴とする印刷装置。
【請求項８】
請求項１乃至請求項５のいずれか１つに記載の印刷装置において、
前記画像形成スレッドの数は、前記画像データの解像度及び階調数に応じて決定することを特徴とする印刷装置。
【請求項９】
請求項１乃至請求項５のいずれか１つに記載の印刷装置において、
前記画像形成スレッドの数は、前記画像データを印刷する用紙サイズに応じて決定することを特徴とする印刷装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリンタ装置等の印刷データの処理技術に関し、特にマルチコアＣＰＵを有するプリンタ装置等の印刷データの処理技術に関する。
【背景技術】
【０００２】
一般に、プリンタ装置等の印刷装置は、クライアントＰＣなどのホスト機器から印刷データの供給を受け、印刷処理を行っている。今日の印刷装置は、ＬＡＮ（local area network）等を介した複数のホスト機器と接続されることも珍しくなく、さらに印刷データの高解像度・高精細化も進んでいるため、大量のデータを高速に印刷する機能が求められている。
【０００３】
以下、従来の一般的な印刷装置の構成と印刷処理の流れについて、図２８から図３０を用いて従来例として説明する。
図２８は、ホスト機器である、例えばクライアントＰＣ１がＬＡＮ２を介して印刷装置３（ＰＰＲ）と接続される構成を例示したブロック図である。印刷装置３（ＰＰＲ）は、ＣＰＵ４、ＲＡＭ５、ＲＯＭ６、ＬＡＮ回路７、ＰＰＲエンジン８等で構成される。
【０００４】
図２９は、図２８で例示した環境の機能的構成を具体的に説明する図である。クライアントＰＣ１は、アプリケーションプログラム０２１０（ＡＰＬ）、プリンタドライバ０２１２（Ｐｒｉｎｔｅｒ  Ｄｒｉｖｅｒ）、スプーラ０２１４で構成され、さらにプリンタドライバ０２１２（Ｐｒｉｎｔｅｒ  Ｄｒｉｖｅｒ）は、ＰＤＬ変換部０２１３を含んでいる。
【０００５】
一方、印刷装置３（ＰＰＲ）は、中間ＰＤＬ変換部０２３２および画像データ形成部０２３４、受信バッファ０２４０、ＰＤＬバッファ０２４１、複数の画像データメモリ０２４２（画像データメモリ０２４３、画像データメモリ０２４４、・・・）、印刷行列０２４６、ＰＰＲエンジン８等から構成され、受信制御スレッド０２３０、画像形成スレッド０２３１、印刷行列制御スレッド０２３５、ＰＰＲエンジン制御スレッド０２３６の４つのスレッドが起動し処理を行う。
【０００６】
クライアントＰＣ１では、ワープロソフトや表計算ソフト等のアプリケーションプログラム０２１０（ＡＰＬ）によって作成された文書ファイル０２１１は、ＰＤＬ変換部０２１３に供給され、ＰＤＬ変換部０２１３によってＰＤＬ（Ｐａｇｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）と呼ばれるプリンタ制御言語で記述されたＰＤＬデータに変換される。このＰＤＬデータには、例えば線や円の作成、文字の作成等を指示する各種のＰＤＬコマンドが含まれている。ＰＤＬデータはスプーラ０２１４へ出力され、スプーラ０２１４からＬＡＮ２を介して印刷装置３（ＰＰＲ）に送信される。
【０００７】
印刷装置３（ＰＰＲ）では、まず、受信制御スレッド０２３０がＰＤＬデータを受信し、受信バッファ０２４０へ格納する。画像形成スレッド０２３１は、中間ＰＤＬ変換部０２３２で受信バッファ０２４０からＰＤＬデータを順次取り出してＰＤＬデータを中間ＰＤＬデータに変換しＰＤＬバッファ０２４１へ格納する。なお、中間ＰＤＬデータには、ＰＤＬデータと同様に例えば線や円の作成、文字の作成等を指示する各種のコマンドである中間ＰＤＬコマンドが含まれている。
【０００８】
画像データ形成部０２３４は、ＰＤＬバッファ０２４１に格納された中間ＰＤＬデータを読み出して中間ＰＤＬコマンドを実行し、例えばビットマップ形式の画像データを形成し、画像データメモリ０２４２に記憶する。画像形成スレッド０２３１は、１頁分の画像データが形成される毎に、印刷行列制御スレッド０２３５に印刷要求を出す。これを受けて、印刷行列制御スレッド０２３５は、印刷行列要素を生成し印刷要求を印刷行列０２４６にキューイングする。ＰＰＲエンジン制御スレッド０２３６は、印刷行列０２４６にキューイングされている印刷要求を順次取り出し、印刷要求に該当する画像データをＰＰＲエンジン８へ転送する。
【０００９】
図３０は、中間転写体として転写ベルト８３を用いたタンデム方式の印刷装置３（ＰＰＲ）の内部構成を例示した図である。同図を用いてＰＰＲエンジン８へ転送された画像データが印刷される流れについて説明する。ＰＰＲエンジン８は画像データを受信すると、感光ドラム８２上に画像データを描き（露光工程）、各色のトナー８１を画像データに合わせて付着させる（現像工程）。感光ドラム８２に付着した各色のトナー８１は、一旦転写ベルト８３上に転写された後、２次転写ロール８４によって給紙装置８７から取り出された用紙に再転写される（転写工程）。用紙に転写されたトナー８１は、定着ロール８５で熱と圧力をかけることで定着され（定着工程）、排紙トレイ８８から出力される。
【００１０】
以上が一般的な印刷装置の構成と印刷処理の流れである。図２９で例示したように、印刷装置３（ＰＰＲ）内の処理をマルチスレッド化して実行することにより、印刷速度の高速化を図る方法は一般的に利用されている。
【００１１】
ところで、印刷処理で最も時間の時間のかかる処理は画像形成処理であり、この傾向は一般に印刷する画像データが大きくなるほど顕著となる。しかし、図２９では、受信制御やＰＰＲエンジン制御などの各Ｉ／Ｏ処理（物理処理）と、画像形成処理（論理処理）を別スレッドにより並列処理しているのみで、画像形成処理自体は単一のスレッドで処理されている。このため、画像形成処理がボトルネックとなり、印刷処理の高速化を妨げる要因となっている。
【００１２】
このような問題を踏まえ、特許文献１及び特許文献２では、複数のプロセッサを用いて画像形成処理を並列化する方法が提案されている。特許文献１の発明は、頁毎に異なるプロセッサが割り当てられ、それぞれのプロセッサが描画処理を並列に行う印刷制御方法である。特許文献２の発明は、画像形成処理に利用できるプロセッサ数を問い合わせて、複数のプロセッサが利用できる場合には、順次実施される各種の画像処理を複数のプロセッサが分担して行う画像処理方法である。いずれも、画像形成処理を並列化することにより処理の高速化を図っている。
【特許文献１】特開平０５−２０１０７７号公報
【特許文献２】特開２０００−２９３６７４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
上記特許文献１の発明は、複数のプロセッサを使用するが、基本的には線や円を作成し、文字の生成等を行なうＰＤＬデータを１頁分受け取り、ＰＤＬデータを解析しながら一時蓄積する（空描画）。１頁分のＰＤＬデータが揃ってから画像形成タスクを生成しプロセッサを割り当て、一時蓄積したＰＤＬデータを再度解析・実行して画像形成を行なう（実描画）。それと並行して次の頁のＰＤＬデータを受け取り解析しながら一時蓄積し、次の頁のＰＤＬデータが揃うとまた新たに画像形成タスクを生成し同じように画像形成していく。印刷データを頁単位にプロセッサを割り当て、並列処理を行う制御方法である。したがって、プリンタエンジンが高速になればなるほど、多くのプロセッサを必要とし、非常に高価なものになってしまう。また、空描画の為に受け取ったＰＤＬデータを一度解析する必要があり、効率も良くない。
【００１４】
また、この空描画の為に１つのタスクが必要でありプロセッサも１つ必要である。プロセッサが少ない場合、同時並行して画像形成できる頁数は非常に少ないものとなり、印刷処理の高速化には限界がある。更に、頁単位の処理であるため各種描画コマンドを順次処理して画像を生成していくストリーム型の印刷データの場合、大幅な高速化は期待できない。
【００１５】
上記特許文献２の発明は、画像処理に利用可能なプロセッサ数を問い合わせ、予め決められた順番に実行される複数の画像処理（ラスタライズ、色補正、ハーフトニング）を、画像処理に利用可能なプロセッサ数に応じて、各プロセッサに分担させる方法である。従って、分担する複数の画像処理には、順次実行による制約が存在する。
【００１６】
また、いずれの発明においても割込み処理の影響については考慮されていないため、割り込みによる処理の中断や中断に伴うレジスタへの退避／復帰等に要するオーバヘッドの影響を大きく受けてしまう課題がある。
【００１７】
以上、上記の課題を鑑みて、本発明の目的は、画像形成処理への割り込みを減少させることにより画像形成処理を高速に行う印刷装置を提供することにある。
なお、本発明では、印刷装置のＣＰＵとして、近年開発が進み、すでに数多く製品化されコストも廉価となってきているデュアルコアＣＰＵやクアッドコアＣＰＵなどのマルチコアＣＰＵの利用を前提とする。
【課題を解決するための手段】
【００１８】
本発明の第１の態様は、ＰＤＬ形式の印刷データを受信し、受信バッファへ格納する受信制御手段と、
前記印刷データを中間ＰＤＬコマンドに変換し、前記中間ＰＤＬコマンドから画像データを形成する画像データ形成手段と、
前記中間ＰＤＬコマンドを記憶するコマンド記憶部と、
複数のコアを有するＣＰＵと、
前記画像データ形成手段を実現する画像形成スレッドに、前記受信制御手段を実現する受信制御スレッドよりも優先的に前記コアを割り当てるシステム制御手段と、
前記画像形成スレッドの各々の１頁当りの処理時間を計測する計測手段と、
前記処理時間を元に算出される平均処理時間を前記画像形成スレッドの数毎に記録する記憶手段と、を含み、
前記システム制御手段は、前記画像形成スレッドの数を、前記平均処理時間が最も短くなる数に決定する印刷装置を提供する。
本発明の第２の態様は、ＰＤＬ形式の印刷データを受信し、受信バッファへ格納する受信制御手段と、
前記印刷データを中間ＰＤＬコマンドに変換し、前記中間ＰＤＬコマンドから画像データを形成する画像データ形成手段と、
前記中間ＰＤＬコマンドを記憶するコマンド記憶部と、
複数のコアを有するＣＰＵと、
前記画像データ形成手段を実現する画像形成スレッドに、前記受信制御手段を実現する受信制御スレッドよりも優先的に前記コアを割り当てるシステム制御手段と、
前記画像形成スレッドの各々の１頁当りの処理時間を計測する計測手段と、
前記処理時間を元に算出される平均処理時間を用紙サイズ毎且つ前記画像形成スレッドの数毎に記録する記憶手段と、を含み、
前記システム制御手段は、前記画像形成スレッドの数を、前記平均処理時間が最も短くなる数に決定する印刷装置を提供する。
【００１９】
本発明の第３の態様は、前記第１の態様または第２の態様に記載の印刷装置において、前記画像データ形成手段は、前記印刷データを前記中間ＰＤＬコマンドに変換する第１の画像データ形成手段と、前記中間ＰＤＬコマンドから前記画像データを形成する第２の画像データ形成手段とを含み、前記画像形成スレッドは、複数起動する場合には、前記第１の画像データ形成手段を実現する第１の画像形成スレッドと、前記第２の画像データ形成手段を実現する第２の画像形成スレッドとを含み、前記第１の画像形成スレッドと前記第２の画像形成スレッドは、互いに並列に動作可能な異なるスレッドである印刷装置を提供する。
【００２０】
本発明の第４の態様は、前記第３の態様に記載の印刷装置において、前記コマンド記憶部は、第１のコマンド記憶部と、第２のコマンド記憶部とを含み、前記画像形成スレッドが複数起動する場合には、前記第１の画像形成スレッドが前記中間ＰＤＬコマンドを前記第１のコマンド記憶部へ出力する期間、前記第２の画像形成スレッドは前記中間ＰＤＬコマンドを前記第２のコマンド記憶部から取得し、前記第１の画像形成スレッドが前記中間ＰＤＬコマンドを前記第２のコマンド記憶部へ出力する期間、前記第２の画像形成スレッドは前記中間ＰＤＬコマンドを前記第１のコマンド記憶部から取得する印刷装置を提供する。
【００２１】
本発明の第５の態様は、前記第４の態様に記載の印刷装置において、前記画像形成スレッドが複数起動する場合には、前記第１の画像形成スレッドは、前記第２の画像形成スレッドへ処理を要求する毎に、前記第１のコマンド記憶部と前記第２のコマンド記憶部を交互に切り替えて利用する印刷装置を提供する。
【００２２】
本発明の第６の態様は、前記第１の態様乃至第５の態様のいずれか１つに記載の印刷装置において、前記画像形成スレッドの数は、前記ＣＰＵが有するコアの数に応じて決定する印刷装置を提供する。
【００２３】
本発明の第７の態様は、前記第１の態様乃至第５の態様のいずれか１つに記載の印刷装置において、前記画像形成スレッドの数は、前記印刷装置が処理に利用するメモリの記憶容量に応じて決定する印刷装置を提供する。
【００２４】
本発明の第８の態様は、前記第１の態様乃至第５の態様のいずれか１つに記載の印刷装置において、前記画像形成スレッドの数は、前記画像データの解像度及び階調数に応じて決定する印刷装置を提供する。
【００２５】
本発明の第９の態様は、前記第１の態様乃至第５の態様のいずれか１つに記載の印刷装置において、前記画像形成スレッドの数は、前記画像データを印刷する用紙サイズに応じて決定する印刷装置を提供する。
【発明の効果】
【００２９】
本発明によれば、画像形成処理を高速化する印刷装置を提供することができる。
【発明を実施するための最良の形態】
【００３０】
以下、本発明の実施の形態について図面を参照しながら説明する。
（実施形態１）
図２は、本実施形態に使用する印刷装置３の構成例を示す図である。印刷装置３（ＰＰＲ）は、ホスト機器であるクライアントＰＣ１とＬＡＮ２を介して接続されている。印刷装置３（ＰＰＲ）はＣＰＵ９、ＲＡＭ５、ＲＯＭ６、ＬＡＮ回路７、及びＰＰＲエンジン８等で構成されている。
【００３１】
ＣＰＵ９は内部に４個のコア９ａ〜９ｄを有する。コア９ａ〜９ｄは、それぞれ独立したＣＰＵ時間を有し、ＰＤＬコマンドの生成や画像形成などの各種処理を行うことができ、後述するスレッドを実行する処理手段である。尚、ＲＡＭ５は上記コア９ａ〜９ｄによる印刷データ処理の際、ワークエリアとしても使用される。ＲＯＭ６は印刷装置３（ＰＰＲ）のシステム制御プログラムや、後述する印刷データの処理プログラムを記憶する。また、ＬＡＮ回路７はクライアントＰＣ１によって作成された印刷データを受信し、ＰＰＲエンジン８は、ＣＰＵ９の指示に従って印刷装置３（ＰＰＲ）内で処理された画像データを印刷する。
【００３２】
図１は、本実施形態のクライアントＰＣ１及び印刷装置３（ＰＰＲ）の機能的構成を具体的に説明する図である。クライアントＰＣ１は文書ファイル０２１１の作成及び編集を行うアプリケーションプログラム０２１０（ＡＰＬ）、ＰＤＬ変換部０２１３を含むプリンタドライバ０２１２（Ｐｒｉｎｔｅｒ  Ｄｒｉｖｅｒ）、スプーラ０２１４で構成されている。
【００３３】
印刷装置３（ＰＰＲ）は、中間ＰＤＬ変換部０２３２、画像データ形成部０２３４、受信バッファ０２４０、２つのＰＤＬバッファ０２４７（第１のＰＤＬバッファ０２４８、第２のＰＤＬバッファ０２４９）、複数の画像データメモリ０２４２（画像データメモリ０２４３、画像データメモリ０２４４、・・・）、印刷行列０２４６、ＰＰＲエンジン８等から構成され、受信制御スレッド０２３０、画像形成スレッド１（０５３２）、画像形成スレッド２（０５３４）、印刷行列制御スレッド０２３５、ＰＰＲエンジン制御スレッド０２３６の５つのスレッドが起動し処理を行う。ＣＰＵコアの割り当ては、システム制御プログラムのカーネル部がレディ状態のタスクまたはスレッドに対し、スレッド等のプライオリティを考慮して行う。なお、本実施形態では、マルチＣＰＵの能力を有効に活用するため、対称型マルチプロセッシング（Ｓｙｍｍｅｔｒｉｃ Ｍｕｌｔｉ Ｐｒｏｃｅｓｓｉｎｇ、以降ＳＭＰと称する）を利用することが望ましい。なお、以降では、画像形成スレッド１（０５３２）及び画像形成スレッド２（０５３４）を画像形成スレッドと称し、受信制御スレッド０２３０、印刷行列制御スレッド０２３５及びＰＰＲエンジン制御スレッド０２３６をＩ／Ｏ制御スレッドと称する。
【００３４】
クライアントＰＣ１では、ワープロソフトや表計算ソフト等のアプリケーションプログラム０２１０（ＡＰＬ）によって作成された文書ファイル０２１１は、ＰＤＬ変換部０２１３に供給され、ＰＤＬ変換部０２１３によってＰＤＬ（Ｐａｇｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）と呼ばれるプリンタ制御言語で記述されたＰＤＬデータに変換される。このＰＤＬデータには、例えば線や円の作成、文字の作成等を指示する各種のＰＤＬコマンドが含まれている。ＰＤＬデータはスプーラ０２１４へ出力され、スプーラ０２１４からＬＡＮ２を介して印刷装置３（ＰＰＲ）に送信される。
【００３５】
印刷装置３（ＰＰＲ）では、まず、受信制御スレッド０２３０がＰＤＬデータを受信し、受信バッファ０２４０へ格納する。画像形成スレッド１（０５３２）は、中間ＰＤＬ変換部０２３２で受信バッファ０２４０からＰＤＬデータを順次取り出してＰＤＬデータを中間ＰＤＬデータに変換しＰＤＬバッファ０２４７へ格納する。なお、中間ＰＤＬデータには、ＰＤＬデータと同様に例えば線や円の作成、文字の作成等を指示する各種のコマンドである中間ＰＤＬコマンドが含まれている。また、ＰＤＬバッファ０２４７は、中間ＰＤＬ変換部０２３２によって変換された中間ＰＤＬコマンドを格納するダブルバッファであり、第１のＰＤＬバッファ０２４８、第２のＰＤＬバッファ０２４９で構成される。
【００３６】
画像形成スレッド２（０５３４）は、画像データ形成部０２３４でＰＤＬバッファ０２４７（第１のＰＤＬバッファ０２４８、第２のＰＤＬバッファ０２４９）に格納された中間ＰＤＬデータを交互に読み出し、中間ＰＤＬコマンドを実行して、例えばＣＭＹＫ等の色成分へ変換してビットマップ形式の画像データを形成し、画像データメモリ０２４２に記憶する。画像データメモリ０２４２は、複数の画像データメモリ（画像データメモリ０２４３、画像データメモリ０２４４、・・・）を有し、それぞれ１頁分ずつ画像データが記憶される。画像形成スレッド２（０５３４）は、１頁分の画像データが形成される毎に、印刷行列制御スレッド０２３５に印刷要求を出す。
【００３７】
これを受けて、印刷行列制御スレッド０２３５は、印刷行列要素を生成し印刷要求を印刷行列０２４６にキューイングする。ＰＰＲエンジン制御スレッド０２３６は、印刷行列０２４６にキューイングされている印刷要求を順次取り出し、印刷を依頼するために印刷要求に該当する画像データをＰＰＲエンジン８へ転送する。その後、画像データの転送が正常に終了し画像データ転送エンドを検出すると、印刷行列制御スレッド０２３５は転送した画像データメモリ０２４２上の画像データを圧縮する。また、ＰＰＲエンジン８での印刷処理の正常終了し完全排紙後には、圧縮した画像データメモリ０２４２上の画像データを削除し、印刷行列０２４６にキューイングされている印刷要求に該当する印刷行列要素を削除する。
【００３８】
ここで、図１に示す画像形成スレッドの各々は、前述の図２に示すＣＰＵ９のコア９ａ〜９ｄの何れかが担当するものであり、例えばコア９ａが画像形成スレッド１（０５３２）の中間ＰＤＬ変換処理を行い、コア９ｂが画像形成スレッド２（０５３４）の画像データ形成処理を担当する。さらに、Ｉ／Ｏ制御スレッドは、画像形成スレッドにより利用されたコアを除いた残りのコアが担当する。例えばコア９ｃが受信制御スレッド０２３０及び印刷行列制御スレッド０２３５を担当し、コア９ｄがＰＰＲエンジン制御スレッド０２３６を担当してもよい。また、コア９ｃが印刷行列制御スレッド０２３５を担当し、コア９ｄが受信制御スレッド０２３０とＰＰＲエンジン制御スレッド０２３６を担当してもよい。
【００３９】
なお、上記スレッドとスレッドを担当するコアの関係はこれに限定されるのではなく、各処理が必要な際、空いているコア９ａ〜９ｄが使用される。ただし、画像形成スレッドにはＩ／Ｏ制御スレッドより優先的にコアを割り当てる。つまり、最も時間の要する画像形成処理を他の処理よりも優先的に処理することができる。これは、画像形成スレッドのプライオリティをＩ／Ｏ制御スレッドより高く設定して起動することにより実現される。
【００４０】
以上の構成において、以下に本例の処理動作を説明する。
図３及び図４は画像形成スレッドの初期設定処理を説明するフローチャートである。先ず、図３に示すフローチャートに従って、図４で詳述するマルチスレッドの初期化処理を行い（ステップ（以下、Ｓで示す）１）、更にマルチスレッド以外の画像形成タスクの初期化処理を行う（Ｓ２）。その後、本スレッドは、画像形成スレッド１（０５３２）として後述する中間ＰＤＬ変換部０２３２の処理を行う。また、画像形成スレッド１（０５３２）の処理は、プライオリティを高く設定した上で、例えばコア９ａによって実行される。
【００４１】
図４に示すフローチャートは上記マルチスレッドの初期化処理を具体的に説明するフローチャートである。先ず、スレッド数を１に設定する（Ｓ３）。次に、ＰＤＬバッファ０２４７（第１のＰＤＬバッファ０２４８及び第２のＰＤＬバッファ０２４９）の領域を確保する（Ｓ４）。具体的には前述の図２に示すＲＡＭ５に、ＰＤＬバッファ０２４７の記憶領域を確保する。
【００４２】
次に、中間ＰＤＬ変換部０２３２により中間ＰＤＬコマンド生成中において選択するバッファ（以降、中間ＰＤＬ生成中ＰＤＬバッファと称する）を第１のＰＤＬバッファ０２４８とし、画像データ形成部（レンダリング部）０２３４により描画データ生成中において選択するバッファ（以降、画像形成ＰＤＬバッファと称する）も同じ第１のＰＤＬバッファ０２４８に初期設定する（Ｓ５）。
【００４３】
次に、画像形成要求中フラグをオフに設定する（Ｓ６）。すなわち、画像データ形成部（レンダリング部）０２３４が処理を行っていない状態であることを、フラグをオフ状態にすることで示す。最後に、画像形成スレッド２（０５３４）を生成して起動し、初期化ルーチンを終了する（Ｓ７）。以上のようにして画像形成スレッド１（０５３２）及び画像形成スレッド２（０５３４）の初期設定処理が完了する。また、画像形成スレッド２（０５３４）の処理は、プライオリティを高く設定した上で、例えばコア９ｂによって実行される。
【００４４】
図５は受信制御スレッド０２３０の初期設定処理とその後の受信制御処理を説明するフローチャートである。受信制御スレッド０２３０は起動すると、先ず受信するデータの保管場所として、図２に示すＲＡＭ５に受信バッファ０２４０の領域を確保する。さらに受信制御スレッド０２３０内で利用する制御データなど、これから行われるデータ受信処理に備えて受信タスクの初期化を行う（Ｓ１０）。初期化が終了し、データの受信準備が整うと印刷データの受信を開始し（Ｓ１１）、データ受信待ち状態となる（Ｓ１２）。
【００４５】
一方、印刷装置３（ＰＰＲ）は、クライアントＰＣ１等から印刷データが送信されると、図２に示すＬＡＮ回路７でＬＡＮケーブル等を介して伝わる電気信号から受信すべきデータを識別して上位の階層へ引き渡す。その後、各階層では下位の階層から引き渡されたデータ中から制御情報を抽出し、データの信頼性等を確認しながら上位層へ順次引き渡す（Ｓ２０〜Ｓ２３）。各層を介してアプリケーションレベルの印刷データに復元されると、印刷データは受信制御スレッド０２３０へ受信タスクとしてポストされる（Ｓ２４）。
【００４６】
受信制御スレッド０２３０は、印刷データを受信すると受信した印刷データを受信バッファ０２４０へ格納する（Ｓ１３）。受信バッファ０２４０へのデータの格納が終了すると、画像形成スレッド１（０５３２）へ画像形成タスクとしてポストし（Ｓ１４）、次の印刷データの受信まで待機する（Ｓ１２）。
【００４７】
以降、受信制御スレッド０２３０は、印刷データを受信する毎に順次受信バッファ０２４０へ格納し、画像形成スレッド１（０５３２）へ画像形成タスクとしてポストする。また、受信制御スレッド０２３０の処理は、例えばコア９ｃや９ｄによって実行される。なお、受信制御スレッド０２３０は、前述した画像形成スレッド１（０５３２）や後述する画像形成スレッド２（０５３４）よりプライオリティを低く設定する。
【００４８】
図６から図１１は以後の処理を説明するフローチャートであり、画像形成スレッド１（０５３２）、画像形成スレッド２（０５３４）、印刷行列制御スレッド０２３５、ＰＰＲエンジン制御スレッド０２３６、ＰＰＲエンジン８が行う処理を説明するものである。尚、図１２（ａ）は本実施形態の処理を模式的に示す図である。
【００４９】
先ず、図６に示すフローチャートは中間ＰＤＬ変換部０２３２による画像形成スレッド１（０５３２）の処理を説明するものである。印刷データを受信すると受信バッファ０２４０に格納された印刷データ中からＰＤＬコマンドを順次取り出す（Ｓ１００、Ｓ１０１）。取り出したＰＤＬコマンドは、印刷装置３（ＰＰＲ）の仕様に合致したＰＤＬの形式である中間ＰＤＬに変換され、中間ＰＤＬのＰＤＬコマンドである中間ＰＤＬコマンドとして、中間ＰＤＬ生成中ＰＤＬバッファにバッファリングされる（Ｓ１０２）。図１２（ａ）に示すａはこの処理を示し、文書ファイル等の印刷データの１頁目の最初の印刷データの中間ＰＤＬコマンドが第１のＰＤＬバッファ０２４８に格納される。また、上記処理は、例えばコア９ａによって実行される。
【００５０】
なお、ＰＤＬコマンド及び中間ＰＤＬコマンドには、ジョブ開始コマンド、ジョブ終了コマンド、頁開始コマンド、改頁コマンド等が含まれている。ＰＤＬデータおよび中間ＰＤＬデータ中の印刷ジョブは、ジョブ開始コマンドとジョブ終了コマンドで挟まれ、さらに、印刷ジョブ中の各頁に対応する箇所は頁開始コマンドと改頁コマンドに挟まれた構造となっている。
【００５１】
次に、Ｓ１０３からＳ１１３では、受信バッファ０２４０から取り出し変換した中間ＰＤＬコマンドの種類を判断し、引き続き受信バッファ０２４０から後続のデータを取り出し中間ＰＤＬコマンドへの変換処理を行うか、又は変換した中間ＰＤＬコマンドによる画像形成処理に進むかを決定している。具体的には、Ｓ１０３、Ｓ１０５、Ｓ１０８、Ｓ１１１のそれぞれで、ジョブ終了コマンド、ジョブ開始コマンド、頁開始コマンド、改頁コマンドか否かを判断しそれぞれに応じた処理を行っている。いずれにも該当しない場合は、さらにＳ１１２で中間ＰＤＬ生成中ＰＤＬバッファの空き状況を確認している。
【００５２】
基本的には、改頁コマンドが出現するまでは、受信バッファ０２４０から順番にＰＤＬコマンドを取り出し、中間ＰＤＬコマンドに変換して中間ＰＤＬ生成中ＰＤＬバッファへ格納する。この処理は引き続き図１２（ａ）のａの処理に該当する。そして、改頁コマンドの出現により、中間ＰＤＬ生成中ＰＤＬバッファへ格納された中間ＰＤＬコマンドの画像形成処理へ進む。ただし、多くの場合、改頁コマンドの発生前に中間ＰＤＬ生成中ＰＤＬバッファが一杯になるため、その場合は、改頁コマンドの発生を待たずに画像形成処理に進む。また、その他、ジョブ終了コマンドが出現した場合にも、これ以上現在処理中のジョブのＰＤＬデータは存在しないため画像形成処理に進む。
【００５３】
以下、ジョブ開始コマンド、頁開始コマンド、改頁コマンド、ジョブ終了コマンドの順にそれぞれが出現した場合の処理について説明する。まず、中間ＰＤＬコマンドがジョブ開始コマンドであった場合（Ｓ１０５がＹＥＳ）は、スレッド数の決定処理が開始され（Ｓ１０６）、図７に示すスレッド数決定ルーチンにて、スレッド数が２に設定される（Ｓ１０７）。その後、中間ＰＤＬ生成中ＰＤＬバッファの容量一杯までＰＤＬコマンドがバッファリングされたか判断する（Ｓ１１２）。ＮＯと判定され場合は、受信バッファ０２４０を確認し、ＰＤＬコマンドをすべて処理したかどうかを判断する（Ｓ１１３）。すべて処理済みの場合は、受信制御スレッド０２３０から新たな印刷データが受信バッファ０２４０へ格納されるまで待機する（Ｓ１００）。
【００５４】
ＰＤＬコマンドをすべて処理していない場合、処理が未済のＰＤＬコマンドを順次取得し、中間ＰＤＬコマンドに変換し中間ＰＤＬ生成中ＰＤＬバッファへ格納する（Ｓ１０１、Ｓ１０２）。なお、ジョブ開始コマンドにはオペランドとして、解像度、階調、用紙サイズ、給紙口などの各種情報が指定されている。ジョブ終了コマンドが処理されるまでの間、これらの情報は一時的に記憶され、後続の各種処理では必要に応じてこれらの情報を利用することができる。
【００５５】
次に、中間ＰＤＬコマンドが頁開始コマンドであった場合は（Ｓ１０８がＹＥＳ）、印刷行列制御スレッド０２３５に対して画像データメモリ０２４２の確保要求を出し（Ｓ１０９）、印刷行列制御スレッド０２３５からの確保通知まで待機する（Ｓ１１０）。画像形成スレッド１（０５３２）から画像データメモリ０２４２の確保要求を受けた印刷行列制御スレッド０２３５は、図９で示す印刷行列制御要求待ちから開放され（Ｓ３００）、印刷行列制御要求の種類を判断する（Ｓ３０１、Ｓ３０６、Ｓ３０８、Ｓ３１０）。この場合、要求は画像データメモリ０２４２の確保要求であるので、１頁分の画像データメモリ０２４２（画像データメモリ０２４３や画像データメモリ０２４４など）を確保する（Ｓ３１１）。
【００５６】
この時、１頁分として必要なサイズの算定には、ジョブ開始コマンドのオペランドとして指定され、一時的に記憶されている情報を利用する。１頁分の画像データメモリ０２４２を確保すると、印刷行列制御スレッド０２３５は要求元の画像形成スレッド１（０５３２）に対して、画像メモリ確保通知を送り（Ｓ３１２）、次の印刷行列制御要求に備えて待機する（Ｓ３００）。なお、印刷行列制御スレッド０２３５は、プライオリティを画像形成スレッド１（０５３２）及び画像形成スレッド２（０５３４）より低く設定した上で、例えばコア９ｃによって実行される。印刷行列制御スレッド０２３５から画像メモリ確保通知を受けた画像形成スレッド１（０５３２）は、待機状態から解放され（Ｓ１１０）、ジョブ開始コマンドの場合と同様に、中間ＰＤＬ生成中ＰＤＬバッファの状態や受信バッファ０２４０を確認して、それぞれに応じた処理を行う。
【００５７】
次に、中間ＰＤＬコマンドが改頁コマンドであった場合（Ｓ１１１がＹＥＳ）は、中間ＰＤＬ生成中ＰＤＬバッファへ格納された中間ＰＤＬコマンドを元にした画像形成処理へ進む（Ｓ１１４以降）。
【００５８】
次に、中間ＰＤＬコマンドがジョブ終了コマンドであった場合は（Ｓ１０３がＹＥＳ）、ジョブ終了内部フラグをＯＮに設定した上で（Ｓ１０４）、中間ＰＤＬ生成中ＰＤＬバッファへ格納された中間ＰＤＬコマンドによる画像形成処理へ進む（Ｓ１１４以降）。
【００５９】
中間ＰＤＬコマンドがジョブ開始コマンド、頁開始コマンド、改頁コマンド、ジョブ終了コマンドのいずれにも該当しない場合は、中間ＰＤＬ生成中ＰＤＬバッファが一杯ではない限り、引き続き受信バッファ０２４０からのＰＤＬコマンドの変換処理を行う。以上の処理により、中間ＰＤＬ生成中ＰＤＬバッファに中間ＰＤＬコマンドが格納される。
【００６０】
上記のＳ１０３からＳ１１３では、改頁コマンドまたはジョブ終了コマンドが出現した場合（Ｓ１１１又はＳ１０３がＹＥＳ）、又は中間ＰＤＬ生成中ＰＤＬバッファの容量が一杯となった場合（Ｓ１１２がＹＥＳ）、中間ＰＤＬコマンドによる画像形成処理へ進み、スレッド数の設定が１となっているかどうかが判断される（Ｓ１１４）。ただし、本実施例ではジョブ開始コマンドの出現時にスレッド数が２に設定されるため、ＮＯと判定される。
【００６１】
Ｓ１１５からＳ１２０では、中間ＰＤＬ生成中ＰＤＬバッファに格納された中間ＰＤＬコマンドの画像形成処理を画像形成スレッド２（０５３４）へ依頼している。先ず、画像形成要求中フラグがオンであるか判断する（Ｓ１１５）。
【００６２】
この画像形成要求中フラグは、図４において前述したフラグの初期化処理（Ｓ６）によってオフに設定されており（Ｓ１１５がＮＯ）、上記中間ＰＤＬコマンドを格納した中間ＰＤＬ生成中ＰＤＬバッファ（この場合は、第１のＰＤＬバッファ０２４８）を、以後画像形成スレッド２（０５３４）が画像データ形成部０２３４で読み出しを行う画像形成ＰＤＬバッファに設定する（Ｓ１１８）。続いて、画像形成要求中フラグをオンにセットし（Ｓ１１９）、画像形成スレッド２（０５３４）に対して画像形成要求を出す（Ｓ１２０）。すなわち、中間ＰＤＬ変換部０２３２から画像データ形成部０２３４に対して画像形成要求を出力する。
【００６３】
尚、前述の判断（Ｓ１１５）において、画像形成要求中フラグがオンの場合には、画像形成スレッド２（０５３４）による画像形成処理の終了を待ち、画像形成要求中フラグをオフする（Ｓ１１５がＹＥＳ、Ｓ１１６、Ｓ１１７）。この処理は、画像形成スレッド２（０５３４）が画像形成処理を終了した際行う処理であり、後述する。
【００６４】
Ｓ１２１からＳ１２６では、画像形成スレッド１（０５３２）が画像形成スレッド２（０５３４）へ画像形成処理を要求した後、以降の処理に備え、画像形成スレッド１（０５３２）の設定を変更している。
【００６５】
前半部分のＳ１２１からＳ１２３では、画像形成スレッド１（０５３２）が中間ＰＤＬコマンドを出力する中間ＰＤＬ生成中ＰＤＬバッファの設定を変更する。まず、中間ＰＤＬ生成中ＰＤＬバッファが第１のＰＤＬバッファ０２４８か否かを判断する（Ｓ１２１）。その結果、第１のＰＤＬバッファ０２４８と判定した場合（Ｓ１２１がＹＥＳ）は、中間ＰＤＬ生成中ＰＤＬバッファを第２のＰＤＬバッファ０２４９へ変更し（Ｓ１２３）、第１のＰＤＬバッファ０２４８でない判定した場合（Ｓ１２１がＮＯ）、つまり第２のＰＤＬバッファ０２４９である場合は、中間ＰＤＬ生成中ＰＤＬバッファを第１のＰＤＬバッファ０２４８へ変更する（Ｓ１２２）。ここでは、図４のバッファの初期化処理（Ｓ５）により第１のＰＤＬバッファ０２４８が中間ＰＤＬ生成中ＰＤＬバッファとして設定されているので、第２のＰＤＬバッファ０２４９へ変更される。
【００６６】
なお、この処理は、先に依頼した画像形成処理と、中間ＰＤＬ変換処理を並列して進めるために行われる処理である。これから画像形成スレッド２（０５３４）が画像形成処理で利用する第１のＰＤＬバッファ０２４８の内容を、画像形成スレッド１（０５３２）が後続の処理で上書きしないために行われる。当該処理は、印刷装置３（ＰＰＲ）がダブルバッファ化したＰＤＬバッファ０２４７（第１のＰＤＬバッファ０２４８、第２のＰＤＬバッファ０２４９）を有することで実現される仕組みであり、これにより、画像形成スレッド１（０５３２）は画像形成処理の要求後、画像形成処理の終了を待たずに、中間ＰＤＬ変換処理を行うことができる。
【００６７】
その後、ジョブ終了内部フラグがＯＮであるかが判断され（Ｓ１２４）、ＯＮであると判定された場合は、先に画像形成スレッド２（０５３４）へ要求した画像形成処理の終了まで待機する（Ｓ１２５）。画像形成処理の終了が通知されるとジョブ終了内部フラグがＯＦＦに設定して、受信バッファ０２４０の確認処理（Ｓ１１３）へ戻る。なお、ジョブ終了内部フラグがＯＦＦと判定された場合はすぐに受信バッファ０２４０の確認処理（Ｓ１１３）へ戻り、同様の手順で中間ＰＤＬ変換処理（図１２（ａ）のｅ１からｅｎの処理）を繰り返す。
【００６８】
なお、スレッド数の設定が１である場合（Ｓ１１４がＹＥＳ）に行われる処理（Ｓ１２７からＳ１３２）は、スレッド数の設定が２の場合（Ｓ１１４がＮＯ）に、画像形成要求により画像形成スレッド２（０５３４）で行われる処理に対応するものである。つまり、スレッド数の設定が１であるため、画像形成スレッド１（０５３２）自身が画像形成処理を行うことを示している。なお、詳細な処理の内容については、画像形成スレッド１（０５３２）への通知処理とジョブ終了コマンド検出処理が不要な点を除き、後述する画像形成スレッド２（０５３４）が行う処理と同様であるので、ここでは説明を省略する。
【００６９】
図８に示すフローチャートは画像データ形成部０２３４による画像形成スレッド２（０５３４）の処理を説明するものである。画像形成スレッド１（０５３２）からの画像形成要求を受信すると画像形成ＰＤＬバッファに格納された中間ＰＤＬコマンドを順次取り出し（Ｓ２００、Ｓ２０１）、取出した中間ＰＤＬコマンドがジョブ終了コマンドかどうか判断する（Ｓ２０２）。通常、画像形成要求後の最初の中間ＰＤＬコマンドはジョブ終了コマンドではないので（Ｓ２０２がＮＯ）、さらに改頁コマンドかどうか判断する（Ｓ２０４）。改頁コマンドでない場合（Ｓ２０４がＮＯ）は、取出した中間ＰＤＬコマンドの解析を行い、その中間ＰＤＬコマンドに対応した画像形成処理を実施し、予め印刷行列制御スレッド０２３５により確保された一頁分の画像データメモリ０２４２（画像データメモリ０２４３や画像データメモリ０２４４など要求毎に異なる）に画像を展開する（Ｓ２０５）（例えば、図１２（ａ）のｂの処理）。
【００７０】
その後、画像形成ＰＤＬバッファに格納された中間ＰＤＬコマンドをすべて処理したか判断され（Ｓ２０６）、処理が未済の中間ＰＤＬコマンドがある場合は（Ｓ２０６がＮＯ）、中間ＰＤＬコマンドの取り出し処理まで戻り（Ｓ２０１）、上記の処理を繰り返す（例えば、図１２（ａ）のｆの処理）。
【００７１】
画像形成ＰＤＬバッファから取出した中間ＰＤＬコマンドが改頁コマンドである場合は、画像データメモリ０２４２に展開された画像について、印刷行列制御スレッド０２３５に対し印刷要求を出し（Ｓ２０７）、印刷要求受付終了の通知があるまで待機する（Ｓ２０８）。画像形成スレッド２（０５３４）から印刷要求を受けた印刷行列制御スレッド０２３５は、後述する処理を行った後に、画像形成スレッド２（０５３４）へ印刷要求受付を通知する。印刷行列制御スレッド０２３５からの印刷要求受付の通知があると、画像形成スレッド２（０５３４）は待機状態（Ｓ２０８）から解放され、画像形成要求の要求元である画像形成スレッド１（０５３２）に対して、画像形成ＰＤＬバッファ（この場合、第１のＰＤＬバッファ０２４８）の画像形成処理の終了通知を送り（Ｓ２０９）、次の画像形成要求があるまで待機する（Ｓ２００）。
【００７２】
また、画像形成スレッド２（０５３４）が画像形成ＰＤＬバッファから取出した中間ＰＤＬコマンドがジョブ終了コマンドである場合（Ｓ２０２がＹＥＳ）も、画像形成要求の要求元である画像形成スレッド１（０５３２）に対して、画像形成ＰＤＬバッファ（この場合、第１のＰＤＬバッファ０２４８）の画像形成処理の終了通知を送り（Ｓ２０３）、次の画像形成要求があるまで待機する（Ｓ２００）。
【００７３】
なお、画像形成スレッド１（０５３２）は、当該終了通知の元となった画像形成要求を出した後、受信バッファ０２４０の印刷データの中間ＰＤＬ変換処理を繰り返し、第２のＰＤＬバッファ０２４９に中間ＰＤＬコマンドを格納した上で、画像形成スレッド２（０５３４）の画像形成処理の終了を待っている（図６のＳ１１６）。
【００７４】
画像形成スレッド１（０５３２）は、画像形成スレッド２（０５３４）からの画像形成処理の終了通知を受け取ると、画像形成要求中フラグをＯＦＦに設定する（図６のＳ１１７）。その後、画像形成ＰＤＬバッファとして中間ＰＤＬコマンドが格納された第２のＰＤＬバッファ０２４９を指定し、画像形成要求フラグを再度ＯＮに設定した上で、新たに画像形成スレッド２（０５３４）へ画像形成要求を出す。以降、画像形成スレッド１（０５３２）は、ＰＤＬバッファ０２４７を画像形成要求毎に第１のＰＤＬバッファ０２４８と第２のＰＤＬバッファ０２４９に切り替えながら交互に利用して中間ＰＤＬコマンドへの変換処理と画像形成要求を繰り返す。これにより、画像形成スレッド２（０５３４）の画像形成処理と並列に画像形成スレッド１（０５３２）の中間ＰＤＬ変換処理を行うことができ、画像形成スレッド１（０５３２）及び画像形成スレッド２（０５３４）に割り当てられたＣＰＵコア（例えば、コア９ａとコアコア９ｂ）のＣＰＵ時間を有効に活用することができる。
【００７５】
図９、図１０及び図１１に示すフローチャートは、それぞれ印刷行列制御スレッド０２３５の処理、ＰＰＲエンジン制御スレッド０２３６の処理、及びＰＰＲエンジン８からの割込みの処理を説明するものである。以下、画像形成スレッド２（０５３４）から印刷行列制御スレッド０２３５に印刷要求が出されてから印刷処理が終了するまでの流れについて説明する。
【００７６】
先ず、印刷行列制御スレッド０２３５は、画像形成スレッド２（０５３４）からの印刷要求を受けると、図９で示す印刷行列制御要求待ちから開放され（Ｓ３００）、印刷行列制御要求の種類を判断する（Ｓ３０１、Ｓ３０６、Ｓ３０８、Ｓ３１０）。この場合、要求は印刷要求であるので（Ｓ３０１がＹＥＳ）、印刷行列０２４６の最後尾に新しい印刷行列要素を１つ作成しキューイングする（例えば、図１２（ａ）のｃやｇの処理）。この時、印刷行列要素には、要求のあった画像のアドレス（画像データメモリ０２４２のアドレス）、解像度、階調、用紙サイズ、紙種、給紙口、排紙口等の印刷処理に必要な情報をセットする（Ｓ３０２）。
【００７７】
印刷行列要素のキューイングが終了すると、印刷行列制御スレッド０２３５は、ＰＰＲエンジン制御スレッド０２３６に対して印刷開始要求を送り（Ｓ３０３）、印刷開始要求受付の通知があるまで待機する（Ｓ３０４）。
【００７８】
ＰＰＲエンジン制御スレッド０２３６は、印刷行列制御スレッド０２３５から印刷開始要求を受け取ると、待機状態から解放され（Ｓ４００）、要求又は通知の種類を判断する（Ｓ４０１、Ｓ４０６、Ｓ４１１、Ｓ４１２）。この場合、印刷開始要求であるので（Ｓ４０１がＹＥＳ）、既に他の画像データをＰＰＲエンジン８に対して転送中であるかどうか判断する（Ｓ４０２）。
【００７９】
転送中でない場合は（Ｓ４０２がＮＯ）、先ず、印刷行列にキューイングされている印刷行列要素を取得し、ＰＰＲエンジン８に対して印刷行列要素に設定されている印刷処理に必要な解像度、階調、用紙サイズ、給紙口等の指定に関する情報を送る（Ｓ４０３）。その後、印刷行列要素に設定されている画像のアドレスが示す場所（画像データメモリ０２４２）から印刷対象となる画像データをＰＰＲエンジン８へ転送を開始する（Ｓ４０４）（例えば、図１２（ａ）のｄやｈの処理）。転送開始後、ＰＰＲエンジン制御スレッド０２３６は転送の終了を待たずに印刷開始要求受付完了通知を印刷行列制御スレッド０２３５へ返す（Ｓ４０５）。また、前述の画像データ転送中か否かの判断において転送中と判断された場合（Ｓ４０２がＹＥＳ）は、ＰＰＲエンジン８への画像データの転送等は行わずに印刷開始要求受付完了通知をすぐに印刷行列制御スレッド０２３５へ返す（Ｓ４０５）。
【００８０】
これにより、印刷行列制御スレッド０２３５は、ＰＰＲエンジン制御スレッド０２３６からＰＰＲエンジン８への画像データ等の転送終了を待つことなく、要求の受付が正常に処理されたことを確認した上で、画像形成スレッド２（０５３４）へ印刷要求の受付を通知することができる（Ｓ３０５）。その結果、画像形成スレッド２（０５３４）の待機時間を最小限に抑えて、画像形成スレッド２（０５３４）に割り当てられたＣＰＵコアのＣＰＵ時間を最大限活用することができる。
【００８１】
ＰＰＲエンジン制御スレッド０２３６から画像データの転送を受けたＰＰＲエンジン８は、図１１で示すように画像データ転送が終了すると、割込みにより何れかのＣＰＵコアにディスパッチされる（Ｓ５００がＹＥＳ）。ディスパッチされたＰＰＲエンジン８は、ＰＰＲエンジン制御スレッド０２３６に対して画像データ転送終了を通知した後（Ｓ５０１）、割込み処理を終了してＣＰＵコアを解放する。
【００８２】
ＰＰＲエンジン制御スレッド０２３６は、ＰＰＲエンジン８からの画像データ転送終了の通知により、待機状態から解放され（Ｓ４００）、要求又は通知の種類を判断する（Ｓ４０１、Ｓ４０６、Ｓ４１１、Ｓ４１２）。この場合、画像転送終了通知であるので（Ｓ４０６がＹＥＳ）、印刷行列制御スレッド０２３５に対して画像データの転送終了を通知する（Ｓ４０７）。
【００８３】
通知後は印刷行列０２４６に次の印刷行列要素がキューイングされているかどうかを確認し（Ｓ４０８）、次の印刷行列要素が作成されていない場合は、次の要求及び通知に備えて待機する（Ｓ４００）。次の印刷行列要素が作成されている場合、具体的には、ＰＰＲエンジン制御スレッド０２３６が印刷開始要求の受付時に他の画像データを転送中であったため（Ｓ４０２がＹＥＳ）、ＰＰＲエンジン８への画像転送を行うことなく印刷開始要求受付完了通知を印刷行列制御スレッド０２３５へ返していた場合は（Ｓ４０５）、本来なら印刷開始要求の受付時に行われるはずであった処理（Ｓ４０３、Ｓ４０４に該当する処理）を行う。先ず、印刷行列要素を取得し、ＰＰＲエンジン８に対して印刷行列要素にセットされている印刷処理に必要な解像度、階調、用紙サイズ、給紙口等の指定に関する情報を送る（Ｓ４０９）。その後、印刷行列要素にセットされている画像のアドレスが示す場所（画像データメモリ０２４２）から印刷対象となる画像データをＰＰＲエンジン８への転送を開始する（Ｓ４１０）。なお、さらに次の印刷行列要素がある場合は、画像データ転送終了後、ＰＰＲエンジン８による画像転送終了割込み処理から始まる一連の処理により、前述した同様の処理が行われ、次の印刷行列要素の画像データについても転送が行われる。
【００８４】
また、画像データの転送終了通知を受けた印刷行列制御スレッド０２３５は、待機状態から解放され（Ｓ３００）、印刷行列制御要求の種類を判断する（Ｓ３０１、Ｓ３０６、Ｓ３０８、Ｓ３１０）。この場合、要求は画像データの転送終了通知であるので（Ｓ３０８がＹＥＳ）、転送が終了した画像データ（画像データメモリ０２４２）を圧縮し、印刷行列０２４６の該当する行列要素中に記載されている画像データのアドレスを圧縮後の画像データのアドレスに更新する。また、画像データ圧縮済みフラグも圧縮済みに更新する（Ｓ３０９）。ここで、画像転送終了通知後も画像データを削除することなく圧縮するに止めているのは、ＰＰＲエンジン８内における印刷処理が正常に終了しなかった場合に、再度ＰＰＲエンジン制御スレッド０２３６からの画像データの転送が行うことで印刷処理の信頼性を確保するためである。
【００８５】
次に、ＰＰＲエンジン８への画像データの転送終了後、ＰＰＲエンジン８での印刷処理が終了し、排紙口から正常に用紙が出力された場合（以降、完全排紙と称する）について説明する。ＰＰＲエンジン８は、図１１で示すように完全排紙状態になると、割込みにより何れかのＣＰＵコアにディスパッチされる（Ｓ５０２がＹＥＳ）。ディスパッチされたＰＰＲエンジン８は、ＰＰＲエンジン制御スレッド０２３６に対して完全排紙を通知した後（Ｓ５０３）、割込み処理を終了してＣＰＵコアを解放する。
【００８６】
ＰＰＲエンジン制御スレッド０２３６は、ＰＰＲエンジン８からの完全排紙の通知により、待機状態から解放され（Ｓ４００）、要求又は通知の種類を判断する（Ｓ４０１、Ｓ４０６、Ｓ４１１、Ｓ４１２）。この場合、完全排紙通知であるので（Ｓ４１１がＹＥＳ）、印刷行列制御スレッド０２３５に対して印刷終了を通知する（Ｓ４１２）。通知後は、次の要求及び通知に備えて待機する（Ｓ４００）。
【００８７】
印刷終了通知を受けた印刷行列制御スレッド０２３５は、待機状態から解放され（Ｓ３００）、印刷行列制御要求の種類を判断する（Ｓ３０１、Ｓ３０６、Ｓ３０８、Ｓ３１０）。この場合、要求は印刷終了の通知であるので（Ｓ３０６がＹＥＳ）、印刷行列０２４６内の印刷が終了した画像の印刷行列要素を参照し、その画像データメモリ０２４２のアドレスを取得して該当する画像データメモリ０２４２を開放する。その後、その印刷行列要素を削除する（Ｓ３０７）。これにより、クライアントＰＣ１等から送られた印刷データは完全に削除される。
【００８８】
以上のように、本実施形態によれば、画像形成スレッド１（０５３２）及び画像形成スレッド２（０５３４）を受信制御やＰＰＲエンジン制御などのＩ／Ｏ処理を行うスレッドに比べプライオリティを高く設定して動作させることで、画像形成スレッドが印刷装置３（ＰＰＲ）のＣＰＵ９のコアを優先的に利用することができる。その結果、画像形成スレッドへの割り込みが減少し、処理の中断や中断に伴うレジスタへの退避／復帰等に要するオーバヘッドの影響を抑制することができる。また、画像形成スレッドがレディ状態で待機する時間も短くすることができる。これにより、画像形成スレッドへ割り当てるＣＰＵ時間を長くすることができる。
【００８９】
また、本実施形態では、画像形成スレッド１（０５３２）と画像形成スレッド２（０５３４）間のデータの受け渡し場所であるＰＤＬバッファ０２４７をダブルバッファ化し、それぞれのスレッドが異なるバッファを利用することにより、最も時間を要する画像形成処理を行う画像形成スレッド１（０５３２）と画像形成スレッド２（０５３４）の並列化を高めることができる。これにより、割り当てられたＣＰＵ時間を有効に活用することができる。
【００９０】
また、本実施形態では、画像形成スレッド２（０５３４）が行う印刷要求に対して、ＰＰＲエンジン８での実際の印刷やＰＰＲエンジン８での印刷に伴うデータの転送の終了を待つことなく、画像形成スレッド２（０５３４）に制御を戻している。これにより、画像形成スレッド２（０５３４）に割り当てられたＣＰＵ時間を無駄にすることなく有効に活用することができる。
【００９１】
以上により、画像形成処理を高速に行う印刷装置３（ＰＰＲ）を提供することができる。
なお、ここでは、４つのコアを有するＣＰＵについて説明したが、コアが２つのデュアルコアＣＰＵの場合も同様の効果を得ることができる。
【００９２】
（実施形態２）
次に、本発明の実施形態２について説明する。尚、以下で説明する実施形態２以降は、前述の実施形態１の処理を前提として、条件に応じてスレッド数を設定する例を示すものである。
【００９３】
本実施形態はスレッド数の設定をＣＰＵ９のコア数で決定する構成であり、クライアントＰＣ１の構成や印刷装置３（ＰＰＲ）の構成等は前述の実施形態１と同様である。なお、スレッド数とは画像形成処理に割り当てるスレッドの数のことである。以下、図１３に示すフローチャートを使用して本実施形態の処理を説明する。
【００９４】
この処理は、前述のジョブ開始コマンド検出後に行われるスレッド数決定ルーチン（図６のＳ１０６）によって呼び出されるルーチンである。先ずマルチコアＣＰＵであるＣＰＵ９のコア数を獲得する（ステップ（以下、ＳＰで示す）１）。このコア数の情報は、印刷装置３（ＰＰＲ）内のＲＯＭ６に記録されているシステム制御プログラムによりシステム情報として読み出すことができる。
【００９５】
次に、スレッド数の初期値として２をセットする（ＳＰ２）。次に、読み出したコア数の情報に基づいて、コア数が１を越えているか、即ち２以上であるか判断する（ＳＰ３）。ここで、コア数が２以上である場合（ＳＰ３がＹＥＳ）、上記初期設定したスレッド数である２がスレッド数となる。一方、コア数が１を越えていない場合、スレッド数を１に変更する（ＳＰ３がＮＯ、ＳＴＰ４）。
【００９６】
スレッド数の設定が２の場合は前述したとおり、画像形成処理をそれぞれ異なるＣＰＵコアが割り当てられた２つのスレッド（画像形成スレッド１（０５３２）と画像形成スレッド２（０５３４））が処理する。一方、スレッド数の設定が１の場合は、前述したスレッド数確認処理における判断（図６のＳ１１４）がＹＥＳとなり、スレッド数が２の場合では画像形成スレッド２（０５３４）が処理していた中間ＰＤＬコマンドの解析、画像展開、印刷要求等の処理を、画像形成スレッド１（０５３２）が処理する。これにより、画像形成処理が１つのＣＰＵコアに割り当てられた１つのスレッドで処理される。
【００９７】
以上のように、本実施形態では印刷装置３（ＰＰＲ）が有するコア数を意識することなく、ＣＰＵコア数に応じた最適なスレッド数で並列動作させることができ、効率よく画像形成の高速化を図ることができる。これにより、画像形成処理を高速に行う印刷装置３（ＰＰＲ）を提供することができる。
（実施形態３）
次に、本発明の実施形態３について説明する。
【００９８】
本実施形態はスレッド数の設定をメモリサイズに従って決定する構成でありクライアントＰＣ１の構成や印刷装置３（ＰＰＲ）の構成等は前述の実施形態１と同様である。なお、スレッド数とは画像形成処理に割り当てるスレッドの数のことである。以下、図１４に示すフローチャートを使用して本実施形態の処理を説明する。
【００９９】
本実施形態の処理も、前述のジョブ開始コマンド検出後に行われるスレッド数決定ルーチン（図６のＳ１０６）によって呼び出されるルーチンである。先ずメモリサイズの情報を獲得する（ステップ（以下、ＳＰで示す）１１）。このメモリサイズの情報も、印刷装置３（ＰＰＲ）内のＲＯＭ６に記録されているシステム制御プログラムによりシステム情報として読み出すことができる。
【０１００】
次に、本実施形態においても、スレッド数の初期値として２をセットする（ＳＰ１２）。以下、獲得したメモリサイズの情報に従ってスレッド数の設定を行う。すなわち、読み出したメモリサイズが５１２ＭＢ以上の場合、上記初期設定したスレッド数を維持し、このスレッド数が２に設定される（ＳＰ１３がＹＥＳ）。
【０１０１】
一方、メモリサイズが５１２ＭＢ未満の場合、スレッド数として１を設定する（ＳＰ１３がＮＯ、ＳＰ１４）。
以上のように、本実施形態ではメモリサイズに対応して、自動的に最適なスレッド数の設定で並列動作させることができ、メモリサイズを意識することなく、効率よく画像形成の高速化を図ることができる。これにより、画像形成処理を高速に行う印刷装置３（ＰＰＲ）を提供することができる。
（実施形態４）
次に、本発明の実施形態４について説明する。
【０１０２】
本実施形態は、文書ファイル印刷の為にアプリケーション（ＡＰＬ）より指定された解像度及び階調数に従ってスレッド数の設定を行うものである。なお、スレッド数とは画像形成処理に割り当てるスレッドの数のことである。以下、図１５に示すフローチャートを使用して本実施形態の処理を説明する。
【０１０３】
本実施形態の処理も、前述のジョブ開始コマンド検出後に行われるスレッド数決定ルーチン（図６のＳ１０６）によって呼び出されるルーチンである。ここでは、ジョブ開始コマンドのオペランドとして指定される解像度と階調数を利用する。先ず指定された解像度が１２００ｄｐｉより大きいかどうか判断される（ステップ（以下、ＳＰで示す）２１）。解像度が１２００ｄｐｉより大きい場合は、スレッド数を１に設定する（ＳＰ２１がＹＥＳ、ＳＰ２２）。
【０１０４】
解像度が１２００ｄｐｉ以下の場合は、さらに解像度が６００ｄｐｉより大きいかどうか判断される（ＳＰ２３）。解像度が６００ｄｐｉより大きい場合は、さらに指定された階調数が２より大きいかどうか判断される（ＳＰ２３がＹＥＳ、ＳＰ２４）。ここで、階調数が２より大きい場合は、スレッド数を１に設定し（ＳＰ２２）、階調数が２以下の場合は、スレッド数を２に設定する（ＳＰ２７）。
【０１０５】
また、解像度が６００ｄｐｉ以下の場合は（ＳＰ２３がＮＯ）、さらに解像度が６００ｄｐｉかどうか判断され（ＳＰ２５）、解像度が６００ｄｐｉでない場合、つまり解像度が６００ｄｐｉ未満の場合は（ＳＰ２５がＮＯ）、スレッド数を２に設定する（ＳＰ２７）。
【０１０６】
一方、解像度が６００ｄｐｉである場合は（ＳＰ２５がＹＥＳ）、さらに階調数が１６以上かどうか判断される（ＳＰ２６）。階調数が１６以上であった場合は、スレッド数を１に設定し（ＳＰ２６がＹＥＳ、ＳＰ２２）、階調数が１６未満であった場合は、スレッド数を２に設定する（ＳＰ２６がＮＯ、ＳＰ２７）。
【０１０７】
以上のように、本実施形態ではジョブ開始コマンドで指定された解像度及び階調数に対応して自動的に最適なスレッド数の設定で並列動作させることができ、解像度及び階調数を意識することなく、効率よく画像形成の高速化を図ることができる。これにより、画像形成処理を高速に行う印刷装置３（ＰＰＲ）を提供することができる。
（実施形態５）
次に、本発明の実施形態５について説明する。
【０１０８】
本実施形態は、文書ファイル印刷の為にアプリケーション（ＡＰＬ）より指定された用紙サイズに従ってスレッド数の設定を行うものである。なお、スレッド数とは画像形成処理に割り当てるスレッドの数のことである。以下、図１６に示すフローチャートを使用して本実施形態の処理を説明する。
【０１０９】
本実施形態の処理も、前述のジョブ開始コマンド検出後に行われるスレッド数決定ルーチン（図６のＳ１０６）によって呼び出されるルーチンである。ここでは、ジョブ開始コマンドのオペランドとして指定される用紙サイズを利用する。先ず指定された用紙サイズを元に定型紙が指定されているかどうか判断される（ステップ（以下、ＳＰで示す）３１）。定型紙が指定されていた場合は、さらに用紙サイズがＢ４以上のサイズかどうか判断される（ＳＰ３１がＹＥＳ、ＳＰ３２）。ここで、Ｂ４以上のサイズであった場合は、スレッド数を１に設定し（ＳＰ３２がＹＥＳ、ＳＰ３３）、Ｂ４未満のサイズであった場合は、スレッド数を２に設定する（ＳＰ３２がＮＯ、ＳＰ３５）。
【０１１０】
一方、用紙サイズとして非定型紙が指定されていた場合は、さらに非定型紙の用紙長が２２０ｍｍより長いかどうか判断される（ＳＰ３１がＮＯ、ＳＰ３４）。非定型紙の用紙長が２２０ｍｍより長い場合は、スレッド数を１に設定し（ＳＰ３４がＹＥＳ、ＳＰ３３）、非定型紙の用紙長が２２０ｍｍ以下の場合は、スレッド数を２に設定する（ＳＰ３４がＮＯ、ＳＰ３５）。
【０１１１】
以上のように、本実施例ではジョブ開始コマンドで指定された用紙サイズに対応して自動的に最適なスレッド数の設定で並列動作させることができ、用紙サイズを意識することなく、効率よく画像形成の高速化が図れる。これにより、画像形成処理を高速に行う印刷装置３（ＰＰＲ）を提供することができる。
（実施形態６）
次に、本発明の実施形態６について説明する。
【０１１２】
本実施形態は１スレッド構成及び２スレッド構成におけるスレッドの処理時間を計測し、平均処理時間が短いスレッド数の設定を行うものである。なお、スレッド数とは画像形成処理に割り当てるスレッドの数のことである。以下、具体的に説明する。
【０１１３】
図１７は本実施形態で使用する印刷装置３（ＰＰＲ）のシステム構成図である。尚、同図の構成は前述の図２に示すシステム構成と基本的に同様であるが、印刷装置３（ＰＰＲ）内に時間計測手段１０、及び処理時間記憶手段１１を含む。尚、他の構成は前述の図２と同様であり、図２と同じ回路には同じ番号を付し、構成上の説明を省略する。
【０１１４】
時間計測手段１０は各コア９ａ〜９ｄがスレッド処理を実行する際の処理時間を計測する機能を有し、具体的な計測処理については後述する。なお、ここでスレッド処理とは、画像形成処理を行うスレッドによる処理のことである。また、処理時間記憶手段１１は、例えば図１８に示す処理時間テーブルで構成され、１スレッド構成及び２スレッド構成時の各累積処理時間、累積頁数、及び１頁当たりの平均処理時間を記憶する。
【０１１５】
なお、画像形成スレッド（画像形成スレッド１（０５３２）及び画像形成スレッド２（０５３４））以外のスレッドについては、実施形態１と同様の処理となるので、ここでは説明を省略する（図５及び図９から図１１）。また、スレッドの初期化処理についても実施形態１と同様の処理となるので同じく説明を省略する（図３及び図４）。
【０１１６】
図１９に示すフローチャートは中間ＰＤＬ変換部０２３２による画像形成スレッド１（０５３２）の処理を説明するものであり、実施形態１における図６に対応するものである。実施形態１における図６との相違点は、スレッド数の決定処理（ＳＰ１１０）、画像形成スレッド１（０５３２）の計測開始（ＳＰ１０１）、終了（ＳＰ１２６、ＳＰ１５１）、１スレッド構成の処理時間更新（ＳＰ１５２）、スレッド数判断処理（ＳＰ１２５）のみである。
【０１１７】
以下、図１９に示す中間ＰＤＬ変換部０２３２による画像形成スレッド１（０５３２）の処理について具体的に説明する。先ず、画像形成スレッド１（０５３２）は、受信制御スレッド０２３０により印刷データが受信バッファ０２４０に格納されるまで待機する（ステップ（以下、ＳＰで示す）１００）。受信バッファ０２４０に印刷データが格納されると画像形成スレッド１（０５３２）の処理時間を計測するため、計測処理を開始する（ＳＰ１０１）。具体的には、図２０に示す処理に従って実行され、先ず画像形成スレッド１（０５３２）の時間計測中フラグがオフであるか判断される（ＳＰ１０２）。尚、画像形成スレッド１（０５３２）の時間計測中フラグは初期状態ではオフに設定されているため（ＳＰ１０２がＹＥＳ）、画像形成スレッド１（０５３２）の時間計測中フラグをオンにセットし、時間計測手段１０（タイマ１）による時間計測を開始する（ＳＰ１０３、ＳＰ１０４）。
【０１１８】
その後、図１９に示すフローチャートに戻って、格納された印刷データ中からＰＤＬコマンドを順次取り出す（ＳＰ１０５）。取り出したＰＤＬコマンドは、印刷装置３（ＰＰＲ）の仕様に合致した中間ＰＤＬの形式に変換され、中間ＰＤＬコマンドとして、中間ＰＤＬ生成中ＰＤＬバッファにバッファリングされる（ＳＰ１０６）。
【０１１９】
なお、ＰＤＬコマンド及び中間ＰＤＬコマンドには、ジョブ開始コマンド、ジョブ終了コマンド、頁開始コマンド、改頁コマンド等が含まれている。ＰＤＬデータおよび中間ＰＤＬデータ中の印刷ジョブは、ジョブ開始コマンドとジョブ終了コマンドで挟まれ、さらに、印刷ジョブ中の各頁に対応する箇所は頁開始コマンドと改頁コマンドに挟まれた構造となっている。
【０１２０】
次に、ＳＰ１０７からＳＰ１２４では、受信バッファ０２４０から取り出し変換した中間ＰＤＬコマンドの種類を判断し、引き続き受信バッファ０２４０から後続のデータを取り出し中間ＰＤＬコマンドへの変換処理を行うか、又は変換した中間ＰＤＬコマンドの画像形成処理に進むかを決定している。具体的には、ＳＰ１０７、ＳＰ１０９、ＳＰ１１９、ＳＰ１２２のそれぞれで、ジョブ終了コマンド、ジョブ開始コマンド、頁開始コマンド、改頁コマンドか否かを判断しそれぞれに応じた処理を行っている。いずれにも該当しない場合は、さらに中間ＰＤＬ生成中ＰＤＬバッファの空き状況を確認している（ＳＰ１２３）。
【０１２１】
基本的には、改頁コマンドが出現するまでは、受信バッファ０２４０から順番にＰＤＬコマンドを取り出し、中間ＰＤＬコマンドに変換して中間ＰＤＬ生成中ＰＤＬバッファへ格納する。そして、改頁コマンドの出現により、中間ＰＤＬ生成中ＰＤＬバッファへ格納された中間ＰＤＬコマンドの画像形成処理へ進む。ただし、多くの場合、改頁コマンドの発生前に中間ＰＤＬ生成中ＰＤＬバッファが一杯になるため、その場合は、改頁コマンドの発生を待たずに画像形成処理に進む。また、その他、ジョブ終了コマンドが出現した場合にも、これ以上現在処理中のジョブのＰＤＬデータは存在しないため画像形成処理に進む。
【０１２２】
以下、ジョブ開始コマンド、頁開始コマンド、改頁コマンド、ジョブ終了コマンドの順にそれぞれが出現した場合の処理について説明する。
まず、中間ＰＤＬコマンドがジョブ開始コマンドであった場合（ＳＰ１０７がＹＥＳ）は、スレッド数の決定処理が開始され（ＳＰ１１０）、図２１に示すスレッド数決定ルーチンが開始される。まず、不図示の不揮発性記憶装置に記録された図１８で示す処理時間テーブルを読み出し（ＳＰ１１１）、１スレッド構成の場合と２スレッド構成の場合で１頁あたりの平均処理時間を比較する（ＳＰ１１２）。比較の結果、２スレッド構成時の１頁あたりの平均処理時間が最も少ない場合は、スレッド数を２に設定する（ＳＰ１１３がＹＥＳ、ＳＰ１１４）。これに該当しない場合は、スレッド数を１に設定する（ＳＰ１１３がＮＯ、ＳＰ１１５）。なお、処理時間テーブルの初期状態はすべての項目が０となっているので、最初はスレッド数が２と設定される。その後、画像形成スレッド１（０５３２）及び画像形成スレッド２（０５３４）の時間計測中フラグをＯＦＦに、処理時間を０に設定する（ＳＰ１１６、ＳＰ１１７）。さらに、時間計測手段１０（タイマ１およびタイマ２）もリセットして（ＳＰ１１８）、図１９のフローチャートに戻る。
【０１２３】
なお、上述したとおり図２１で示すスレッド数決定ルーチンにより、先に開始された画像形成スレッド１（０５３２）の処理時間の計測（ＳＰ１０１）が、スレッド数の設定と同時に一旦初期化されてしまう。ただし、このような計測の初期化を伴うスレッド数の決定処理は、ジョブ開始コマンドが出現した場合のみ行われるものであり、後述するように、引き続き行われる画像形成スレッド１（０５３２）の処理の中で、再度、画像形成スレッド１（０５３２）の処理時間計測が開始される（ＳＰ１０１、ＳＰ１０２がＹＥＳ、ＳＰ１０３、ＳＰ１０４）。通常、ジョブ開始コマンドは一連の印刷データの始めでのみ出現し、頁の途中で出現することはないため、以降は処理中に計測が初期化されることはない。
【０１２４】
その後、中間ＰＤＬ生成中ＰＤＬバッファの容量一杯まで中間ＰＤＬコマンドがバッファリングされたか判断する（ＳＰ１２３）。ＮＯと判定され場合は、受信バッファ０２４０を確認し、ＰＤＬコマンドをすべて処理したかどうかを判断する（ＳＰ１２４）。すべて処理済みの場合は、受信制御スレッド０２３０から新たな印刷データが受信バッファ０２４０へ格納されるまで待機する（ＳＰ１００）。ＰＤＬコマンドをすべて処理していない場合、画像形成スレッド１（０５３２）の処理時間計測開始ルーチンが開始される（ＳＰ１０１）。先のスレッド数決定ルーチンにより画像形成スレッド１（０５３２）の時間計測中フラグがオフとされているため（ＳＰ１０２がＹＥＳ）、再度、画像形成スレッド１（０５３２）の時間計測中フラグをオンにセットし、時間計測手段１０（タイマ１）による時間計測を開始する（ＳＰ１０３、ＳＰ１０４）。
【０１２５】
計測を開始すると処理が未済のＰＤＬコマンドを受信バッファ０２４０から順次取得し、中間ＰＤＬコマンドに変換し中間ＰＤＬ生成中ＰＤＬバッファへ格納する（ＳＰ１０５、ＳＰ１０６）。なお、ジョブ開始コマンドにはオペランドとして、解像度、階調、用紙サイズ、給紙口などの各種情報が指定されている。ジョブ終了コマンドが処理されるまでの間、これらの情報は一時的に記憶され、後続の各種処理では必要に応じてこれらの情報を利用することができる。
【０１２６】
次に、中間ＰＤＬコマンドが頁開始コマンドであった場合は（ＳＰ１０９がＹＥＳ）、印刷行列制御スレッド０２３５に対して画像データメモリ０２４２の確保要求を出し（ＳＰ１２０）、印刷行列制御スレッド０２３５からの確保通知まで待機する（ＳＰ１２１）。印刷行列制御スレッド０２３５から画像メモリ確保通知を受けた画像形成スレッド１（０５３２）は、待機状態から解放され、ジョブ開始コマンドの場合と同様に、中間ＰＤＬ生成中ＰＤＬバッファの状態や受信バッファ０２４０を確認して、それぞれに応じた処理を行う。
【０１２７】
次に、中間ＰＤＬコマンドが改頁コマンドであった場合（ＳＰ１２２がＹＥＳ）は、スレッド数が２かどうか判断される（ＳＰ１２５）。スレッド数が２と設定されている場合、画像形成スレッド１（０５３２）の処理時間の計測を終了するため、計測終了処理が行われる（ＳＰ１２５がＹＥＳ、ＳＰ１２６）。具体的には、図２２に示す処理に従って実行され、先ず時間計測手段１０（タイマ１）による計測処理を停止し（ＳＰ１２７）、時間計測手段１０（タイマ１）の値を読み出し（ＳＰ１２８）、画像形成スレッド１（０５３２）の処理時間として、一時的に記憶する（ＳＰ１２９）。また、タイマ１の値をリセットし（ＳＰ１３０）、画像形成スレッド１（０５３２）の時間計測中フラグをオフにする（ＳＰ１３１）。なお、この時点で計測終了処理が行われるのは、引き続き実施される画像形成処理は画像形成スレッド２（０５３４）が担当することにより、画像形成スレッド１（０５３２）の実質的な処理が終了するためである。一方、スレッド数が２でないと判断される（ＳＰ１２５がＮＯ）場合は、引き続き画像形成スレッド１（０５３２）により画像形成処理が行われるため、計測終了処理は行われない。
【０１２８】
次に、中間ＰＤＬコマンドがジョブ終了コマンドであった場合は（ＳＰ１０７がＹＥＳ）、ジョブ終了内部フラグをＯＮに設定した上で（ＳＰ１０８）、スレッド数が２かどうか判断される（ＳＰ１２５）。以降、改頁コマンドの場合と同様に、スレッド数が２の場合は、画像形成スレッド１（０５３２）の処理時間の計測が終了され、スレッド数が２の場合は、計測が終了されない。
【０１２９】
中間ＰＤＬコマンドがジョブ開始コマンド、頁開始コマンド、改頁コマンド、ジョブ終了コマンドのいずれにも該当しない場合は、中間ＰＤＬ生成中ＰＤＬバッファが一杯ではない限り、引き続き受信バッファ０２４０からのＰＤＬコマンドの変換処理を行う。以上の処理により、中間ＰＤＬ生成中ＰＤＬバッファに中間ＰＤＬコマンドが格納される。
【０１３０】
上記のＳＰ１０７からＳＰ１２４で、改頁コマンドまたはジョブ終了コマンドが出現した場合、又は中間ＰＤＬ生成中ＰＤＬバッファの容量が一杯となった場合、中間ＰＤＬコマンドによる画像形成処理へ進み、スレッド数の設定が１となっているかどうかが判断される（ＳＰ１３２）。以降では、最初の計測処理、つまり印刷データの１頁目の計測処理の場合を想定する。この場合、スレッド数が２と設定されているため、ＮＯと判定される。
【０１３１】
ＳＰ１３３からＳＰ１３８では、中間ＰＤＬ生成中ＰＤＬバッファに格納された中間ＰＤＬコマンドの画像形成処理を画像形成スレッド２（０５３４）へ依頼している。先ず、画像形成要求中フラグがオンであるか判断する（ＳＰ１３３）。この画像形成要求中フラグは、図４で示すマルチスレッドの初期化ルーチン内の処理（Ｓ６）によってオフに設定されており（ＳＰ１３３がＮＯ）、上記中間ＰＤＬコマンドを格納した中間ＰＤＬ生成中ＰＤＬバッファ（第１のＰＤＬバッファ０２４８）を、以後画像形成スレッド２（０５３４）が画像データ形成部０２３４で読み出しを行う画像形成ＰＤＬバッファに設定する（ＳＰ１３６）。続いて、画像形成要求中フラグをオンにセットし（ＳＰ１３７）、画像形成スレッド２（０５３４）に対して画像形成要求を出す（ＳＰ１３８）。すなわち、中間ＰＤＬ変換部０２３２から画像データ形成部０２３４に対して画像形成要求を出力する。
【０１３２】
尚、前述の判断（ＳＰ１３３）において、画像形成要求中フラグがオンの場合には、画像形成スレッド２（０５３４）による画像形成処理の終了を待ち、画像形成要求中フラグをオフする（ＳＰ１３３がＹＥＳ、ＳＰ１３４、ＳＰ１３５）。この処理は、画像形成スレッド２（０５３４）が画像形成処理を終了した際行う処理であり、後述する。
【０１３３】
ＳＰ１３９からＳＰ１４４では、画像形成スレッド１（０５３２）が画像形成スレッド２（０５３４）へ画像形成処理を要求した後、以降の処理に備え、画像形成スレッド１（０５３２）の設定を変更している。
【０１３４】
前半部分のＳＰ１３９からＳＰ１４１では、画像形成スレッド１（０５３２）が中間ＰＤＬコマンドを出力する中間ＰＤＬ生成中ＰＤＬバッファの設定を変更する。まず、中間ＰＤＬ生成中ＰＤＬバッファが第１のＰＤＬバッファ０２４８か否かを判断する（ＳＰ１３９）。その結果、第１のＰＤＬバッファ０２４８と判定した場合（ＳＰ１３９がＹＥＳ）は、中間ＰＤＬ生成中ＰＤＬバッファを第２のＰＤＬバッファ０２４９へ変更し（ＳＰ１４１）、第１のＰＤＬバッファ０２４８でない判定した場合（ＳＰ１３９がＮＯ）、つまり第２のＰＤＬバッファ０２４９である場合は、中間ＰＤＬ生成中ＰＤＬバッファを第１のＰＤＬバッファ０２４８へ変更する（ＳＰ１４０）。ここでは、図４で示すマルチスレッドの初期化ルーチン内の処理（Ｓ５）により第１のＰＤＬバッファ０２４８が中間ＰＤＬ生成中ＰＤＬバッファとして設定されているので、第２のＰＤＬバッファ０２４９へ変更される。
【０１３５】
なお、この処理は、先に依頼した画像形成処理と、中間ＰＤＬ変換処理を並列して進めるために行われる処理である。これから画像形成処理で画像形成スレッド２（０５３４）が利用する第１のＰＤＬバッファ０２４８の内容を、画像形成スレッド１（０５３２）が後続の処理で上書きしないために行われる。当該処理は、印刷装置３（ＰＰＲ）がダブルバッファ化したＰＤＬバッファ０２４７（第１のＰＤＬバッファ０２４８、第２のＰＤＬバッファ０２４９）を有することで実現される仕組みであり、これにより、画像形成スレッド１（０５３２）は画像形成処理の要求後、画像形成処理の終了を待たずに、中間ＰＤＬ変換処理を行うことができる。
【０１３６】
その後、ジョブ終了内部フラグがＯＮであるかが判断され（ＳＰ１４２）、ＯＮであると判定された場合は、先に画像形成スレッド２（０５３４）へ要求した画像形成処理の終了に備えて待機する（ＳＰ１４３）。画像形成処理の終了が通知されるとジョブ終了内部フラグがＯＦＦに設定して（ＳＰ１４４）、受信バッファ０２４０の確認処理（ＳＰ１２４）へ戻る。なお、ジョブ終了内部フラグがＯＦＦと判定された場合はすぐに受信バッファ０２４０の確認処理（ＳＰ１２４）へ戻り、引き続き中間ＰＤＬ変換処理を行う。
【０１３７】
以上、スレッド数決定ルーチンが最初に呼び出される場合を想定して、画像形成スレッド１（０５３２）の処理について説明したが、この場合、前述のとおりスレッド数は２と設定される。次回、スレッド数決定ルーチンが呼び出される場合（つまり、２つ目のジョブ開始コマンドが出現した場合）は、スレッド数は基本的に１と設定される。これは、図１８で示す処理時間テーブル内の２スレッド構成の１頁あたりの平均処理時間は更新されているのに対し、１スレッド構成の１頁あたりの平均処理時間は初期状態のまま０となっていることから、平均処理時間の短い１スレッド構成が選択され、スレッド数が１に設定されるためである。これにより、各構成少なくとも１回は実行されることになり、平均処理時間の短い構成が適切に評価されることになる。
【０１３８】
なお、スレッド数が１と設定されている場合は、Ｓ１３２におけるスレッド数の判断処理がＹＥＳとなり、ＳＰ１４５からＳＰ１５２の処理が行われる。これは、前述したスレッド数の設定が２の場合（ＳＰ１３２がＮＯ）に、画像形成要求により画像形成スレッド２（０５３４）で行われる処理に対応するものである。スレッド数の設定が１であるため、画像形成スレッド１（０５３２）自身が画像形成処理も行うことを示している。以下、具体的に説明する。
【０１３９】
スレッド数が１と判断されると、画像形成ＰＤＬバッファに格納された中間ＰＤＬコマンドを順次取り出し（ＳＰ１４５）、改頁コマンドかどうか判断する（ＳＰ１４６）。改頁コマンドでない場合（ＳＰ１４６がＮＯ）は、取出した中間ＰＤＬコマンドの解析を行い、その中間ＰＤＬコマンドに対応した画像形成処理を実施し、予め印刷行列制御スレッド０２３５により確保された一頁分の画像データメモリ０２４２（画像データメモリ０２４３や画像データメモリ０２４４など要求毎に異なる）に画像を展開する（ＳＰ１４７）。その後、画像形成ＰＤＬバッファに格納された中間ＰＤＬコマンドをすべて処理したか判断され（ＳＰ１４８）、処理が未済の中間ＰＤＬコマンドがある場合は（ＳＰ１４８がＮＯ）、中間ＰＤＬコマンドの取り出し処理まで戻り（ＳＰ１４５）、上記の処理を繰り返す。
【０１４０】
画像形成ＰＤＬバッファから取出した中間ＰＤＬコマンドが改頁コマンドである場合は、画像データメモリ０２４２に展開された画像について、印刷行列制御スレッド０２３５に対し印刷要求を出し（ＳＰ１４９）、印刷要求受付終了の通知があるまで待機する（ＳＰ１５０）。印刷行列制御スレッド０２３５からの印刷要求受付の通知があると、待機状態から解放され、画像形成スレッド１（０５３２）の処理時間の計測を終了するため、計測終了処理が行われる（ＳＰ１５１）。具体的には、ＳＰ１２６において前述した図２２に示す処理に従って実行される。
【０１４１】
処理時間計測終了処理が終了し一連の計測処理が終了すると、１スレッド構成における計測結果について図１８に示す処理時間テーブルを更新する（ＳＰ１５２）。具体的には、図２３に示す処理に従って実行され、１スレッド構成の累積頁数のデータを＋１し（ＳＰ１５３）、１スレッド構成の累積処理時間に計測した画像形成スレッド１（０５３２）の処理時間を累積し（ＳＰ１５４）、１スレッド構成の平均処理時間を計算し（１スレッド構成の累積処理時間／１スレッド構成の累積頁数）、処理時間テーブルの１スレッド構成の対応するエリアに平均処理時間を記録する（ＳＰ１５５、ＳＰ１５６）。その後、画像形成スレッド１（０５３２）及び画像形成スレッド２（０５３４）の処理時間を０にリセットし（ＳＰ１６３）、受信バッファ０２４０の確認処理（ＳＰ１２４）へ戻り、以上の処理を繰り返す。
【０１４２】
図２４に示すフローチャートは画像データ形成部０２３４による画像形成スレッド２（０５３４）の処理を説明するものである。先ず、画像形成スレッド２（０５３４）は、画像形成スレッド１（０５３２）により画像形成要求があるまで待機する（ステップ（以下、ＳＰで示す）２００）。画像形成要求があると画像形成スレッド２（０５３４）の処理時間を計測するため、計測処理を開始する（ＳＰ２０１）。具体的には、図２５に示す処理に従って実行され、先ず画像形成スレッド２（０５３４）の時間計測中フラグがオフであるか判断される（ＳＰ２０２）。尚、画像形成スレッド２（０５３４）の時間計測中フラグは初期状態ではオフに設定されているため（ＳＰ２０２がＹＥＳ）、画像形成スレッド２（０５３４）の時間計測中フラグをオンにセットし、時間計測手段１０（タイマ２）による時間計測を開始する（ＳＰ２０３、ＳＰ２０４）。
【０１４３】
その後、図２４に示すフローチャートに戻って、画像形成ＰＤＬバッファに格納された中間ＰＤＬコマンドを順次取り出し（ＳＰ２０５）、取出した中間ＰＤＬコマンドがジョブ終了コマンドかどうか判断する（ＳＰ２０６）。通常、画像形成要求後の最初の中間ＰＤＬコマンドはジョブ終了コマンドではないので（ＳＰ２０６がＮＯ）、さらに改頁コマンドかどうか判断する（ＳＰ２０８）。改頁コマンドでない場合（ＳＰ２０８がＮＯ）は、取出した中間ＰＤＬコマンドの解析を行い、その中間ＰＤＬコマンドに対応した画像形成処理を実施し、予め印刷行列制御スレッド０２３５により確保された一頁分の画像データメモリ０２４２（画像データメモリ０２４３や画像データメモリ０２４４など要求毎に異なる）に画像を展開する（ＳＰ２０９）。その後、画像形成ＰＤＬバッファに格納された中間ＰＤＬコマンドをすべて処理したか判断され（ＳＰ２１０）、処理が未済の中間ＰＤＬコマンドがある場合は（ＳＰ２１０がＮＯ）、中間ＰＤＬコマンドの取り出し処理まで戻り（ＳＰ２０５）、上記の処理を繰り返す。
【０１４４】
画像形成ＰＤＬバッファから取出した中間ＰＤＬコマンドが改頁コマンドである場合は、画像データメモリ０２４２に展開された画像について、印刷行列制御スレッド０２３５に対し印刷要求を出し（ＳＰ２１１）、印刷要求受付終了の通知があるまで待機する（ＳＰ２１２）。印刷行列制御スレッド０２３５からの印刷要求受付の通知があると、第２の画像形成スレッド０５３４は待機状態（ＳＰ２１２）から解放され、第２の画像形成スレッド０５３４の処理時間の計測を終了するため、計測終了処理が行われる（ＳＰ２１３）。具体的には、図２６に示す処理に従って実行され、先ず時間計測手段１０（タイマ２）による計測処理を停止し（ＳＰ２１４）、時間計測手段１０（タイマ２）の値を読み出し（ＳＰ２１５）、画像形成スレッド２（０５３４）の処理時間として、一時的に記憶する（ＳＰ２１６）。また、タイマ２の値をリセットし（ＳＰ２１７）、画像形成スレッド２（０５３４）の時間計測中フラグをオフにする（ＳＰ２１８）。
【０１４５】
処理時間計測終了処理が終了し一連の計測処理が終了すると、２スレッド構成における計測結果について図１８に示す処理時間テーブルを更新する（ＳＰ２１９）。具体的には、図２３に示す処理に従って実行され、２スレッド構成の累積頁数のデータを＋１し（ＳＰ１５７）、画像形成スレッド２（０５３４）の処理時間が画像形成スレッド１（０５３２）の処理時間より長いか判断する（ＳＰ１５８）。
【０１４６】
ここで、画像形成スレッド２（０５３４）の処理時間が画像形成スレッド１（０５３２）の処理時間より長い場合（ＳＰ１５８がＹＥＳ）、画像形成スレッド１（０５３２）の処理時間を画像形成スレッド２（０５３４）の処理時間に設定する（ＳＰ１５９）。次に、２スレッド構成の累積処理時間に上記画像形成スレッド１（０５３２）の処理時間を累積し（ＳＰ１６０）、２スレッド構成の平均処理時間を計算し（２スレッド構成の累積処理時間／２スレッド構成の累積頁数）、処理時間テーブルの対応するエリアに平均処理時間を記録し、処理時間記憶手段１１に書き込む（ＳＰ１６１、ＳＰ１６２）。
【０１４７】
なお、上記のとおり、２スレッド構成の累積処理時間には、画像形成スレッド１（０５３２）及び画像形成スレッド２（０５３４）の合計処理時間ではなく、より時間を要したスレッドの処理時間を累積し、平均処理時間を算出している。これは、並列処理における全体の処理時間は、並列して行われる各処理時間の合算値ではなく、並列して行われる各処理時間の中の最大値に依存するためである。
【０１４８】
その後、画像形成スレッド１（０５３２）及び画像形成スレッド２（０５３４）の処理時間を０にリセットし（ＳＰ１６３）、図２４に示すフローチャートに戻って、画像形成要求の要求元である画像形成スレッド１（０５３２）に対して、画像形成ＰＤＬバッファ（この場合、第１のＰＤＬバッファ０２４８）の画像形成処理の終了通知を送り（ＳＰ２２０）、次の画像形成要求があるまで待機する（Ｓ２００）。
【０１４９】
また、画像形成スレッド２（０５３４）が画像形成ＰＤＬバッファから取出した中間ＰＤＬコマンドがジョブ終了コマンドである場合（Ｓ２０６がＹＥＳ）も、画像形成要求の要求元である画像形成スレッド１（０５３２）に対して、画像形成ＰＤＬバッファ（この場合、第１のＰＤＬバッファ０２４８）の画像形成処理の終了通知を送り（Ｓ２０７）、次の画像形成要求があるまで待機する（Ｓ２００）。
【０１５０】
本実施形態は以上のように処理することによって、前述の実施形態２乃至５で説明したＣＰＵの能力や、メモリサイズ、解像度/階調コマンド等を全く意識することなく、１頁あたりの平均処理時間の最も少ないスレッド構成を選択し、自動的に適切なスレッド数の設定を行うことができる。
【０１５１】
尚、処理時間記憶手段１１に設定する処理時間テーブルを用紙サイズに対応した構成としてもよい。図２７は用紙サイズ毎に１スレッド構成と２スレッド構成の累積処理時間、累積頁数、１頁当たりの平均処理時間を記録し、用紙サイズに従って最適なスレッド構成を選択するための処理時間テーブルの例を示す図である。
【０１５２】
上記テーブルに前述の実施形態６の処理に従ってデータを記録し、上記と同様の処理を行うことによって、スレッド構成毎であり、且つ用紙毎に１頁当たりの平均画像形成時間を求め、用紙サイズに応じて最適なスレッド数の設定を行うことができる。
【０１５３】
なお、本発明は、上述の実施の形態に例示した構成に限らず、その趣旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【図面の簡単な説明】
【０１５４】
【図１】本発明の一実施形態におけるクライアントＰＣと印刷装置の機能的な構成例を説明する図である。
【図２】本発明の一実施形態におけるクライアントＰＣと印刷装置の構成例を説明する図である。
【図３】本発明の一実施形態における画像形成スレッドの初期設定処理を説明するフローチャートである。
【図４】本発明の一実施形態における画像形成スレッドの初期設定処理を説明するフローチャートである。
【図５】本発明の一実施形態における受信制御スレッドの処理を説明するフローチャートである。
【図６】本発明の一実施形態における画像形成処理スレッド１の処理を説明するフローチャートである。
【図７】本発明の一実施形態における画像形成処理スレッド１の処理を説明するフローチャートである。
【図８】本発明の一実施形態における画像形成処理スレッド２の処理を説明するフローチャートである。
【図９】本発明の一実施形態における印刷行列制御スレッドの処理を説明するフローチャートである。
【図１０】本発明の一実施形態におけるプリンタエンジン制御スレッドの処理を説明するフローチャートである。
【図１１】本発明の一実施形態におけるプリンタエンジンからの割込みによる処理を説明するフローチャートである。
【図１２】（ａ）は、本発明の一実施形態の印刷データ処理を説明する模式図である。（ｂ）は、従来の印刷データ処理を説明する模式図である。
【図１３】実施形態２の処理を説明するフローチャートである。
【図１４】実施形態３の処理を説明するフローチャートである。
【図１５】実施形態４の処理を説明するフローチャートである。
【図１６】実施形態５の処理を説明するフローチャートである。
【図１７】実施形態６におけるクライアントＰＣと印刷装置の構成例を説明する図である。
【図１８】実施形態６における処理時間記憶手段の構成例を示す図である。
【図１９】実施形態６における画像形成処理スレッド１の処理を説明するフローチャートである。
【図２０】実施形態６における画像形成処理スレッド１の処理時間計測開始処理を説明するフローチャートである。
【図２１】実施形態６におけるスレッド数決定の処理を説明するフローチャートである。
【図２２】実施形態６における画像形成処理スレッド１の処理時間計測終了処理を説明するフローチャートである。
【図２３】実施形態６における１スレッド構成および２スレッド構成の処理時間更新処理を説明するフローチャートである。
【図２４】実施形態６における画像形成処理スレッド２の処理を説明するフローチャートである。
【図２５】実施形態６における画像形成処理スレッド２の処理時間計測開始処理を説明するフローチャートである。
【図２６】実施形態６における画像形成処理スレッド２の処理時間計測終了処理を説明するフローチャートである。
【図２７】実施形態６におけるその他の処理時間記憶手段の構成例を示す図である。
【図２８】従来のクライアントＰＣと印刷装置の構成例を説明する図である。
【図２９】従来のクライアントＰＣと印刷装置の機能的な構成例を説明する図である。
【図３０】印刷装置の内部構成例を説明する図である。
【符号の説明】
【０１５５】
１・・・・・クライアントＰＣ
２・・・・・ＬＡＮ
３・・・・・印刷装置（ＰＰＲ）
４・・・・・ＣＰＵ
５・・・・・ＲＡＭ
６・・・・・ＲＯＭ
７・・・・・ＬＡＮ回路
８・・・・・ＰＰＲエンジン
９・・・・・ＣＰＵ
９ａ、９ｂ、９ｃ、９ｄ・・ＣＰＵコア
８１・・・・トナー
８２・・・・感光ドラム
８３・・・・転写ベルト
８４・・・・２次転写ロール
８５・・・・定着ロール
８６・・・・用紙カセット
８７・・・・給紙装置
８８・・・・排紙トレイ
８９・・・・両面機構
２１０・・アプリケーションプログラム（ＡＰＬ）
２１１・・文書ファイル
２１２・・プリンタドライバ（Ｐｒｉｎｔｅｒ  Ｄｒｉｖｅｒ）
２１３・・ＰＤＬ変換部
２１４・・スプーラ
２３０・・受信制御スレッド
２３１・・画像形成スレッド
２３２・・中間ＰＤＬ変換部
２３４・・画像データ形成部
２３５・・印刷行列制御スレッド
２３６・・ＰＰＲエンジン制御スレッド
２４０・・受信バッファ
２４１・・ＰＤＬバッファ
２４２・・画像データメモリ
２４３・・画像データメモリ
２４４・・画像データメモリ
２４６・・印刷行列
２４７・・ＰＤＬバッファ
２４８・・第１のＰＤＬバッファ
２４９・・第２のＰＤＬバッファ
５３２・・画像形成スレッド１
５３４・・画像形成スレッド２
【図１】
0005141338.tif 000002
【図２】
0005141338.tif 000003
【図３】
0005141338.tif 000004
【図４】
0005141338.tif 000005
【図５】
0005141338.tif 000006
【図６】
0005141338.tif 000007
【図７】
0005141338.tif 000008
【図８】
0005141338.tif 000009
【図９】
0005141338.tif 000010
【図１０】
0005141338.tif 000011
【図１１】
0005141338.tif 000012
【図１３】
0005141338.tif 000013
【図１４】
0005141338.tif 000014
【図１５】
0005141338.tif 000015
【図１６】
0005141338.tif 000016
【図１７】
0005141338.tif 000017
【図１８】
0005141338.tif 000018
【図１９】
0005141338.tif 000019
【図２０】
0005141338.tif 000020
【図２１】
0005141338.tif 000021
【図２２】
0005141338.tif 000022
【図２３】
0005141338.tif 000023
【図２４】
0005141338.tif 000024
【図２５】
0005141338.tif 000025
【図２６】
0005141338.tif 000026
【図２７】
0005141338.tif 000027
【図２８】
0005141338.tif 000028
【図２９】
0005141338.tif 000029
【図３０】
0005141338.tif 000030
【図１２】
0005141338.tif 000031