(57)【要約】【課題】メモリーの空き領域の断片化によって印刷効率が低下していた。【解決手段】ページ記述言語によるコマンドを解析して印刷用のラスターデータを生成するデータ処理部と、上記コマンドに対する特定目的の処理に使用されるためのメモリーブロックをワークメモリー内において予め確保するとともに、上記データ処理部によって上記コマンドに対する特定目的の処理が行なわれる度に当該処理に必要なメモリー領域を当該メモリーブロック内において確保して上記データ処理部に提供し、かつ所定のタイミングで当該メモリーブロックを一括して開放するメモリー管理部とを備える印刷装置とした。【選択図】図２
2010158796.tif 000002
【特許請求の範囲】
【請求項１】
ページ記述言語によるコマンドを解析して印刷用のラスターデータを生成するデータ処理部と、
上記コマンドに対する特定目的の処理に使用されるためのメモリーブロックをワークメモリー内において予め確保するとともに、上記データ処理部によって上記コマンドに対する特定目的の処理が行なわれる度に当該処理に必要なメモリー領域を当該メモリーブロック内において確保して上記データ処理部に提供し、かつ所定のタイミングで当該メモリーブロックを一括して開放するメモリー管理部とを備えることを特徴とする印刷装置。
【請求項２】
上記メモリー管理部は、上記データ処理部がイメージの描画コマンドを解析して中間コードを生成および保存する処理のために上記メモリーブロックを予め確保することを特徴とする請求項１に記載の印刷装置。
【請求項３】
上記メモリー管理部は、上記データ処理部がベクターグラフィックスの描画コマンドを解析して中間コードを生成および保存する処理のために上記メモリーブロックを予め確保することを特徴とする請求項１に記載の印刷装置。
【請求項４】
上記メモリー管理部は、上記データ処理部によって１ページ分の対象画像を構成する中間コードのラスターデータへの展開が終了したときに上記メモリーブロックを一括して開放することを特徴とする請求項２または請求項３に記載の印刷装置。
【請求項５】
上記メモリー管理部は、上記特定目的の処理に必要なメモリーの容量が所定の基準値より少ない場合に、当該処理に必要なメモリー領域を上記メモリーブロック内において確保し、当該処理に必要なメモリーの容量が当該基準値以上である場合には、上記ワークメモリー内における上記メモリーブロック以外の領域から当該処理に必要なメモリー領域を確保することを特徴とする請求項１〜請求項４のいずれかに記載の印刷装置。
【請求項６】
上記メモリー管理部は、上記メモリーブロック内の空き容量が、上記特定目的の処理に必要なメモリーの容量より少ない場合に、当該処理のための新たなメモリーブロックを上記ワークメモリー内において確保することを特徴とする請求項１〜請求項５のいずれかに記載の印刷装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、印刷装置に関する。
【背景技術】
【０００２】
ホストコンピューターから所定のページ記述言語で表されたコマンド群を受信してページ単位で印刷を行なうページプリンターにおいては、ページ記述言語の解析等を担当するモジュール（データ処理モジュール）が、各コマンドを順次解析して中間コードに変換し、各中間コードが所定のバッファ上においてラスターデータ（各画素のインク色毎の記録量を規定したラスターデータ）に展開される。データ処理モジュールは、一つのコマンドを対象として処理を行なう際に、中間コードへの変換および中間コードの一時保存に必要なサイズ（容量）のメモリー領域を、プリンターにおいてメモリーの管理を行なうモジュール（メモリー管理モジュール）に要求する。当該要求を受けたメモリー管理モジュールは、自己が管理するワークメモリー内の空き領域の中から当該要求にかかるサイズのメモリー領域を確保し、確保したメモリー領域を上記要求元（データ処理モジュール）に提供する。
【０００３】
また、受信した印刷情報を解析して中間コードを生成し、仮想バンドに対応させて作業用メモリーに保存する印刷情報処理装置が知られている（特許文献１，２参照。）。
また、印刷モードがキャラクタモードであるかラスターモードであるか判定し、キャラクタモードの場合は、キャラクタモード固有使用領域とイメージデータの展開に用いるイメージ領域とをＲＡＭの変動アドレス領域内に設定し、ラスターモードの場合には、変動アドレス領域全体をイメージ領域として設定するメモリー管理方法が知られている（特許文献３参照。）。
また、メモリーの空き領域の容量が不十分であるならば、十分な空き領域を作るために、メモリーに既に蓄積されているデータ中から消去及び圧縮のいずれかが可能なデータを選び、データの消去及び圧縮のいずれかを行なう装置が知られている（特許文献４参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平８‐２８９１０７号公報
【特許文献２】特開２００３‐３０９７２８号公報
【特許文献３】特開平１０‐１５４０４８号公報
【特許文献４】特開２０００‐１６５６３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来のように、データ処理モジュールが、各コマンドを対象として処理を行なう毎に必要なサイズのメモリー領域をメモリー管理モジュールに要求する構成においては、要求毎に比較的小さなサイズの複数のメモリー領域がワークメモリー内で確保され、中間コードの一時保存等に消費される。そして、このように各々確保されたメモリー領域が開放（あるいは解放）される時期も、各メモリー領域や、各コマンドが表すデータの種類（写真等のイメージや、ＧＣ等のグラフィックスや、テキストデータ等）の違い等によって異なっていた（統一されていなかった）。そのため、印刷処理が進むに従って、ワークメモリー内で空き領域の断片化が進み、この断片化によって、ワークメモリー内での連続した空き領域の確保の困難化、かかる確保が可能となるまでの印刷待機、断片化したメモリーの最適化（断片化の解消）処理の発生など種々の問題が生じ、印刷効率が低下していた。また、上記断片化が進むと、ワークメモリー内の空き領域を連結して管理するためのチェーンが長くなるため、メモリー管理モジュールが必要とされている最適なサイズの空き領域をサーチする時間が長くかかるようになり、印刷効率が落ちる。
【０００６】
本発明は上記課題に鑑みてなされたものであり、むやみなメモリーの増設を伴わないで上記空き領域の断片化を抑制し、かかる断片化が招く印刷効率の低下を防止することが可能な印刷装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明の印刷装置は、ページ記述言語によるコマンドを解析して印刷用のラスターデータを生成するデータ処理部と、上記コマンドに対する特定目的の処理に使用されるためのメモリーブロックをワークメモリー内において予め確保するとともに、上記データ処理部によって上記コマンドに対する特定目的の処理が行なわれる度に当該処理に必要なメモリー領域を当該メモリーブロック内において確保して上記データ処理部に提供し、かつ所定のタイミングで当該メモリーブロックを一括して開放するメモリー管理部とを備える。本発明によれば、特定目的の処理には専用に確保されたメモリーブロック内においてメモリー領域の割り当てが行なわれ、またメモリーブロックは一括して開放されるため、ワークメモリー全体で空き領域の断片化が抑制される。
【０００８】
ここで、イメージの描画コマンドを解析して生成された各中間コードについては、それらをラスターデータに展開し終えた後は、同じタイミングでメモリー領域を開放することができる。そのため、上記メモリー管理部は、上記データ処理部がイメージの描画コマンドを解析して中間コードを生成および保存する処理のために上記メモリーブロックを予め確保するとしてもよい。あるいは、ベクターグラフィックスの描画コマンドを解析して生成された各中間コードについても、それらをラスターデータに展開し終えた後は、同じタイミングでメモリー領域を開放することができる。そのため、上記メモリー管理部は、上記データ処理部がベクターグラフィックスの描画コマンドを解析して中間コードを生成および保存する処理のために上記メモリーブロックを予め確保するとしてもよい。
【０００９】
上記メモリー管理部は、上記データ処理部によって１ページ分の対象画像を構成する中間コードのラスターデータへの展開が終了したときに上記メモリーブロックを一括して開放するとしてもよい。当該構成によれば、１ページ分の対象画像を構成する中間コードが不要となったタイミングでメモリーブロックを一括開放することができる。
【００１０】
上記メモリー管理部は、上記特定目的の処理に必要なメモリーの容量が所定の基準値より少ない場合に、当該処理に必要なメモリー領域を上記メモリーブロック内において確保し、当該処理に必要なメモリーの容量が当該基準値以上である場合には、上記ワークメモリー内における上記メモリーブロック以外の領域から当該処理に必要なメモリー領域を確保するとしてもよい。当該構成によれば、上記特定目的の処理に必要なメモリーの容量に応じて、上記メモリーブロックとワークメモリー内における上記メモリーブロック以外の領域とを使い分けることができる。
【００１１】
上記メモリー管理部は、上記メモリーブロック内の空き容量が、上記特定目的の処理に必要なメモリーの容量より少ない場合に、当該処理のための新たなメモリーブロックを上記ワークメモリー内において確保するとしてもよい。当該構成によれば、上記特定目的の処理に必要なメモリーブロックをワークメモリー内において適確に増やすことができる。
なお本発明の技術的思想は、印刷装置以外の発明にも適用可能であり、例えば、上述した印刷装置の各構成に対応する工程からなる方法発明や、上述した印刷装置の各構成に対応する機能をコンピューターに実行させるプログラム発明を把握可能である。
【図面の簡単な説明】
【００１２】
【図１】本実施形態にかかるプリンターの概略構成を示したブロック図である。
【図２】制御部が実行する印刷制御処理を示したフローチャートである。
【図３】コマンドの解析処理の詳細を示したフローチャートである。
【図４】メモリー領域確保処理を示したフローチャートである。
【図５】メモリー領域確保の前後におけるメモリーブロックを例示した図である。
【図６】グローバル領域を例示した図である。
【図７】新たなメモリーブロックの追加処理を示したフローチャートである。
【図８】メモリーの開放処理を示したフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態を図面を参照しながら説明する。
図１は、本実施形態にかかるプリンター１０等の概略構成をブロック図により示している。プリンター１０は、本発明にかかる印刷装置の一例に該当する。プリンター１０は印刷機能のみを備える装置であってもよいし、印刷機能以外にもスキャン機能やコピー機能を備えた複合機であってもよい。
【００１４】
プリンター１０は、少なくとも、操作パネル１１と制御部１２と印刷機構部１３とを備え、ページプリンターとして機能する。操作パネル１１は、ユーザから各種の指示を受付けるため及びプリンター１０の状態をユーザに提示するためのユニットである。操作パネル１１は、例えば、液晶ディスプレー（ＬＣＤ）、ＬＥＤ、押しボタンスイッチＳＷ等から構成されている。制御部１２は、プリンター１０の各部を制御するための、ＣＰＵ２１、ＲＯＭ２２、ＲＡＭ２３、外部インターフェース（Ｉ／Ｆ）２４、制御ＡＳＩＣ２５等からなるユニットである。
【００１５】
制御部１２においては、ＣＰＵ２１がＲＡＭ２３をメインメモリー（ワークメモリー）として使用しながら、ＲＯＭ２２に記憶された所定のプログラムに従った各種制御処理を実行する。制御ＡＳＩＣ２５は、各種構成（ＣＰＵ２１、ＲＯＭ２２、ＲＡＭ２３、外部Ｉ／Ｆ２４、操作パネル１１、印刷機構部１３等）間のデータの転送等を行うＡＳＩＣ（プリンター１０用のものとして開発されたＡＳＩＣ）である。外部Ｉ／Ｆ２４は、例えば、ＬＡＮ等のネットワークを介してプリンター１０外部のホストコンピューター５０と接続している。ホストコンピューター５０には、プリンター１０の駆動を制御するためのプリンタードライバー５１がインストールされている。
【００１６】
制御部１２は、プリンタードライバー５１から送信された印刷コマンドに応じた印刷制御処理を行う。本実施形態では、制御部１２が実行する上記プログラムに、データ処理モジュール２２ａおよびメモリー管理モジュール２２ｂが組み込まれており、制御部１２は、印刷制御処理の過程でこれらモジュールに従った処理を実行する。印刷機構部１３は、制御部１２が印刷コマンドに基づいて生成したラスターデータ（印刷データ）に応じて用紙上に印刷を行うためのユニットであり、図示しない印刷エンジン、給紙装置、用紙の搬送機構、排紙トレイ等を備える。
【００１７】
図２は、制御部１２が主にデータ処理モジュール２２ａに従って実行する印刷制御処理をフローチャートにより示している。
ステップＳ（以下「ステップ」の表記を省略）１００では、制御部１２は、外部Ｉ／Ｆ２４を介してホストコンピューター５０（プリンタードライバー５１）から印刷コマンドを受信する。印刷コマンドは、所定のページ記述言語で表されたコマンドの集まりである。各コマンドとしては、例えば、写真等ビットマップ形式のイメージの描画コマンド（イメージコマンド）や、ＧＣ等のベクターグラフィックス形式のデータについての描画コマンド（ベクターコマンド）や、文字コード（テキスト）形式のデータで記述された文字の描画コマンド等が該当する。
【００１８】
Ｓ１１０では、制御部１２は、受信したコマンドを一つずつ順に対象として、当該対象としたコマンド（対象コマンド）がどのような種類のコマンドであるか判定し、終了コマンドであると判定した場合にはＳ１３０に進む。一方、対象コマンドが終了コマンド以外の種類のコマンドであると判定した場合には、Ｓ１２０に進み、対象コマンドの解析処理を行う。終了コマンドとは、１ページ分の印刷対象画像を表すコマンド群の終了を意味するコマンドであり、制御部１２が、終了コマンドを認識した時点で、１ページ分のコマンド群についてのＳ１２０における解析処理が終了したことになる。
Ｓ１２０では、制御部１２は、対象コマンドの解析を行い、中間コードの生成および当該中間コードの保存を行う。
【００１９】
図３は、Ｓ１２０における処理の詳細をフローチャートにより示している。
Ｓ１２１では、制御部１２は、対象コマンドの種類を判定し、イメージコマンドであると判定した場合にＳ１２２以降に進み、イメージコマンドの解析による中間コードの生成および保存処理を行う。一方、イメージコマンド以外の種類のコマンド（例えば、ベクターコマンド）であると判定した場合にはＳ１２１からＳ１２２以外の分岐（図３における鎖線）に進み、そのコマンドの種類に応じた中間コードの生成および保存処理を行う。図３では、イメージコマンドを解析して中間コードを生成する場合を例に、説明を行う。
【００２０】
制御部１２は、対象コマンドの解析による中間コードの生成および保存処理を開始する前に、対象コマンド毎に、中間コードの生成および保存に必要なサイズのメモリー領域の確保を行う。具体的には、中間コードの生成および保存処理を司るデータ処理モジュール２２ａが、メモリー管理モジュール２２ｂに対して当該必要なサイズのメモリー領域の確保を要求する。当該必要なサイズはコマンドの種類によって異なるため、データ処理モジュール２２ａは、そのときの対象コマンドの種類に応じて、当該必要なサイズを決定する。
【００２１】
図４は、メモリー管理モジュール２２ｂによるメモリー領域確保処理を、フローチャートによって示している。
Ｓ２００では、メモリー管理モジュール２２ｂは、データ処理モジュール２２ａから、上記メモリー領域の確保要求を受けたか否か判定し、確保要求を受けた場合にＳ２１０以下の処理に進む。
Ｓ２１０では、メモリー管理モジュール２２ｂは、そのときの対象コマンドがイメージコマンドであるか否か（メモリー領域の確保の目的がイメージコマンドの解析による中間コードの生成・保存であるか）判定し、イメージコマンドである場合にＳ２２０に進み、イメージコマンドでない場合にＳ２６０に進む。
【００２２】
Ｓ２２０では、メモリー管理モジュール２２ｂは、上記確保要求がされているメモリー領域のサイズ（要求サイズと呼ぶ。）が予め設定した基準値（基準容量）を下回るか否か判定し、下回ると判定した場合にＳ２３０に進み、一方、要求サイズが基準値以上である場合には、Ｓ２６０に進む。
Ｓ２３０では、メモリー管理モジュール２２ｂは、ワークメモリー内に予め確保した一定のメモリーブロックＭＢ内における現在の空き容量（空き領域Ａ３、図５参照。）が、要求サイズ以上の大きさであるか否か判定し、空き容量が要求サイズ以上である場合にＳ２５０に進み、空き容量が要求サイズより少ない場合には、Ｓ２４０に進む。
Ｓ２５０では、メモリー管理モジュール２２ｂは、要求サイズのメモリー領域をメモリーブロックＭＢ内において確保し、この確保したメモリー領域をデータ処理モジュール２２ａに提供する。
【００２３】
図５は、メモリーブロックＭＢ内において、ある要求サイズのメモリー領域が確保される前と後の様子を模式的に例示している。メモリーブロックＭＢは、メモリー管理モジュール２２ｂがワークメモリー内において、特定目的の処理に専用するために予め確保した所定サイズのメモリー領域である。本実施形態では、特定目的とは、一例としてイメージコマンドの解析による中間コードの生成および保存を指す。メモリーブロックＭＢは、ブロックの先頭に、所定の管理用データを格納するための管理領域Ａ１を確保している。管理領域Ａ１には、他のメモリーブロックＭＢとのリンクの有無を示すための情報等が記述される。例えば、メモリーブロックＭＢが他のメモリーブロックＭＢとリンクしていない場合には、そのメモリーブロックＭＢの管理領域Ａ１にはリンクの終点を意味するターミネートという情報が記述される。メモリーブロックＭＢにおいては管理領域Ａ１以外の領域が中間コードの生成・保存に用いられる。
【００２４】
メモリー管理モジュール２２ｂは、メモリーブロックＭＢにおける管理領域Ａ１を除いた領域の先頭位置の番地を、メモリーブロック先頭ポインターＨＰとして管理している。また、メモリー管理モジュール２２ｂは、現在のメモリーブロックＭＢにおける使用済み領域Ａ２と空き領域Ａ３との境界位置の番地を、メモリーポインターＭＰとして管理している。このような構成においてメモリー管理モジュール２２ｂは、Ｓ２５０において、メモリーポインターＭＰをメモリー領域の要求元（データ処理モジュール２２ａ）に返すとともに、要求サイズ分のメモリー領域を確保する。メモリー管理モジュール２２ｂは、現在のメモリーポインターＭＰの番地に要求サイズ分の領域を足した後の番地を新たなメモリーポインターＭＰとして設定する。この結果、図５に示すように、使用済み領域Ａ２が要求サイズ分増え、空き領域Ａ３が要求サイズ分減る。
【００２５】
図６は、ワークメモリー内に確保されたグローバル領域ＧＡを示している。グローバル領域ＧＡは、メモリーブロックＭＢの管理に必要な各種情報を格納した領域であり、図６ではグローバル領域ＧＡに、メモリーブロックＭＢ（メモリーブロックＭＢの管理領域Ａ１）のワークメモリー内における位置を示すポインター「メモリーブロックＭＢへのポインター」や、上述した「メモリーポインターＭＰ」や、現時点での空き領域Ａ３のサイズ「空きサイズ」が記録されている。メモリー管理モジュール２２ｂは、グローバル領域ＧＡに格納された情報を参照したり要求サイズの確保に応じて変更したりする。
【００２６】
Ｓ２４０では、メモリー管理モジュール２２ｂは、ワークメモリー内においてメモリーブロックＭＢを新たに確保し、新たに確保したメモリーブロックＭＢをそれまでに確保されていたメモリーブロックＭＢに追加し、その上でＳ２５０に進む。
【００２７】
図７は、Ｓ２４０における処理の詳細をフローチャートにより示している。
Ｓ２４１では、メモリー管理モジュール２２ｂは、ワークメモリー内の空き領域の中に、新たなメモリーブロックＭＢを確保する。
Ｓ２４２では、メモリー管理モジュール２２ｂは、新たに確保したメモリーブロックＭＢにおける管理領域Ａ１に、グローバル領域ＧＡに格納されている「メモリーブロックＭＢへのポインター」を書き込む。つまり、グローバル領域ＧＡに格納されている「メモリーブロックＭＢへのポインター」は、上記新たに確保したメモリーブロックＭＢ以前に確保されていたメモリーブロックＭＢ（Ｓ２３０で空き容量が要求サイズより少ないと判定されたメモリーブロックＭＢ）を示すポインターであるため、この「メモリーブロックＭＢへのポインター」を新たに確保したメモリーブロックＭＢにおける管理領域Ａ１に書き込むことで、新たなメモリーブロックＭＢと今まで確保していたメモリーブロックＭＢとをリンクさせることができる。
【００２８】
Ｓ２４３では、メモリー管理モジュール２２ｂは、グローバル領域ＧＡの「メモリーブロックＭＢへのポインター」の値を、上記新たに確保したメモリーブロックＭＢ（メモリーブロックＭＢの管理領域Ａ１）のワークメモリー内における位置を示すポインターに書き換える。
Ｓ２４４では、メモリー管理モジュール２２ｂは、グローバル領域ＧＡの「メモリーポインターＭＰ」の値を上記新たに確保したメモリーブロックＭＢにおけるメモリーブロック先頭ポインターＨＰの値とし且つグローバル領域ＧＡの「空きサイズ」の値を上記新たに確保したメモリーブロックＭＢにおける空き領域Ａ３のサイズとする書き換えを行なう。このようなＳ２４０の後のＳ２５０では、メモリー管理モジュール２２ｂは、直近のＳ２４０で新たに追加されたメモリーブロックＭＢ内において上記要求サイズのメモリー領域を確保する。
【００２９】
Ｓ２１０で“Ｎｏ（対象コマンド≠イメージコマンド）”と判定された場合、またはＳ２２０で“Ｎｏ（要求サイズ≧基準値）”と判定された場合（図４参照）には、メモリー管理モジュール２２ｂは、Ｓ２６０において、通常のメモリー領域内において要求サイズのメモリー領域を確保し、確保したメモリー領域をデータ処理部モジュール２２ａに提供する。通常のメモリー領域とは、ワークメモリー内におけるメモリーブロックＭＢ以外の空き領域である。つまり、対象コマンドがイメージコマンドではなかったり、対象コマンドがイメージコマンドであっても要求サイズが基準以上に大きい場合には、イメージコマンドの解析処理のために確保されたメモリーブロックＭＢ以外のメモリー領域を、中間コードの生成・保存に割り当てる。
【００３０】
制御部１２（データ処理モジュール２２ａ）は、上記のようにメモリーブロックＭＢ（あるいは通常のメモリー領域）内で確保されたメモリー領域を用いて、Ｓ１２２〜Ｓ１２４（図３参照）の処理を行なう。Ｓ１２２では、制御部１２は、対象コマンドであるイメージコマンドを解析してイメージデータ（ラスターデータ）に展開し、イメージデータを必要に応じて回転させる。つまり、イメージデータを構成するラスターの向きとバンドの向き（バンドの長手方向）とが異なっている場合は、ラスターの向きとバンドの向きとが平行になるようにイメージデータを回転させる。バンドとは、１ページを印刷用紙の数行毎に分割したときの一つの帯状領域であり、後述するように中間コードからラスターデータへの展開は、バンド単位で行なわれる。
【００３１】
Ｓ１２３では、制御部１２は、上記イメージコマンドを解析して得られたイメージデータが複数のバンドに跨って存在している場合に、イメージデータをバンド毎に分割する。イメージデータが一つのバンド内に収まっている場合には、Ｓ１２３の処理は行なわない。Ｓ１２４では、制御部１２は、上記イメージコマンドを解析して得られたイメージデータ（必要に応じて回転や分割が行なわれた後のイメージデータ）を、そのイメージデータが属するバンドの番号（バンド番号）およびバンド内における位置情報とともに中間コードとして、上記確保されたメモリー領域に保存する。従って、一つのイメージコマンドを解析した結果、複数の中間コードが生成・保存される場合もある。Ｓ１２０の処理（メモリー領域確保処理を含む）の後は、対象コマンドを変更してＳ１１０の判定が行われる。
【００３２】
Ｓ１３０（図２参照）では、制御部１２は、バンド単位で、バンドに含まれる中間コードの全てを所定のバッファに展開することにより、バンド単位のラスターデータを生成する。バッファはワークメモリー内において、中間コードからラスターデータへの展開用に確保された領域である。
Ｓ１４０では、制御部１２は、１ページの印刷対象画像を構成する全バンドについて中間コードの展開を終えたか否か判定し、終えた場合にはＳ１５０に進み、終えていない場合には別のバンドについてＳ１３０の処理を行なう。
Ｓ１５０では、制御部１２は、Ｓ１２０で生成された中間コードを保存しているメモリー領域を開放する。
【００３３】
図８は、Ｓ１５０における処理の詳細をフローチャートにより示している。Ｓ１５０の処理は、主にメモリー管理モジュール２２ｂが実行する。
Ｓ１５１では、メモリー管理モジュール２２ｂは、ワークメモリー内に保存された中間コードを一つずつ順に対象として、当該対象とした中間コードがイメージコマンドの解析によって生成された中間コードであるか否かを判定する。当該対象とした中間コードがイメージコマンドの解析によって生成された中間コードであると判定した場合にはＳ１５２に進み、イメージコマンドではないコマンドの解析によって生成された中間コードであると判定した場合はＳ１５１からＳ１５２以外の分岐に進む。
【００３４】
Ｓ１５２では、メモリー管理モジュール２２ｂは、上記対象とした中間コードが、メモリーブロックＭＢ内で確保されたメモリー領域を用いて生成・保存されたものであるか否か判定する。本実施形態では、データ処理モジュール２２ａは、上述のメモリー領域の確保要求に対してメモリー管理モジュール２２ｂがメモリーブロックＭＢ内のメモリー領域を確保した場合には、当該確保されたメモリー領域を用いて生成した中間コードに対して特定のフラグを設定しておく。かかるフラグは、中間コードに対して直接付すとしてもよいし、生成した各中間コードを管理する所定の情報テーブル内に記録するとしてもよい。メモリー管理モジュール２２ｂは上記特定のフラグの設定の有無によって、上記対象とした中間コードがメモリーブロックＭＢ内で確保されたメモリー領域を用いて生成されたものであるか否か判定することができる。
【００３５】
メモリー管理モジュール２２ｂは、Ｓ１５２で“Ｎｏ”と判定した場合、つまり上記対象とした中間コードが通常のメモリー領域において生成・保存されたものであるときは、Ｓ１５３に進む。Ｓ１５３では、メモリー管理モジュール２２ｂは、上記対象とした中間コードを削除してそのメモリー領域を開放する。つまり、ワークメモリー内のメモリーブロックＭＢ以外で中間コードを保存しているメモリー領域を開放する際には、中間コード単位で開放する。図８では詳しくは示していないが、Ｓ１５１〜Ｓ１５３の処理は中間コード毎に繰り返し行なわれる。またＳ１５１で、イメージコマンドの解析によって生成された中間コードではないと判定された中間コード（図８における鎖線）についても基本的には中間コード単位で削除されてメモリー領域が開放される。
【００３６】
次に、Ｓ１５４からの処理によって、メモリー管理モジュール２２ｂはメモリーブロックＭＢを一括開放する。まずＳ１５４では、メモリー管理モジュール２２ｂは、メモリの開放処理の際に参照する変数「メモリーブロックＭＢへのポインター」の値を、そのときグローバル領域ＧＡに格納されている「メモリーブロックＭＢへのポインター」に設定する。Ｓ１５５では、メモリー管理モジュール２２ｂは、変数「メモリーブロックＭＢへのポインター」が示すメモリーブロックＭＢの管理領域Ａ１にターミネート（リンクの終点）が記述されているか否か判定する。メモリー管理モジュール２２ｂは、ターミネートが記述されている場合にはＳ１５７に進み、ターミネートが記述されていない場合はＳ１５６に進む。
【００３７】
Ｓ１５６では、メモリー管理モジュール２２ｂは、変数「メモリーブロックＭＢへのポインター」が示すメモリーブロックＭＢの使用済み領域Ａ２に保存された中間コードを全て削除して当該メモリーブロックＭＢを一括して開放するとともに、当該変数「メモリーブロックＭＢへのポインター」を、当該開放対象としているメモリーブロックＭＢの管理領域Ａ１に記述されている「メモリーブロックＭＢへのポインター」に設定する。Ｓ１５６後のＳ１５５では、メモリー管理モジュール２２ｂは、直近のＳ１５６で設定された変数「メモリーブロックＭＢへのポインター」が示すメモリーブロックＭＢの管理領域Ａ１にターミネートが記述されているか否か判定する。
【００３８】
Ｓ１５７では、メモリー管理モジュール２２ｂは、ワークメモリー内で最初に確保されていたメモリーブロックＭＢの一括開放を行なうとともに、グローバル領域ＧＡの初期化（グローバル領域ＧＡにおける「メモリーブロックＭＢへのポインター」、「メモリーポインターＭＰ」および「空きサイズ」の各値の初期化）を行なう。つまり、Ｓ１５５，Ｓ１５６，Ｓ１５７の処理を行なうことで、ワークメモリー内で確保された全てのメモリーブロックＭＢについて、確保された順番が遅いものから順に一括開放していくことができる。
Ｓ１６０（図２参照）では、制御部１２は、バッファに展開されたラスターデータをバンド単位で順次、印刷機構部１３に送信することにより、印刷機構部１３に印刷を実行させる。
【００３９】
このように本実施形態によれば、プリンター１０は、制御部１２が備えるワークメモリーの中に、イメージコマンドの解析による中間コードの生成・保存という特定目的のために専用するメモリーブロックＭＢを予め確保しておき、コマンドの受信から印刷までの一連の処理を行なう過程で、イメージコマンドの解析による中間コードの生成・保存を行なう際にはメモリーブロックＭＢ内で必要なサイズのメモリー領域を確保して処理を行なうとした。また、イメージコマンドを解析して生成された各中間コードをそれぞれ保存するメモリー領域については、それらを開放可能なタイミングが同じであるため、所定のタイミング（１ページ分の中間コードをラスターデータに展開した後）でメモリーブロックＭＢ全体を一括して開放するとした。その結果、プリンター１０が印刷を繰り返す過程でのワークメモリー内の空き領域の断片化が従来よりも低減し、この断片化に伴う印刷効率（印刷スピード）の低下を抑制することができる。また、ワークメモリー内におけるメモリーブロックの確保や一括開放によって上記断片化を低減できるため、むやみにＲＡＭ等のワークメモリーの増設を行なうことなく印刷効率の低下を防止できる。
【００４０】
上記では、イメージコマンドを解析して中間コードを生成・保存するためにメモリーブロックＭＢからメモリー領域を確保するとした。しかし、イメージコマンド以外にも、例えば、ベクターコマンドを解析して中間コードを生成・保存するためにメモリーブロックＭＢを予め確保しておき、当該確保したメモリーブロックＭＢ内のメモリー領域をベクターコマンドに基づく中間コードの生成・保存処理に割り当てるとしても良い。ベクターコマンドに基づく中間コードについても、１ページ分の中間コードをラスターデータに展開し終わったタイミングでメモリーを開放可能であるため、１ページ分の中間コードをラスターデータに展開し終わったタイミングでメモリーブロックＭＢを一括して開放する。
【００４１】
また上記では、データ処理モジュール２２ａがメモリー管理モジュール２２ｂに対してメモリー領域の確保要求を行なった際、要求を受けたメモリー管理モジュール２２ｂの側で、要求にかかるメモリー領域をメモリーブロックＭＢ内で確保するかメモリーブロックＭＢ以外から確保するかを決定するとした。しかし、当該決定は、メモリー領域の確保要求を行い実際にメモリーを使用する側、つまりデータ処理モジュール２２ａが行なうとしてもよい。具体的には、データ処理モジュール２２ａは、中間コードの生成・保存に必要なメモリー領域の確保要求をメモリー管理モジュール２２ｂに対して行なう際に、中間コードの生成元となるコマンドの種類および要求サイズに基づいて、メモリーブロックＭＢからメモリー領域を確保すべきか否かを決定し、当該決定の結果（例えば、特定のフラグ）を上記確保要求とともにメモリー管理モジュール２２ｂに通知する。そして当該通知を受けたメモリー管理モジュール２２ｂは、データ処理モジュール２２ａによる上記決定に従って、メモリーブロックＭＢあるいは通常のメモリー領域から要求サイズのメモリー領域を確保する。
【符号の説明】
【００４２】
１０…プリンター、１１…操作パネル、１２…制御部、１３…印刷機構部、２１…ＣＰＵ、２２…ＲＯＭ、２２ａ…データ処理モジュール、２２ｂ…メモリー管理モジュール、２３…ＲＡＭ、２４…外部Ｉ／Ｆ、２５…制御ＡＳＩＣ、５０…ホストコンピューター、５１…プリンタードライバー
【図１】
2010158796.tif 000003
【図２】
2010158796.tif 000004
【図３】
2010158796.tif 000005
【図４】
2010158796.tif 000006
【図５】
2010158796.tif 000007
【図６】
2010158796.tif 000008
【図７】
2010158796.tif 000009
【図８】
2010158796.tif 000010