(57)【特許請求の範囲】
【請求項１】
印刷データを処理する画像形成装置において、
前記印刷データを解釈して中間データを生成する複数のインタプリタと、
各インタプリタからのページ要求と中間データ完了通知とに応じて処理すべきページ数情報をそれぞれのインタプリタに指定して並列処理させる制御手段と、
生成された中間データから出力すべき各ページの画像データを生成する生成手段と、
を備え、
指定されたページが無効ページであるといずれか一方のインタプリタが解釈した場合、前記並列処理を停止して、いずれか１つのインタプリタが、当該無効ページから後続する最終ページまで当該インタプリタが管理するページ数情報を用いて中間データを生成することを特徴とする画像形成装置。
【請求項２】
前記いずれか１つのインタプリタは、無効ページから後続するページから最終ページまで中間データを生成したことを前記制御手段に通知することを特徴とする請求項１記載の画像形成装置。
【請求項３】
前記中間データを生成しないインタプリタは、中間データの生成を停止することを特徴とする請求項１記載の画像形成装置。
【請求項４】
前記印刷データは、所定のページ記述言語で記述されていることを特徴とする請求項１乃至３のいずれか１項に記載の画像形成装置。
【請求項５】
印刷データを処理する画像形成装置の制御方法において、
複数のインタプリタを用いて前記印刷データを解釈して中間データを生成する生成工程と、
各インタプリタからのページ要求と中間データ完了通知とに応じて処理すべきページ数情報をそれぞれのインタプリタに指定して並列処理させる制御工程と、
生成された中間データから出力すべき各ページの画像データを生成する生成工程と、
を備え、
指定されたページが無効ページであるといずれか一方のインタプリタが解釈した場合、前記並列処理を停止して、いずれか１つのインタプリタが、当該無効ページから後続する最終ページまで当該インタプリタが管理するページ数情報を用いて中間データを生成することを特徴とする画像形成装置の制御方法。
【請求項６】
請求項５に記載の画像形成装置の制御方法をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像形成装置、画像形成装置の制御方法、及びプログラムに関するものである。
【背景技術】
【０００２】
近年、ハードウェア技術の向上により、複数の演算処理を同時並列で実行可能とするマルチコアＣＰＵが開発され、普及が進んでいる。コピー、ファックス等の複数の機能を有する複合機においても、マルチコアＣＰＵが搭載されるようになってきている。マルチコアＣＰＵを搭載する複合機においては、印刷処理をマルチスレッド制御することで、並列実行するための技術が開発されてきている。印刷処理は、受信した印刷データをラスタ画像へ変換する画像処理の負荷が高く、これをマルチスレッド処理することで、印刷処理の高速化を実現する技術が提案されてきている。
【０００３】
画像処理は、印刷データの内容を解釈する言語解釈処理、ディスプレイリスト（以降ＤＬ）と呼ばれる中間データに変換するＤＬ生成処理、生成されたＤＬをラスタ画像へ変換するレンダリング処理により実現される。これをマルチスレッド処理する技術として、印刷データの処理をページ単位で区切り、各スレッドに割り当てて言語解釈、ＤＬ生成、レンダリング処理する、ページ並列技術がある（例えば特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１４０３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
印刷データには、ページ記述言語（ＰＤＬ）としてＰｏｓｔＳｃｒｉｐｔ（以下ＰＳ）が採用されることがあるが、ＰＳのオペレーターの中には、ｅｒａｓｅｐａｇｅなどのページの描画内容を無効化し、該ページを出力しないようにするオペレーター（描画命令）が存在する。これらのページ描画を無効化するオペレーターが含まれると、それ以降のページを正しく制御するために、ページの辻褄合わせをするページ整順処理を行わなければならない。
例えば、２ページ目のＰＳデータにｅｒａｓｅｐａｇｅオペレーターが含まれていると、３ページ目は２枚目の出力結果として、４ページ目は３枚目の出力結果として処理しなければならない。特許文献１に記載のページ並列技術は、各スレッドへ処理対象とするページを割り当てるジョブ制御部に、ページの描画を無効化するオペレーターを検知する手段が無い。このため、ページ整順処理ができず、結果として、２枚目の出力結果に３ページ目の描画結果を割り当てることができず、白紙になってしまったり、２枚目以降の出力結果のレイアウトがずれてしまったりするなどの不具合が発生してしまう。
【０００６】
本発明は、上記の課題を解決するためになされたもので、本発明の目的は、印刷データから中間データを生成する際に、無効ページを検知した場合でも、正常なページ数情報に従う描画処理を行える仕組みを提供することである。
【課題を解決するための手段】
【０００７】
上記目的を達成する本発明の画像形成装置は以下に示す構成を備える。
印刷データを処理する画像形成装置において、前記印刷データを解釈して中間データを生成する複数のインタプリタと、各インタプリタからのページ要求と中間データ完了通知とに応じて処理すべきページ数情報をそれぞれのインタプリタに指定して並列処理させる制御手段と、生成された中間データから出力すべき各ページの画像データを生成する生成手段と、を備え、指定されたページが無効ページであるといずれか一方のインタプリタが解釈した場合、前記並列処理を停止して、いずれか１つのインタプリタが、当該無効ページから後続する最終ページまで当該インタプリタが管理するページ数情報を用いて中間データを生成することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、印刷データから中間データを生成する際に、無効ページを検知した場合でも、正常なページ数情報に従う描画処理を行うことができる。
【図面の簡単な説明】
【０００９】
【図１】画像形成装置の構成を説明するハードウェアブロック図である。
【図２】画像形成装置のソフトウェアモジュール構成図である。
【図３】描画オブジェクトの記述例とその描画内容を示す図である。
【図４Ａ】通常データへのページ並列処理の簡易シーケンス図である。
【図４Ｂ】通常データへのページ並列処理の簡易シーケンス図である。
【図５】画像形成装置の制御方法を説明するフローチャートである。
【図６】画像形成装置の制御方法を説明するフローチャートである。
【図７】画像形成装置の制御方法を説明するフローチャートである。
【図８】本実施形態を示すページ並列処理の簡易シーケンス図である。
【図９】共通管理されるデータベースの一例を示す図である。
【図１０】画像形成装置の制御方法を説明するフローチャートである。
【図１１】画像形成装置の制御方法を説明するフローチャートである。
【図１２】画像形成装置の制御方法を説明するフローチャートである。
【発明を実施するための形態】
【００１０】
次に本発明を実施するための最良の形態について図面を参照して説明する。
＜システム構成の説明＞
〔第１実施形態〕
＜画像形成装置のハードウェアブロック図＞
図１は、本実施形態の画像形成装置の構成を説明するハードウェアブロック図である。なお、本実施形態に示す画像形成装置は、入力される所定のページ記述言語に基づく印刷データ（ＰＤＬデータ）を処理するため、以下の構成を備える。
【００１１】
図１において、１００はコントローラユニットで、画像信号やデバイス情報の入出力を制御する。中央演算装置（ＣＰＵ）１０１は補助記憶装置１０３に記憶されたプログラムを主記憶装置１０２に読み出し、実行する。さらに、システムバス１０９に接続される各デバイスをＣＰＵ１０１が統括的に制御する。ＣＰＵ１０１は並列処理を実現するために、ハードウェアとしてプロセッサを複数有するマルチコアシステムを採用する。また、マイクロプロセッサとして、複数のプロセッサコアを備えているものでもよい。ハイパースレッディングのようなプロセッサ内のレジスタやパイプラインの空き時間を有効利用して1つのプロセッサをあたかも複数のプロセッサであるかのように見せる技術が利用出来るものを用いても良い。主記憶装置１０２は、ＣＰＵ１０１の主メモリ、ワークメモリとして機能する。
【００１２】
補助記憶装置１０３は大容量データを一時的あるいは長期的に保持する目的でも使用される。本発明の実施形態においては、パイプライン並列を実施する際にバッファ領域にデータを保存するが、この保存先が主記憶装置１０２または、補助記憶装置１０３となる。Ｎｅｔｗｏｒｋ１０４はネットワーク１０５に接続し、画像形成装置外部との印刷データやデバイス情報の入出力を担う。
【００１３】
ＲＩＰ１０６は中間データであるＤＬをラスタイメージに展開する。また、ＲＩＰ１０６はＣＰＵ１０１により主記憶装置１０２および補助記憶装置１０３上に生成されたＤＬを高速かつ、ＣＰＵ１０１の実行と並列に、処理するものである。
【００１４】
デバイスＩ／Ｆ１０７はＣＰＵ１０１の指示に基づき、画像信号の送出、デバイス動作指示、デバイス情報の受信を行う。コントローラユニット１００はデバイスＩ／Ｆ１０７を介して、プリンタエンジン１０８に接続される。プリンタエンジン１０８はコントローラユニット１００からの画像信号を媒体上に出力する出力機であり、電子写真方式、インクジェット方式の何れでも構わない。
【００１５】
＜画像形成装置のソフトウェアモジュール図＞
図２は、本実施形態における画像形成装置のソフトウェアモジュール構成図である。図２に記載した各ソフトウェアモジュールは、プログラムとして補助記憶装置１０３に格納され、主記憶装置１０２にロードされＣＰＵ１０１により実行されるものである。
【００１６】
ページ並列制御部２００は、ＰＳインタプリタ２０１を複数スレッド立ち上げ、スレッド制御を行う。印刷処理を並列処理するために、印刷データのページ単位に区切り、各スレッドへ処理対象とするページを割り当てる役割も担う。尚、本実施形態ではスレッドを２つ立ち上げたものを想定しているため、ＰＳインタプリタ２０１は２つ存在しているが、ＣＰＵ１０１のプロセッサコアが並列制御できる数だけスレッドを立ち上げ、ＰＳインタプリタ２０１を割り当てる構成としてもよい。なお、ページ並列制御部２００は、各ＰＳインタプリタ２０１からのページ要求と中間データ完了通知とに応じて処理すべきページ数情報をそれぞれのインタプリタに指定して並列処理させる。
ＰＳインタプリタ２０１は、ＰＤＬ言語解釈部２０２と、ＤＬ生成部２０３からなり、印刷データを解釈して、中間データとしてＤＬを生成する。ＰＤＬ言語解釈部２０２は、印刷データにページ記述言語により記述されているデータ内容を解釈する。ＤＬ生成部２０３は、ＰＤＬ言語解釈部２０２により解釈された結果から、中間データとしてＤＬを生成する。
【００１７】
バッファ２０４は、複数のＰＳインタプリタ２０１から生成されるＤＬをバッファリングする。ページ並列技術を採用すると、各スレッドが処理を完了する順番はページ順にはならず、あるページより先のページの処理が先に完了する場合がある。
しかし、印刷データはページ順に出力する必要があるため、未処理のページが完了するまでのバッファ領域として、このバッファ２０４を使用する。バッファ領域は主記憶装置１０２の一部を確保して使用するが、バッファリングできるほどの領域がない場合は、補助記憶装置１０３の一部を代替として用いる構成としても良い。レンダリング部２０５は、図１に示したＲＩＰ１０６に相当し、ＤＬを展開してラスタ画像を生成する。つまり、レンダリング部２０５は、複数のＰＳインタプリタ２０１により生成された中間データから出力すべき各ページの画像データを生成する。
【００１８】
＜印刷データの記述例と描画内容＞
図３の（Ａ）、（Ｂ）は、印刷データに記述される描画オブジェクトの記述例とその描画内容を示す図である。
図３の（Ａ）では、ページ記述言語であるＰｏｓｔＳｃｒｉｐｔを用いた印刷データの記述例の一例である。
Ｐａｇｅ１の部分では、斜めの線分を定義している。Ｐａｇｅ２では、「Ｉ  ａｍ  ｓｔｒｉｎｇ．」という文字列を定義している。Ｐａｇｅ３では、市松模様のパターンオブジェクトを定義している。Ｐａｇｅ４では、Ｐａｇｅ２と同様に「Ｉ  ａｍ  ｓｔｒｉｎｇ．」という文字列を定義している。ＰｏｓｔＳｃｒｉｐｔのページの区切れ目には「ｓｈｏｗｐａｇｅ」オペレーターが用いられるが、それ以外にも、描画内容を無効化する「ｅｒａｓｅｐａｇｅ」オペレーターが用いられることもある。図３の（Ａ）の例では、Ｐａｇｅ３で用いられている。
【００１９】
図３の（Ｂ）は、図３の（Ａ）で記述された描画オブジェクトの描画内容を示している。データの内容としては、４ページ分記述されているが、Ｐａｇｅ３には「ｅｒａｓｅｐａｇｅ」オペレーターが用いられている為、出力はされない。
【００２０】
＜ページ並列処理のシーケンス＞
本実施形態では、印刷データのページ記述言語としてＰｏｓｔＳｃｒｉｐｔを採用した時のページ並列処理を対象としているＰｏｓｔＳｃｒｉｐｔは印刷処理のための情報を、印刷データのあらゆる箇所に、ページを跨いで記述可能である。その為、ＰｏｓｔＳｃｒｉｐｔの印刷処理に対してページ並列技術を採用する場合、マルチスレッド処理する各スレッドは、データの先頭からデータを言語解釈していく必要がある。以下、図４を参照して、各インタプリタからのページ要求と中間データ完了通知を含む中間データ生成処理を説明する。
【００２１】
そのため本実施形態では、図４Ａの（ａ）に示す通り、ＰＳインタプリタ２０１は２つの動作モードで処理を進める。１つ目はページスキップ処理であり、このときＰＳインタプリタ２０１は、ＰＤＬ言語解釈部２０２を用いた、言語解釈処理のみしか行わない。もう一つはページ描画処理であり、このときＰＳインタプリタ２０１はＰＤＬ言語解釈部２０２を用いた言語解釈処理と、ＤＬ生成部２０３を用いたＤＬ生成処理の両方を行う。
【００２２】
ＤＬ生成処理を行わない分、ページスキップ処理は処理が早く進むため、描画対象とするページの直前のページまでは、ページスキップ処理で処理を進め、描画対象ページはページ描画処理で処理をする。ページスキップ処理もページ描画処理も言語解釈処理を行うため、データの先頭から処理対象ページまでは言語解釈処理は必ず行われ、該処理対象ページに必要な情報が不足することはなく、正常に印刷処理をすることができる。
【００２３】
図４Ａの（ｂ）は、本発明の実施形態における、通常データへのページ並列処理の簡易シーケンス例を示している。ページ並列制御部２００により、スレッドＢ１、スレッドＢ２が立ち上げられ、各スレッドにＰＳインタプリタ２０１が割り当てられる。処理が開始されると、ＰＳインタプリタ２０１はページ並列制御部２００へ処理対象とするページ番号を問い合わせる。ページ並列制御部２００は、各スレッドの並列性を考慮して、それぞれのスレッドへ割り当てる処理対象のページ番号を通知する。
図４Ａの（ｂ）の例では、スレッドＢ１にまず２ページ目を、スレッドＢ２に１ページ目を処理するように指示している。ページ並列制御部２００から処理対象ページが通知されると（Ｒｅｔｕｒｎ１、２）、ＰＳインタプリタ２０１は処理対象ページまではページスキップ処理、処理対象ページはページ描画処理を行う。スレッドＢ２は１ページ目が処理対象ページであるため、最初からページ描画処理を行う。スレッドＢ１は２ページ目が処理対象ページであるため、１ページ目はページスキップ処理、２ページ目はページ描画処理を行う。スレッドＢ２は１ページ目のページ描画処理が終わると、ページ並列制御部２００へＤＬ生成完了を通知した後、次の処理対象とするページ番号を問い合わせる。
ページ並列制御部２００は、図４Ａの（ｂ）の例では、このタイミングではまだ３ページ目の処理が指示できていないため、次の処理対象ページとして３ページ目をスレッドＢ２へ通知する（Ｒｅｔｕｒｎ３）。以下、同様にＰＳインタプリタ２０１はスレッドＢ１、Ｂ２のそれぞれにおいて、ページ並列制御部２００へ処理対象ページの問い合わせ、ページスキップ処理、ページ描画処理、ＤＬ生成通知を最終ページになるまで繰り返す。これにより、ページ並列処理が実現される。
【００２４】
図４Ｂの（ｃ）は、本発明の実施形態における、ｅｒａｓｅｐａｇｅが３ページ目に含まれる場合の、ページ並列処理の簡易シーケンス図を示している。ページ並列制御部２００により、スレッドＢ１、スレッドＢ２が立ち上げられ、各スレッドにＰＳインタプリタ２０１が割り当てられる。
しかし、３ページ目にｅｒａｓｅｐａｇｅが存在するため、４ページ目以降のページ処理はページ並列処理を停止し、どちらかのスレッドに処理を引き継ぎ、片方のスレッドは処理を停止する。これは、ページ並列制御部２００には無効ページを検知する手段が無いため、ページ制御のためのカウンタ値に不整合が発生し、正しく処理を継続できなくなってしまうためである。
一方で、ＰＳインタプリタは無効ページを検知する手段をそれぞれ備える構成であるため、検知した時にシングルスレッド動作へ移行することにより、内部的にページ制御のためのページカウント値を制御し、ページカウンタ値の不整合を丸める事ができる。
【００２５】
そこで、図４Ｂの（ｃ）の例では、３ページ目の処理をページスキップ処理していたスレッドＢ１が以降のページ処理を引き継ぎ、３ページ目の処理をページ描画処理していたスレッドＢ２は処理を停止させている。ここで、後続する４ページ目以降の処理はシングルスレッドとして動作するため、以降の処理はページ並列制御部２００へ処理対象とするページ番号の問い合わせは行わず、ＤＬ生成完了通知のみで、自律的にページ制御を行う。
また、スレッドＢ１は３ページ目のページスキップ処理の言語解釈処理により、ｅｒａｓｅｐａｇｅオペレーターを検知することができるため、スレッドＢ２の処理状況に関わらず、即座にシングルスレッド処理へ移行することができる。スレッドＢ１はページスキップ処理中にｅｒａｓｅｐａｇｅオペレーターを検知すると、スレッドＢ２の処理が停止することを待たずに、自律的に４ページ目以降の処理を引き継ぎ、処理を進める。
【００２６】
尚、このシングルスレッド処理へ移行した後も、ｅｒａｓｅｐａｇｅを検知した場合は、該ページを出力しないように制御する必要がある。その場合は、シングルスレッド処理中に検知したｅｒａｓｅｐａｇｅの存在するページ数をＰＳインタプリタ２０１が内部的にカウントすることで、ページ辻褄合わせのためのページ整順処理をすることが可能である。詳細は図７の説明にて詳しく説明する。
【００２７】
＜ページ制御部のページ制御＞
図５は、本実施形態を示す画像形成装置の制御方法を説明するフローチャートである。本例は、図２に示したページ並列制御部２００における、ページ並列処理のページ制御例である。なお、各ステップは、ＣＰＵ１０１が記憶される制御プログラムを実行することで実現される。
以下、本制御を実行するために必要な構成について説明する。図２に示したページ並列制御部２００では、ページ制御のための内部ページカウンタ値としてＰｈｙｓｉｃａｌＰａｇｅＣｏｕｎｔを持っている。このＰｈｙｓｉｃａｌＰａｇｅＣｏｕｎｔは出力物の何枚目(物理ページ)にどのページの描画結果をレイアウトするかを制御するための物理ページ数を意味している。
例えば、ｅｒａｓｅｐａｇｅが３ページ目に含まれるデータであれば、物理ページ１枚目には１ページ目の論理ページが、２枚目には２ページ目の論理ページが割り当てられる。
しかし、物理ページ３枚目には４ページ目の論理ページが割り当てられるように制御する必要がある。
そのためには、物理ページ（ＰｈｙｓｉｃａｌＰａｇｅＣｏｕｎｔ）と論理ページのカウント値を明確に分けてページ制御を進めていく必要がある。尚、本実施形態では、論理ページを意味するＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔはＰＳインタプリタ２０１で管理している。後ほど図６の説明で詳しく説明する。印刷データがＮｅｔｗｏｒｋ１０４を介して受信すると、ＣＰＵ１０１により、本処理が開始される。
まず、Ｓ１０００において、ＣＰＵ１０１は、図示しないホストより印刷データを、Ｎｅｔｗｏｒｋ１０４を介して受信する。次に、Ｓ１００１において、ＣＰＵ１０１は、初期化処理としてＰｈｙｓｉｃａｌＰａｇｅＣｏｕｎｔに「０」を設定する。次に、Ｓ１００２において、ＣＰＵ１０１は、後ほど説明する図６に示されるスレッドＢ１、Ｂ２を立ち上げ、ＰＳインタプリタ２０１を割り当てる。
【００２８】
次に、Ｓ１００３において、ＣＰＵ１０１は、Ｓ１００２にて立ち上げたＰＳインタプリタ２０１からの通信を待つ。ここでは、ＰＳインタプリタ２０１からの処理対象に対してページの問い合わせであるのか、ＤＬ生成完了通知であるのかのどちらかの通信を待っている。このどちらかの通信をＰＳインタプリタ２０１のスレッドから受信すると、Ｓ１００４へ処理を進める。
【００２９】
次に、Ｓ１００４において、ＣＰＵ１０１は、Ｓ１００３においてＰＳインタプリタ２０１から受信した通信が、処理対象ページの問い合わせであるかどうかを判定する。ここで、処理対象ページの問い合わせであるとＣＰＵ１０１が判断した場合は、Ｓ１００５へ処理を進める。一方、処理対象ページの問い合わせではなく、つまりＤＬ生成完了通知であるとＣＰＵ１０１が判断した場合は、Ｓ１００７へ処理を進める。
次に、Ｓ１００５において、ＣＰＵ１０１は、ＰｈｙｓｉｃａｌＰａｇｅＣｏｕｎｔ値に「１」を加算し、次の処理対象ページとする物理ページ数を進める。
【００３０】
次に、Ｓ１００６において、ＣＰＵ１０１は、ＰＳインタプリタ２０１へ、内部ページカウンタ値で物理ページ数を示すＰｈｙｓｉｃａｌＰａｇｅＣｏｕｎｔの値を処理対象ページとして通知する。その後、Ｓ１００３へ処理を戻す。
【００３１】
一方、Ｓ１００７で、ＣＰＵ１０１は、Ｓ１００３においてＰＳインタプリタ２０１から受信した通信が、ＤＬ生成完了通知であるかどうか判定する。ＤＬ生成完了通知であるとＣＰＵ１０１が判定した場合は、Ｓ１００８へ処理を進める。一方、ＤＬ生成完了通知でないとＣＰＵ１０１が判断した場合はＳ１００３へ戻り処理を繰り返す。
【００３２】
次に、Ｓ１００８において、ＣＰＵ１０１は、バッファ２０４のバッファ領域へ生成されたＤＬをスプールする。次に、Ｓ１００９において、ＣＰＵ１０１は、Ｓ１００３において、ＰＳインタプリタ２０１から受信したＤＬ生成完了通知のページ番号までの全ＤＬ生成が完了しているか否かを判定する。ここで、全ＤＬ生成が完了しているとＣＰＵ１０１が判断した場合は、Ｓ１０１０へ処理を進める。
一方、全ＤＬ生成が完了していないとＣＰＵ１０１が判定した場合は、Ｓ１００３へ戻り、処理を繰り返す。次に、Ｓ１０１０において、ＣＰＵ１０１は、バッファ２０４にスプールされている全ＤＬをページ順に従い、レンダリング部２０５へ転送する。
【００３３】
次に、Ｓ１０１１において、ＣＰＵ１０１は、印刷データに含まれる全ページ分のＤＬを転送したか判定する。この判定には、Ｓ１００２で立ち上げたスレッドＢ１、Ｂ２が停止しているか、で判定することが可能である。ここで、印刷データに含まれる全ページ分のＤＬを転送したとＣＰＵ１０１が判断した場合は、Ｓ１０１２へ進む。
一方、印刷データに含まれる全ページ分のＤＬを転送できていないとＣＰＵ１０１が判断した場合は、Ｓ１００３へ戻り、処理を繰り返す。
次に、Ｓ１０１２において、ＣＰＵ１０１は、自身のスレッドＡを停止し、本処理を終了する。以上の処理により、ページ並列制御部２００による、ページ並列処理のページ制御が実施される。
【００３４】
＜ＰＳインタプリタの並列ＤＬ生成制御＞
図６は、本実施形態を示す画像形成装置の制御方法を説明するフローチャートである。本例は、ＰＳインタプリタ２０１のスレッドＢ１、Ｂ２における並列ＤＬ生成制御例である。なお、各ステップは、ＣＰＵ１０１が記憶される制御プログラムを実行することで実現される。
以下、本制御を実行するために必要な構成および概要について説明する。図２に示したＰＳインタプリタ２０１は内部ページカウンタとして、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔ、ＴａｒｇｅｔＰａｇｅＣｏｕｎｔ、ＮｏｎｅＰａｇｅＣｏｕｎｔの３つのカウンタ値を持っている。ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔは図５で説明した論理ページを意味するカウンタ値であり、印刷データの言語解釈のページが進むに従い、カウントアップされる。
ＴａｒｇｅｔＰａｇｅＣｏｕｎｔはページ描画処理の対象となるページ番号を意味する。ＮｏｎｅＰａｇｅＣｏｕｎｔはページスキップ処理、またはページ描画処理により検知したｅｒａｓｅｐａｇｅが含まれるページの数をカウントするカウンタ値である。
【００３５】
ＰＳインタプリタ２０１はページ並列制御部２００から処理対象とするページ数を受け取ると、ＴａｒｇｅｔＰａｇｅＣｏｕｎｔに値を格納して、処理を開始する。ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔがＴａｒｇｅｔＰａｇｅＣｏｕｎｔよりも小さい間は、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔをカウントアップしながら、ページスキップ処理を進める。そして、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔがＴａｒｇｅｔＰａｇｅＣｏｕｎｔと等しくなったとき初めてページ描画処理を行い、ＤＬ生成を実行する。ＤＬ生成が終わると、ページ並列制御部２００へＤＬ生成したページ番号とともに完了通知を行い、次の処理対象となるページ番号を問い合わせる。
【００３６】
しかし、この処理中にｅｒａｓｅｐａｇｅを含むページを検知すると、ＮｏｎｅＰａｇｅＣｏｕｎｔ値を加算して、シングルスレッド処理へ移行する。シングルスレッド処理へ移行するスレッドは、スレッドＢ１、Ｂ２のどちらでも構わない。図５のＳ１００２にて、ページ並列制御部２００からスレッドＢ１、Ｂ２が立ち上げられると、本処理が開始される。
まず、Ｓ１１０１において、ＣＰＵ１０１は、初期化処理として、内部ページカウンタ値のＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔを「１」に設定する。次に、Ｓ１１０２において、ＣＰＵ１０１は、初期化処理として、内部ページカウンタ値のＴａｒｇｅｔＰａｇｅＣｏｕｎｔを「１」に設定する。次に、Ｓ１１０３において、ＣＰＵ１０１は、初期化処理として、内部ページカウンタ値のＮｏｎｅＰａｇｅＣｏｕｎｔを「０」に設定する。
【００３７】
次に、Ｓ１１０４において、ＣＰＵ１０１は、ページ並列制御部２００のＳ１００３へ処理対象ページのページ番号を問い合わせる。ページ並列制御部２００から、処理対象ページのページ番号が通知されると、Ｓ１１０５へ処理を進める。
【００３８】
次に、Ｓ１１０５において、ＣＰＵ１０１は、内部ページカウンタ値のＴａｒｇｅｔＰａｇｅＣｏｕｎｔに、Ｓ１１０４で通知された処理対象ページのページ番号（ＰｈｙｓｉｃａｌＰａｇｅＣｏｕｎｔ）の値を格納する。次に、Ｓ１１０６において、ＣＰＵ１０１は、ＰＤＬ言語解釈部２０２により、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔのページ番号の印刷データの言語解釈を実行する。
【００３９】
次に、Ｓ１１０７において、ＣＰＵ１０１は、Ｓ１１０６において、言語解釈した結果、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔのページ番号の印刷データ（ＰＤＬ）があるかどうか判定する。ここで、対象ページの印刷データが無いということは、印刷データに含まれる全ページの処理が完了したことを意味する。よって、印刷データがないとＣＰＵ１０１が判断した場合はＳ１１１７へ処理を進め、終了処理を行う。一方、印刷データがあるとＣＰＵ１０１が判断した場合は、Ｓ１１０８へ処理を進め、処理を継続する。
【００４０】
次に、Ｓ１１０８において、ＣＰＵ１０１は、Ｓ１１０６の言語解釈の結果、無効ページを意味するオペレーター、ｅｒａｓｅｐａｇｅが含まれていたか、判定する。ここで、含まれていたとＣＰＵ１０１が判断した場合は、Ｓ１１１４へ進み、シングルスレッド移行処理を進める。一方、含まれていないとＣＰＵ１０１が判断した場合は、Ｓ１１０９へ進み、通常処理を進める。
【００４１】
次に、Ｓ１１０９において、ＣＰＵ１０１は、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔのページ番号がページスキップ処理するページか判定する。ここでは、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔがＴａｒｇｅｔＰａｇｅＣｏｕｎｔより小さいかで判定するものとする。そして、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔがＴａｒｇｅｔＰａｇｅＣｏｕｎｔより小さいとＣＰＵ１０１が判断した場合は、ページスキップ処理をする必要があるため、Ｓ１１１０へ処理を進める。一方、小さくない（つまり等しい）とＣＰＵ１０１が判断した場合、ページ描画処理をする必要があるため、Ｓ１１１１へ処理を進める。
【００４２】
次に、Ｓ１１１０において、ＣＰＵ１０１は、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔの値に「１」を加算し、言語解釈処理対象のページ数をカウントアップし、Ｓ１１０６へ戻り、処理を繰り返す。
次に、Ｓ１１１１において、ＣＰＵ１０１は、ＤＬ生成部２０３により、言語解釈結果からＤＬを生成する。次に、Ｓ１１１２において、ＣＰＵ１０１は、ＴａｒｇｅｔＰａｇｅＣｏｕｎｔのページ番号のＤＬ生成処理が完了したことをページ並列制御部２００のＳ１００３へ通知する。
【００４３】
次に、Ｓ１１１３において、ＣＰＵ１０１は、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔの値に「１」を加算し、言語解釈処理対象のページ数をカウントアップする。カウントアップ後は、Ｓ１１０４へ戻り、処理を繰り返す。
次に、Ｓ１１１４において、ＣＰＵ１０１は、Ｓ１１０８にて無効ページを示すオペレーターを検知した、としてＮｏｎｅＰａｇｅＣｏｕｎｔに「１」を加算する。
【００４４】
次に、Ｓ１１１５において、ＣＰＵ１０１は、該スレッドがシングルスレッド処理へ移行するスレッドかどうか判定する。ここで、シングルスレッド処理へ移行するスレッドはスレッドＢ１、Ｂ２のどちらでもよい。どちらか片方のスレッドを停止して、以降の処理をシングルスレッドで処理するように制御する。シングルスレッドへ移行して、以降のページの処理を引き継ぐ場合、Ｓ１１１６へ処理を進める。シングルスレッド処理へ移行せず、該スレッドの処理を停止する場合、Ｓ１１１７へ処理を進める。
次に、Ｓ１１１６において、ＣＰＵ１０１は、シングルスレッド処理へ移行する処理を行う。この処理の詳細は、後ほど図７を用いて詳しく説明する。次に、Ｓ１１１７において、ＣＰＵ１０１は、自身のスレッドを停止して、本処理を停止する。以上の処理により、ＰＳインタプリタ２０１による、スレッドＢ１、Ｂ２における並列ＤＬ生成制御が実施される。
【００４５】
＜ＰＳインタプリタのシングルスレッド処理＞
図７は、本実施形態を示す画像形成装置の制御方法を説明するフローチャートである。本例は、ＰＳインタプリタ２０１による、スレッドＢ１、またはスレッドＢ２におけるシングルスレッド処理例である。なお、各ステップは、ＣＰＵ１０１が記憶される制御プログラムを実行することで実現される。以下、ＣＰＵ１０１が実行するモジュールを主体として動作を説明する。
以下、本制御を実行するために必要な構成および概要について説明する。Ｓ１１１６でシングル処理へ移行すると、ページ並列制御部２００によりＳ１００２で立ち上げられたスレッドＢ１、Ｂ２は、どちらか一方のみで残りのページの処理を継続する。また、シングル処理移行後は、ページ並列制御部２００へはＤＬ生成完了通知のみで、処理対象ページの問い合わせは行わない。内部的にページカウンタ値のカウントアップを開始し、無効ページ検知に伴うページカウンタ値の不整合の発生を防ぐ。図６のＳ１１１６の処理が開始されると、本処理が開始される。
まずＳ１２０１において、ＣＰＵ１０１は、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔの値に「１」を加算し、言語解釈処理対象のページ数をカウントアップする。次に、Ｓ１２０２において、ＣＰＵ１０１は、ＰＤＬ言語解釈部２０２により、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔのページ番号の印刷データの言語解釈を実行する。
【００４６】
次に、Ｓ１２０３において、ＣＰＵ１０１は、Ｓ１２０３において、言語解釈した結果、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔのページ番号の印刷データ（ＰＤＬ）があるかどうか判定する。対象ページの印刷データが無いということは、印刷データに含まれる全ページの処理が完了したことを意味する。よって、印刷データがないとＣＰＵ１０１が判断した場合は本処理を終了する。一方、印刷データがあるとＣＰＵ１０１が判断した場合は、Ｓ１２０４へ処理を進め、処理を継続する。
【００４７】
次に、Ｓ１２０４において、ＣＰＵ１０１は、Ｓ１２０３の言語解釈の結果、無効ページを意味するオペレーター、ｅｒａｓｅｐａｇｅが含まれていたか、判定する。ここで、含まれていたとＣＰＵ１０１が判断した場合は、Ｓ１２０５へ処理を進める。一方、含まれていないとＣＰＵ１０１が判断した場合は、Ｓ１２０６へ処理を進める。
【００４８】
次に、Ｓ１２０５において、ＣＰＵ１０１は、Ｓ１２０５にて無効ページを示すオペレーターを検知した、としてＮｏｎｅＰａｇｅＣｏｕｎｔに「１」を加算する。その後、Ｓ１２０１へ戻り、処理を繰り返す。
次に、Ｓ１２０６において、ＣＰＵ１０１は、ＤＬ生成部２０３により、言語解釈結果からＤＬを生成する。
【００４９】
次に、Ｓ１２０７において、ＣＰＵ１０１は、ＤＬ生成が完了したことをページ並列制御部２００へ通知する。この時、通知するページ番号はＳ１２０２で言語解釈対象ページを示すＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔから無効ページの数を示すＮｏｎｅＰａｇｅＣｏｕｎｔを減算することにより、無効ページに起因するページカウンタ値の差異の辻褄を合わせる。
以上の処理により、ＰＳインタプリタ２０１による、スレッドＢ１、またはスレッドＢ２におけるシングルスレッド処理が正常に実施される。
【００５０】
本実施形態におけるマルチコアシステムを採用したＣＰＵ１０１を備える画像形成装置では、マルチスレッドで印刷処理を実行時に無効ページを検知した際、直ちにシングルスレッド処理に移行し、以後の処理を引き継ぐ。そして、シングルスレッド処理へ移行後は、ページ並列制御部２００へ処理対象のページを問い合わせる必要はなく、自律的にページカウンタ値を制御して処理を進める。
これにより、無効ページを含む印刷データを処理する場合に、ページ並列制御部２００が無効ページを検知する手段を持たない事による、ページ制御の不整合を回避することができる。
【００５１】
〔第２実施形態〕
第１実施形態では、無効ページを含むページ以降の処理はシングルスレッド処理となるため、マルチコアシステムを採用するＣＰＵ１０１の並列演算リソースを、シングルスレッド移行後は活用することができなくなってしまう。そこで、第２実施形態では、シングルスレッド移行後に、ページ並列技術とは並列処理の単位が異なる、別の並列処理（パイプライン並列)を採用することで、並列演算リソースの無駄のない活用を実現する。
【００５２】
図８は、本実施形態を示す画像形成装置における描画例を示す簡易シーケンス図である。本実施形態を示す画像形成装置の無効ページ検出後のシングルスレッド移行処理に加えて、パイプライン並列処理も採用した際の簡易シーケンス図である。ページ並列技術とは並列処理の単位が異なる、別の並列処理、パイプライン並列とは、ＰＳインタプリタ２０１の処理の言語解釈処理とＤＬ生成処理とを前段と後段の処理に分け、スレッドに分けてパイプライン並列処理する技術である。
図８の例では、３ページ目に無効ページがあり、４ページ以降の処理をシングルスレッド処理へ移行する。その際、ＤＬ生成処理用のスレッドを新たにスレッドＢ３として立ち上げ、スレッドＢ１の４ページ目の言語解釈処理後に、ＤＬ生成処理を割り当てる。スレッドＢ１はスレッドＢ３のＤＬ生成処理の完了を待たず、次の５ページ目の言語解釈処理を直ちに開始する。以降、最終ページまでスレッドＢ１は言語解釈処理、スレッドＢ３はＤＬ生成処理を実施し、パイプラインに並列処理を実施する。
【００５３】
以上、シングルスレッド処理移行前はページ並列処理、シングルスレッド移行後はパイプライン並列処理を採用することで、ＣＰＵ１０１の並列演算リソースを無駄なく活用することが可能となる。
【００５４】
〔第３実施形態〕
第１実施形態、第２実施形態では、無効ページを含むページ以降の処理がシングルスレッド処理となるため、無効ページよりも先のページが先行して処理されることがない。そのため、ＰＳインタプリタ２０１内部だけでシンプルにページ辻褄合わせのページ整順制御が可能である。その他の解決手段として、第３実施形態では無効ページによる辻褄合わせのためのページ整順制御を、ページ並列制御部２００側で実施する例を示す。こちらは、無効ページが検出されても、マルチスレッドでページ並列処理を続行することを可能である。しかし、無効ページよりも先のページが先行して処理されることがあるため、図１１に示すような各スレッドの処理状況を管理するテーブルを持つ必要がある。合わせて、無効ページが具体的に何ページ目に存在していたかを、同ページ管理テーブルで管理しながら処理を進める必要もある。
【００５５】
＜ページ管理テーブル＞
図９は、本実施形態を示す画像形成装置におけるページ管理テーブルを示す図である。本例では、ページ並列制御部２００とＰＳインタプリタ２０１間で共有管理されるページ管理テーブルについて説明する。前述の通り、本実施形態では無効ページであるオペレーターが検出されても、ページ並列制御部２００にて処理ページの整順処理を行うため、シングルスレッド移行しない。これを実現するためには、無効ページがページ番号の何番目に存在していたかを管理し、かつ、マルチスレッドで動作している各スレッドの処理状況を把握する必要がある。ページ並列制御部２００によるページ整順処理は、各スレッドで動作しているＰＳインタプリタ２０１からの、ＤＬ生成完了通知のタイミングで、ページ管理テーブルの情報を参照後、出力ページ割り当て処理することで実現される。
【００５６】
ページ並列制御部２００は、ＰＳインタプリタ２０１スレッドからＤＬ生成完了通知を受けると、ページ管理テーブルを参照して、他方のスレッドの処理状況を確認する。他方のスレッドの処理が、ＤＬ生成完了通知を受けたページ番号より前のページ番号の処理をしている場合、そのページに無効ページが含まれていたかどうかは判定できていない。そのため、ＤＬ生成完了したページであっても、最終的に出力ページ枚数の何ページ目に割り当てるべきか、この段階ではまだ決定できない。よって、レンダリング部２０５への転送は行わず、バッファ領域へ該ＤＬをバッファリング（保管）して、次のページの処理を進める。
一方、他方のスレッドの処理が、ＤＬ生成完了ページよりも先のページ番号を処理している場合、他方のスレッドが処理しているページよりも１つ後ろのページまでは言語解釈処理が完了しており、無効ページが含まれていたかどうかの判定は完了している。
よって、この場合は出力ページ割り当て処理を行い、ページ管理テーブルの情報から、バッファ領域に保持されている各ＤＬを最終的に出力ページの何ページ目に割り当てるかを決定する。
【００５７】
ページ管理テーブルは「ＰａｇｅＩＤ」、「Ｓｔａｔｕｓ」、「Ｏｕｔｐｕｔ」「ＯｕｔｐｕｔＰａｇｅ」の４つのフィールドを持つ。「ＰａｇｅＩＤ」は印刷データに含まれる論理ページを一意に決めるためのページＩＤである。「Ｓｔａｔｕｓ」は、ＰＳインタプリタ２０１により、そのページが処理完了（Ｃｏｍｐｌｅｔｅ）、処理中（Ｒｕｎｎｉｎｇ）、未処理（−）であるかどうかの処理状態の情報を持つ。「Ｏｕｔｐｕｔ」はそのページが無効ページであるかどうか（Ｔｒｕｅ／Ｆａｌｓｅ）の情報を持つ。例えばｅｒａｓｅｐａｇｅを含むページである場合はＦａｌｓｅとなる。「ＯｕｔｐｕｔＰａｇｅ」は、出力ページのページ番号何番目（枚目）の情報を持つ。該ページが無効ページである場合、ｎｏｎｅの値となる。
【００５８】
図９の（Ａ）は論理ページ２ページ目と６ページ目が処理中であり、４ページ目ら無効ページが含まれることがわかっている状態のときのページ管理テーブルを示している。ＰａｇｅＩＤが１のページは既にＰＳインタプリタ２０１による言語解釈処理が完了しており、無効ページは含まれていないため、最終的な出力ページ番号となる「ＯｕｔｐｕｔＰａｇｅ」フィールドを１とすることができる。しかし、ＰａｇｅＩＤが３および５のページは、２ページ目の言語解釈処理が完了していないため、２ページ目が無効ページかどうかは判定出来ず、この段階ではまだ最終的な出力ページ番号は決定できない。
【００５９】
図９の（Ｂ）は、図９の（Ａ）の状態から、ＰａｇｅＩＤが２のページの処理が完了した状態になったときのページ管理テーブルを示している。ＰａｇｅＩＤが５のページまで、言語解釈処理が全て完了しているため、「ＯｕｔｐｕｔＰａｇｅ」のフィールドを更新することができる。この例ではＰａｇｅＩＤが２で新たに無効ページが検知されたため、ＰａｇｅＩＤが３のページは、「ＯｕｔｐｕｔＰａｇｅ」は２、ＰａｇｅＩＤが５のページは「ＯｕｔｐｕｔＰａｇｅ」は３となる。
【００６０】
図９の（Ｃ）は更に処理が進み、ＰａｇｅＩＤが６以外のページは言語解釈処理が完了している状態を示している。この場合、ＰａｇｅＩＤが６より後のページの言語解釈処理が完了していても、図９の（Ａ）のＰａｇｅＩＤが２のページと同様、ＰａｇｅＩＤが６のページが無効ページかどうか判定できていないため、「ＯｕｔｐｕｔＰａｇｅ」フィールドは更新できない。
【００６１】
図９の（Ｄ）は全ページの言語解釈処理が完了したときのページ管理テーブルの情報を示している。この状態になって、ＰａｇｅＩＤが６から最終ページの８のページまでの「ＯｕｔｐｕｔＰａｇｅ」を決定することができる。この例ではＰａｇｅＩＤが６で再度無効ページが検知されたため、ＰａｇｅＩＤが７の「ＯｕｔｐｕｔＰａｇｅ」は４、ＰａｇｅＩＤが８の「ＯｕｔｐｕｔＰａｇｅ」は５となる。
＜ページ並列制御部のページ制御＞
【００６２】
図１０は、本実施形態を示す画像形成装置の制御方法を説明するフローチャートである。本例は、ページ並列制御部２００における、ページ並列処理のページ制御例である。なお、各ステップは、ＣＰＵ１０１が記憶される制御プログラムを実行することで実現される。また、本実施形態のページ並列制御部２００では第１実施形態と同様、ページ制御のための内部ページカウンタ値としてＰａｇｅＣｏｕｎｔを持っている。第１実施形態では、ＰｈｙｓｉｃａｌＰａｇｅＣｏｕｎｔを持ち、出力物の何枚目(物理ページ)にどのページの描画結果をレイアウトするかを制御するための物理ページ数を制御していた。しかし、本実施形態では、ページ管理テーブルで出力ページ制御するため、本実施形態ではＰｈｙｓｉｃａｌＰａｇｅＣｏｕｎｔは必要ない。
また、本実施形態のページ並列制御部２００はさらに、各スレッドの処理状況、及び無効ページが存在するページ番号を管理する、ＰＳインタプリタ２０１と共有管理のページ管理テーブルを持つ。印刷データがＮｅｔｗｏｒｋ１０４を介して受信されると、ＣＰＵ１０１により、本処理が開始される。
まずＳ２００１において、ＣＰＵ１０１は、初期化処理としてＰａｇｅＣｏｕｎｔに「０」を設定する。次に、Ｓ２００２において、ＣＰＵ１０１は、図９にて説明したページ管理テーブルを生成し、初期化処理を行う。次に、Ｓ２００３において、ＣＰＵ１０１は、後ほど説明する図１１に示されるスレッドＢ１、Ｂ２を立ち上げ、ＰＳインタプリタ２０１を割り当てる。
【００６３】
次に、Ｓ２００４において、ＣＰＵ１０１は、Ｓ２００３にて立ち上げたＰＳインタプリタ２０１からの通信を待つ。ここでは、ＰＳインタプリタ２０１からの処理対象に対してページの問い合わせか、無効ページ検知通知、ＤＬ生成完了通知のどれかの通信を待っている。この３つの通知のどれかの通知をＰＳインタプリタ２０１のスレッドから受信すると、Ｓ２００５へ処理を進める。
【００６４】
次に、Ｓ２００５において、ＣＰＵ１０１は、Ｓ２００４においてＰＳインタプリタ２０１から受信した通信が、処理対象ページの問い合わせだったかどうか判定する。処理対象ページの問い合わせだったとＣＰＵ１０１が判断した場合は、Ｓ２００６へ処理を進める。一方、処理対象ページの問い合わせではなかったとＣＰＵ１０１が判断した場合は、Ｓ２００８へ処理を進める。次に、Ｓ２００６において、ＣＰＵ１０１は、ＰａｇｅＣｏｕｎｔ値に「１」を加算し、次の処理対象ページとするページ数を進める。
【００６５】
次に、Ｓ２００７において、ＣＰＵ１０１は、ＰＳインタプリタ２０１へ、内部ページカウンタ値のＰａｇｅＣｏｕｎｔの値を処理対象ページとして通知する。その後、Ｓ２００４へ処理を戻す。
【００６６】
次に、Ｓ２００８において、ＣＰＵ１０１は、Ｓ２００４においてＰＳインタプリタ２０１から受信した通信が、無効ページ通知であったか判定する。無効ページ通知であったとＣＰＵ１０１が判断した場合、Ｓ２００９へ処理を進める。一方、無効ページ通知でないとＣＰＵ１０１が判断した場合、つまりＤＬ生成完了通知であった場合はＳ２０１０へ処理を進める。
【００６７】
次に、Ｓ２００９において、ＣＰＵ１０１は、Ｓ２００８にて無効ページとして通知を受けた対象ページを無効ページとして、ページ管理テーブルを更新する。「Ｓｔａｔｕｓ」フィールドをＣｏｍｐｌｅｔｅへ、「Ｏｕｔｐｕｔ」フィールドを「Ｆａｌｓｅ」へ更新する。
【００６８】
次に、Ｓ２０１０において、ＣＰＵ１０１は、Ｓ２００８にてＤＬ生成完了通知を受けた対象ページの情報をページ管理テーブルへ反映させる。「Ｓｔａｔｕｓ」フィールドをＣｏｍｐｌｅｔｅへ、「Ｏｕｔｐｕｔ」フィールドをＴｒｕｅへ更新する。
【００６９】
次に、Ｓ２０１１において、ＣＰＵ１０１は、ページ管理テーブルを参照して、Ｓ２００８にてＤＬ生成完了通知を受けたページ番号までの全てのＤＬ（言語解釈）処理が、完了しているか判定する。ここで、全てのＤＬ（言語解釈）処理が完了しているとＣＰＵ１０１が判断した場合は、Ｓ２０１３へ処理を進める。一方、全てのＤＬ（言語解釈）処理が完了していないとＣＰＵ１０１が判断した場合は、Ｓ２０１２へ処理を進める。
次に、Ｓ２０１２において、ＣＰＵ１０１は、バッファ２０４のバッファ領域へ生成されたＤＬをスプールする。スプールが完了すると、Ｓ２００４へ処理を戻す。次に、Ｓ２０１３において、ＣＰＵ１０１は、ページ管理テーブルを参照して、出力ページ制御処理を行う。この処理の詳細については、図１２を用いて後ほど詳しく説明する。
【００７０】
次に、Ｓ２０１４において、ＣＰＵ１０１は、バッファ２０４にスプールされているＤＬを、ページ管理テーブルの「ＯｕｔｐｕｔＰａｇｅ」の順に従い、レンダリング部２０５へ転送する。
【００７１】
次に、Ｓ２０１５において、ＣＰＵ１０１は、印刷データに含まれる全ページ分のＤＬを転送したか判定する。この判定には、Ｓ２００３で立ち上げたスレッドＢ１、Ｂ２が停止しているか、で判定することが可能である。ここで、印刷データに含まれる全ページ分のＤＬを転送したとＣＰＵ１０１が判断した場合は、Ｓ２０１６へ進む。一方、印刷データに含まれる全ページ分のＤＬを転送できていないとＣＰＵ１０１が判断した場合は、Ｓ２００４へ戻り、処理を繰り返す。
【００７２】
次に、Ｓ２０１６において、ＣＰＵ１０１は、自身のスレッドＡを停止し、本処理を終了する。以上の処理により、ページ並列制御部２００による、ページ並列処理のページ制御が実施される。
【００７３】
＜ＰＳインタプリタの並列ＤＬ生成制御＞
図１１は、本実施形態を示す画像形成装置の制御方法を説明するフローチャートである。本例は、Ｓインタプリタ２０１のスレッドＢ１、Ｂ２における並列ＤＬ生成制御例である。なお、各ステップは、ＣＰＵ１０１が記憶される制御プログラムを実行することで実現される。
【００７４】
第１実施形態と同様、ＰＳインタプリタ２０１は内部ページカウンタとして、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔ、ＴａｒｇｅｔＰａｇｅＣｏｕｎｔ、ＮｏｎｅＰａｇｅＣｏｕｎｔの３つのカウンタ値を持っている。それぞれのカウンタの意味は第１実施形態と同様である。
【００７５】
第１実施形態とは異なり、本実施形態ではＰＳインタプリタはページ制御のページ整順処理は行わず、ページ並列制御部２００から指示される処理対象ページまで処理を進め、正常にＤＬ生成が完了したか、無効ページを検知したかをページ並列制御部２００へ通知する。
そして、ページ並列制御部２００への通知が終わると、次の処理対象とするページを問い合わせる。これらの処理を繰り返し、印刷データに含まれる全ページの処理が終わると、自身のスレッドを停止して処理を終了する。図１０のＳ２００３にて、ページ並列制御部２００からスレッドＢ１、Ｂ２が立ち上げられると、本処理が開始される。
まずＳ２１０１において、ＣＰＵ１０１は、初期化処理として、内部ページカウンタ値のＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔを「１」に設定する。次に、Ｓ２１０２において、ＣＰＵ１０１は、初期化処理として、内部ページカウンタ値のＴａｒｇｅｔＰａｇｅＣｏｕｎｔを１に設定する。次に、Ｓ２１０３において、ＣＰＵ１０１は、初期化処理として、内部ページカウンタ値のＮｏｎｅＰａｇｅＣｏｕｎｔを「０」に設定する。
【００７６】
次に、Ｓ２１０４において、ＣＰＵ１０１は、ページ並列制御部２００へ処理対象ページのページ番号を問い合わせる。ページ並列制御部２００から、処理対象ページのページ番号が通知されると、Ｓ２１０５へ処理を進める。
【００７７】
次に、Ｓ２１０５において、ＣＰＵ１０１は、内部ページカウンタ値のＴａｒｇｅｔＰａｇｅＣｏｕｎｔに、Ｓ２１０４で通知された処理対象ページのページ番号（ＰａｇｅＣｏｕｎｔ）の値を格納する。次に、Ｓ２１０６において、ＣＰＵ１０１は、ＰＤＬ言語解釈部２０２により、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔのページ番号の印刷データの言語解釈を実行する。
【００７８】
次に、Ｓ２１０７において、ＣＰＵ１０１は、Ｓ２１０６において言語解釈した結果、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔのページ番号の印刷データ（ＰＤＬ）がないかどうか判定する。なお、対象ページの印刷データが無いということは、印刷データに含まれる全ページの処理が完了したことを意味する。よって、印刷データがないとＣＰＵ１０１が判断した場合はＳ２１１４へ処理を進め、終了処理を行う。一方、印刷データがあるとＣＰＵ１０１が判断した場合は、Ｓ２１０８へ処理を進め、処理を継続する。
【００７９】
次に、Ｓ２１０８において、ＣＰＵ１０１は、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔがＴａｒｇｅｔＰａｇｅＣｏｕｎｔより小さいか判定する。ここで、小さいとＣＰＵ１０１が判断した場合は、ページスキップ処理であるため、Ｓ２１０９へ進まず、Ｓ２１０６へ戻り、処理を繰り返す。一方、小さくない（つまり等しい）とＣＰＵ１０１が判断した場合、ページ描画処理をする必要があるため、Ｓ２１０９へ処理を進める。
【００８０】
次に、Ｓ２１０９において、ＣＰＵ１０１は、Ｓ２１０６の言語解釈の結果、無効ページを意味するオペレーター、ｅｒａｓｅｐａｇｅが含まれていたか、判定する。ここで、含まれていたとＣＰＵ１０１が判断した場合は、Ｓ２１１０へ進む。一方、含まれていないとＣＰＵ１０１が判断した場合は、Ｓ２１１１へ進む。
次に、Ｓ２１１０において、ＣＰＵ１０１は、ＴａｒｇｅｔＰａｇｅＣｏｕｎｔが示すページは無効ページであることをページ並列制御部２００へ通知する。次に、Ｓ２１１１において、ＣＰＵ１０１は、ＤＬ生成部２０３により、言語解釈結果からＤＬを生成する。次に、Ｓ２１１２において、ＣＰＵ１０１は、ＴａｒｇｅｔＰａｇｅＣｏｕｎｔのページ番号のＤＬ生成処理が完了したことをページ並列制御部２００のＳ２００４へ通知する。
【００８１】
次に、Ｓ２１１３において、ＣＰＵ１０１は、ＬｏｇｉｃａｌＰａｇｅＣｏｕｎｔの値に１を加算し、処理対象のページ数をカウントアップする。カウントアップ後はＳ２１０４へ戻り、処理を繰り返す。
次に、Ｓ２１１４において、ＣＰＵ１０１は、自身のスレッドを停止して、本処理を停止する。以上の処理により、ＰＳインタプリタ２０１による、スレッドＢ１、Ｂ２における並列ＤＬ生成制御が実施される。
【００８２】
＜ＰＳインタプリタのシングルスレッド処理＞
図１２は、本実施形態を示す画像形成装置の制御方法を説明するフローチャートである。本例は、ページ並列制御部２００による、スレッドＡにおける出力ページ制御処理例である。なお、各ステップは、ＣＰＵ１０１が記憶される制御プログラムを実行することで実現される。
出力ページ制御処理において、ページ並列制御部２００は、図９に示したページ管理テーブルを持ち、また、内部ページカウンタとしてＭｉｎＰａｇｅＣｏｕｎｔ、ＭａｘＰａｇｅＣｏｕｎｔ、ＦｉｘｅｄＰａｇｅＣｏｕｎｔのカウンタ値を持っている。ＭｉｎＰａｇｅＣｏｕｎｔは本処理が開始した時点における、ページ管理テーブルの「ＯｕｔｐｕｔＰａｇｅ」のフィールドが決定しているＰａｇｅＩＤの最大値である。ＭａｘＰａｇｅＣｏｕｎｔはページ管理テーブル上で、ＰＳインタプリタ２０１によるＤＬ処理が完了しているページ番号の最大値である。ＦｉｘｅｄＰａｇｅＣｏｕｎｔは「ＯｕｔｐｕｔＰａｇｅ」フィールドに格納されている値の最大値である。本処理開始時点でページ管理テーブルを参照してＭｉｎＰａｇｅＣｏｕｎｔを決定し、ＭｉｎＰａｇｅＣｏｕｎｔの「ＯｕｔｐｕｔＰａｇｅ」フィールドの値をＦｉｘｅｄＰａｇｅＣｏｕｎｔへ格納する。
ＰＳインタプリタ２０１からＤＬ生成完了通知が来たときの処理完了ページよりも先のＤＬ生成処理が完了しているか、ページ管理テーブルを参照して判定する。先のページのＤＬ生成が完了している場合は、「Ｓｔａｔｕｓ」フィールドがＣｏｍｐｌｅｔｅとなっている最大のＰａｇｅＩＤを、ＦｉｘｅｄＰａｇｅＣｏｕｎｔに格納する。先のページのＤＬ生成が完了していない場合は、ＤＬ生成完了通知の処理完了ページをＦｉｘｅｄＰａｇｅＣｏｕｎｔに格納する。
以降、ＭｉｎＰａｇｅＣｏｕｎｔからＭａｘＰａｇｅＣｏｕｎｔまで、「Ｏｕｔｐｕｔ」フィールドがＴｒｕｅかＦａｌｓｅかでＯｕｔｐｕｔＰａｇｅの値を決定していく。図１０のＳ２０１３の処理が開始されると、本処理が開始される。
【００８３】
まずＳ２２０１において、ＣＰＵ１０１は、ページ管理テーブルを参照して、内部ページカウンタのＭｉｎＰａｇｅＣｏｕｎｔを決定する。ＭｉｎＰａｇｅＣｏｕｎｔには、ページ管理テーブルの情報から「ＯｕｔｐｕｔＰａｇｅ」フィールドが決定しているＰａｇｅＩＤの最大値を格納する。図９の例で言えば、（Ａ）ではＰａｇｅＩＤが１のページが、（Ｂ）、（Ｃ）ではＰａｇｅＩＤが５のページが、（Ｄ）ではＰａｇｅＩＤが８のページが最大値なので、この値をＭｉｎＰａｇｅＣｏｕｎｔへ格納することになる。
【００８４】
次に、Ｓ２２０２において、ＣＰＵ１０１は、ページ管理テーブルを参照して、ＦｉｘｅｄＰａｇｅＣｏｕｎｔを決定する。ＦｉｘｅｄＰａｇｅＣｏｕｎｔはＭｉｎＰａｇｅＣｏｕｎｔへ格納されたＰａｇｅＩＤの「ＯｕｔｐｕｔＰａｇｅ」フィールドの値が格納される。図９の例で言えば、（Ａ）では１が、（Ｂ）、（Ｃ）では３が、（Ｄ）では５が、それぞれ格納されることになる。
【００８５】
次に、Ｓ２２０３において、ＣＰＵ１０１は、ページ管理テーブルを参照して、図１０のＳ２００４でＰＳインタプリタ２０１から受信した、ＤＬ生成完了のページ番号より先のＰａｇｅＩＤのＤＬ生成処理が完了しているか判定する。ここで、先のＤＬ生成処理が完了しているとＣＰＵ１０１が判断した場合は、Ｓ２２０４へ進む。一方、先のＤＬ生成処理が完了していないとＣＰＵ１０１が判断した場合は、Ｓ２２０５へ進む。
ここでは、ＭａｘＰａｇｅＣｏｕｎｔへ値を格納するために、どの値を採用するかを判定している。前述の通り、ＭａｘＰａｇｅＣｏｕｎｔはページ管理テーブル上で、ＰＳインタプリタ２０１によるＤＬ処理が完了しているページ番号の最大値である。
Ｓ２００４では、ＣＰＵ１０１は、ＰＳインタプリタ２０１から受信した、ＤＬ生成完了のページ番号が、ページ管理テーブル上でもＤＬ生成処理が完了しているページ番号の最大値なのか。それとも既にそれ以上のページ番号の処理が完了しているのかを、判定する。なお、ＤＬ生成完了のページ番号より先のＤＬ生成処理が完了しているかは、ページ管理テーブルの「Ｓｔａｔｕｓ」フィールドがＣｏｍｐｌｅｔｅとなっているもので、ＰａｇｅＩＤが最大である値を参照することで判定できる。
【００８６】
よって、既にそれ以上のページ番号の処理が完了しているとＣＰＵ１０１が判断した場合、Ｓ２２０４において、ＣＰＵ１０１は、ページ管理テーブルの「Ｓｔａｔｕｓ」フィールドがＣｏｍｐｌｅｔｅとなっており、ＰａｇｅＩＤが最大である値をＭａｘＰａｇｅＣｏｕｎｔの値として格納する。
【００８７】
一方、Ｓ２２０５では、ＣＰＵ１０１は、Ｓ２００４でＰＳインタプリタ２０１から通知された値が、ＤＬ処理が完了しているページ番号の最大値となるので、ＣＰＵ１０１は、その値をＭａｘＰａｇｅＣｏｕｎｔへ格納する。
【００８８】
以降、Ｓ２２０６からＳ２００９はＭｉｎＰａｇｅＣｏｕｎｔからＭａｘＰａｇｅＣｏｕｎｔまで、ＰａｇｅＩＤ値を１ずつカウントアップしながら、ページ管理テーブルの「ＯｕｔｐｕｔＰａｇｅ」の値を決定する処理を繰り返す。
【００８９】
次に、Ｓ２２０６において、ＣＰＵ１０１は、「Ｏｕｔｐｕｔ」フィールドがＴｒｕｅであるかどうか判定する。ここで、ＴｒｕｅであるとＣＰＵ１０１が判断した場合はＳ２２０８へ、Ｆａｌｓｅであると判断した場合はＳ２２０７へ進む。
次に、Ｓ２２０７において、ＣＰＵ１０１は、「ＯｕｔｐｕｔＰａｇｅ」の値をｎｏｎｅへ設定する。次に、Ｓ２２０８において、ＣＰＵ１０１は、ＦｉｘｅｄＯｕｔｐｕｔＰａｇｅの値を１つインクリメントする。次に、Ｓ２２０９において、ＣＰＵ１０１は、「ＯｕｔｐｕｔＰａｇｅ」の値を、ＦｉｘｅｄＯｕｔｐｕｔＰａｇｅの値に設定する。Ｓ２２０６からＳ２２０９までのステップをＭｉｎＰａｇｅＣｏｕｎｔからＭａｘＰａｇｅＣｏｕｎｔまで処理すると、本処理を終了する。以上の処理により、ページ並列制御部２００による、スレッドＡにおける出力ページ制御処理が実施される。
【００９０】
本実施形態におけるマルチコアシステムを採用したＣＰＵ１０１を備える画像形成装置は、ページ管理テーブルを用いつつ、マルチスレッドで印刷処理を実行し、無効ページを検知した際のページ整順処理を行う。第１実施形態と異なり、本発明の課題を解決しながらも、無効ページを検知以降もマルチスレッド処理が可能であるため、並列性、処理パフォーマンスは本実施形態の方が良い。
【００９１】
なお、本発明の実施形態では、無効ページを意味するＰＤＬコマンドとして、ＰｏｓｔＳｃｒｉｐｔのｅｒａｓｅｐａｇｅオペレーターを例として挙げた。しかし、本発明の適用範囲は、このオペレーターに限定されるものではなく、他のＰＤＬで同様の意味をもつものに対しても適用可能である。
【００９２】
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステムまたは装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読み出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えばＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００９３】
１００  コントローラユニット
【図１】
0006537372.tif 000002
【図２】
0006537372.tif 000003
【図３】
0006537372.tif 000004
【図４Ａ】
0006537372.tif 000005
【図４Ｂ】
0006537372.tif 000006
【図５】
0006537372.tif 000007
【図６】
0006537372.tif 000008
【図７】
0006537372.tif 000009
【図８】
0006537372.tif 000010
【図９】
0006537372.tif 000011
【図１０】
0006537372.tif 000012
【図１１】
0006537372.tif 000013
【図１２】
0006537372.tif 000014