(57)【要約】【課題】  並列処理中の複数のＰＤＬコマンド解析処理でメモリ不足が発生すると、その並行処理中のＰＤＬコマンド解析処理の一部を中止させてしまうので、複数のプロセッサの性能を十分に活かすことができない。【解決手段】  メモリ管理手段により前記第１のプロセッサ、および前記第２のプロセッサの両方のプロセッサに割り当てられたメモリ領域が閾値を超えた場合（Ｓ１４１１）において、前記メモリ管理手段は前記両方のプロセッサの内、一方のプロセッサに対し、前記一方のプロセッサに割り当てられるメモリ領域がフォールバック閾値分になるよう、メモリの未使用領域からメモリ領域を割り当て、残りのメモリの未使用領域を、他方のプロセッサに割り当てる（Ｓ１４１６、またはＳ１４１７）。【選択図】  図７
2011126210.tif 000002
【特許請求の範囲】
【請求項１】
印刷データを受信する受信手段と、
前記受信手段により受信された印刷データを基に中間データを生成し、生成した中間データをメモリ領域に格納する第１のプロセッサと、
前記受信手段により受信された印刷データを基に中間データを生成し、生成した中間データをメモリ領域に格納する前記第１のプロセッサとは異なる第２のプロセッサと、
前記第１のプロセッサ、または前記第２のプロセッサからメモリ獲得依頼を受けたことに応じて、メモリの未使用領域における所定サイズのメモリ領域を、獲得依頼したプロセッサに割り当てるメモリ管理手段とを有し、
前記メモリ管理手段により前記第１のプロセッサ、および前記第２のプロセッサの両方のプロセッサに割り当てられたメモリ領域が閾値を超えた場合において、
前記メモリ管理手段は前記両方のプロセッサの内、一方のプロセッサに対し、前記一方のプロセッサに割り当てられるメモリ領域がフォールバック閾値分になるよう、メモリの未使用領域からメモリ領域を割り当て、
残りのメモリの未使用領域を、他方のプロセッサに割り当てることを特徴とする印刷データ処理装置。
【請求項２】
前記一方のプロセッサがフォールバック閾値分の中間コードを生成した場合に、前記一方のプロセッサが生成したフォールバック閾値分の中間コードをレンダリングし、
レンダリングが行われることに応じて前記メモリ管理手段は、前記一方のプロセッサに割り当てていたメモリ領域を開放し、
開放したメモリ領域を未使用領域とし、さらに、開放したメモリ領域を未使用領域としたことで、前記両方のプロセッサに割り当てられたメモリ領域が閾値を超えなくなった場合、前記メモリ管理手段は前記両方のプロセッサに割り当てられたメモリ領域が閾値を超えた場合に行われた未使用領域の割り当てを解除し、前記両方のプロセッサからの獲得依頼に応じてメモリ領域を割り当てることを特徴とする請求項１に記載の印刷データ処理装置。
【請求項３】
前記メモリ管理手段は前記他方のプロセッサに対し、残りのメモリの未使用領域を割り当てる場合、残りのメモリの未使用領域全てを割り当てることを特徴とする請求項１または２に記載の印刷データ処理装置。
【請求項４】
前記メモリ管理手段は前記他方のプロセッサに対し、残りのメモリの未使用領域を割り当てる場合、前記両方のプロセッサが中間コードを生成するために利用したメモリ領域の利用比率を基に、未使用領域から前記他方のプロセッサに割り当てるメモリ領域を割り当て、割り当てたメモリ領域を除いても未使用領域が残っている場合は、前記一方のプロセッサに未使用領域全てを割り当てることを特徴とする請求項１乃至３のいずれか１項に記載の印刷データ処理装置。
【請求項５】
前記一方のプロセッサとは、前記両方のプロセッサの内、フォールバックを行うタイミングが早い方のプロセッサであることを特徴とする請求項１乃至４のいずれか１項に記載の印刷データ処理装置。
【請求項６】
前記メモリ管理手段がフォールバックを行うタイミングが早い方のプロセッサを決定する際に、下記数式
プロセッサがフォールバックを行うタイミング＝（第ｎのプロセッサがフォールバックを行うまでに必要とする残りのリソース量）／［（第ｎのプロセッサが中間データを生成するために要した時間）／（第ｎのプロセッサが中間データを生成するために利用したメモリのリソース量）］  （ｎ＝１、２）
で、プロセッサがフォールバックを行うタイミングを算出し、フォールバックを行うタイミングが早い方のプロセッサを決定することを特徴とする請求項５に記載の印刷データ処理装置。
【請求項７】
前記フォールバックとは、プロセッサが生成した中間コードのデータサイズが、予め定められたフォールバック閾値分のメモリ領域を超えた場合、プロセッサが生成した中間コードをレンダリングしてイメージデータを生成し、生成したイメージデータを圧縮し、圧縮したイメージデータを描画するための中間コードをメモリ領域に格納する処理のことである請求項１乃至６のいずれか１項に記載の印刷データ処理装置。
【請求項８】
受信手段に、印刷データを受信させ、
第１のプロセッサに、前記受信手段により受信された印刷データを基に中間データを生成させ、生成させた中間データをメモリ領域に格納させ、
前記第１のプロセッサとは異なる第２のプロセッサに、前記受信手段により受信された印刷データを基に中間データを生成させ、生成させた中間データをメモリ領域に格納させ、
メモリ管理手段に、前記第１のプロセッサ、または前記第２のプロセッサからメモリ獲得依頼を受けたことに応じて、メモリの未使用領域における所定サイズのメモリ領域を、獲得依頼したプロセッサに割り当てさせ、
前記メモリ管理手段により前記第１のプロセッサ、および前記第２のプロセッサの両方のプロセッサに割り当てられたメモリ領域が閾値を超えた場合において、
前記メモリ管理手段に、前記両方のプロセッサの内、一方のプロセッサに対し、前記一方のプロセッサに割り当てられるメモリ領域がフォールバック閾値分になるよう、メモリの未使用領域からメモリ領域を割り当てさせ、
残りのメモリの未使用領域を、他方のプロセッサに割り当てさせることを特徴とする印刷データ処理方法。
【請求項９】
受信手段に、印刷データを受信させ、
第１のプロセッサに、前記受信手段により受信された印刷データを基に中間データを生成させ、生成させた中間データをメモリ領域に格納させ、
前記第１のプロセッサとは異なる第２のプロセッサに、前記受信手段により受信された印刷データを基に中間データを生成させ、生成させた中間データをメモリ領域に格納させ、
メモリ管理手段に、前記第１のプロセッサ、または前記第２のプロセッサからメモリ獲得依頼を受けたことに応じて、メモリの未使用領域における所定サイズのメモリ領域を、獲得依頼したプロセッサに割り当てさせ、
前記メモリ管理手段により前記第１のプロセッサ、および前記第２のプロセッサの両方のプロセッサに割り当てられたメモリ領域が閾値を超えた場合において、
前記メモリ管理手段に、前記両方のプロセッサの内、一方のプロセッサに対し、前記一方のプロセッサに割り当てられるメモリ領域がフォールバック閾値分になるよう、メモリの未使用領域からメモリ領域を割り当てさせ、
残りのメモリの未使用領域を、他方のプロセッサに割り当てさせることを特徴とする印刷データ処理方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、印刷データ処理装置、印刷データ処理方法、およびプログラムに関するものである。
【背景技術】
【０００２】
画像形成装置のＰＤＬ処理は、ＰＤＬコマンド解析処理、中間データ（ＤＬ（Ｄｉｓｐｌａｙ  Ｌｉｓｔ））生成とレンダリング処理からなる。また、ＤＬ格納用メモリが不足すると、一旦レンダリングし、画像を圧縮するＦａｌｌｂａｃｋ（フォールバック）処理により、ＤＬ格納用メモリを空け、サイズが大きいデータでも処理を継続できるようにしている。近年、ハードウェア技術の向上により、マルチコアのＣＰＵが開発され、ＰＣ等では、複数のアプリケーションを同時実行可能となっている。
【０００３】
マルチファンクションプリンタ（ＭＦＰ）においても、コピー、プリント等の複数の機能をストレスなく並列実行するために、マルチコアのＣＰＵが搭載されるようになっている。マルチコアのＣＰＵは、ＰＤＬをページ並列で処理するためにも利用することが可能である。
【０００４】
特許文献１には、ＰＤＬデータに対し、ＰＤＬコマンドの処理を複数のＣＰＵによるページ並列処理をする場合に、並列処理中の複数のＰＤＬコマンド解析処理へ、メモリを割り当てる方法が開示されている。そして複数のＰＤＬコマンド解析処理を並行して実行しているとき、いずれかのＰＤＬコマンド解析処理でメモリ不足が発生すると、その並行処理中のＰＤＬコマンド解析処理を中止させる。その処理の中止に応じて、当該中止した処理に対応するメモリを解放し、その解放したメモリを残りのＰＤＬ解析部に割り当てて、その残りのＰＤＬ解析部による処理を継続させていた。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１４３０６７
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、並列処理中の複数のＰＤＬコマンド解析処理でメモリ不足が発生すると、その並行処理中のＰＤＬコマンド解析処理の一部を中止させてしまうので、複数のプロセッサの性能を十分に活かすことができない。
【課題を解決するための手段】
【０００７】
本発明の一実施系に係る装置は、印刷データを受信する受信手段と、前記受信手段により受信された印刷データを基に中間データを生成し、生成した中間データをメモリ領域に格納する第１のプロセッサと、前記受信手段により受信された印刷データを基に中間データを生成し、生成した中間データをメモリ領域に格納する前記第１のプロセッサとは異なる第２のプロセッサと、前記第１のプロセッサ、または前記第２のプロセッサからメモリ獲得依頼を受けたことに応じて、メモリの未使用領域における所定サイズのメモリ領域を、獲得依頼したプロセッサに割り当てるメモリ管理手段とを有し、前記メモリ管理手段により前記第１のプロセッサ、および前記第２のプロセッサの両方のプロセッサに割り当てられたメモリ領域が閾値を超えた場合において、前記メモリ管理手段は前記両方のプロセッサの内、一方のプロセッサに対し、前記一方のプロセッサに割り当てられるメモリ領域がフォールバック閾値分になるよう、メモリの未使用領域からメモリ領域を割り当て、残りのメモリの未使用領域を、他方のプロセッサに割り当てることを特徴とする。
【発明の効果】
【０００８】
複数のプロセッサで、ＰＤＬのデータを処理する場合、各プロセッサにおいてメモリを効率的に使用することにより、複数のプロセッサの性能を十分に活かすことが可能になる。
【図面の簡単な説明】
【０００９】
【図１】本発明における画像形成装置１０２のシステム構成の一例を示した図
【図２】本発明における画像形成装置１０２のモジュール構成の一例を示した図
【図３】実施例１における印刷処理のフローチャートの一例を示した図
【図４】実施例１におけるＰＤＬコマンド解析処理のフローチャートの一例を示した図
【図５】実施例１におけるレンダリングのフローチャートの一例を示した図
【図６】実施例１におけるメモリ確保におけるフローチャートの一例を示した図
【図７】実施例１における動的モード処理のフローチャートの一例を示した図
【図８】実施例１における固定モード処理のフローチャートの一例を示した図
【図９】実施例１におけるメモリＦｒｅｅについてのフローチャートの一例を示した図
【図１０】実施例１における本実施例におけるメモリ管理情報の構成の一例を示した図
【図１１】実施例１におけるメモリ使用時の閾値との関係の一例を示した図
【図１２】実施例２におけるメモリ確保と開放におけるフローチャートの一例を示した図
【図１３】実施例２におけるメモリ使用時の閾値との関係の一例を示した図
【発明を実施するための形態】
【００１０】
以下、本発明を実施するための最良の形態について図面を用いて説明する。
【００１１】
ここで、本発明の各実施例で用いられる用語の定義について説明する。
【００１２】
中間データとは、レンダリング部が印刷データを描画する際に用いられるデータのことであり、印刷データを基に生成されるデータである。
【００１３】
フォールバックは、ＤＬ（中間データのことである）のサイズがある一定のデータサイズを超えた場合や、そのＤＬを処理するためのワーク領域が一定のデータサイズを超えるとわかった場合に、その時点で生成されたＤＬをレンダリングしラスタイメージとする。そして、そこまで作成したＤＬを一度クリアする。このラスタイメージを描画エリアのバックグラウンドイメージとして再びＤＬの一部に追加する処理のことである。
【００１４】
その後、１ページ分の中間データが生成された時点で、圧縮されたバックグラウンドイメージを伸長しレンダリングし、１ページ分の残りのＤＬもレンダリングし、２つのイメージデータを基に１ページ分のイメージを作成する。
【００１５】
通常、このバックグラウンドイメージは圧縮されるため、追加されるＤＬのサイズは元のＤＬサイズよりも小さくなる。そこで、この空いた領域に残りのＤＬを作成していくことにより限定されたメモリ空間で大きなサイズのＤＬを処理できる。
【実施例１】
【００１６】
図１は、実施例１における画像形成装置１０２（印刷データ処理装置）のシステム構成の一例を示す図である。
【００１７】
１０２は画像形成装置であり、２０２は外部デバイスと情報の入出力を行うためのネットワークＩ／Ｆであり、外部デバイスから送信された印刷データを受信する。２０３は様々な情報を一時格納するＲＡＭである。ＲＡＭ２０３は、受信バッファ２０４、ワークメモリ２０５、フレームバッファ２０６、ラスタメモリ２０７、共有メモリ２２０からなる。
【００１８】
受信バッファ２０４は、ネットワークＩ／Ｆ２０２を介して受信した印刷データ（ＰＤＬとも呼ぶ）を格納するメモリである。ワークメモリ２０５は、入力された印刷データを中間コードに変換するときに一時的に使用するワークメモリである。フレームバッファ２０６は、プリンタ内部の中間コードなどを格納するフレームバッファである。ラスタメモリ２０７は、中間コードを展開したデータを格納するラスタメモリである。共有２２０は、ＣＰＵ１  ２１８、またはＣＰＵ２  ２１９で動作するＲＯＭ２０８内のプログラムからアクセス可能な共有メモリである。
【００１９】
ＲＯＭ２０８は、画像形成装置１０２におけるＣＰＵ１  ２１８またはＣＰＵ２  ２１９の制御コードを格納するＲＯＭである。ＲＯＭ２０８は、ＰＤＬ解析部２０９、ＤＬ（中間データ）生成部２１０、展開処理部２１４、ページスケジューラ２１５、メモリ管理部２１６のプログラムからなる。これらのプログラムをコンピュータ（ＣＰＵやメモリ等を用いて）で実行することで、実施例１の印刷データ処理方法が実現される。よって、これらのプログラムを（一部分のプログラムでも構わない）を印刷データ処理プログラムと呼ぶ。
【００２０】
２０９は、受信バッファ２０４から読み出したデータが、複数種のＰＤＬのどのＰＤＬかを特定し、ＰＤＬデータを解析し、所定の処理に振り分けるＰＤＬ解析部である。２１０は、ＰＤＬ解析部２０９において解析したデータから中間データを生成し、フレームバッファ２０６に格納するＤＬ生成部である。展開処理部２１４は、フレームバッファ２０６に格納された中間データを展開したビットマップをラスタメモリ２０７に格納する展開処理部である。ページスケジューラ２１５は、ＣＰＵ２１８とＣＰＵ２１９で動作するＰＤＬ解析部２０９、ＤＬ生成部２１０に、ＰＤＬデータの各ページの処理を依頼するページスケジューラである。メモリ管理部２１６は、ＣＰＵ２１８とＣＰＵ２１９で動作するＤＬ生成部２１０が使用するフレームバッファ２０６を管理するメモリ管理部２１６である。ＲＯＭ２０８の各プログラムは、ＣＰＵが実行することで夫々の機能を実現する。
【００２１】
２１８、２１９は画像形成装置２０１の演算処理や制御を行う中央演算処理装置（ＣＰＵ）である。本実施例では、２１８を第１のプロセッサ、またはプロセス１、２１９を第２のプロセッサ、またはプロセス２と呼ぶ。２１２はプリンタエンジン２１３との信号の入出力を行うエンジンＩ／Ｆである。２１３はイメージデータに基づいて、周知の電子写真プロセスによって感光ドラム上に潜像を形成し、用紙に転写して定着し印字を行うプリンタエンジンである。
【００２２】
図２は、本発明における画像形成装置１０２のモジュール構成の一例を示す図である。
３０２は、ＣＰＵ１  ２１８上で動作するモジュールを示しており、ＰＤＬ解析部２０９とＤＬ生成部２１０が動作することを示す。３０３は、ＣＰＵ２  ２１９上で動作するモジュールを示しており、ＰＤＬ解析部２０９とＤＬ生成部２１０が動作することを示す。
３１０は、ページスケジューラ２１５からＣＰＵ１  ２１８のＰＤＬ解析部２０９への制御を示す。３１１は、ページスケジューラ２１５からＣＰＵ２  ２１９のＰＤＬ解析部２０９への制御を示す。これらの制御については、関数コール、プロセス間通信等によりおこなう。
【００２３】
ＣＰＵ１  ２１８で動作するＰＤＬ解析部２０９は、ページスケジューラ２１５からの制御３１０に従い、受信バッファ２０４に格納されたＰＤＬデータを読み込み処理を実行する。ＣＰＵ１  ２１８で動作するＤＬ生成部２１０は、ＰＤＬ解析部２０９から渡されたデータにより処理を実行する。また、ＤＬ生成部２１０は、メモリ管理部２１６にメモリ獲得依頼３４０を行い、フレームバッファ２０６からメモリを獲得し、ＤＬを格納する。ページの処理が終了すると、展開処理部２１４にレンダリング依頼３３０をおこなう。ＣＰＵ２  ２１８のＰＤＬ解析部２０９、ＤＬ生成部２１０も同様の処理をおこなう。
【００２４】
展開処理部２１４は、ＤＬ生成部２１０からのレンダリング依頼３３０、３３１を受けると、フレームバッファ２０６に格納されたＤＬをレンダリングし、ビットマップを生成する。レンダリング終了後に、メモリ管理部２１６にメモリ解放依頼３４２を行う。メモリ管理部２１６は、ＤＬ生成部２１０からのメモリ獲得依頼３４０、３４１を受けると、フレームバッファ２０６の未使用領域のアドレスをＤＬ生成部２１０に返し、使用領域に変更する。また、展開処理部２１４からメモリ解放依頼３４２を受けると、解放するアドレスのメモリを未使用領域に変更する。このようなモジュール構成により、ＰＤＬのページ並列処理を実現している。ＨＤＤ２１７は記憶装置にデータを保存可能であり、また、ＳＤＤなど大容量記憶措置も含まれる。
【００２５】
図３は、本実施例におけるページスケジューリング処理のフローチャートの一例を示す図である。ステップＳ１００１で、ネットワーク１０４に接続されたＰＣ等から送信されたデータをネットワーク１０４経由して、ネットワークＩ／Ｆ２０２が受信し、受信バッファ２０４に格納する。ステップＳ１００２で、ページスケジューラ２１５は、ＣＰＵ１の処理状態Ｐｒｏｃ１Ｓｔａｔｕｓ、ＣＰＵ２の処理状態Ｐｒｏｃ２Ｓｔａｔｕｓ、を初期化する。ステップＳ１００３で、ジョブ処理中かを判定する。処理中の場合は、ステップＳ１００４においてＣＰＵ１の処理状態Ｐｒｏｃ１Ｓｔａｔｕｓを判定する。処理中（Ｐｒｏｃ１ＳｔａｔｕｓがＴＲＵＥ）の場合、ステップＳ１００７において、ＣＰＵ２の処理状態Ｐｒｏｃ２Ｓｔａｔｕｓを判定する。ＣＰＵ２の処理状態が処理中でない（Ｐｒｏｃ２ＳｔａｔｕｓがＦＡＬＳＥ）の場合、ＰＤＬ解析部２０９にステップＳ１００８のＰＤＬコマンド解析処理を依頼する。そしてステップＳ１００９でＣＰＵ２の処理状態を処理中（Ｐｒｏｃ２ＳｔａｔｕｓをＴＲＵＥ）と設定し、ステップＳ１００３に戻る。
【００２６】
ステップＳ１００７の段階で、ＣＰＵ２の処理状態が処理中（Ｐｒｏｃ２ＳｔａｔｕｓがＴＲＵＥ）なっている場合は、ステップＳ１０１０において、ＣＰＵ１のＰＤＬ解析のページ終了通知かを判断する。ステップＳ１０１０において、ＣＰＵ１のＰＤＬ解析のページ処理中である場合、ステップＳ１０１２においてＣＰＵ２のＰＤＬ解析のページ終了通知かを判断する。ステップＳ１０１２において、ＣＰＵ２のＰＤＬ解析のページ処理中である場合、ステップＳ１０１０にループする。ステップＳ１０１０においてＣＰＵ１のＰＤＬ解析のページ終了通知があった場合、ステップＳ１０１１で、ＣＰＵ１を処理中でない（Ｐｒｏｃ１ＳｔａｔｕｓをＦＡＬＳＥ）と設定し、Ｓ１００３にもどる。同様に、ステップＳ１０１２においてＣＰＵ２のＰＤＬ解析のページ終了通知があった場合、ステップＳ１０１３で、ＣＰＵ２を処理中でない（Ｐｒｏｃ２ＳｔａｔｕｓをＦＡＬＳＥ）と設定し、ステップＳ１００３にもどる。ステップＳ１００３においてジョブ終了通知があったら終了する。
【００２７】
図４は、本実施例におけるＰＤＬ解析部２０９が実行するＰＤＬコマンド解析処理のフローチャートの一例を示す図である。ステップＳ１１０１で、ページスケジューラ２１５からＰＤＬコマンド解析処理依頼がきたら、ステップＳ１１０２で、受信バッファ２０４に格納されたデータのＰＤＬ解析を行う。ステップＳ１１０３で、ジョブが終了かを判定する。まだ終了していない場合、ステップＳ１１０４で、ページ終了かを判定する。ステップＳ１１０４で、ページ終了ではない場合、ステップＳ１１０５においてメモリ領域の確保要求をメモリ管理部に要求する。
【００２８】
ステップＳ１１０６においてメモリを確保できたかを判定し、できなかった場合、ステップＳ１１０７で今までに作成したＤＬのレンダリング処理をおこなう。その後ステップＳ１１０８において、もう一度メモリを確保する。メモリが確保できない場合、ステップＳ１１０７に戻りレンダリングを繰り返し、ステップＳ１１０８でメモリを確保する。ステップＳ１１０６やステップＳ１１０９でメモリが確保できた場合、Ｓ１１１０において、ＤＬ生成をおこない、ステップＳ１１０２のＰＤＬ解析に戻り、次のＰＤＬコマンド解析処理をする。ステップＳ１００３においてジョブが終了の場合、ステップＳ１１１１でジョブ終了通知を行う。ステップＳ１１０４において、ページ終了となった場合、ステップＳ１１１２においてレンダリングをおこないステップＳ１１１３においてページ終了通知をおこなう。
【００２９】
図５は本実施例におけるレンダリングのフローチャートの一例を示した図である。ステップＳ１２０１においてレンダリング依頼がきたら、ステップＳ１２０２においてレンダリング処理をおこなう。そして、ステップＳ１２０３においてメモリ管理部２１６にメモリ開放依頼をおこなう。
【００３０】
図６は本実施例におけるメモリ確保におけるフローチャートの一例を示した図である。ステップＳ１３０１において初期化を行い、ステップＳ１３０２においてメモリ獲得依頼待ちか判定する。メモリ獲得依頼の場合、ステップＳ１３０３においてＦｉｘｅｄＭｏｄｅがＴＲＵＥ、つまり、動的モードでメモリ獲得するか、固定モードでメモリ獲得するかを判定する。ＦｉｘｅｄＭｏｄｅがＴＲＵＥの場合、固定モードにしておき、ＦＡＬＳＥの場合、動的モードでメモリを獲得する。動的モードとは、プロセッサからのメモリ獲得依頼に応じて、メモリの未使用領域を割り当てるモードである。固定モードとは、未使用領域を各プロセッサ毎に予め割り当て、各プロセッサは割り当てられたメモリ領域分しかメモリ領域を確保することができないモードである。
【００３１】
図７は、本実施例における動的モード処理のフローチャートの一例を示した図である。この処理は、メモリ管理部２１６によって行われる。まず、ステップＳ１４０１においてＣｕｒＴｉｍｅ（例えば、０時１分）に現在の時間を代入する。ステップＳ１４０２において、プロセス１のメモリ確保かを判別し、プロセス１の場合ステップＳ１４０３を処理し、プロセス２の場合はステップＳ１４０７の処理をおこなう。ステップＳ１４０３において前回メモリ確保した時間であるＰｒｅＴｉｍｅ１が０かどうかを判断する。０で無い場合（例えば、０時０分）、ステップＳ１４０４において、プロセス１にかかった時間Ｔｉｍｅ１に前回メモリを確保してからの経過時間ＣｕｒＴｉｍｅ−Ｐｒｅｔｉｍｅ１の値（上述の例の場合、１になる）を足す。
【００３２】
一方、ステップＳ１４０３においてＰｒｅＴｉｍｅ１が０の場合、ステップＳ１４０５の処理をおこなう。ステップＳ１４０５においてプロセス１のメモリ使用量ＵｓｅｄＳｉｚｅ１に１を加算し、開放されたメモリサイズであるＦｒｅｅＳｉｚｅに１減算をおこなう。そして、ステップＳ１４０６においてＣｕｒＴｉｍｅをＰｒｅＴｉｍｅ１に代入処理を行う。なお、ＵｓｅｄＳｉｚｅ１、またはＵｓｅｄＳｉｚｅ２を１加算すると、それぞれのプロセッサに所定サイズのメモリ領域が割り当てられる。例えば、本実施例では１加算されると８ｋｂｙｔｅ分のメモリ領域が割り当てられる。
【００３３】
同様にプロセス２の場合ステップＳ１４０２において、プロセス２のメモリ確保と判別し、ステップＳ１４０７の処理をおこなう。ステップＳ１４０７において前回メモリ確保した時間であるＰｒｅＴｉｍｅ２が０かどうかを判断する。０で無い場合、ステップＳ１４０８において、プロセス２にかかった時間であるＴｉｍｅ２に、前回メモリを確保してからの経過時間ＣｕｒＴｉｍｅ−Ｐｒｅｔｉｍｅ２の値を足す。
【００３４】
一方、ステップＳ１４０７においてＰｒｅＴｉｍｅ２が０の場合、ステップＳ１４０９の処理をおこなう。ステップＳ１４０９においてプロセス２のメモリ使用量ＵｓｅｄＳｉｚｅ２に１を加算し、開放されたメモリサイズであるＦｒｅｅＳｉｚｅに１減算をおこなう。そして、ステップＳ１４１０においてＣｕｒＴｉｍｅをＰｒｅＴｉｍｅ２に代入処理をおこなう。上記プロセス１またはプロセス２において、ステップＳ１４０６の代入処理、または、ステップＳ１４１０の代入処理をおこなった後、閾値判定をおこなう。
【００３５】
ステップＳ１４１１において、プロセス１とプロセス２の使用したメモリサイズの合計が閾値を越えたかを判断するために、ＵｓｅｄＳｉｚｅ１＋ＵｓｅｄＳｉｚｅ２＞＝ＣｈｋＴｈの判定をおこなう。即ち、第１のプロセッサ、および第２のプロセッサの両方のプロセッサに割り当てられたメモリ領域が閾値を越えていた場合、ステップＳ１４１２において固定モードにするために、ＦｉｘｅｄＭｏｄｅにＴＲＵＥを代入する。次にメモリ使用量の判定をおこなう。ステップＳ１４１３においてプロセス１のメモリの使用量とプロセス１に割り当てられたメモリ量がフォールバック閾値を越えるかを判定するためにＵｓｅｄＳｉｚｅ１＋ＦｒｅｅＳｉｚｅ＞＝ＦＢＴｈの処理をおこなう。
【００３６】
フォールバック閾値を越えている場合はステップＳ１４１４においてプロセス２のメモリの使用量とプロセス２に割り当てられたメモリ量がフォールバック閾値を越えるかを判定するためにＵｓｅｄＳｉｚｅ２＋ＦｒｅｅＳｉｚｅ＞＝ＦＢＴｈの処理をおこなう。
【００３７】
フォールバック閾値を越えている場合はステップＳ１４１５において、第１のプロセッサ、および第２のプロセッサがフォールバックするまでの時間の比較判定をおこなう。フォールバックするまでの時間（フォールバック閾値を越えるまでの時間）は下記数式によって算出される。はじめに、（第ｎのプロセッサが中間データを生成するために要した時間）／［（第ｎのプロセッサが中間データを生成するために利用したメモリのリソース量）によって処理速度を算出する。その算出した処理速度を用いて（第ｎのプロセッサがフォールバックを行うまでに必要とする残りのメモリ量）／（処理速度）をおこなうことによって、フォールバック閾値を越えるまでの時間が算出される。ｎは、１、または２である。なお、プロセス１のフォールバック閾値を越えるまでの時間と、プロセス２のフォールバック閾値を越えるまでの時間を算出し、比較する。
【００３８】
比較した結果、プロセス１の方が速いと決定された場合は、ステップＳ１４１６において、ＦｒｅｅＳｉｚｅ１＝ＦＢＳｉｚｅ−ＵｓｅｄＳｉｚｅ１で、プロセス１にメモリを割り当てる。そして、ＦｒｅｅＳｉｚｅ２＝ＦｒｅｅＳｉｚｅ−ＦｒｅｅＳｉｚｅ１において、プロセス２にメモリを割り当てる。同様に、プロセス２の方が早いと決定された場合は、ステップＳ１４１７において、ＦｒｅｅＳｉｚｅ２＝ＦＢＳｉｚｅ−ＵｓｅｄＳｉｚｅで、プロセス２にメモリを割り当てる。そして、ＦｒｅｅＳｉｚｅ１＝ＦｒｅｅＳｉｚｅ−ＦｒｅｅＳｉｚｅ２において、プロセス１にメモリを割り当てる。そして、ステップＳ１４１８においてそれぞれのメモリのアドレスを返す。
【００３９】
図８は、本実施例における固定モード処理のフローチャートの一例を示した図である。まず、ステップＳ１５０１において、プロセス１のメモリを確保したかを判別し、プロセス１の場合ステップＳ１５０２を処理し、プロセス２の場合はステップＳ１５０４の処理をおこなう。ステップＳ１５０２においてフォールバックの判定をおこなう。ＵｓｅｄＳｉｚｅ１＜ＦＢＴｈでフォールバック閾値よりも大きい場合、メモリ確保できない通知を返す。フォールバック閾値より小さい場合は、ステップＳ１５０３においてＦｒｅｅＳｉｚｅ１＞０でメモリが空いているかを判定する。空いていない場合はステップＳ１５０６に進む。同様にして、ステップＳ１５０１において、プロセス２の場合はステップＳ１５０４の処理をおこなう。ステップＳ１５０４においてフォールバックの判定をおこなう。
【００４０】
ＵｓｅｄＳｉｚｅ２＜ＦＢＴｈでフォールバック閾値よりも大きい場合、メモリ確保できない通知を返す。フォールバック閾値より小さい場合は、ステップＳ１５０５においてＦｒｅｅＳｉｚｅ１＞０でメモリが空いているかを判定する。空いていない場合はステップＳ１５０６に進む。ステップＳ１５０６でメモリが空いていない場合はＦｉｘｅｄＭｏｄｅ＝ＦＡＬＳＥで固定モードか動的モードかを判定し、動的モードになるまで待つ。動的モードになったときに、ステップＳ１５０７に進み、動的モード処理をおこなう。ステップＳ１５０３においてメモリが空いている場合はステップＳ１５０８においてＵｓｅｄＳｉｚｅ１をインクリメントし、ＦｒｅｅＳｉｚｅ１とＦｒｅｅＳｉｚｅをデクリメントし、ステップＳ１５０９でアドレスを返す。同様にして、ステップＳ１５０５においてメモリが空いている場合はステップＳ１５１０においてＵｓｅｄＳｉｚｅ２をインクリメント、ＦｒｅｅＳｉｚｅ２とＦｒｅｅＳｉｚｅのデクリメントをおこないステップＳ１５１１でアドレスを返す。
【００４１】
図９は、本実施例におけるメモリＦｒｅｅについてのフローチャートの一例を示した図である。まず、ステップＳ１６０１において、メモリＦｒｅｅの依頼待ちをおこなう。メモリＦｒｅｅの依頼がきたら、ステップＳ１６０２において、プロセス１のメモリ開放かプロセス２のメモリ開放かを判断する。ステップＳ１６０２において、プロセス１のメモリ開放依頼の場合、ステップＳ１６０３においてメモリ開放処理をおこなう。そして、ステップＳ１６０４において、ＦｒｅｅＳｉｚｅ＝ＵｓｅｄＳｉｚｅ１＋ＦｒｅｅＳｉｚｅをおこない、開放したサイズを加算する。
【００４２】
次にステップＳ１６０５において、ＦｉｘｅｄＭｏｄｅ＝ＦＡＬＳＥ、ＵｓｅｄＳｉｚｅ１＝０、Ｔｉｍｅ１＝０，ＰｒｅＴｉｍｅ１＝０をおこない、動的モードにし、初期化をおこなう。同様にして、ステップＳ１６０２において、プロセス２のメモリ開放依頼の場合、ステップＳ１６０６においてメモリ開放処理をおこなう。そして、ステップＳ１６０７において、ＦｒｅｅＳｉｚｅ＝ＵｓｅｄＳｉｚｅ２＋ＦｒｅｅＳｉｚｅをおこない、開放したサイズを加算する。次にステップＳ１６０８において、ＦｉｘｅｄＭｏｄｅ＝ＦＡＬＳＥ、ＵｓｅｄＳｉｚｅ２＝０、Ｔｉｍｅ２＝０，ＰｒｅＴｉｍｅ２＝０をおこない、動的モードにし、初期化をおこなう。これにより、固定モードで両方のプロセッサに割り当てたメモリ領域は解除されることになる。そして、両方のプロセッサが確保したメモリ領域が閾値を越えなくなった場合、動的モードで両方のプロセッサにメモリ領域を割り当てていくことになる。
【００４３】
図１０は、本実施例におけるメモリ管理情報の構成の一例を示した図である。メモリに対して、ＰｒｏｃｅｓｓＮｕｍ  ４０９、Ｓｔａｔｕｓ  ４１０、Ａｄｄｒｅｓｓ  ４１１の３つの情報を保持している。ＡｌｌｏｃＩｎｆｏ  ４０４上記がＰｒｏｃｅｓｓＮｕｍ  ４０９、Ｓｔａｔｕｓ  ４１０、Ａｄｄｒｅｓｓ  ４１１情報を保持している。また、ＰｒｏｃｅｓｓＩｎｆｏ  ４０３として、ＵｓｅｄＳｉｚｅ  ４０５  ＦｒｅｅＳｉｚｅ  ４０６、Ｔｉｍｅ  ４０７、ＰｒｅＴｉｍｅ  ４０８を持っている。そして、固定モードか動的モードかを判断するＦｉｘｅｄＭｏｄｅ  ４０１と、メモリの空きサイズを表すＦｒｅｅＳｉｚｅ  ４０２を持っている。
【００４４】
図１１はメモリ使用時の閾値との関係の一例を示した図である。この例では、閾値をそれぞれＣｈｋＴｈ＝４、ＦＢＴｈ＝７とし、ＣｈｋＴｈ＝４を越えた時点で、空いているメモリに対して割り当てをおこなう。空いているメモリに対してＰａｇｅ１、２をそれぞれ割り当て、メモリ管理情報の更新をする。
【００４５】
以上のように実施例１は、第１のプロセッサ、または第２のプロセッサの内、フォールバックを行うタイミングが早い方のプロセッサに対し、フォールバック閾値分のメモリ領域を割り当て、他方のプロセッサに残りの未使用領域全てを割り当てるものである。これにより、常に一定のメモリ領域分の中間データをフォールバックするので画質が安定する。
【実施例２】
【００４６】
実施例１では、２つのプロセスにおいて、閾値を越えた場合にプロセス毎にメモリの割り当てをおこなっている。本実施例では、２つのプロセスにおいて、閾値を越えた場合にプロセス毎にメモリの割り当てをメモリ使用量の比率で割り当て、余ったメモリ領域をさらに任意のプロセスに割り当てる。なお、実施例１から変更がない構成や機能については実施例２では述べない。
【００４７】
図１２は、本実施例における動的モード処理のフローチャートの一例を示した図である。まず、ステップＳ１７０１においてＣｕｒＴｉｍｅに現在の時間を代入する。ステップＳ１７０２において、プロセス１のメモリ確保かを判別し、プロセス１の場合ステップＳ１７０３を処理し、プロセス２の場合はステップＳ１７０７の処理をおこなう。ステップＳ１７０３において前回メモリ確保した時間であるＰｒｅＴｉｍｅ１が０かどうかを判断する。０で無い場合、ステップＳ１７０４において、プロセス１にかかった時間Ｔｉｍｅ１に前回メモリを確保してからの経過時間ＣｕｒＴｉｍｅ−Ｐｒｅｔｉｍｅ１の値を足す。一方、ステップＳ１７０３においてＰｒｅＴｉｍｅ１が０の場合、ステップＳ１７０５の処理をおこなう。ステップＳ１７０５においてプロセス１のメモリ使用量ＵｓｅｄＳｉｚｅ１に１を加算し、開放されたメモリサイズであるＦｒｅｅＳｉｚｅに１減算をおこなう。そして、ステップＳ１７０６においてＣｕｒＴｉｍｅをＰｒｅＴｉｍｅ１に代入処理を行う。同様にプロセス２の場合ステップＳ１７０２において、プロセス２のメモリ確保したと判別し、ステップＳ１７０７の処理をおこなう。ステップＳ１７０７において前回メモリ確保した時間であるＰｒｅＴｉｍｅ２が０かどうかを判断する。０で無い場合、ステップＳ１７０８においてプロセス２にかかった時間Ｔｉｍｅ２に現在メモリを確保した時間から前回メモリを確保した時間ＣｕｒＴｉｍｅ−Ｐｒｅｔｉｍｅ２の値を足す。一方、ステップＳ１７０７においてＰｒｅＴｉｍｅ２が０の場合、ステップＳ１７０９の処理をおこなう。ステップＳ１７０９においてプロセス２のメモリ使用量ＵｓｅｄＳｉｚｅ２に１を加算し、開放されたメモリサイズであるＦｒｅｅＳｉｚｅに１減算をおこなう。そして、ステップＳ１７１０においてＣｕｒＴｉｍｅをＰｒｅＴｉｍｅ２に代入処理をおこなう。上記プロセス１またはプロセス２において、ステップＳ１７０６の代入処理、または、ステップＳ１７１０の代入処理をおこなった後、閾値判定をおこなう。ステップＳ１７１１において、プロセス１とプロセス２の使用したメモリサイズの合計が閾値を越えたかを判断するために、ＵｓｅｄＳｉｚｅ１＋ＵｓｅｄＳｉｚｅ２＞＝ＣｈｋＴｈの判定をおこなう。閾値を越えていた場合、ステップＳ１７１２において固定モードにするために、ＦｉｘｅｄＭｏｄｅにＴＲＵＥを代入する。次にメモリ使用量の判定をおこなう。ステップＳ１７１３においてプロセス１のメモリの使用量とプロセス１に割り当てられたメモリ量がフォールバック閾値を越えるかを判定するためにＵｓｅｄＳｉｚｅ１＋ＦｒｅｅＳｉｚｅ＞＝ＦＢＴｈの処理をおこなう。フォールバック閾値を越えている場合はステップＳ１７１４においてプロセス２のメモリの使用量とプロセス２に割り当てられたメモリ量がフォールバック閾値を越えるかを判定するためにＵｓｅｄＳｉｚｅ２＋ＦｒｅｅＳｉｚｅ＞＝ＦＢＴｈの処理をおこなう。フォールバック閾値を越えている場合はステップＳ１７１５において、フォールバックするまでの処理速度の判定をおこなう。処理速度は（第ｎのプロセッサが中間データを生成するために要した時間）／［（第ｎのプロセッサが中間データを生成するために利用したメモリのリソース量）によって算出しする。その算出した処理速度を用いて（第ｎのプロセッサがフォールバックを行うまでに必要とする残りのメモリ量）／（処理速度）をおこなうことによって、フォールバック閾値を越えるまでの時間が算出される。ｎは、１、または２である。
【００４８】
プロセス１のフォールバック閾値を越えるまでの時間と、プロセス２のフォールバック閾値を越えるまでの時間を算出し、比較する。プロセス１が速い場合は、ステップＳ１７１６において、ＦｒｅｅＳｉｚｅ１＝ＦＢＳｉｚｅ−ＵｓｅｄＳｉｚｅ１で、プロセス１にメモリを割り当てる。次に、下記数式で、プロセス１にＣＰＵ１とＣＰＵ２のメモリを利用した比率によって、プロセス１、またはプロセス２に割り当てるメモリ量を算出する。その数式とは、ＦｒｅｅＳｉｚｅ２＝ＦｒｅｅＳｉｚｅ１×ＵｓｅｄＳｉｚｅ２／（ＵｓｅｄＳｉｚｅ１＋ＵｓｅｄＳｉｚｅ２）である。そして、ステップＳ１７１７において（ＦｒｅｅＳｉｚｅ−ＦｒｅｅＳｉｚｅ１−ＦｒｅｅＳｉｚｅ２）＞０かを判別することにより、メモリに余り領域があるか判定する。
【００４９】
余り領域がある場合はステップＳ１７１８において、処理速度の速いプロセス１に、余ったメモリ領域をさらに割り当てる。同様に、ステップＳ１７１５において、プロセス１が遅い場合は、ステップＳ１７１９において、ＦｒｅｅＳｉｚｅ２＝ＦＢＳｉｚｅ−ＵｓｅｄＳｉｚｅ２で、プロセス２にメモリを割り当てる。次にＦｒｅｅＳｉｚｅ１＝ＦｒｅｅＳｉｚｅ２×ＵｓｅｄＳｉｚｅ１／（ＵｓｅｄＳｉｚｅ１＋ＵｓｅｄＳｉｚｅ２）で、プロセス２にＣＰＵ１とＣＰＵ２の処理メモリの比によって、プロセス１とプロセス２にメモリを割り当てる。そして、ステップＳ１７２０において（ＦｒｅｅＳｉｚｅ−ＦｒｅｅＳｉｚｅ１−ＦｒｅｅＳｉｚｅ２）＞０かを判別することにより、メモリに余り領域があるか判定する。余り領域がある場合はステップＳ１７２１において、処理速度の速いプロセス２に、余ったメモリ領域をさらに割り当てる。
【００５０】
図１３はメモリ使用時の閾値との関係の一例を示した図である。この例では、閾値をそれぞれＣｈｋＴｈ＝４、ＦＢＴｈ＝７とし、ＣｈｋＴｈ＝４を越えた時点で、空いているメモリに対して割り当てをおこなう。プロセス１とプロセス２の処理速度の比率で、空いているメモリに対してＰａｇｅ１、２をそれぞれ割り当てる。図１３ではＰａｇｅ１に割り当てられたメモリが４ブロックで、Ｐａｇｅ２に割り当てられたメモリが１ブロックとなる。しかし、メモリが３ブロック空いているので、上記３ブロックはＰａｇｅ１に割り当てられる。このようにすることによって、プロセス１の処理を中止せず、パフォーマンス向上することができる。
【００５１】
以上のように実施例１は、第１のプロセッサ、または第２のプロセッサの内、フォールバックを行うタイミングが早い方のプロセッサに対し、フォールバック閾値分のメモリ領域を割り当てる。そして、他方のプロセッサには、メモリの利用比率を基に割り当てるメモリ領域を算出し、算出したメモリ領域分割り当てる。さらに、未使用領域が残ったらフォールバックを行うタイミングが早い方のプロセッサに対し、残った未使用領域全てを割り当てる。これにより、フォールバックを行うタイミングが早い方のプロセッサはより多くのメモリ領域分の中間データをフォールバックすることができるので、より早く印刷を行うことができる。
【符号の説明】
【００５２】
２０９  ＰＤＬ解析
２１０  ＤＬ生成部
２１４  展開処理部
２１５  ページスケジューラ
２１６  メモリ管理部
２１８  ＣＰＵ１
２１９  ＣＰＵ２
【図１】
2011126210.tif 000003
【図２】
2011126210.tif 000004
【図３】
2011126210.tif 000005
【図４】
2011126210.tif 000006
【図５】
2011126210.tif 000007
【図６】
2011126210.tif 000008
【図７】
2011126210.tif 000009
【図８】
2011126210.tif 000010
【図９】
2011126210.tif 000011
【図１０】
2011126210.tif 000012
【図１１】
2011126210.tif 000013
【図１２】
2011126210.tif 000014
【図１３】
2011126210.tif 000015