説明

画像形成装置、データ処理方法及びプログラム

【課題】単一の印刷データを複数のタスクで並列に解釈する場合に、中間データを生成していないタスクからの書き込みを中止して、当該タスクを終了する。
【解決手段】中間データを解釈して画像データを生成する画像形成装置において、単一の印刷データを複数のタスクで並列に解釈し、該印刷データのページ毎に中間データの生成処理を複数のタスクのうち一つのタスクのみ行う際に、中間データを生成していないタスクにおいて、メモリにフォントファイル、またはイメージファイルを書き込む命令を検知した後、当該タスクの処理を中止する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像形成装置、データ処理方法及びプログラムに関するものである。
【背景技術】
【0002】
複写機、レーザプリンタ等の画像形成装置は、ホストコンピュータからのプリントデータを受け取り、そのデータの解釈及び画像処理を行い、印字するための画像データを生成するコントローラを備える。
ホストコンピュータのアプリケーションとプリンタドライバはページ記述言語(PDL)により記述されたプリントデータを生成し、ネットワーク等の通信媒体を介してコントローラにデータ送信する。
【0003】
PDLとしては、キヤノン社のLIPS、アドビシステムズ社のPostScript(アドビシステムズ社の登録商標)、HP社のPCLなどが知られている。
ホストコンピュータの性能向上、アプリケーションの高機能化に伴い生成されるPDLデータの大容量化、複雑化が進んでいる。全般的なCPU性能の向上に伴い、コントローラのPDL処理性能も向上しているが、PDL処理がエンジンスループットに間に合わないケースがなお存在する。
【0004】
近年、CPUクロックの向上が頭打ちとなり、複数のコアを単一パッケージに格納したマルチコア化が進んでいる。マルチコア化したCPUの性能をフルに引き出すためには、PDL処理の並列化が必要であり、幾つかの方法が考案されている。
例えば、複数ジョブを複数のコアで同時並行してPDL処理するジョブ並列処理方式がある。このジョブ並列処理方式では大量のジョブを処理する場合には、全体の生産性を向上することができる。
【0005】
しかしながら、その中の単一ジョブだけをみると、PDL処理時間はシングルコアで実行した場合と変わらない。また、別の方法として、単一ジョブ内の複数ページを複数のコアで同時並行してPDL処理するページ並列処理方式がある。このページ並列処理方式では単一ジョブに対しても高速化が見込める。
しかし、プリントデータはページ間の依存関係の無いページ独立なPDLで記述されている必要がある。
また、ジョブ中の単一ページだけをみると、PDL処理時間はシングルコアで実行した場合と変わらない。複雑な描画がされたページのPDL処理は時間がかかることが多く、ページ並列処理方式でもボトルネックとなる可能性が残る。
さらに別の方法として、単一ページ内の複数描画オブジェクトを複数のコアで同時並行してPDL処理するオブジェクト並列処理方式がある。このオブジェクト並列処理方式は単一ページのPDL処理時間を短縮することも可能であるが、オブジェクトの分割と収集にかかる計算コストが高いことが知られている。並列処理の効率を考えた場合には、ジョブ並列処理方式、もしくはページ並列処理方式の方が望ましい。
【0006】
なお、ページ並列処理方式には、完全ページ並列処理方式と部分ページ並列処理方式の二つが存在する。ここで、完全ページ並列処理方式はコントローラCPU上で実行されるPDL処理をページ単位で完全に並列処理する方式である(例えば、特許文献1)。
一方、部分ページ並列処理はPDL処理のうち一部分を並列処理して、残りの部分は重複処理を行うものである(例えば、特許文献2)。
ページ間の依存関係があるPDLの場合、PDLデータを解釈するインタプリタは先頭ページから順番に処理を行う必要がある。前のページ迄の処理結果がインタプリタ内部に状態として蓄積されるためである。
しかしながら、インタプリタよりも下層のコンポーネントであるグラフィックライブラリやディスプレイリスト生成部、レンダラはページ間の依存性を除くことが比較的容易である。
その為、インタプリタは重複処理を行い、それ以下のコンポーネントをページ毎に並列処理することが可能である。部分ページ並列処理は完全ページ並列処理方式よりも並列度が落ちるが、ページ間の依存関係のあるPDLでも並列処理が可能となり有用である。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2004−310763号公報
【特許文献2】特許US2010/0277757A1
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、部分ページ並列処理を行った場合でもそのままでは処理できないケースが存在する。具体的にはファイルへの書き込みを伴うジョブである。
例えば、PostScriptではファイルの読み書きを行う為のオペレータが存在する。並列実行される複数のインタプリタが同一ファイルの書き込みを行った場合、ファイルの不整合が発生する。
ファイルの書き込みはフォントファイルのダウンロードや再利用する画像データの一時記憶等の目的で使われることが多い。ファイルの書き込みを伴うプリントジョブであることが、事前に判別できれば、ジョブ先頭から並列処理を行わないという方法が考えられる。
しかしながら、ファイルの書き込みがあるか否かの事前判別はPDLデータの保存とプレパースが必要なため、PDL処理時間の低下をまねく。
また、ファイルの書き込みを多重化する方法も考えられる。並列実行されるインタプリタごとにファイル書き込みを行うディレクトリを用意し、同じファイルをそれぞれ個別に書き込む方法である。この場合、書き込むファイルのトータルサイズが小さい場合は、それほど問題にならないが、大きい場合は非常に多くのファイルシステムリソースを消費することになる。また、同一のファイルを二重に書き込む処理は一般的にファイルIOの性能が低いこともあり、実行時間の面からも効率が良いとは言えない。
本発明は、上記の課題を解決するためになされたもので、本発明の目的は、単一の印刷データを複数のタスクで並列に解釈する場合に、中間データを生成していないタスクからの書き込みを中止して、当該タスクを終了できる仕組みを提供することである。
【課題を解決するための手段】
【0009】
上記目的を達成する本発明の画像形成装置は以下に示す構成を備える。
中間データを解釈して画像データを生成する画像形成装置において、単一の印刷データを複数のタスクで並列に解釈し、解釈された印刷データを基に中間データの生成処理を行う並列処理手段と、生成処理により生成された中間データから画像データを生成する画像データ生成手段と、前記印刷データの解釈中に前記画像形成装置のメモリに対するファイルへの書き込み命令または前記メモリに対するファイルの読み出し命令を検知する検知手段と、を有し、前記複数のタスクの内、中間データを生成していないタスクが印刷データを解釈している際に前記検知手段によりファイルへの書き込み命令を検知した場合、当該タスクにおける印刷データの解釈処理を中止することを特徴とする。
【発明の効果】
【0010】
本発明によれば、単一の印刷データを複数のタスクで並列に解釈する場合に、中間データを生成していないタスクからの書き込みを中止して、当該タスクを終了できる。
【図面の簡単な説明】
【0011】
【図1】印刷装置の構成を説明するブロック図である。
【図2】図1に示した印刷装置のモジュール構成を説明するブロック図である。
【図3】PSパーサが発行するDL生成依頼の内容の一例を示す図である。
【図4】画像形成装置の制御方法を説明するフローチャートである。
【図5】画像形成装置の制御方法を説明するフローチャートである。
【図6】画像形成装置の制御方法を説明するフローチャートである。
【図7】印刷装置のデータ処理例を説明するタイミングチャートである。
【図8】画像形成装置の制御方法を説明するフローチャートである。
【図9】印刷装置のデータ処理例を説明するタイミングチャートである。
【発明を実施するための形態】
【0012】
次に本発明を実施するための最良の形態について図面を参照して説明する。
<システム構成の説明>
〔第1実施形態〕
【0013】
図1は、本実施形態の画像形成装置の構成を説明するブロック図である。なお、本実施形態に示す画像形成装置は、ネットワークを介してホストコンピュータ上で多くの処理を分離実行させる構成も可能である。また、本実施形態の画像形成装置は、図示しない情報処理装置からネットワーク等を介して受信する中間データを解釈して画像データを生成する処理を複数のタスクを並列して実行させることが可能とすべく、後述するようにCPUが内部に二つのコアを有するデュアルコアプロセッサで構成される。
【0014】
図1に示す画像形成装置100おいて、200はコントローラで、画像信号やデバイス情報の入出力を制御する。1はCPUで、ROM3あるいはHDD4に記憶されたプログラムをRAM2に読み出して実行する。さらに、CPU1はシステムバス5に接続される各デバイスを統括的に制御する。CPU1は、内部に二つのコアを有するデュアルコアプロセッサであり、二つの制御プログラムを同時並列に実行可能である。
【0015】
RAM2は、CPU1の主メモリ、ワークエリアとして機能する。ROM3には電源ON時に実行されるブートプログラムが格納され、HDD4にはオペレーティングシステムと本装置の制御プログラム本体が格納される。
また、HDD4は画像データやプリントデータ等の大容量データを一時的あるいは長期的に保持する目的でも使用される。Network6はローカルエリアネットワーク13に接続し、印刷データやデバイス情報の入出力を担う。
【0016】
7は操作部I/Fで、操作部14とのインターフェース部で、操作部14に表示する画像データを操作部14に対して出力する。また、操作部14から本装置の使用者が入力した情報を、CPU1に伝える役割をする。操作部14は、出力器として液晶パネルと音源を備え、入力器としてタッチパネルとハードキーを備えるものである。
【0017】
コントローラ200は、デバイスI/F8を介して、プリンタエンジン15に接続される。デバイスI/F8はCPU1の指示に基づき、画像信号の送出、デバイス動作指示、デバイス情報の受信を行う。
【0018】
プリンタエンジン15は、コントローラ200からの画像信号を媒体上に出力する出力機であり、電子写真方式、インクジェット方式の何れでも構わない。9はRaster Image Processor(RIP)で、ディスプレイリスト(以後、DLと略記する)をラスタイメージに展開する専用ハードウェアである。RIP9は、CPU1によりRAM2上に生成されたDLを高速かつ、CPU1の実行と並列に、処理するものである。10はプリンタ画像処理部で、プリント出力画像データに対して、画像補正処理、ハーフトーニング処理等を行う。11は画像圧伸部で、多値画像データはJPEG、2値画像データはJBIG、MMR、MHの圧縮伸張処理を行う。12は画像回転部で、画像データの回転処理を行う。
【0019】
図2は、図1に示した画像形成装置100のモジュール構成を説明するブロック図である。図2の(A)に示す各ソフトウェアモジュールは、プログラムとしてHDD4に格納され、RAM2にロードされCPU1により実行されるものである。
より具体的には、各ソフトウェアモジュールはCPU1上で動作するOS(オペレーティングシステム)によりRAM2にロードされ、スレッド単位で実行権を付与され、実行されるものである。
図2の(A)において、201はデータ受信部で、図示しないホストから送信されたプリントデータを受信し、受信したプリントデータはジョブ制御部202を介してジョブデータ管理部208で保持される。ジョブ制御部202は、プリントデータの受信から印刷までのジョブ制御の全般を司る。
203はPSインタプリタで、プリントデータを解釈して、中間データであるDLを生成する。PSインタプリタ203が生成したDLはジョブ制御部202を介してジョブデータ管理部208で保持される。PSインタプリタ203は、単一の印刷データを複数のタスクで並列に解釈し、該印刷データのページ毎に中間データの生成処理を複数のタスクのうち一つのタスクのみ行う並列処理可能に構成されている。
【0020】
204は中間データから画像データを生成する画像データ生成処理を行うレンダラで、DLからビットマップイメージを生成するモジュールとして機能し、多くの処理は専用ハードウェアであるRIP9により実行される。レンダラ204が生成したビットマップイメージはジョブ制御部202を介してジョブデータ管理部208で保持される。
205はプリントドライバで、デバイスI/F8を介してプリンタエンジン15への印刷指示とビットマップイメージの送出を行う。206はユーザインターフェースで、操作部I/F7を介して、操作部14を制御するモジュールである。主に操作部14の液晶パネルに表示するデータを生成し、タッチパネルからの入力に従い液晶パネルの表示を更新する。また、ユーザインターフェース206は、タッチパネルからの入力が何らかのジョブ実行指示であった場合は、ジョブ制御部202にその指示を伝達する。
【0021】
なお、ジョブデータ管理部208は、プリントデータ、DL、ビットマップイメージのそれぞれを一時的もしくは長期的に保持管理するデータベースとして使用される。
【0022】
図2の(B)は、図2の(A)に示したPSインタプリタ203をより詳細に記したソフトウェアモジュール構成に対応する。
図2の(B)において、PSパーサ209は、PSデータの解釈を行い、描画命令を抽出して、DL生成部210にDLの生成を依頼する。DL生成部210は、PSパーサ209からのDL生成依頼を受けて、DLを生成する。ここで、DL生成部210は、複数のDL生成部210を備え、印刷データを解釈し、中間データを生成するタスクを実行する第1の実行手段あるいは第2の実行手段として機能させることが可能に構成されている。
なお、2つのDL生成部210は印刷データを並行して解釈する。
従って、後述する図6の(A)に示す処理において、PSインタプリタ203が印刷データを解釈中に、中間データを生成していないDL生成部が画像形成装置のメモリにフォントファイル、またはイメージファイルを書き込む命令を検出したかどうかを判断する。
そして、中間データを生成していないDL生成部が画像形成装置のメモリにフォントファイル、またはイメージファイルを書き込む命令を検知すると、当該DL生成部は、フォントファイル、またはイメージデータをメモリに書き込むことなく、解釈を中止する。
なお、PSパーサ209とDL生成部210とは密結合であり、PSパーサ209が描画命令を抽出するたびに、DL生成部210が呼び出される。PSパーサ209が発行するDL生成依頼の内容は図3の表に記載の通りである。211は切り換え部で、PSパーサ209からのDL生成依頼を受け付けるか、無視するかを切り替えるためのモジュールである。
【0023】
ここで、PSパーサ209は、ページ依存処理であるのに対して、DL生成部210はページ独立処理である。PSデータには前ページで定義したリソースを次ページで参照するケースがあるため、PSパーサ209は、ページ順番通りにPSデータの解釈を行う必要がある。これに対して、図3に示すDL生成依頼はいずれも前ページの処理に依存するものはなく、DL生成部210はページ順通りに処理する必要はない。
また、PSパーサ209とDL生成部210はそれぞれリエントラントな構造となっており、多重起動が可能である。一つのスレッド上で一つのPSパーサ209と一つのDL生成部210が実行される。
【0024】
図4は、本実施形態を示す画像形成装置の制御方法を説明するフローチャートである。本例は、コントローラ200にて実行される基本プリントフローに対応し、各スレッドに対応する処理は、図2に示した各ソフトウェアモジュールによって実行される。
より具体的に、各ステップはHDD4に記憶された図2に示した各ソフトウェアモジュール内の各プログラムがRAM2に読み出され、CPU1により実行されることにより実現される。以下の説明では、図2に示した各ソフトウェアモジュールを主体として説明を行う。
また、本処理ではスレッドA、スレッドB1、スレッドB2、スレッドCの四つのスレッドが並列に実行される。また、各スレッドはオペレーティングシステムにより時分割され、CPU1内の二つのコアに順番にその実行権が割り振られる。時分割の単位は十分に小さいため、四つのスレッドは並列動作すると見なすことができる。
【0025】
しかしながら、ある一時点に着目すると同時に実行されるスレッドは二つである。これは、CPU1が前述の通り2コアのデュアルコアプロセッサであることが理由である。オペレーティングシステムによるマルチスレッディング処理は一般に広く知られる技術であるため、詳細は省略する。
【0026】
さらに、各スレッドのうち、スレッドAがプリント処理のメインスレッドであり、スレッドB1、スレッドB2はスレッドAにより実行時に動的生成されるものである。スレッドCは本画像形成装置の起動時にオペレーティングシステムにより生成される常駐スレッドである。
【0027】
スレッドAでは最初にS4001において、データ受信部201は、図示しない情報処理装置からネットワークを介してプリントデータを受信し、ジョブ制御部202を介してジョブデータ管理部208に保持(スプール)させる。
次に、S4002において、ジョブ制御部202は、PSインタプリタ203がエントリポイントとなる二つのスレッドB1、スレッドB2を起動する。即ち、PSインタプリタ203は二つのスレッドにマッピングされて二重に起動される。
そして、ジョブ制御部202は、PSインタプリタ203に対して、ジョブデータ管理部208に保持したプリントデータを渡し、プリントデータの解釈を指示する。ここで、PSインタプリタ203は二重に起動されているため、同一のプリントデータをそれぞれのスレッドで同時に解釈し始めることになる。
【0028】
次にS4003において、ジョブ制御部202は、PSインタプリタ203から1ページ分のDLの生成完了通知か、PSインタプリタ203からDLの生成可否の問い合わせの何れかのイベントを受信するまで待つ。何れのイベントも、PSインタプリタ203(スレッドB1、スレッドB2)からジョブ制御部202(スレッドA)に対して送信されるものである。ここで、DLの生成可否の問い合わせは、指定されたページに対してPSインタプリタ203がDLを生成しても良いか問い合わせるものである。PSインタプリタ203は、PSデータを解釈して行き、新しいページが開始されると、必ずDL生成可否の問い合わせをジョブ制御部202に対して行う。
【0029】
次にS4004に進み、ジョブ制御部202は、PSインタプリタ203からDLの生成完了通知を受信したかどうか判定する。図4のフローを開始した当初はDLの生成は完了していないので、最初はNoと判断され、S4005へ進む。この場合、PSインタプリタ203から受信したイベントはDL生成可否の問い合わせなので、ジョブ制御部202は指定されたページが現在スレッドB1、B2の何れかのスレッドでDL生成中、あるいは生成済みのページか否かを判定する。
ここで、ジョブ制御部202がYesと判断した場合は、S4007へ進み、ジョブ制御部202は、PSインタプリタ203(スレッドB1、スレッドB2のいずれか)に対して、DLの生成を許可しないで、S4003に戻って処理を繰り返す。
【0030】
一方、S4005で、指定されたページが現在何れかのスレッドでDL生成中、あるいは生成済みのページでないとジョブ制御部202が判断した場合はS4006へ進む。そして、ジョブ制御部202は、PSインタプリタ203(スレッドB1、スレッドB2のいずれか)に対して、DLの生成を許可して、S4003へ戻って処理を繰り返す。ジョブ制御部202は何ページ目までDL生成を許可したか記憶し、この情報が次のS4005における判定に用いられる。
【0031】
一方、S4004でDLの生成が完了しているとジョブ制御部202が判断した場合は、S4008へ進み、ジョブ制御部202はレンダラ204でDLのオブジェクトのレンダリングを行い、ビットマップを生成する。
次に、S4009において、ジョブ制御部202は、レンダラ204が生成したビットマップをジョブデータ管理部208に保存し、プリントドライバ205にプリントを依頼する。なお、ジョブ制御部202によるプリントの依頼はプリントドライバ205に対してレンダリング終了通知を送信することにより実行される。
プリントドライバ205は、プリンタエンジン15に同期して処理を実行するために、スレッドCとしてスレッドAとは別スレッドで実行される。依頼を受けたプリントドライバ205は、S4201において、プリンタエンジン15に対してプリント開始要求コマンドを送信し、画像データを転送する。なお、S4201の詳細は別途後述する。
【0032】
次にS4010へ進み、ジョブ制御部202は、レンダラ204が全ページのレンダリングが完了したか判定する。ここで、ジョブ制御部202がYesと判断した場合は、図4のフローを終了し、Noと判断した場合は、S4003へ戻り、処理を繰り返す。以下、重複起動する図4に示すスレッドB1、スレッドB2の処理を説明する。
【0033】
図4に示すスレッドB1、スレッドB2のS4101において、PSインタプリタ203は、当該ページのDLを生成するかどうかをジョブ制御部202に問い合わせる。ジョブ制御部202から問い合わせ結果が通知されると、次にS4102へ進み、PSインタプリタ203は、当該ページのDL生成が許可されたか否か判定する。
【0034】
ここで、PSインタプリタ203がYesと判断した場合は、S4103へ進み、当該ページに対するPSデータを解釈して1ページ分のDLを生成する。一方、S4102で、PSインタプリタ203がNoと判断した場合は、S4104へ進み、当該ページに対するPSデータを解釈するが、DLは生成しない。
前述したように、DLの生成する/しないは、切り換え部211でDL生成依頼を受け付けるか/無視するかを切り替えることにより行う。
このように切り換え部211でDLの生成依頼を無視するように設定した場合、当該ページに対するDL生成処理が実行されないため、処理が高速化される。
なお、スレッドA、Bのどちらのスレッドが1ページ目のDL生成を担当するかは、DLの生成問い合わせの後先によって決まる。例えばスレッドB1、スレッドB2のうち、先に起動されたスレッドB1が先行して処理を開始するため、DL生成の問い合わせもスレッドB1が先行する。
上記S4103、あるいはS4104の処理が終了すると、S4105へ進み、PSインタプリタ203は、全ページの処理が終了したか否か判定する。ここで、PSインタプリタ203がNoと判断した場合は、S4101へ戻り、処理を繰り返す。
【0035】
一方、S4105で、PSインタプリタ203がYesと判断した場合は、本フローを終了する。
上述したようにPSインタプリタ203の処理はリエントラントな構成となっており、同時に二つのPSデータを処理することが可能である。PSデータ解釈処理、およびDL生成処理にかかる時間は、PSデータの各ページのデータ量と複雑度に大きく依存する。従って、スレッドB1、スレッドB2における各ページのDLの生成が完了するタイミングはページ順になるとは限らない。
【0036】
ここで、プリント時のページ順への並び替えはプリントドライバ205により実行される。なお、スレッドAとスレッドCは同期の為の待ち時間が非常に多い(スレッドCに関しては後述)。その結果として、CPU1の二つのコアにおける実行時間の大半がスレッドB1とスレッドB2に割り当てられることになる。
また、各ページのDL生成をスレッドB1とスレッドB2のどちらに割り振るかは、どちらのスレッドが先に当該ページの解釈を始めるかによって決まる。特定のページの解釈とDL生成処理に大きく時間がかかる場合でも、もう一方のスレッドが次のページ以降を連続して処理できるので、効率の良い割り振り方法である。DL生成の具体的な割り振り例に関しては別途後述する。
【0037】
図5は、本実施形態を示す画像形成装置の制御方法を説明するフローチャートである。本例は、図2に示したプリントドライバ205により実行される画像データ転送処理例であって、図4のS4201を詳細化した手順である。なお、各ステップは、図1に示したCPU1がROM3に記憶された制御プログラムをRAM2にロードして実行することで実現される。
最初にS5001において、プリントドライバ205は、ジョブ制御部202からレンダリング終了通知を受信するまで待つ。ここで、レンダリング終了通知は、前述したように、ジョブ制御部202によりS4009で送信されるものである。
【0038】
次に、S5002において、プリントドライバ205は、レンダリング済みのページがジョブの先頭ページか、もしくは前ページの印字出力が完了しているか判定する。ここで、プリントドライバ205がNoと判断した場合は、前のページのレンダリング完了を待つために、S5001に戻る。前述したように、各ページのレンダリングはページ順に完了するとは限らない。
一方、S5002で、プリントドライバ205がYesと判断した場合は、S5003へ進み、プリントドライバ205はプリンタエンジン15に対してプリント開始要求コマンドを送信し、画像データを転送する。
【0039】
なお、S5003において、プリントドライバ205はプリンタエンジン15との同期処理も行う。プリンタエンジン15は所定のスピード以上では出力できない。コントローラ200はそのRIP処理が速すぎる場合にプリンタエンジン15の印字出力を待つ必要がある。
次に、S5004において、プリントドライバ205は次ページがレンダリング済みか否か判定する。ここで、プリントドライバ205がYesであると判断した場合、S5005に進み、プリントドライバ205はプリンタエンジン15に同期して、プリント開始要求コマンドを送信し、画像データを転送する。
そして、再び、S5004に戻り同様の処理を繰り返す。S5004、S5005の処理により、先にレンダリング済みのページの画像データが全て出力される。
【0040】
一方、S5004でプリントドライバ205がNoと判断した場合は、S5006へ進み、プリントドライバ205は全ページの画像データの転送が完了したか否か判定する。ここで、プリントドライバ205がYesと判断した場合は、S5007へ進み、プリントドライバ205はプリンタエンジン15に対してプリント完了要求コマンドを送信する。
一方、S5006で、プリントドライバ205がNoと判断した場合は、S5001へ戻り、処理を繰り返す。
本実施形態では、複数のタスクで印刷データの解釈を開始した後、いずれか1つのタスクで画像形成装置のメモリにフォントファイル、またはイメージファイルを書き込む命令を検知した後、タスク制御を変更する。具体的には、1つのタスクで中間データ生成中において、後続のページで書き込み命令を検知したタスクに代えて、中間データを生成しているタスクが各ページの中間データ生成が1つのタスクで実行されるようにタスク制御される。
【0041】
次に、図6の(A)、図6の(B)を用いて、図4の基本プリントフローにおける並列処理において、ファイルの書き込みが発生した場合の処理フローについて説明する。
図6は、本実施形態を示す画像形成装置の制御方法を説明するフローチャートである。本例は、図4の基本プリントフローにおける並列処理例である。なお、各ステップはHDD4に記憶された図2に示した各ソフトウェアモジュール内の各プログラムがRAM2に読み出され、CPU1により実行されることにより実現される。以下の説明では、図2に示した各ソフトウェアモジュールを主体として説明を行う。以下、中間データを生成していないタスクにおいて、ファイルへの書き込み命令を検知した際に当該タスクにおける解釈を中止する処理を説明する。
なお、図4のスレッドB1、スレッドB2にマッピングされたPSインタプリタ203は同一のPSデータを処理するため、同一のファイルにアクセスする場合がある。同一のファイルに対して二つのスレッドから、非同期に書き込みを行った場合、ファイルの中身がPSデータの意図するものと異なってしまう可能性がある。
【0042】
ここで、図6の(A)は図4のS4104を、図6の(B)は図4のS4103を詳細化したものである。
図6の(A)では、S6001で、PSインタプリタ203は、PSデータをパース(解釈)して、PSオペレータを取り出す。次にS6002に進み、PSインタプリタ203は取り出したPSオペレータがファイルの書き込みを伴うオペレータ(命令)か否か判定する。なお、PSインタプリタ203は、印刷データの解釈中に画像形成装置のメモリに対するファイルへの書き込み命令またはメモリに対するファイルの読み出し命令を検知する検知可能に構成されている。ここで、メモリとは、図1に示したHDD4が好適である。
【0043】
ここで、PSインタプリタ203がYesと判断した場合はS6003に進み、PSインタプリタ203は当該スレッドをエラー終了する。
一方、S6002で、PSインタプリタ203がNoと判断した場合は、S6004へ進み、PSインタプリタ203はPSオペレータで指定された処理を実行する。但し、S6004において、PSインタプリタ203は描画オペレータの場合も、DLに出力しない。次にS6005に進み、PSインタプリタ203は1ページ分のPSデータの解釈が終了したか否か判定する。ここで、PSインタプリタ203がNoと判断した場合は、S6001へ戻り、処理を繰り返す。
【0044】
一方、S6005で、PSインタプリタ203がYesと判断した場合は、本フローを終了する。
図6の(B)では、S6101で、PSインタプリタ203はPSデータをパース(解釈して)、PSオペレータを取り出す。次に、S6102へ進み、PSインタプリタ203はPSオペレータで指定された処理を実行する。
但し、S6102において、PSインタプリタ203は描画オペレータの場合にDLに出力する。また、取り出したPSオペレータがファイル書き込みを伴うものであった場合には、ファイル書き込みが実行される。
【0045】
次にS6103に進み、PSインタプリタ203は1ページ分のPSデータの解釈が終了したか否か判定する。ここで、PSインタプリタ203がNoと判断した場合は、S6001へ戻り、処理を繰り返し、PSインタプリタ203がYesと判断した場合は、本フローを終了する。
なお、中間データを生成していないと判断した一方のDL生成部210が処理をエラー終了した後、中間データを生成していると判断した一方のDL生成部210が印刷データの解釈処理をシングルタスクで処理を継続する。
【0046】
図7は、本実施形態を示す画像形成装置のデータ処理例を説明するタイミングチャートである。以下、2つのDL生成部210により2つのタスクを実行することでマルチタスク処理を開始し、一方のDL生成部が解釈処理を中止した場合、マルチタスク処理から他方のDL生成部のみでタスクを実行するシングルタスク処理へ移行する処理を説明する。
図7の(A)は、5ページからなる特定データのDL生成ありの場合(上段側)となしの場合下段側に斜線で示す)の処理時間を表している。この特定データではDL生成なしの場合に、DL生成ありの場合に比べて半分近くの処理時間で終了する。あくまで、特定データによる例を示すものであり、実際の処理時間はPSデータの内容によって変わる。
【0047】
図7の(B)は、図7の(A)の特定データに対して、図4の基本プリントフローによるDL生成のページ割り振りを実施した場合のタイミングチャートを示している。
まず、1ページ目のDL生成がスレッドB1に割り振られ、スレッドB2はDL生成しないため1ページ目の処理を先に終了する。
スレッドB2で1ページ目が終了した時点で、2ページ目のDL生成を行っているスレッドは存在しないため、2ページ目のDL生成はスレッドB2に割り振られる。
次に、2ページ目の処理はスレッドB2が先に終了し、3ページ目のDL生成はスレッドB2に割り振られる。以後同様に、4ページ目はスレッドB1に、5ページ目はスレッドB2に割り振られる。
【0048】
図7の(C)は、図7の(A)の特定データの3ページ目の前半部分にファイルの書き込みを加えた場合のタイミングチャートを示している。
図7の(C)では、2ページ目迄の処理は、図7の(B)と全く同じである。
まず、3ページ目の処理をスレッドB1が開始し、ファイルへの書き込みを検知する。このとき、スレッドB2はDL生成を行っているため、指定された通りにファイルの書き込みを終了する。スレッドB1は3ページ目の処理をやや遅れて開始し、同様にファイルへの書き込みを検知する。このとき、スレッドB1はDL生成を行っていないため(図中斜線で示す)、スレッドB1は書き込みを検知した時点でエラー終了する。
スレッドB1が3ページ目でエラー終了してしまうため、4ページ目以降のDL生成は常にスレッドB2に割り振られる。なお、本実施形態では、一方のDL生成部210が既に命令を実行して中間データを生成している間に、当該中間データを生成しているページと同一ページに対する処理を他方のDL生成部210が開始した後、画像形成装置のメモリにフォントファイル、またはイメージファイルを書き込む命令を検知することを特徴としている。
【0049】
図7の(D)は、図7の(A)の特定データの3ページ目の後半部分にファイルの書き込みを加えた場合のタイミングチャートを示している。
図7の(C)との違いは、DL生成を行っていないスレッドB1が先にファイルの書き込みを検知して、エラー終了する点である。
このように、ファイルの書き込み検知の後先ではなく、DL生成中か否かで当該スレッドをエラー終了する点が本実施形態における特徴的な処理例である。
本実施形態によれば、ファイル書き込みを伴うジョブが存在するPDLでも効率的に並列処理を行うことができる。また、インタプリット前にファイル書き込みの有無判定を行わないため、ファイル書き込みのない通常の印刷ジョブの処理時間に殆ど影響を与えない。
さらに、ファイルの書き込みを多重化しないため、ファイルシステムリソースの消費量も単一処理(非並列処理)の際と変わらない。また、並列処理時にファイル書き込みを検知した際でも、先頭ページからやり直すこともなく、残りのページのみを単一処理することができる。さらに、本方式は制御手順がシンプルであり、ソフトウェアの実装工数を比較的少なくすることが可能である。
〔第2実施形態〕
【0050】
上記第1実施形態では、ファイル書き込みの検知時に、DL生成していないスレッドを終了させる方式を示した。本実施形態では、書き込んだファイルを読み出した時点でDL生成していないスレッドを終了させる方式の実施形態について説明する。
【0051】
図8は、本実施形態を示す画像形成装置の制御方法を説明するフローチャートである。本例は、基本プリントフローにおける並列処理において、書きこんだファイルからの読み出しが発生した場合の処理手順である。ここで、図8の(A)は図4のS4104の処理に対応し、図8の(B)は図4のS4103の処理に対応する。
なお、各ステップは、図1に示したCPU1がROM3に記憶された制御プログラムをRAM2にロードして実行することで実現される。
【0052】
なお、図4に示したスレッドB1、スレッドB2にマッピングされたPSインタプリタ203は同一のPSデータを処理するため、同一のファイルにアクセスする場合がある。また、同一のファイルに対して二つのスレッドから、非同期に書き込みを行った場合、ファイルの中身がPSデータの意図するものと異なってしまう可能性がある。
しかしながら、書き込みだけであれば、後からの書き込みをスキップすればファイル内容の不整合は発生しない。それでも、書き込みを行ったファイルから読み出す時点で問題が発生する場合がある。これは、先行するスレッドがファイルの書き込みを行うため、他のスレッドが同一ファイルを読み出した場合に、本来書き込まれていないはずの書き込みが既にされている場合があるからである。以下、PSインタプリタ203が印刷データを解釈中に、画像形成装置のメモリにフォントファイル、またはイメージファイルを書き込む命令を検知した後、当該フォントファイル、またはイメージファイルを読み出す命令を検知場合の処理を詳述する。
【0053】
図8の(A)では、S8001で、PSインタプリタ203は、PSデータをパース(解釈して)、PSオペレータを取り出す。次に、S8002に進み、PSインタプリタ203は、取り出したPSオペレータがファイルの書き込みを伴うオペレータか否か判定する。ここで、PSインタプリタ203がYesと判断した場合はS8003に進み、PSインタプリタ203は書き込むファイルのパス名を記憶する。
次に、S8004へ進み、PSインタプリタ203は、他のインタプリタスレッドに先行する書き込みか否かを判定する。
一方、S8002でPSインタプリタ203がNoと判断した場合は、S8005へ進み、PSインタプリタ203は、当該ジョブで過去に書き込んだファイルからの読み出しを指示するオペレータか否かを判定する。ここで、S8004でPSインタプリタ203がYesと判断した場合と、S8005で、PSインタプリタ203がNoと判断した場合は、S8006へ進む。
【0054】
そして、S8006で、PSインタプリタ203は、PSオペレータに指定された処理を実行する。但し、描画コマンドの場合にもDL出力は行わない。そして、S8004からS8006へ進んだ場合は、S8006で、PSインタプリタ203は、ファイルへの書き込みを実行することになる。PSインタプリタ203がS8006の処理を終了した場合、S8004でPSインタプリタ203がNoと判断した場合、S8007へ進む。
【0055】
そして、S8007で、PSインタプリタ203は、1ページ分のPSデータの解釈が終了したか否か判定する。ここで、PSインタプリタ203がNoと判断した場合はS8001へ戻り、処理を繰り返す。
一方、S8007で、PSインタプリタ203がYesと判断した場合は、本フローを終了する。また、S8005で、PSインタプリタ203がYesと判断した場合はS8008へ進み、PSインタプリタ203は、当該スレッドをエラー終了する。
【0056】
図8(B)では、S8101で、PSインタプリタ203は、PSデータをパース(解釈して)、PSオペレータを取り出す。次に、S8102へ進み、PSインタプリタ203はファイルの書き込みを伴うオペレータか否かを判定する。ここで、PSインタプリタ203がYesと判断した場合は、S8103へ進み、PSインタプリタ203は他のインタプリタスレッドに先行する書き込みか否かを判定する。S8102で、PSインタプリタ203がNoと判断した場合と、S8103でPSインタプリタ203がYesと判断した場合は、S8104へ進む。
【0057】
そして、S8104では、PSインタプリタ203は、PSオペレータで指定された処理を実行する。但し、S8104において、PSインタプリタ203は描画オペレータの場合にDLに出力する。PSインタプリタ203がS8104の処理を終了した場合と、S8103でPSインタプリタ203がNoと判断した場合、S8105へ進む。
そして、S8105で、PSインタプリタ203は1ページ分のPSデータの解釈が終了したか否か判定する。ここで、PSインタプリタ203がNoと判断した場合はS8101へ戻り、処理を繰り返し、PSインタプリタ203がYesと判断した場合は、本フローを終了する。
本実施形態では、中間データを生成していると判断した一方のDL生成部210は、フォントファイル、またはイメージデータをメモリに書き込みまたは読み出しを行って中間データを生成する。一方、中間データを生成していないと判断した他方のDL生成部210は、フォントファイル、またはイメージデータをメモリから読み出すことなく、解釈を中止する。その後は、中間データを生成していると判断した一方のDL生成部210が印刷データの解釈処理をシングルタスクで処理を継続する。
【0058】
図9は、本実施形態を示す印刷装置のデータ処理例を説明するタイミングチャートである。以下、2つのDL生成部210により2つのタスクを実行することでマルチタスク処理を開始し、一方のDL生成部が解釈処理を中止した場合、マルチタスク処理から他方のDL生成部のみでタスクを実行するシングルタスク処理へ移行する処理を説明する。
図9の(A)は、3ページからなる特定データのDL生成ありの場合となしの場合の処理時間を表している。このデータではDL生成なしの場合に、DL生成ありの場合に比べて半分近くの処理時間で終了することが分かる。あくまで、特定データによる例を示すものであり、実際の処理時間はPSデータの内容によって変わる。
図9の(B)は、図の9(A)の特定データに対して、図4の基本プリントフローによるDL生成のページ割り振りを実施した場合のタイミングチャートを示している。
【0059】
図7の(B)と同様のロジックにより、DL生成のページ割り振りが決まるため、詳細は割愛する。
図9の(C)は、図9の(A)の特定データの2ページ目の前半部分に同一ファイルの書き込みと読み出しを加えた場合のタイミングチャートを示している。
まず、2ページ目の処理をスレッドB2が開始し、ファイルへの書き込み命令を検知する。このとき、スレッドB2はDL生成を行っていて、かつ、当該ファイルへの先行する書き込みであるため、指定された通りにファイルの書き込みを終了する。
次にスレッドB2は当該ファイルからの読み出し、当該ファイルへの書き込みを、連続して行う。スレッドB1は2ページ目の処理を遅れて開始し、同様にファイルへの書き込み命令を検知する。
ここで、スレッドB1は当該ファイルへの後からの書き込みを実行しようとするため、ファイルへの書き込み処理は実行されない。続いて、スレッドB1は当該ファイルからの読み出しを検知する。ここで、スレッドB1はDL生成を行っておらず、かつ過去に書き込みを行ったファイルからの読み出しを実行しようとしているため、読み出し命令を検知した時点でエラー終了する。なお、本実施形態では、一方のDL生成部210が既に命令を実行して中間データを生成している間に、当該中間データを生成しているページと同一ページに対する処理を他方のDL生成部210が開始した後、画像形成装置のメモリにフォントファイル、またはイメージファイルを書き込む命令を検知することを特徴としている。
【0060】
本実施形態によれば、第1実施形態と同様に、ファイル書き込みを伴うジョブが存在PDLでも効率的に並列処理を行うことができる。この際、インタプリット前にファイル書き込みの有無判定を行わないため、ファイル書き込みのない通常の印刷ジョブの処理時間に殆ど影響を与えない。
【0061】
さらに、ファイルの書き込みを多重化しないため、ファイルシステムリソースの消費量も単一処理(非並列処理)の際と変わらない。
また、並列処理時にファイル書き込みを検知した際でも、先頭ページからやり直すこともなく、残りのページのみを単一処理することができる。
さらに、第2実施形態に示す方式では、ファイルを書き込むだけのジョブであれば並列処理が可能になる利点がある。
【0062】
本発明の各工程は、ネットワーク又は各種記憶媒体を介して取得したソフトウエア(プログラム)をパソコン(コンピュータ)等の処理装置(CPU、プロセッサ)にて実行することでも実現できる。
【0063】
本発明は上記実施形態に限定されるものではなく、本発明の趣旨に基づき種々の変形(各実施形態の有機的な組合せを含む)が可能であり、それらを本発明の範囲から除外するものではない。
【符号の説明】
【0064】
201 データ受信部
202 ジョブ制御部
203 PSインタプリタ
204 レンダラ
205 プリントドライバ
206 ユーザインターフェース
208 ジョブデータ管理部
209 PSパーサ
210 DL生成部
211 切り換え部

【特許請求の範囲】
【請求項1】
中間データを解釈して画像データを生成する画像形成装置において、
単一の印刷データを複数のタスクで並列に解釈し、解釈された印刷データを基に中間データの生成処理を行う並列処理手段と、
生成処理により生成された中間データから画像データを生成する画像データ生成手段と、
前記印刷データの解釈中に前記画像形成装置のメモリに対するファイルへの書き込み命令または前記メモリに対するファイルの読み出し命令を検知する検知手段と、を有し、
前記複数のタスクの内、中間データを生成していないタスクが印刷データを解釈している際に前記検知手段によりファイルへの書き込み命令を検知した場合、当該タスクにおける印刷データの解釈処理を中止することを特徴とする画像形成装置。
【請求項2】
前記並列処理手段は、
印刷データを解釈し、中間データを生成するタスクを実行する第1の実行手段と、
前記第1の実行手段と並行して、印刷データを解釈し、中間データを生成するタスクを実行する第2の実行手段と、
前記印刷データを解釈中に、前記検知手段が前記画像形成装置のメモリにフォントファイル、またはイメージファイルを書き込む命令を検知した場合、前記第1の実行手段、または前記第2の実行手段の内、何れの実行手段が中間データを生成しているかどうかを判断する判断手段と、を有し、
2つの実行手段の内、前記判断手段が中間データを生成していると判断された一方の実行手段は、フォントファイル、またはイメージデータを前記メモリに書き込み、中間データを生成し、
前記判断手段が中間データを生成していないと判断された他方の実行手段は、フォントファイル、またはイメージデータを前記メモリに書き込むことなく、前記解釈を中止することを特徴とする請求項1記載の画像形成装置。
【請求項3】
前記並列処理手段は、一方の実行手段が解釈処理を中止した後、前記中間データを生成していた他方の実行手段が、中間データが生成されていない残りのページを解釈し、前記印刷データにおける各ページの中間データを生成することを特徴とする請求項1記載の画像形成装置。
【請求項4】
前記並列処理手段は、
印刷データを解釈し、中間データを生成するタスクを実行する第1の実行手段と、
前記第1の実行手段と並行して、印刷データを解釈し、中間データを生成するタスクを実行する第2の実行手段と、
前記第1の実行手段、または前記第2の実行手段の内、何れの実行手段が中間データを生成しているかどうかを判断する判断手段と、を有し、
前記印刷データを解釈中に、前記検知手段が前記画像形成装置のメモリにフォントファイル、またはイメージファイルを書き込む命令を検知した後、当該フォントファイル、またはイメージファイルを読み出す命令を検知した場合、
2つの実行手段の内、前記判断手段が中間データを生成していると判断された一方の実行手段は、フォントファイル、またはイメージデータを前記メモリに書き込みまたは読み出しを行って中間データを生成し、
前記判断手段が中間データを生成していないと判断された他方の実行手段は、フォントファイル、またはイメージデータを前記メモリから読み出すことなく、前記解釈を中止することを特徴とする請求項1記載の画像形成装置。
【請求項5】
前記並列処理手段は、前記中間データの生成処理を前記複数のタスクのうち一つのタスクのみが行うことで、該印刷データのページ毎に中間データを生成していくことを特徴とする請求項1乃至4のいずれか1項に記載の画像形成装置。
【請求項6】
前記並列処理手段は、2つの実行手段により2つのタスクを実行することでマルチタスク処理を開始し、
一方の実行手段が解釈処理を中止した場合、マルチタスク処理から他方の実行手段のみでタスクを実行するシングルタスク処理へ移行することを特徴とする請求項1乃至4のいずれか1項に記載の画像形成装置。
【請求項7】
前記検知手段は、
一方の実行手段が既に命令を実行して中間データを生成している間に、当該中間データを生成しているページと同一ページに対する処理を他方の実行手段が開始した後、前記画像形成装置のメモリにフォントファイル、またはイメージファイルを書き込む命令を検知することを特徴とする請求項2記載の画像形成装置。
【請求項8】
中間データを解釈して画像データを生成する画像形成装置におけるデータ処理方法において、
単一の印刷データを複数のタスクで並列に解釈し、解釈された印刷データを基に中間データの生成処理を行う並列処理工程と、
生成処理により生成された中間データから画像データを生成する画像データ生成工程と、
前記印刷データの解釈中に前記画像形成装置のメモリに対するファイルへの書き込み命令または前記メモリに対するファイルの読み出し命令を検知する検知工程と、を有し、
前記複数のタスクの内、中間データを生成していないタスクが印刷データを解釈している際に前記検知工程によりファイルへの書き込み命令を検知した場合、当該タスクにおける印刷データの解釈処理を中止することを特徴とするデータ処理方法。
【請求項9】
請求項8に記載のデータ処理方法をコンピュータに実行させることを特徴とするプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2013−14039(P2013−14039A)
【公開日】平成25年1月24日(2013.1.24)
【国際特許分類】
【出願番号】特願2011−147101(P2011−147101)
【出願日】平成23年7月1日(2011.7.1)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】