以下、図面を参照して本発明の実施の形態(以下「実施形態」という)を説明する。図面において、同様の構成要素又はステップには同一符号を付す。まず、本発明の実施形態の領域確保のための構成及び処理の適用対象となり得る第1例及び第2例のシステムについて説明し、その後に実施形態について説明する。
[第1例]
《装置構成》
図1を用いて、本実施形態の領域確保のための構成及び処理の適用対象となり得る第1の例の印刷文書変換システムの構成及びこれが接続される印刷システムの構成の一例を説明する。
図1に示す印刷システムは、印刷文書変換システム100,ホストコンピュータ200,印刷制御装置210及びプリンタエンジン220を備える。
印刷文書変換システム100は、ページ記述言語(PDL)で記述された印刷文書データを、プリンタエンジン220が取扱可能なビットマップ形式(ラスター形式とも呼ばれる)等の印刷画像データに変換する装置である。図示は省略したが、ホストコンピュータ200は、LAN(ローカルエリアネットワーク)等のネットワークを介して印刷文書変換システム100に対して接続されている。ホストコンピュータ200は、そのネットワークを介して印刷文書変換システム100に対して印刷文書データを送り、その印刷文書データの印刷を指示する。なお、図1にはホストコンピュータ200を1つしか示さなかったが、ネットワーク上に複数のホストコンピュータ200が存在していてもよい。
印刷文書変換システム100は、ジョブ管理部110,n個(nは2以上の整数)のRIP部120−1,120−2,…,120−n,キャッシュ管理部130及びキャッシュメモリ140を備える。
RIP( Raster Image Processor)部120−1,120−2,…,120−n(以下、ここを区別する必要がない場合はRIP部120と総称する)は、RIP処理を行うデータ処理装置である。ここで、RIP処理とは、PDLで記述された印刷文書データをプリンタエンジン220が取扱可能なビットマップ(ラスター)形式等の印刷画像データに変換する変換処理である。印刷文書変換システム100は、複数(n個)のRIP部120により、ページ単位で並列的に、すなわち最大nページを並列的に、RIP処理する。RIP処理は、描画又はレンダリングとも呼ばれる。RIP部120は、与えられたPDLのデータを例えば先頭から順に調べていき、その過程で順番に見つかった各オブジェクト(すなわち文書要素)のPDLデータを解釈し、中間言語形式又はビットマップ形式の画像データを生成する。ここで、オブジェクトには、例えば、テキスト(文字列)、図形(グラフィックス)、イメージ(連続調画像)など、いくつかの種類がある。個々のオブジェクトは、例えばPDLの描画コマンドにより表される。
RIP部120は、1つの例では、PDLのデータを直接ビットマップ形式等の印刷画像データに変換するものであってよい。また、別の例では、RIP部120は、PDLのデータを、PDLコマンドよりは粒度の小さいディスプレイリスト等の中間言語データに変換してバッファし、バッファした中間言語データをビットマップ形式に変換するという2段階の変換を行うものであってよい。
ジョブ管理部110は、ホストコンピュータ200から印刷文書データを受け取り、それら印刷文書データの印刷処理の管理を行う。以下では、ホストコンピュータ200から受け取った1つの印刷文書データのことをジョブと呼ぶ。ホストコンピュータ200からのジョブ(印刷文書データ)には、個々の対象(例えば顧客)ごとに、データベースに記憶された各対象のデータを定型データに組み合わせて印刷する、いわゆるバリアブルプリントのジョブも含まれ得る。
ジョブ管理部110が行う印刷処理の管理には、一般的な、ジョブ単位での印刷順序の管理の他に、1つのジョブ内の各ページを各RIP部120に割り当てるページ割当管理も含まれる。後者のページ割当管理を担当するのが、ページ割当部112である。
例えば印刷文書データ(ジョブ)がページ独立(すなわち1つのページの描画に必要な情報がそのページのPDLデータ内に完全に記述される印刷文書データの方式)である場合には、ページ割当部112は、各RIP部120に対してそれぞれ異なるページのPDLデータを順に供給し、そのページをRIP処理させるようにしてもよい。また、別の例では、ジョブ管理部110は全てのRIP部120に印刷文書データ全体を提供し、ページ割当部112はその印刷文書データの中で処理すべきページの番号を各RIP部120に順に指示するようにしてもよい(この方式は、ページ独立、ページ非独立を問わず適用可)。
また、各RIP部120に対するページ割当方式も特に限定されない。ページ割当部112は、例えばRIP部120に対してあらかじめ定められた順序に従い、RIP部120−1,120−2,…,120−nに対して1,2,…nページと順にページを割り当てる動作を繰り返してもよい。また、別の例として、最初は各RIP部112に順にページを割り当て、その後は割り当てたページのRIP処理を完了した順にページの割当を行う方式も可能である。
また、更に別の例として、各ページのRIP処理負荷量を事前(RIP処理の開始前)に見積もって、その見積もり結果に従って各RIP部120に割り当てるページをスケジューリングする方式も考えられる。ページのRIP処理負荷量は、例えば、ページに含まれる個々のオブジェクトのRIP処理負荷量を、全オブジェクトにわたって総和することで求められる。個々のオブジェクトのRIP処理負荷量は、例えば、そのオブジェクトの複雑さやサイズ(面積)などから求められる。オブジェクトの複雑さは、そのオブジェクトの種類(イメージ、フォント、グラフィックスなど)などに応じて決まっている。一般に、オブジェクトの数が多いほど処理負荷は高い。また、イメージのオブジェクトは図形オブジェクトよりも一般に処理負荷が高い。また、サイズが大きいほど一般に処理負荷が高い。このような各種のパラメータからページの処理負荷を推定する方式には様々な公知技術があり、第1例でもその公知技術を用いればよい。
また、各RIP部120の現在の負荷、ページのRIP処理の進捗度、処理能力(CPUの速度など)、各RIP部120がRIP処理しているページのRIP処理負荷量、割り当て対象のページのRIP処理負荷量などのパラメータのうちの一以上を考慮して、ページ割当のスケジューリングを行ってもよい。スケジューリングでは、それら例示したパラメータのうちの一部又は全部を総合的に考慮した上で、例えば、割り当て対象のページのRIP処理を最も早く完了できるRIP部120を特定し、そのRIP部120にそのページを割り当てる。この例では、ページ割当部112は、例えば、各RIP部120がRIP処理しているページのRIP処理負荷量と処理の進捗度とから、未だ処理されずに残っているRIP処理負荷量を求める。そして、この残りのRIP処理負荷量に割り当て対象のページのRIP処理負荷量を加算し、その加算結果を処理能力(あるいは処理能力から現在の負荷を減じた結果である正味の処理能力)で除することで、現在時点から残りのRIP処理負荷量と割り当て対象のページのRIP処理負荷量を合わせた量の処理を完了するまでに要する時間の表す指標値を得る。そして、各RIP部120についてそのような指標値を求め、比較することで、割り当て対象のページのRIP処理を最も早く完了できるRIP部120を特定する。
なお、このような評価のためのパラメータのうち、各RIP部120の処理能力は、システム管理者等があらかじめジョブ管理部110に登録しておけばよい。また、各RIP部120がRIP処理しているページや割り当て対象のページのRIP処理負荷量は、上述のようにして求めればよい。各RIP部120の現在の負荷やRIP処理の進捗度は、次に説明する負荷監視部114が監視する。
負荷監視部114は、各RIP部120の負荷状態を監視する機能モジュールである。例えば、負荷監視部114は、各RIP部120から定期的に当該RIP部120の現在の負荷の情報を受け取る。RIP部120の負荷の情報には、例えばRIP部120のプログラムを実行しているコンピュータのCPU(中央演算装置)使用率や、CPUが実行中のアクティブプロセスの数、そのコンピュータにて仮想メモリが使用中であるかどうかの情報(例えばメモリスワッピングが起こっているかどうか)などがある。RIP部120の現在の負荷をCPU使用率で代表してもよいし、CPU使用率の他にアクティブプロセス数や仮想メモリの使用状況などといった他のパラメータも総合して負荷評価値を求めてもよい。
また、負荷監視部114は、各RIP部120から、それぞれ割り当てたページについてのRIP処理の進捗度合い(例えばページの何%までRIP処理が完了したか)について情報を、例えば定期的に、あるいは一定割合ずつ進捗するごとに、取得してもよい。また、RIP部120から定期的に取得される進捗度合いの時間的な変化率、または一定割合ずつ進捗するごとの時間間隔から求められる進捗度合いの時間的な変化率と、そのRIP部120がRIP中のページのデータサイズから、そのRIP部120の現在の正味の処理能力を推定し、この推定値を用いて、現在時点から残りのデータサイズと割り当て対象のページのデータサイズを合わせた量の処理を完了するまでに要する時間の表す指標値を算出してもよい。
なお、負荷監視部114が求めた各RIP部120の負荷状況の情報は、前述したページ割当部112の判断材料として用いられる他、キャッシュ管理にも利用し得る。すなわち、例えば、RIP部120がオブジェクトをRIP処理するときに、他のRIP部120がそのオブジェクトのRIP処理を既に開始している場合に、前者が後者の処理完了を待ってその処理結果(キャッシュデータ)を流用した方がよいのか否かを判定するのに利用し得る(詳細は後述)。
各RIP部120は、ページ割当部112から割り当てられたページのPDLデータについてのRIP処理を行う際、キャッシュメモリ140を利用することで、過去(すなわち割り当てられたページより前のページ群)のRIP処理結果を再利用する。すなわち、各RIP部120は、割り当てられたページに含まれるオブジェクトのPDLデータをRIP処理する際、そのオブジェクトのRIP処理結果がすでにキャッシュメモリ140内にあれば、RIP処理は行わずにキャッシュメモリ140内のRIP処理結果を再利用することで、ページの印刷画像データに対してそのオブジェクトの画像を加える。なお、オブジェクトは、ひとまとまりの描画単位のことであり、例えば1つのPDL描画コマンドで表される。一方、オブジェクトのRIP処理結果がキャッシュメモリ140内にない場合は、RIP部120はそのオブジェクトのPDLデータをRIP処理することで、ページの印刷画像データに対してそのオブジェクトの画像を加える。また、このとき生成されたオブジェクトのRIP処理結果は、後の再利用のために、キャッシュメモリ140に登録(キャッシュ)される。
キャッシュメモリ140にキャッシュされるRIP処理結果(キャッシュデータ)は、ビットマップ形式のものであってもよいし、中間言語形式のものであってもよい。キャッシュメモリ140から読み出したキャッシュデータがビットマップ形式のものであれば、RIP部120はそのキャッシュデータをページの印刷画像データに単に付加(合成)すればよい。また、キャッシュメモリ140から読み出したキャッシュデータが中間言語形式のものであれば、RIP部120はそのキャッシュデータに対して更にRIP処理を施すことでビットマップ形式の画像を生成し、生成したビットマップ形式の画像をページの印刷画像データに単に付加(合成)すればよい。
このようなキャッシュメモリ140に対する各RIP部120の読み書き(キャッシュされたRIP処理結果の読み出し、及びRIP処理結果のキャッシュメモリへの登録)を管理するのがキャッシュ管理部130である。キャッシュ管理部130は、エントリ管理テーブル132を備えており、このエントリ管理テーブル132に基づいて、各RIP部120によるキャッシュ利用を制御する。
図2にエントリ管理テーブル132のデータ内容の一例を示す。図2の例では、最上部の見出し行以外の各行が、それぞれ1つのキャッシュエントリについての管理レコードを示している。キャッシュエントリは、印刷文書データ内のオブジェクトごとに用意される。個々のキャッシュエントリの管理レコードには、ID、ステージ、データ作成中のRIP、累計問合せ回数、使用カウンタ、キャッシュ領域のアドレス、キャッシュデータのサイズ、スコア、オブジェクト属性などの項目が含まれる。
「ID」は、キャッシュエントリを識別するための一意な識別情報である。PDLの中には、イメージ(ビットマップ)やフォント、フォーム(定型画像)等といった、ジョブ内で何度も再利用される可能性のあるオブジェクトに対してIDを割り当て、印刷文書データ内にて各オブジェクトのIDを記述するものもある。例えばPDF(Portable Document Format)がその一例である。このようなPDLで記述された印刷文書データを処理する場合には、印刷文書データ中のオブジェクトのIDをキャッシュエントリのIDとして流用してもよい。また、別の例として、キャッシュ管理部130が個々のオブジェクトを識別してIDを付与してもよい。この場合、オブジェクトの識別は、例えば、PDLの描画コマンドとそのコマンドに付随するパラメータ群の組合せに基づき行えばよい。例えば、描画コマンドとそのコマンドに付随するパラメータ群の組合せが同じオブジェクトは、同一のオブジェクトと判定するなどの方式を用いればよい。
「ステージ」は、当該キャッシュエントリの現在の状態(言い換えれば、オブジェクトのRIP結果のキャッシュ状態)を示す情報である。ステージは、ステータスとも呼ばれる。第1例では、“New Cache"、“Caching"、“Cached"、“Cached Out"、及び“Never Cache"の5つのステージを用いている。これら各ステージの詳細については後で説明する。
「データ作成中のRIP」は、“New Cache"(「作成中」)ステージにあるキャッシュエントリについての項目であり、当該エントリのキャッシュデータを作成中のRIP部120の識別情報を示す。この項目は、ある第1のRIP部120があるオブジェクトをRIP処理しようとする時に、別の第2のRIP部120がそのオブジェクトのキャッシュデータを作成中である場合に、第1のRIP部120が第2のRIP部120によるキャッシュデータの作成完了を待つか待たないかの判定のための1つの材料として用いられる(具体例は後述)。この判定に「データ作成中のRIP」の情報を用いない例もあり、そのような例ではこの項目は不要である。なお、この項目に登録されたRIP部120の識別情報は、そのRIP部120からのキャッシュのための領域確保要求(後述)に対して確保失敗を返したとき、又はそのRIP部120からキャッシュデータの登録要求(後述)を受け取ったときに、キャッシュ管理部130により、作成中のRIPがないことを示す値にリセットされる。
「累計問合せ回数」は、印刷文書データの先頭ページの先頭部分からRIP処理を開始した後、現在時点までの間に、RIP部120群から当該キャッシュエントリについての問合せを受けた回数の累計値である。
「使用カウンタ」は、当該キャッシュエントリのキャッシュデータが現在いくつのRIP部120により使用されているかを示す数である。ここで、RIP部120によるオブジェクトのキャッシュデータの「使用」とは、RIP部120が、現在作成中のページの印刷画像データに対しそのオブジェクトのビットマップ画像を合成するために、そのオブジェクトのキャッシュデータが読み出して用いることを意味する。
「キャッシュ領域のアドレス」は、当該キャッシュエントリのキャッシュデータ(すなわちRIP処理結果のビットマップ形式又は中間言語形式のデータ)が格納されるキャッシュメモリ140内のアドレス(例えば先頭アドレス)を示す。RIP結果のキャッシュデータがキャッシュメモリ140内に記憶されている(すなわち後述する“Cached"ステージの)キャッシュエントリについては、もちろんこの項目にアドレスが登録されている。キャッシュすることは決まっているがまだキャッシュデータが完成していない(すなわち後述する“New Cache"ステージの)オブジェクトのキャッシュエントリについても、アドレスを割り当ててこの項目に登録するようにしてもよい。逆に、RIP結果をキャッシュする価値がそもそもないと判定されたオブジェクト(後述する“Never Cache"ステージ)のキャッシュエントリや、キャッシュデータがキャッシュメモリ140から追い出された(すなわち、削除された。後述する“Cached Out"ステージの)キャッシュエントリについては、この項目の値は空値となる。
「キャッシュデータのサイズ」は、当該キャッシュエントリのキャッシュデータのデータサイズを示す情報であり、例えばバイト、キロバイト、又はメガバイトなどの単位で表される。キャッシュデータがビットマップ形式の場合、そのデータサイズは当該キャッシュデータが表す画像の面積に対応する。例えば、イメージやフォーム、フォントなどのオブジェクトの画像サイズを描画コマンドの引数として明示するPDLも多く(例えばPDF)、このようなPDLの場合、例えばRIP部120が当該オブジェクトについてのPDL記述から画像サイズの情報を求め、その画像サイズからキャッシュデータのデータサイズが求めてエントリ管理テーブル132に登録してもよい。
「スコア」は、当該キャッシュエントリの優先度を示す評価値である。キャッシュメモリ140の容量には限りがあるので、全てのキャッシュエントリのキャッシュデータがキャッシュメモリ140内にキャッシュ(記憶)できない場合には、スコア(優先度)が相対的に高いキャッシュエントリの方が、スコアが相対的に低いキャッシュエントリよりも優先的にキャッシュされる。スコアの値は、キャッシュを利用することによる効果が高いものほど高い値となるよう、あらかじめ定めた関数等に基づき計算する。例えば、RIP処理の負荷が大きいオブジェクトほど、キャッシュデータを再利用した場合の効果が大きい。
また、キャッシュデータをキャッシュメモリ140から読み出すためには、その読み出しの準備や完了などのプロトコルのために、キャッシュデータのデータサイズによらず一定のオーバーヘッド時間を要するが、そのオーバーヘッド時間はキャッシュデータのサイズが小さいほど相対的な割合は大きくなる。キャッシュデータのサイズが小さいほど、元のPDLデータからそのキャッシュデータをRIPするのに要する時間は短い。場合によっては、キャッシュデータを読み出すよりも、元のPDLデータから描画した方が早いこともある。したがって、キャッシュデータのサイズが小さくなるほど、当該オブジェクトのRIP結果をキャッシュする意義・効果は小さくなる。
また、同じオブジェクトが描画される回数が多いほど、そのオブジェクトのRIP結果をキャッシュする意義・効果は大きくなる。
第1例では、このような考え方に従って、各キャッシュエントリのスコアを計算する。
スコアを決めるパラメータとしては、例えば、オブジェクトの種類がある。イメージ(ビットマップ)の方が、フォントやグラフィックス(図形)よりも一般的にRIP処理の負荷が大きいため、キャッシュの効果が高くなり、従ってスコアも高くなる。
また、オブジェクトの複雑さを、スコアを決めるパラメータとして用いてもよい。オブジェクトの複雑さは、例えば、そのオブジェクトに含まれる子オブジェクトの数や種類などから定義する。すなわち、フォーム(定型書式を表すオブジェクト)などのオブジェクトは、イメージやテキストなどといった子オブジェクトの組合せにより表現される。このようなオブジェクトについては、例えば、各オブジェクト種類に属する子オブジェクトの数とその種類に固有の重みとの積を、全種類にわたって総和するなどの方式で、そのオブジェクトの複雑さを求める。オブジェクト種類に固有の重みは、キャッシュ効果が高い種類ほど大きな値となる正の数である。例えば、イメージの重みは、グラフィックスやテキストの重みよりも大きい。このようにして求められた複雑さが高い(例えば数値として大きい)ほど、スコアも高くなる。もちろん、複雑さの求め方はこの例に限られるものではない。オブジェクトを記述するPDLデータの長さ(データサイズ)やそのデータに含まれるコマンド数などを考慮して複雑さを規定してもよい。
また、オブジェクト種類が同じ子オブジェクトを一律に扱うのではなく、その子オブジェクトの属性(例えば、ビットマップに展開した場合の画像のサイズや、そのオブジェクトを描画するために必要な処理の種類など)に応じて、個々の子オブジェクトの重みを求めてもよい。
例えば、イメージの場合、色空間変換(例えばRGBからCMYKへの変換)が必要なオブジェクトの方が、そうでないオブジェクトよりも処理負荷が重いので、色空間変換がある場合とない場合とで重みを異ならせてもよい。また、描画のための拡大率が小さい方が処理負荷が重いので、拡大率に応じて異なった重みとしてもよい。また、描画のために元のイメージデータを回転させる回転角に応じて、重みを異ならせてもよい。異なる回転角同士の間での処理負荷の比較では、例えば、回転角が0度の場合が最も処理負荷が軽く、90度、180度、270度などといった90度刻みのよく用いられる回転角の場合の処理負荷は、0度の場合よりも重いが、それ以外の自由な回転角の場合よりも軽い。また、そのような色空間変換や拡大、回転などの処理の対象となる元のイメージデータのサイズが大きいほど、処理対象の画素数が増えるので、処理負荷は重くなる。したがって、元のイメージデータの画素数に応じて重みを異ならせてもよい。
また、オブジェクトの種類によらず、オブジェクトの形状(フォントの場合の形状とは、フォントの形状ではなく、フォントを表現するビットマップの形状のこと)が長方形か否か、すなわち、クリップされているか否か(オブジェクトが長方形の場合はクリップが不要であり、長方形でなければクリップが必要である)、に応じて重みを異ならせてもよい。一般的に長方形(クリップされていない)の場合の方が処理負荷が軽い。
また、フォントオブジェクトの場合も、イメージオブジェクトと同様、回転しているか否か、あるいは回転角に応じて重みを異ならせてもよい。
また、オブジェクトの描画に当たってスムースシェード処理(グラデーション処理)を行う場合は、処理負荷が重くなる。一般に、スムースシェードの処理負荷は、イメージの描画よりも軽いが、グラフィックスやテキストの描画よりも重い。したがって、スムースシェード処理を行うか否かで異なる重みを用いてもよい。また1つのオブジェクト内でのスムースシェード処理による色の変化の量に応じても処理負荷が変わるので、スムースシェード処理を行う場合、その処理での色の変化量に応じて重みを異ならせてもよい。
1つのオブジェクトについての総合的な重みは、以上に例示した様々な属性パラメータ(例えば、色空間変換の有無、拡大率、回転角、クリップ処理の要否、スムースシェード処理の要否など)についての重みを総合(例えば乗算や加算など。具体的な総合のための演算の仕方は、重みの値の決め方などといった実装に依存する)することで求めればよい。
また、オブジェクトを記述するPDLデータのサイズを、スコアを決めるパラメータとして用いてもよい。PDLデータのサイズが大きいほど、例えばRIP処理のための解釈処理に時間を要するため、RIP処理の負荷が大きくなると言える。したがって、一例では、PDLデータのサイズが大きくなるほどスコアが高くなる。
また、同様の考え方で、オブジェクトを記述するPDLデータをRIP処理するのに要する時間を、スコアを決めるパラメータとして用いてもよい。この所要時間は、例えば当該オブジェクトのPDLデータをRIP処理した時に求めればよい。
また、オブジェクトのキャッシュデータ(すなわちRIP処理結果のビットマップ又は中間言語形式のデータ)のサイズを、スコアを決めるパラメータとして用いてもよい。例えば、前述した理由からキャッシュデータのサイズが小さくなるほど、当該オブジェクトのRIP結果をキャッシュする意義・効果は小さくなるので、一例では、キャッシュデータのサイズが大きくなるほどスコアが高くなる。また、ビットマップ形式のキャッシュデータをページに描画(すなわちページの印刷画像データに合成)するのには、データのサイズ(画素数に比例)に応じた時間がかかるので、この意味でも、キャッシュデータのサイズはスコアを決めるパラメータとなる。
また、同様の考え方で、キャッシュメモリ140とRIP部120との間でオブジェクトのキャッシュデータを転送するのに要する時間を、当該オブジェクトのスコアを決めるパラメータとして用いてもよい。例えば、転送に要する時間が長いほど、キャッシュ転送のためのオーバーヘッド時間の割合が相対的に低くなるので、キャッシュすることによるペナルティが相対的に低い(逆に言えば、キャッシュの効果が高い)と言える。
また、中間言語形式のデータをキャッシュする場合には、中間言語形式のキャッシュデータをRIP部120がビットマップ形式にRIPするのに要する時間を、スコアを決めるパラメータとして用いてもよい。この所要時間が短いほど、キャッシュデータを再利用することの効果が大きいので、スコアも高くなる。
また、RIP部120は、オブジェクトのRIP処理を開始しようとする際、キャッシュ管理部130にそのオブジェクトのキャッシュデータがあるか否かを問い合わせ、あればそのキャッシュデータを利用するが、そのような問合せの回数が多いほど、キャッシュしておく価値が高いといえる。したがって、前述の累計問合せ回数を、スコアを決めるパラメータの1つとして用いてもよい。累計問合せ回数が多いほどスコアは高くなる。
なお、各キャッシュエントリの累計問合せ回数は、時間の経過に従って単調増加する(すなわち減りはしない)。したがって、一例では、時間の経過に従った累計問合せ回数の単調増加に応じて、全てのキャッシュエントリのスコアが単調増加するようにしてもよい。
また、スコアの本質は、キャッシュエントリ同士の間でキャッシュする価値に関する優劣の順位付けをするものなので、別の例では、判断する時点ごとに全キャッシュエントリのスコアをあらかじめ定められた範囲内の値へと正規化してもよい。この場合、累積問合せ回数が増えてもスコアの値そのものは上昇するとは限らない。ただし、累積問合せ回数の増加度合いが他のキャッシュエントリより多ければ、そのスコアの全キャッシュエントリ内での順位は上昇する。
以上に例示したパラメータはあくまで例に過ぎず、その他のパラメータも考えられる。スコアは、それらパラメータのうちの1以上に基づき計算すればよい。キャッシュ管理部130は、この計算のために、例えば、それらパラメータのうちの1以上を引数とする関数、または、それらパラメータのうちの1以上に対応づけてスコアを登録したテーブルなどを用いる。なお、このようにキャッシュ優先度を表すスコアを計算する関数やテーブルは、従来も用いられており、そのような公知の関数又はテーブルを用いてもよい。
再び図2の説明に戻り、エントリ管理テーブル132に登録される項目「オブジェクト属性」は、当該オブジェクトの1以上の属性項目の情報が含まれる。オブジェクトの属性項目には、例えば、オブジェクトの種類、オブジェクトを表すPDLデータのサイズ、オブジェクトの複雑さなどが含まれる。これら属性項目の情報は、例えば、既に前述のスコアについての説明の中で示した方法等を用いて、当該オブジェクトのPDL記述を解析することで求めればよい。これら各属性項目は、例えば前述のスコアを計算するのに用いられる。
キャッシュ管理部130は、エントリ管理テーブル132を参照して、各RIP部120からのキャッシュメモリ140への読み書きのアクセスに応答する。また、キャッシュ管理部130は、そのようなアクセス等に応じて、エントリ管理テーブル132のデータ内容の更新を行う。キャッシュ管理部130の処理動作については、後で具体例を挙げて更に詳細に説明する。
各RIP部120は、担当するページのPDLデータに対してRIP処理を行い、またそのページ内のオブジェクトのうちキャッシュメモリ140内にキャッシュデータがあるものはそのキャッシュデータを用いることで、割り当てられたページの印刷画像データを生成する。そして、RIP部120は、生成したページの印刷画像データを印刷制御装置210に送る。
以上に説明した印刷文書変換システム100の構成要素のうち、キャッシュメモリ140は、例えば、ランダムアクセスメモリなどの高速に読み書きが可能なメモリから構成される。また、キャッシュメモリ140以外の各構成要素、すなわちジョブ管理部110、各RIP部120及びキャッシュ管理部130は、前述及び後述するそれら各構成要素の機能を記述したプログラムをコンピュータに実行させることにより実現される。1つの例では、ジョブ管理部110、各RIP部120及びキャッシュ管理部130が共通の1つのコンピュータ上にて実現されてもよい。この場合、各構成要素同士の情報のやりとりは、例えばプロセス間通信やスレッド間通信により行えばよい。また別の例では、ジョブ管理部110、各RIP部120及びキャッシュ管理部130が、それぞれ別々のコンピュータ上に実現されてもよい。この場合、各構成要素同士の情報のやりとりは、例えば、それら各要素間を結ぶネットワークのプロトコルを用いて行えばよい。また、更に別の例では、それら各構成要素のうちの2以上を1つのコンピュータ上に実現することで、印刷文書変換システム100全体をそれら構成要素の数よりも少ない数のコンピュータで実現してもよい。例えば、ジョブ管理部110とキャッシュ管理部130とを同一のコンピュータに実装し、両者が管理するデータベース(例えばジョブ管理部110が管理する各オブジェクトの情報と、キャッシュ管理部130が管理するエントリ管理テーブル132)を一元化することも考えられる。いずれの場合も、キャッシュメモリ140は、キャッシュ管理部130が実装されるコンピュータ上のメモリに構築する。また、いずれの場合も、使用するコンピュータは、シングルプロセッサのものでもマルチプロセッサのものでもよい。マルチプロセッサのコンピュータを用いる場合は、マルチプロセッサを構成する個々のプロセッサコアをそれぞれ別々のRIP部120に割り当てるなどの運用も考えられる。
プリンタエンジン220は、印刷画像データが表す画像をインクやトナーなどの色材を用いて用紙に対して印刷する印刷ハードウエアである。印刷制御装置210は、プリンタエンジン220を制御する装置であり、通信ケーブルやネットワーク(ホストコンピュータ200・印刷文書変換システム100間のネットワークと同じものでも異なるものでもよい)を介して印刷文書変換システム100と通信する。そして、その通信により、各ページの印刷画像データを受信したり、印刷制御のために必要な各種の制御情報をやりとりしたりする。また、印刷制御装置210は、受信した各ページの印刷画像データを蓄積し、印刷順序に従ってプリンタエンジン220に供給する。プリンタエンジン220は、受け取った印刷画像データを用紙に印刷する。
さて、複数のRIP部120が、キャッシュメモリ140を介してRIP処理結果を再利用しつつ並列的に動作するシステムでは、あるRIP部120(第1のRIP部と呼ぶ)があるオブジェクトのRIP処理を開始しようとした時点で、別のRIP部120(第2のRIP部と呼ぶ)がそのオブジェクトのRIP処理を実行中である場合がある。このような状況では、キャッシュメモリ140にはそのオブジェクトのRIP処理結果のキャッシュデータはまだ存在しない。このような状況では、第1のRIP部の取り得る選択肢としては、次の2つが考えられる。最初の選択肢は、第2のRIP部のRIP処理完了を待って、その完了に伴ってキャッシュメモリ140に登録されたキャッシュデータを利用するという処理である。第2の選択肢は、第2のRIP部のRIP処理完了を待たずに、同じオブジェクトのPDLデータのRIP処理を行うというものである。しかし、従来のRIP結果のキャッシュ管理方式では、第1のRIP部からの問合せに対してキャッシュメモリ側はキャッシュデータがあるかないか(すなわち“Hit"(ヒット)又は“Miss"(ミス))の応答しか返さない。すなわち、前述の状況では、キャッシュメモリ側は、第1のRIP部に対して、問い合わせたオブジェクトのキャッシュデータが無い(“Miss")旨の応答をすることになる。この場合、当該オブジェクトのキャッシュデータを他のRIP部が作成中であることが分からない以上、第1のRIP部には選択肢はそもそも無く、そのオブジェクトのPDLデータをRIP処理するしかない。また、第1のRIP部は、そのRIP処理結果を、第2のRIP部のRIP処理結果と重複してキャッシュメモリに登録しようとすることになる。
これに対し、第1例では、第1のRIP部から問い合わせられたオブジェクトのキャッシュデータが第2のRIP部で既に作成中であるが未完成である場合、キャッシュ管理部130がその状況を第1のRIP部に通知することで、第1のRIP部がその状況に応じた処置をとれるようにする。そのための構成を、以下に詳しく説明する。
《第1例の状態遷移》
そこで、まず図3を参照して、キャッシュ管理部130での管理のために用いられる、キャッシュエントリのステージ(Stage)について説明する。第1例では、キャッシュエントリのステージ(すなわちステータス)として、“New Cache"、“Caching"、“Cached"、“Cached Out"、及び“Never Cache"の5つを用いている。説明の便宜上、それら5つのステージに対して1から順に通し番号を割り当てる。図3は、それら5つのステージ間の状態遷移図である。
<ステージ1> “New Cache"(新規キャッシュ、すなわちキャッシュデータ「作成中」)は、当該キャッシュエントリのキャッシュデータが作成中であり、まだキャッシュメモリ内には存在しないことを示すステージである。キャッシュ管理部130は、いずれかのRIP部120からあるオブジェクトについてのキャッシュデータについての最初の問合せを受けた時に、当該オブジェクトに対応するキャッシュエントリを生成し、そのキャッシュエントリのステージを“New Cache"とし、そのRIP部120に“Miss"(「キャッシュデータがない」)を応答することで、そのRIP部120にそのオブジェクトのRIP処理(すなわちキャッシュデータの作成)を開始させる。
また、後述する“Caching"ステージにあるキャッシュエントリに対していずれかのRIP部120から問合せがあった場合、そのエントリのステージは“New Cache"に遷移する。
"New Cache"ステージにあるキャッシュエントリに対してRIP部120から問合せがあると、キャッシュ管理部130は、"Creating"というコードを応答する。応答"Creating"は、当該キャッシュエントリのデータが別のRIP部120により作成中であることを示す。
<ステージ2> "Caching"(空き待ち)は、キャッシュ領域が空くのを待機する状態である。"Caching"ステージは、当該キャッシュエントリのキャッシュデータがキャッシュメモリ140内にないという点では上述の“New Cache”ステージと同じであるが、どのRIP部120もそのキャッシュデータを現在作成中ではない点で、上述の“New Cache”とは異なる。
"Caching"ステージへ遷移する1つの例は、前述したステージ1"New Cache"からの遷移である。すなわち、“New Cache"ステージにあるキャッシュエントリについていずれかのRIP部120がキャッシュデータを作成しようとする際に、キャッシュメモリ140内にそのキャッシュデータを記憶する領域が空いていなければ、当該キャッシュエントリは"Caching"ステージに遷移する。"Caching"ステージにあるキャッシュエントリは、時間の経過に伴って他のキャッシュエントリのキャッシュデータがキャッシュメモリ140から追い出され(すなわち削除され)、当該キャッシュエントリのための空き領域ができるのを待つ。
ただし、"New Cache"から"Caching"への遷移は、当該キャッシュエントリがキャッシュする価値があると判定された場合のことである。当該キャッシュエントリがキャッシュする価値がないと判定された場合(例えばスコアが、現在キャッシュメモリ140内にキャッシュデータのある他のいずれのキャッシュエントリよりも低い場合)には、ステージは"Caching"にではなく次に説明する"Cached Out"(キャッシュ外)に遷移する。
また、"Caching"ステージに遷移する別の例としては、後述するステージ4すなわち"Cached Out"(キャッシュ外)ステージからの遷移がある(詳細は"Cached Out"ステージの説明にて述べる)。
“Caching"ステージにあるキャッシュエントリに対していずれかのRIP部120から問合せがあると、キャッシュ管理部130は、そのキャッシュエントリのステージを1すなわち"New Cache"に遷移し、"Miss"(「キャッシュデータがない」)を応答する。これに応じ、RIP部120は、そのキャッシュエントリのキャッシュデータの作成のための処理を開始する。
<ステージ3> "Cached"(キャッシュ済)は、当該キャッシュエントリのキャッシュデータがキャッシュメモリ140内に記憶されている状態である。"Cached"ステージには、前述したステージ1"New Cache"から遷移する。すなわち、"New Cache"ステージにあるキャッシュエントリについていずれかのRIP部120がキャッシュデータを作成しようとする際に、キャッシュメモリ140内にそのキャッシュデータを記憶する領域が確保でき、その領域にキャッシュデータが作成され登録されると、当該キャッシュエントリは"Cached"ステージに遷移する。
"Cached"ステージにあるキャッシュエントリにいずれかのRIP部120から問合せがあると、キャッシュ管理部130は、"Hit"(「キャッシュデータがある」)を応答する。この応答を受けたRIP部120は、自らPDLデータをRIP処理する代わりに、キャッシュメモリ140からそのキャッシュデータを受け取ってそのオブジェクトの画像を生成する。
"Cached"ステージにあるキャッシュエントリは、キャッシュメモリ140の空き容量が少なくなると、"Cached Out"(キャッシュ外)に遷移する場合がある。概略的には、新たなキャッシュエントリのキャッシュデータをキャッシュメモリ140へ登録するよう要求された時に、そのキャッシュデータのデータ量がキャッシュメモリ140の空き容量を超えている場合、"Cached"ステージにあるキャッシュエントリの中から選ばれたエントリのキャッシュデータがキャッシュメモリ140から追い出される(削除される)。キャッシュメモリ140から追い出されるのは、例えば、その時点でいずれのRIP部120からもキャッシュデータが使用(参照)されていないキャッシュエントリである。このようにしてキャッシュデータが追い出されたキャッシュエントリのステージは、"Cached"から"Cached Out"に遷移する。また、その時点でいずれかのRIP部120からキャッシュデータが使用(参照)されているキャッシュエントリについては、使用中のRIP部120への悪影響を避けるには、その使用が終わるまではキャッシュデータを追い出せないが、使用が終われば追い出してもよくなる。そこで、キャッシュデータが使用中の段階でそのキャッシュエントリのステージを"Cached Out"に遷移させることで、いわば追い出しの予約を行ってもよい。追い出しの対象となるキャッシュエントリをスコアにより絞り込んでもよい。
<ステージ4> "Cached Out"(キャッシュ外、すなわち追い出し済)は、当該キャッシュエントリのキャッシュデータがキャッシュメモリ140から追い出された状態、又は追い出しの予約をされている状態である。このステージにあるキャッシュエントリのキャッシュデータは、キャッシュメモリ140内にはなく(「追い出し予約」の場合は、キャッシュデータは現時点ではキャッシュメモリ140内にあるが、極めて近い将来、なくなってしまう)、且つそのキャッシュデータはどのRIP部120によっても作成されてはいない。なお、「追い出し予約」の場合は、キャッシュデータは現時点ではキャッシュメモリ140内にあるが、極めて近い将来、なくなってしまう。
"Cached Out"ステージには、前述した通りステージ3"Cached"から遷移する。
また、特定の場合に、ステージ1当該文書要素の画像データが前記キャッシュメモリ内になく且ついずれかのデータ処理装置が当該画像データの作成中である「作成中」状態で有る旨を示す「作成中」応答であった場合、“New Cache"にあるキャッシュエントリをこの"Cached Out"ステージに遷移させてもよい。例えば、当該キャッシュエントリのスコアが、キャッシュする価値が十分にあるとみなされない程低い場合には、そのキャッシュエントリにキャッシュデータを登録せずに、そのキャッシュエントリを"Cached Out"に遷移させる。キャッシュする価値が十分にあるとみなされない程低い場合の例としては、当該キャッシュエントリのスコアが、キャッシュ中("Cached")のどのキャッシュエントリのスコアよりも低い場合がある。また、キャッシュに値するか否かのスコアの閾値を定めておき、当該キャッシュエントリのスコアがこの閾値よりも低い場合に、キャッシュを行わずにステージを"Cached Out"に遷移させるようにしてもよい(後述の図24の例を参照)。
"Cached Out"ステージにあるキャッシュエントリにいずれかのRIP部120から問合せがあると、キャッシュ管理部130は、"Deleted"(「キャッシュデータは削除済」)を応答する。この応答を受けたRIP部120は、当該オブジェクトの元のPDLデータを自らRIP処理することで、当該オブジェクトの印刷画像データを生成する。ただし、このとき、RIP部120は、生成した印刷画像データをキャッシュメモリ140に登録することはしない。当該キャッシュエントリは、キャッシュデータをキャッシュする価値がないと判定された状態だからである。
"Cached Out"ステージは、キャッシュメモリ140内に当該キャッシュエントリのデータがないという点では、前述の"New Cache"ステージ及び"Caching"ステージと同じである。しかし、"New Cache"及び"Caching"の場合は問合せに対して"Miss"を応答するのに対し、"Cached Out"の場合は問合せに対して"Delete"を応答する。これら2つの応答の違いは、"Miss"の場合は問合せ元のRIP部120はRIP処理で作成した画像データをキャッシュ登録しようとするのに対し、"Delete"の場合は問合せ元のRIP部120はRIP処理で作成した画像データをキャッシュ登録しないという点である。すなわち、"Cached Out"ステージにあるキャッシュエントリは、RIP部120から問合せがあっても、キャッシュデータがキャッシュメモリ140内に登録されることはない。これは、例えば、キャッシュする価値が低いといったんみなされたキャッシュエントリのキャッシュデータが、キャッシュメモリ140内に出たり入ったりを繰り返すことによる処理のオーバーヘッドを避けるためである。このように、この第1例では、キャッシュする価値が低いといったんみなされたキャッシュエントリのキャッシュデータは、しばらくはキャッシュメモリ140内に戻らないようにしている。
しかし、そのようなキャッシュエントリに対して問合せが増えてくると、それに応じて当該キャッシュエントリのスコアが高くなり、キャッシュメモリ140内にデータのある他のキャッシュエントリよりも相対的にキャッシュする価値が高くなる場合も出てくる。そこで、この第1例では、"Cached Out"ステージにあるキャッシュエントリについて定期的な見直しを行う(例えば、後述する図15の例を参照)。すなわち、"Cached Out"ステージにあるキャッシュエントリのスコアを例えば定期的にチェックし、スコアが再登録に値するほど十分に高くなっていれば、そのエントリを前述の"Caching"ステージに遷移させる。あるキャッシュエントリのステージが"Cached Out"から"Caching"に遷移すると、その後に当該エントリに対して問合せが到来すると、そのエントリのステージが"New Cache"に遷移し、そのエントリのキャッシュデータの作成・登録のための処理が開始される。
<ステージ5> "Never Cache"(キャッシュ対象外)は、当該キャッシュエントリに対応するオブジェクトが、あらかじめ定められた制限条件に抵触し、キャッシュの対象外であると判定された状態である。この制限条件は、例えば、スコアを他のキャッシュエントリと比較するまでもなく、キャッシュする価値がないと判断されるオブジェクトを規定する条件である。
例えば、余りにも小さいオブジェクトや、余りにも単純なオブジェクト(例えば直線分一本のみ)は、キャッシュメモリ140からキャッシュデータを読み出すよりもRIP120が自ら描画した方が早い。そこで、オブジェクトのサイズ又は複雑さなどに関してそれぞれ条件(例えば閾値)を設定しておき、キャッシュしようとするオブジェクトのサイズ又は複雑さなどがそれぞれ対応する条件を満たす(例えば閾値よりも小さい又は低い)場合は、そのオブジェクトに対応するキャッシュエントリを"Never Cache"ステージに遷移させる。なお、サイズ又は複雑さなどについての条件の組合せ方は、AND条件(全ての条件が満たされて初めて"Never Cache"に遷移)でもOR条件(いずれかの条件が満たされて初めて"Never Cache"に遷移)でも、どちらでもよい。
また、効率の観点等から、キャッシュするオブジェクトの形状をページの縦横の辺に平行な矩形に限定している場合には、矩形以外の形状のオブジェクトは制限条件に抵触することになり、そのオブジェクトのキャッシュエントリは"Never Cache"ステージとなる。
“Never Cache"ステージにあるキャッシュエントリに対していずれかのRIP部120から問合せがあると、キャッシュ管理部130は、“Invalid"(「キャッシュ無効」)を応答する。これに応じ、RIP部120は、当該オブジェクトのPDLデータをRIP処理する(そして、RIP処理結果はキャッシュしない)。
以上、キャッシュエントリのステージについて説明した。以上は、キャッシュ管理部130のエントリ管理テーブル132に登録されているキャッシュエントリがとり得るステージである。ところで、キャッシュ管理部130は、あるオブジェクトについての問合せを最初に受けた時に、そのオブジェクトのためのキャッシュエントリをエントリ管理テーブル132上に生成するので、その最初の問合せ以前にはキャッシュエントリは存在せず、したがってキャッシュエントリのステージもない。しかし、キャッシュエントリはオブジェクトと対応しているので、そのような最初の問合せを受ける以前にも、オブジェクトに対応するキャッシュエントリは潜在的に存在していると考えてもよい。このように考えると、最初の問合せを受ける以前は、その潜在的なキャッシュエントリの状態は、「キャッシュメモリ140内にキャッシュデータが存在しておらず、またどのRIP部120によってもそのキャッシュデータの作成は行われていない」状態に属すると考えられる。
《RIP部120処理手順》
次に、各RIP部120の処理手順の一例を、図4〜図6を参照して説明する。
RIP部120は、それぞれ、ページ割当部112から割り当てられたページのPDLデータを先頭から順に解釈していく。この中で、新たなオブジェクトのPDLデータを見つけるごとに、図4〜図6に例示する手順を実行する。
この手順では、図4に示すように、まず、そのオブジェクトのPDLデータから、そのオブジェクトがキャッシュ対象であるかどうかを判定する(S10)。例えば、PDLの一種といえるPDFでは、オブジェクトを、フォームやイメージ(ビットマップ)、フォントなどといった繰り返し使用される可能性のある種類と、そうでない種類とに大別している。そして、前者に該当するオブジェクトにはIDを付与し、印刷文書データ中の複数の位置でそのオブジェクトが用いられる場合、同じIDでそのオブジェクトを呼び出すようにしている。逆に、IDのないオブジェクトは、繰り返し使用されることが想定されていない種類のオブジェクトである。したがって、IDが付与されたオブジェクトはキャッシュ対象であり、IDが付与されていないオブジェクトはキャッシュ対象でないと判定される。なお、PDF以外にも、オブジェクトについて同様の区別をしているPDLはあり、そのようなPDLについてはS10と同様の判定が適用される。
S10でオブジェクトがキャッシュ対象でないと判定すると、RIP部120は、そのオブジェクトのPDLデータを解釈し描画することで、そのオブジェクトのビットマップ画像を生成し、生成したビットマップ画像を作成中のページの印刷画像データへ合成し(S12)、当該オブジェクトについてのRIP処理を完了する。このとき生成したオブジェクトのビットマップ画像は、キャッシュされない。
一方、S10で当該オブジェクトがキャッシュ対象であると判定した場合、RIP部120は、そのオブジェクトのキャッシュエントリの状態をキャッシュ管理部130に問い合わせる(S14)。この問合せには、そのオブジェクトを特定する識別情報が含まれる。例えば、PDFのようにキャッシュ対象のオブジェクトにIDが付されている場合は、問合せにはそのIDを用いればよい。キャッシュエントリは、オブジェクトと一対一に対応しているので、オブジェクトのIDから、そのオブジェクトに対応するキャッシュエントリが特定される。例えば、オブジェクトのIDをキャッシュエントリのIDとして流用している場合は、オブジェクトのIDから、対応するキャッシュエントリが特定される。また、オブジェクトにIDを付さないPDLの場合には、例えば、そのオブジェクトを記述するPDLコマンドと引数の組を識別情報として問合せに含めるようにしてもよい。この場合、各キャッシュエントリには、当該エントリに対応するオブジェクトの識別情報として、PDLコマンドと引数の組(又はこれに紐付けられた識別情報)が登録しておけばよい。
この問合せの後、RIP部120は、キャッシュ管理部130からその問合せに対する応答を受け取ると、その応答の示す値を判別する(S16)。前述したように、問合せに対するキャッシュ管理部130の応答には、"Hit"、"Miss"、"Creating"、"Deleted"、"Invalid"の5種類がある。
キャッシュ管理部130からの応答が"Hit"であった場合、RIP部120は、当該オブジェクトに対応するキャッシュデータの使用開始要求をキャッシュ管理部130に送る(S18)。この使用開始要求には、当該オブジェクトに対応するキャッシュエントリを特定するIDが含まれる。この要求に応じ、キャッシュ管理部130は、要求されたキャッシュエントリのキャッシュデータをキャッシュメモリ140からRIP部120に提供する。RIP部120は、このキャッシュデータを用いて当該オブジェクトのビットマップ画像を生成し、生成したビットマップ画像を作成中のページの印刷画像データへ合成する(S20)。すなわち、キャッシュデータがビットマップ形式であれば、そのキャッシュデータをそのままページの印刷画像データへ合成すればよい。また、キャッシュデータがディスプレイリスト等の中間言語形式であれば、そのキャッシュデータに基づきそのオブジェクトを描画してビットマップ画像を生成し、そのビットマップ画像をページの印刷画像データへ合成すればよい。このようにしてキャッシュデータのRIP処理が完了すると、RIP部120はキャッシュ管理部130に対して当該キャッシュエントリの使用が終了した旨の通知(「使用終了通知」)をキャッシュ管理部130に送る(S22)。この通知には、使用していたキャッシュエントリを特定するIDが含まれる。この通知により、当該オブジェクトについてのRIP処理が終了する。
次に、S16の判定で、キャッシュ管理部130からの応答が"Miss"であった場合の処理手順を説明する。応答"Miss"は、前述した通り、「キャッシュデータがないので、作成して登録せよ」という命令に相当する。そこで、RIP部120は図5に例示する処理手順を実行する。
すなわち、RIP部120はまずキャッシュ管理部130に領域確保要求を発する(S30)。領域確保要求は、当該オブジェクトのRIP処理結果をキャッシュするための領域をキャッシュメモリ140内に確保することを指示する要求である。領域確保要求には、例えば、当該オブジェクトに対応するキャッシュエントリのID、及び確保すべき領域のサイズ(データ容量)の情報が含まれる。確保すべき領域のサイズは、当該オブジェクトのRIP処理結果(ビットマップ形式又は中間言語形式)のデータサイズであり、これはPDLデータの解析から求められる。例えば、イメージやフォーム、フォントなどのオブジェクトの画像サイズを描画コマンドの引数として明示するPDLも多く、このようなPDLの場合、画像サイズの情報からキャッシュデータのデータサイズが求められる。ビットマップ形式の場合、キャッシュデータのサイズは画像サイズに比例するからである。中間言語形式のキャッシュデータのデータ量も、PDLデータの解析から見積もり可能である。また、実際に一度RIP処理すれば中間言語形式のキャッシュデータのデータ量は正確に求められるので、それを例えばエントリ管理テーブル132に記憶しておき、再度キャッシュのための領域確保が必要となった場合に参照するようにしてもよい。
この領域確保要求に対し、キャッシュ管理部130は、要求されたサイズの領域が確保できるかどうかを判定し(詳細は後述)、その判定結果を要求元のRIP部120に応答する。RIP部120は、その応答が確保の成功及び失敗のいずれを示すものかを判定する(S31)。
S31で応答が「確保成功」であると判定した場合、RIP部120は、そのオブジェクトのPDLデータをRIP処理し、確保された領域(その応答に、この領域のアドレスが含まれている)に対して、そのRIP処理の結果を書き込む(S32)。これにより、その領域に当該オブジェクトのキャッシュデータが生成される。次に、RIP部120は、生成したキャッシュデータを用いて当該オブジェクトのビットマップ画像を生成し、生成したビットマップ画像を作成中のページの印刷画像データに合成する(S34)。このようにしてキャッシュデータの生成及びページの印刷画像データへの合成が完了すると、RIP部120は、キャッシュ管理部130に対して、そのキャッシュデータについての登録要求を発する(S36)。登録要求には、当該キャッシュエントリのIDが含まれる。この登録要求により、RIP部120は当該オブジェクトについての処理を終了する。
S31で応答が「確保失敗」であると判定された場合、それはキャッシュデータ140内には当該オブジェクトのRIP処理結果をキャッシュする余地がないということを意味する。この場合、RIP部120は、そのオブジェクトのPDLデータを解釈し描画することでビットマップ画像を生成し、そのビットマップ画像をページの印刷画像データへ合成する(S38)。そして、生成したビットマップ画像をキャッシュせずに、当該オブジェクトについての処理を終了する。
図4の説明に戻る。S16でキャッシュ管理部130からの応答が"Creating"である場合、RIP部120は図6に例示する処理手順を実行する。応答"Creating"は、前述した通り、「問合せの対象のキャッシュデータは、現在他のRIP部が作成中である」ことを意味する。第1例では、このような特徴的な応答"Creating"により、RIP部120は、目的とするオブジェクトのキャッシュデータを他のRIP部が作成中であることを知る。これにより、RIP部120には、他のRIP部によるそのキャッシュデータの完成を待つのか、待たずに自分でRIP処理を行うのかの選択の余地が生まれる。どちらを選択するかを固定的に設定してもよいし、状況に応じて動的に選択するようにしてもよい。図5では、待つ/待たないを動的に選択する場合の例を示す。
この手順では、RIP部120(第1のRIP部と呼ぶ)は、他のRIP部120(第2のRIP部と呼ぶ)によるそのキャッシュデータの完成を待ってそのキャッシュデータを利用する場合と、当該オブジェクトのPDLデータを自らRIP処理する場合との、どちらが早く処理が完了するかを評価する(S42)。この評価は、例えば、以下に例示するパラメータ(a1)〜(f)のうちの一以上を用いて行う。
(a1)当該オブジェクトのPDLデータをRIP処理してビットマップ画像を作成する場合のRIP処理負荷量
(a2)当該オブジェクトのPDLデータをRIP処理して中間言語形式のデータを作成する場合のRIP処理負荷量(これは、中間言語形式のデータをキャッシュする場合に用いる)
(b)キャッシュデータのデータサイズ(又はそのキャッシュデータを第1のRIP部120に転送するのに要する時間)
(c)当該オブジェクトのキャッシュデータをビットマップ形式の画像に変換し、ページの印刷画像データへ合成する場合の処理負荷量
(d1)第1のRIP部の処理能力(CPUの能力などの、理想条件での値。ただし、すべてのRIP部の処理能力が同一の場合には考慮不要)
(d2)第2のRIP部の処理能力(同上)
(e1)第1のRIP部の現在の処理負荷
(e2)第2のRIP部の現在の処理負荷
(f)第2のRIP部におけるキャッシュデータの作成の進捗度合い
これらパラメータのうち(a1)及び(a2)は、前述した負荷監視部114によるページのRIP処理負荷量の算出と同様の方式で算出すればよい。また、例えば、負荷監視部114がページのRIP処理負荷量を求めるのに際し、その中の各オブジェクトのRIP処理負荷量を求め、オブジェクトのIDをキーとするデータベースに登録し、RIP部120がそれを参照するようにしてもよい。
またパラメータ(b)は、キャッシュ管理部130のエントリ管理テーブル132から取得すればよい。
またパラメータ(c)は、キャッシュデータがビットマップ形式であれば、ビットマップ形式への変換は不要であり、ページの印刷画像データへの合成に要する処理の負荷量のみとなる。合成に要する処理負荷量は、ビットマップ形式のデータのサイズに応じたものであり、実験やシミュレーションなどで求められた係数をそのサイズに乗じることで求められる。また、キャッシュデータが中間言語形式である場合、例えばそのキャッシュデータから描画すべき画素数や、描画において行うべき画像処理の種類などから公知の方法で求めればよい。例えば、画素数に関しては、中間言語形式の命令として、長方形を塗りつぶす命令と同じ形状及びサイズの長方形の対角線を描画する命令とがあった場合、両命令はデータサイズとしてはほぼ同サイズであるが、描画すべき画素数は前者の方がはるかに多いため、前者の方が処理負荷量もはるかに多い。したがって、中間言語形式の命令の種類(これがオブジェクトについて描画すべき画素群の形状を規定する。例えば長方形の塗りつぶしと長方形の対角線の描画では命令が異なる。)及び、その命令の引数などにより示されるオブジェクトのサイズなどから、パラメータ(c)を計算すればよい。また、描画において行うべき画像処理の種類としては、上述のスコアの計算方法の説明において例示した、色空間変換、拡大、回転、スムースシェード(グラデーション)等がある。そこで、例えば画像処理の種類のそれぞれについて、処理負荷量の計算のための関数などを定めておき、その関数にキャッシュデータが表す画像のサイズや、画像処理のパラメータ(例えば当該画像処理の有無や、拡大率、回転角、グラデーションでの色の変化量など)を入力することで、パラメータ(c)に係る処理負荷量を計算するようにしてもよい。1つのオブジェクトに対して複数の画像処理を行う場合には、個々の画像処理についての処理負荷量の総和を当該オブジェクトのパラメータ(c)に係る処理負荷量として求めてもよい。(なお、上述のスコアを同様の方法で計算してもよい。)
またパラメータ(d1)及び(d2)は、既知の値であり、システム管理者があらかじめ登録しておけばよい。同じパラメータは、負荷監視部114でも用いられるので共用すればよい。
またパラメータ(e1),(e2)及び(f)は、負荷監視部114から取得すればよい。
これらパラメータを用いたS42の評価処理では、まず、例えば、パラメータ(a1)、(d1)及び(e1)から、第1のRIP部自身がそのオブジェクトのPDLデータをRIP処理してオブジェクトのビットマップ画像を生成する場合の所要時間T1を見積もる。これには、例えば、(d1)を(e1)に応じて低減することで現在の実際の処理能力を求め、この実際の処理能力で(a1)を例えば除することで、前述の所要時間を表す評価値を求めればよい。
また、同様に、パラメータ(b)、(c)、(d2)、(e2)及び(f)と、(a1)又は(a2)とから、第2のRIP部でのキャッシュデータの完成を待ってそれを流用することによりオブジェクトのビットマップ画像を生成する場合の所要時間T2を見積もる。所要時間T2は、例えば、第2のRIP部が作成中のキャッシュデータが完成するまでの時間T21と、そのキャッシュデータをキャッシュメモリ140から第1のRIP部へと読み出すのに要するプロトコル処理のオーバーヘッド時間T22(これは固定値として登録しておけばよい)と、読み出したキャッシュデータを第1のRIP部がビットマップ画像に変換するのに要する時間T23との和である。
このうちT21(第2のRIP部が作成中のキャッシュデータが完成するまでの時間)を表す評価値は、パラメータ(a1)又は(a2)(キャッシュデータがビットマップ形式の場合は前者、中間言語形式の場合は後者)と(f)とからキャッシュデータ完成までの残りの処理負荷量Rを求め、(d2)と(e2)とから第2のRIP部の現在の処理能力P2を求め、このP2で残りの処理負荷量Rを除するなどの計算により求めればよい。
また、T22は、固定値でよく、あらかじめ登録しておけばよい。
また、T23は、キャッシュデータをキャッシュメモリ140から第1のRIP部に読み出すのに要する時間T231と、読み出したキャッシュデータを第1のRIP部がビットマップ形式に変換するのに要する時間との和である。このうち時間T231はパラメータ(b)から求めればよい。また、時間T232は、パラメータ(d1)と(e1)から第1のRIP部の現在の処理能力を求め、これでパラメータ(c)を除する等の計算により求めればよい。
以上に説明した所要時間T1とT2の推定の仕方はあくまで一例に過ぎず、他の方法を用いてももちろんよい。例えば、以上に例示したパラメータのうちの一部を用いて推定を行ってもよいし、他のパラメータを用いてもよい。
以上のようにして見積もられた所要時間T1とT2のうち、短い方に対応する方式を採用すればよい。すなわち、T1の方がT2より短ければ、第1のRIP部がキャッシュデータの完成を待たずに自らPDLデータをRIPする方式がよいと判定され、逆であれば第1のRIP部はキャッシュデータの完成を待ってそれを利用する方式の方がよいと判定される。
以上では、RIP部120が自らPDLデータをRIP処理する場合と、他のRIP部が作成中のキャッシュデータの完成を待つ場合の各々の所要時間を見積もって比較することで、どちらの場合が有利かを判定したが、これは一例に過ぎない。例えば、オブジェクトの種類がイメージならばキャッシュデータの完成を待ち、イメージ以外(例えばフォーム又はフォント)ならば待たずにRIP処理を行うといった、1つのパラメータに基づく単純な判定でもよい。また、オブジェクトの複雑さがあらかじめ定めた閾値以上であれば待ち、閾値未満であれば待たないというような判定も考えられる。もちろん、これら以外の判定方式も考えられる。
S43では、S42の評価の結果、待つ方がよいか待たない方がよいかを判定する。S43で第1のRIP部120がキャッシュデータの完成を待った方がよいと判定された場合、第1のRIP部120はキャッシュ管理部130に対し、当該キャッシュデータ(例えばキャッシュエントリのIDで特定すればよい)が完成して登録されたら通知するように依頼し(S44)、その通知を待つ(S45)。そして、キャッシュ管理部130からその通知が到来すると、当該キャッシュデータを用いてビットマップ画像を生成し、ページの印刷画像データに合成する(S46)。なお、このS46は、より厳密には、S18からS22と同様、使用開始要求、ビットマップ生成、使用終了通知の3つのステップを含む。
S43で、第1のRIP部120がキャッシュデータの完成を待たない方がよいと判定された場合、第1のRIP部120は、当該オブジェクトのPDLデータをRIP処理してビットマップ画像を生成し、ページの印刷画像データに合成する(S48)。このとき生成されたビットマップ形式又は中間言語形式のデータは、第2のRIP部が生成してキャッシュ登録するものと重複するため、キャッシュメモリ140には登録されない。
S46又はS48により、当該オブジェクトについての処理は終了する。
再び図4に戻る。S16でキャッシュ管理部130からの応答が"Deleted"である場合、この応答を受け取ったRIP部120は、当該オブジェクトのPDLデータをRIP処理してビットマップ画像を生成し、ページの印刷画像データに合成する(S24)。この場合、S24の中で生成されたビットマップ形式又は中間言語形式のデータをキャッシュに登録することはしない。当該オブジェクトは、キャッシュする価値がないと判定されているからである。
また、S16でキャッシュ管理部130からの応答が"Invalid"(ステージが"Never Cache")である場合、この応答を受け取ったRIP部120は、当該オブジェクトのPDLデータをRIP処理してビットマップ画像を生成し、ページの印刷画像データに合成する(S24)。この場合、S24の中で生成されたビットマップ形式又は中間言語形式のデータをキャッシュに登録することはしない。当該オブジェクトは、キャッシュする価値がないからである。
以上では、"Never Cache"に該当するオブジェクトの場合もS14でキャッシュ管理部130に問合せ、S24においてRIP部120が当該オブジェクトのPDLデータをRIP処理するとしたが、これは必須ではない。この代わりに、RIP部120自身が、オブジェクトがステージ"Never Cache"に該当するか否かを判定(この判定事態の処理負荷は極めて小さい)し、該当すると判定された場合には、キャッシュ管理部130への問合せを省略してもよい。また、"Never Cache"に該当すると判定したオブジェクトのRIP処理結果をRIP部120自身がローカルでキャッシュしておき、同じオブジェクトを再度描画する場合は、キャッシュ管理部130に問い合わせずに、ローカルのキャッシュを利用して描画を行ってもよい。
なお、ステージ"Cashed Out"(応答は"Deleted")は、ある観点では"Never Cache"と似ているが、"Never Cache"は上述のようにキャッシュ管理部130への問合せを省略できるのに対し、"Cashed Out"はそのような省略をしない点で異なる。すなわち、ステージ"Cashed Out"のオブジェクトの場合は、時間の経過に連れてスコアが変化し、共用のキャッシュメモリ140にキャッシュされる場合があるので、RIP部120は、そのようなオブジェクトに出会うごとに、キャッシュ管理部130に問合せを行う必要がある。
《キャッシュ管理部130の処理手順》
以上、各RIP部120の処理手順の例を説明した。次に、キャッシュ管理部130の処理手順の例を、図7〜図15を参照して説明する。
まず、いずれかのRIP部120から問合せ(図4のS14)が到来したときにキャッシュ管理部130が実行する処理手順の一例を、図7を参照して説明する。
この手順では、キャッシュ管理部130は、問合せの対象であるオブジェクトのキャッシュエントリをエントリ管理テーブル132から検索する(S50)。S50では、問合せに含まれている、キャッシュエントリを特定する情報(例えばオブジェクトのID、またはPDLコマンドと引数の組など)をキーとして検索すればよい。そして、そのオブジェクトに対応するキャッシュエントリが見つかったかどうかを判定し(S52)、見つからなければ、そのオブジェクトに対応するキャッシュエントリを新たに作成する(S54)。オブジェクトのIDをキャッシュエントリのIDとして用いる方式の場合は、問合せに含まれるオブジェクトのIDを当該キャッシュエントリのIDにセットすればよい。また、オブジェクトのIDがない場合は、新たに生成したキャッシュエントリに一意なIDを付与し、更に問合せに含まれるPDLコマンドと引数の組などのキャッシュエントリを特定する情報を、そのキャッシュエントリに登録する(図2では省略)。また、キャッシュ管理部130は、そのキャッシュエントリのステージを1すなわち"New Cache"に設定し、累計問合せ回数を1に設定するなど、エントリ管理テーブル132(図2参照)における当該キャッシュエントリの各項目の値を初期化又は設定する(S56)。オブジェクトの種類等のオブジェクト属性の情報は、例えばRIP部120からの問合せに含めておき、それをキャッシュ管理部130がエントリ管理テーブル132に設定すればよく、キャッシュデータのサイズも同様である。また、使用カウンタの値は0に初期化する。キャッシュ領域のアドレスは、未定のままとしておけばよい。また、オブジェクト属性(オブジェクトの種類など)や累計値合わせ回数から当該キャッシュエントリのスコア(キャッシュする価値を示す評価値)を前述のようにして計算し、エントリ管理テーブル132に登録する。また、問合せ元のRIP部120の識別情報を、「データ作成中のRIP」の欄に登録する。そして、キャッシュ管理部130は、問合せ元のRIP部120に対して応答"Miss"を返し(S58)、この問合せについての処理を終了する。これに応じ、そのRIP部120は、当該オブジェクトについてのキャッシュデータの作成を開始する(図4及び図5参照)。
S52で、問合せの対象のキャッシュエントリがエントリ管理テーブル132から見つかった場合は、キャッシュ管理部130は、そのエントリの累計問合せ回数を1増加させる(S60)。また、スコアは、前述のように累計問合せ回数が多くなるほど高くなるので、累計問合せ回数の増加に応じて当該エントリのスコアを更新する(S60)。
次に、キャッシュ管理部130は、当該キャッシュエントリのステージを判定する(S62)。その判定の結果、ステージが1"New Cache"であれば問合せ元のRIP部120に"Creating"を応答する(S64)。また、ステージが2"Caching"であれば問合せ元のRIP部120に"Miss"を応答し、当該キャッシュエントリのステージを1に遷移させる(S66)。このとき、問合せ元のRIP部120の識別情報を、エントリ管理テーブル132の当該エントリの「データ作成中のRIP」の欄に登録する。また、ステージが3"Cached"であれば"Hit"を(S68)、4"Cached Out"であれば"Deleted"を(S70)、5"Never Cache"であれば"Invalid"を(S72)、それぞれ問合せ元のRIP部120に応答する。この応答により、キャッシュ管理部130は、問合せについての処理を終了する。この応答に応じ、問合せ元のRIP部120は、図4〜図6に示した処理を実行する。
次に、図8を参照して、いずれかのRIP部120からキャッシュデータの使用開始要求を受信したときのキャッシュ管理部130の処理手順の一例を説明する。
この手順では、キャッシュ管理部130は、受信した使用開始要求の対象であるキャッシュデータをキャッシュメモリ140から求め、要求元のRIP部120に返信する(S80)。これには、例えば、受信した使用開始要求に含まれる、ID等のキャッシュエントリを特定する情報をキーとしてエントリ管理テーブル132を検索し、これにより検索されたキャッシュエントリの中の「キャッシュ領域のアドレス」及び「キャッシュデータのサイズ」(図2参照)の情報に従い、キャッシュメモリ140からキャッシュデータを読み出せばよい。そして、キャッシュ管理部130は、当該キャッシュエントリの使用カウンタ(図2参照)の値に1を加える(S82)。これにより、そのキャッシュエントリのキャッシュデータを現在使用しているRIP部120が1つ増えたことが記録される。
次に、図9を参照して、いずれかのRIP部120からキャッシュデータの使用終了通知を受信したときのキャッシュ管理部130の処理手順の一例を説明する。
この手順では、キャッシュ管理部130は、受信した使用終了通知に含まれるID等のエントリ特定情報からその通知の対象であるキャッシュエントリを特定し、そのキャッシュエントリの使用カウンタの値から1を減算する(S85)。これにより、そのキャッシュエントリのキャッシュデータを現在使用しているRIP部120が1つ減ったことが記録される。
次に、図10及び図11を参照して、いずれかのRIP部120からキャッシュのための領域確保要求を受信したときのキャッシュ管理部130の処理手順の一例を説明する。
この手順では、図10に示すように、まずキャッシュ管理部130は、当該領域確保要求に含まれるID等のエントリ特定情報からその通知の対象であるキャッシュエントリを特定する。そして、そのキャッシュエントリの情報などに基づき、そのキャッシュエントリのキャッシュデータがキャッシュメモリ140にキャッシュできるかどうかを、制限条件及びキャッシュメモリ140の空き容量の両面から評価する(S90)。制限条件は、前述した通り、オブジェクトの複雑さやサイズ、形状などの点で、キャッシュに適さない、又はキャッシュした方が効率が悪いことが明らかなオブジェクトを特定する条件である。この判定は、特定したキャッシュエントリについてのエントリ管理テーブル132内の登録情報、例えばキャッシュデータのサイズやオブジェクト属性(例えばオブジェクトの種類や複雑さなど)などの情報を用いて行う。また、これらキャッシュデータのサイズやオブジェクト属性の情報は、領域確保要求と共にRIP部120から受け取り、エントリ管理テーブル132に登録する方式でもよい。
S90の評価の結果、制限条件がクリアされない(すなわちキャッシュに適さない)と判定した場合(S92の判定結果がNO)、キャッシュ管理部130は、特定されたキャッシュエントリ(以下「対象エントリ」と呼ぶ)のステージを5"Never Cache"に変更し(S94)、要求元のRIP部120に対して領域確保の失敗を示すコードを応答する(S96)。この応答に応じ、そのRIP部120は、図5のS38に示したように、当該オブジェクトのPDLデータを用いてビットマップ画像を生成してページの画像に合成し、そのビットマップ画像をキャッシュせずに処理を終了する。
S90の評価の結果、制限条件がクリアされたと判定した場合(S92の判定結果がYES)、キャッシュ管理部130は、更に、キャッシュメモリ140の空き領域(キャッシュデータが記憶されていない領域)の容量が、当該オブジェクトのキャッシュデータを記憶するのに十分かどうかを判定する(S98)。この判定では、キャッシュデータのサイズの情報を参照する。この判定処理で、空き領域の容量が十分であると判定されると、キャッシュ管理部130は、キャッシュメモリ140内の空き領域の中から、そのキャッシュデータのサイズに応じた領域を確保し、領域確保の成功を示すコードと共に、確保した領域のアドレスを要求元のRIP部120に応答する(S100)。この応答に応じ、そのRIP部120は、図5のS32〜S36の処理を実行する。なお、このときキャッシュ管理部130は、エントリ管理テーブル132の当該対象エントリの「キャッシュ領域のアドレス」に、確保した領域のアドレス(例えば先頭アドレス)を登録してもよい。
S98で空き領域の容量が十分でないと判定した場合、キャッシュ管理部130は、エントリ管理テーブル132から対象エントリのスコアを取得し(S102)、更にエントリ管理テーブル132に登録された各キャッシュエントリの中から、ステージが3"Cached"で且つ対象エントリよりもスコアの低いキャッシュエントリ(以下「劣位エントリ」と呼ぶ)を全て抽出する(S104)。
キャッシュエントリのスコアは、前述したように、当該キャッシュエントリのキャッシュデータをキャッシュメモリ140にキャッシュする価値(効果)を表す評価値である。したがって、劣位エントリは、対象エントリよりも相対的にキャッシュする価値が低いキャッシュエントリといえる。第1例では、キャッシュメモリ140に対象エントリのキャッシュデータを収容するのに十分な空き領域がない場合、そのような劣位エントリのキャッシュデータをキャッシュメモリ140から追い出す(削除する)ことで、十分な空き領域を作るよう試みる。
S106では、S104で劣位エントリが1つでも見つかったかどうかを判定する。劣位エントリが1つも見つからなければ、対象エントリは、キャッシュ対象を規定する最低限の条件(言い換えれば絶対的な条件)である制限条件は満たしているものの、既にキャッシュメモリ140内にデータがキャッシュされている他のいずれのエントリからみても相対的にキャッシュする価値が低いということになる。したがって、このような場合には、対象エントリのデータをキャッシュしないようにする。すなわちS106の判定結果がNOの場合には、キャッシュ管理部130は、対象エントリを現在のステージ1"New Cache"からステージ4"Cached Out"に変更し(S108)、要求元のRIP部120に領域確保の失敗を示すコードを応答する(S110)。この応答に応じ、そのRIP部120は、図5のS38に示したように、当該オブジェクトのPDLデータを用いてビットマップ画像を生成してページの画像に合成し、そのビットマップ画像をキャッシュせずに処理を終了する。
S106で、劣位エントリが1以上見つかったことが分かった場合(判定結果がYES)、キャッシュ管理部130は図11に例示する手順を実行する。
すなわち、まず見つかった劣位エントリのなかに、使用カウンタの値が0のものが残っているかどうかを判定する(S111)。使用カウンタの値が0ということは、どのRIP部120もそのキャッシュエントリ(劣位エントリ)のキャッシュデータを使用していないということなので、そのキャッシュデータを削除しても他のRIP部には悪影響がない。そこで、使用カウンタの値が0の劣位エントリがあれば、その中から最もスコアの低いものを1つ抽出する(S112)。そして、抽出した劣位エントリのキャッシュデータのアドレス及びサイズをエントリ管理テーブル132から求めて、そのアドレスからキャッシュデータをキャッシュメモリ140から追い出し(削除し)、その劣位エントリを現在のステージ3"Cached"からステージ4"Cached Out"に変更する(S114)。この追い出しにより、それまでそのキャッシュデータが占めていたキャッシュメモリ140内の領域が解放される。キャッシュ管理部130は、その解放された領域を空き領域に加入し、それにより広がった空き領域の容量(すなわち、キャッシュメモリ140の空き容量)が対象エントリのキャッシュデータのサイズを収容するのに必要な大きさとなったかどうかを判定する(S116)。この判定で、空き領域が必要な容量に達していないと判定した場合、キャッシュ管理部130はS111に戻り、使用カウンタの値が0の劣位エントリが残っている間は、その中からスコアの低い順に1つずつ、キャッシュデータの追い出し及びステージの変更を行う(S112,S114)。
このようにして、使用カウンタの値が0の劣位エントリのみを追い出すことで、対象エントリをキャッシュするのに必要な空き容量が確保できた場合(S116の判定結果がYES)、キャッシュ管理部130は、キャッシュメモリ140の空き領域の中から、そのキャッシュデータのサイズに応じた領域を確保し、領域確保の成功を示すコードと共に、確保した領域のアドレスを要求元のRIP部120に応答する(S118)。これにより領域確保要求に対するキャッシュ管理部130の処理が終了する。その応答に応じ、そのRIP部120は、図5のS32〜S36の処理を実行する。なお、このときキャッシュ管理部130は、エントリ管理テーブル132の当該対象エントリの「キャッシュ領域のアドレス」に、確保した領域のアドレスを登録してもよい。
使用カウンタの値が0の劣位エントリを全てキャッシュメモリ140から追い出しても対象エントリをキャッシュするのに必要な空き容量が確保できない場合、S111の判定結果がNOとなる。これは、現在いずれかのRIP部120で使用されているキャッシュデータを追い出さない限り、対象エントリのキャッシュデータをキャッシュすることができないことを意味する。この場合、第1例では、例えば現在劣位エントリのキャッシュデータを使用しているRIP部120の処理に悪影響が及ぶことを避けるために、今回の要求については、対象エントリのキャッシュデータをキャッシュすることをあきらめる。ただし、対象エントリは、現在使用されている劣位エントリよりもキャッシュする価値(スコア)が高いので、あきらめたまま放置するのではなく、キャッシュするための準備を行う。
すなわち、図11の手順では、S111の判定結果がNOの場合、対象エントリを現在のステージ1"New Cache"からステージ2"Caching"に変更する(S122)。ステージ2"Caching"は、前述した通り、このケースのように、当該エントリは他と比べてキャッシュする価値はあるものの、使用中の劣位エントリのキャッシュデータを追い出さないと当該エントリをキャッシュするのに十分な領域が確保できない「空き待ち」状態を表す。そして、要求元のRIP部120に対して、領域確保の失敗を示すコードを応答する(S124)。この応答に応じ、そのRIP部120は、図5のS38に示したように、当該オブジェクトのPDLデータをRIP処理してビットマップ画像を生成してページの画像に合成し、RIP処理結果をキャッシュせずに処理を終了する。
このケースは、折角生成されたRIP処理結果がキャッシュされないという点では、対象エントリが制限条件に抵触する場合(図10のS92〜S94)や劣位エントリがない場合(同S106〜S110)と同じである。しかし、これらの場合は、いずれも対象エントリをキャッシュする価値が絶対的に又は他と比べて相対的に低い場合であり、ステージが"Never Cache"又は"Cached Out"とされることで、今後ずっと、又はしばらくはキャッシュ登録されないよう制御される。これに対し、S111の判定結果がNOとなったこのケースでは、対象エントリはキャッシュする価値が相対的に十分高いので、対象エントリを"Caching"という特別なステージに置いておき、今後、いずれかのRIP部120から同じ対象エントリに問合せがあった際、その対象エントリのキャッシュ登録が再度試みられるようにする。
また、キャッシュ管理部130は、使用カウンタの値が0でない劣位エントリを、スコアの低い順に1つずつ抽出し(S126)、抽出した劣位エントリをステージ3"Cached"からステージ4"Cached Out"に変更する(S128)。
そして、"Cached Out"に変更した劣位エントリのキャッシュデータを追い出したと仮定した場合のキャッシュメモリ140の空き容量を計算し、その空き容量が対象エントリのキャッシュデータをキャッシュするのに十分な量に達するまで、S126及びS128の処理を繰り返す(S130)。必要な空き容量が確保された時点で、領域確保要求に対するキャッシュ管理部130の処理が終了する。
前述のS114では、抽出した劣位エントリのキャッシュデータをキャッシュメモリ140から追い出したが、このS128では、抽出した劣位エントリのキャッシュデータをまだ他のRIP部120が使用しているので、この時点では追い出しは行わない。しかし、抽出された劣位エントリはステージが4"Cached Out"に変更されているので、いずれのRIP部120からも使用されなくなった後で、キャッシュデータがキャッシュメモリ140から追い出されることとなる(詳細は後述)。S128は、使用中の劣位エントリに対する追い出しの予約と捉えてもよい。このように、対象エントリよりもスコアの低いエントリ(劣位エントリ)に対して、追い出しの予約をしておくことで、例えば対象エントリが次の機会にキャッシュされる可能性が高まる。
また、使用中の劣位エントリをステージ4"Cached Out"に遷移させると、その後いずれかのRIP部120からその劣位エントリに問合せがあった場合、キャッシュ管理部130は"Deleted"を応答する(図7のS70)。この場合、問合せ元のRIP部120は、キャッシュデータを使用せずに、PDLデータをRIP処理する(図4のS24)。すなわち、その劣位エントリは使用中なので、キャッシュデータが未だキャッシュメモリ140にあるにもかかわらず、第1例では、それを問合せ元のRIP部120に使用させないようにしている。仮にこのような場合に問合せ元のRIP部120にキャッシュデータの使用を認めると、いずれかのRIP部から使用されているキャッシュデータは追い出さないという基本方針の下では、追い出し予約中のエントリをいつまで経っても追い出せなくなってしまう可能性がある。これに対し、第1例では、追い出しが予約された劣位エントリの使用を認めないので、そのような不具合が回避される。
なお、S122及びS124の処理と、S126〜S130の処理とは、どちらを先に実行してもよい。
また、煩雑さを避けるために図11では省略したが、使用カウンタが0でない劣位エントリの全てをステージ4"Cached Out"にしても、対象エントリをキャッシュするのに十分な容量が確保できない場合も起こり得る。このような場合、キャッシュ管理部130は、領域確保要求に対する処理を終了すればよい。ここで必要な領域が確保できなくても、今回の領域確保要求に対しては確保失敗を応答しているので問題はなく、また同じ対象エントリに対する今後の問合せに対しても、追い出し予約をした劣位エントリの分だけ、キャッシュ登録が成功する可能性が高まっている。
次に、図12を参照して、いずれかのRIP部120からキャッシュデータの登録要求を受信したときのキャッシュ管理部130の処理手順の一例を説明する。
この手順では、図12に示すように、まずキャッシュ管理部130は、当該登録要求に含まれるID等のエントリ特定情報からその通知の対象であるキャッシュエントリを特定し、そのキャッシュエントリにキャッシュデータを登録する(S142)。例えば、エントリ管理テーブル132にキャッシュデータの登録の有無を示す項目(図2では省略)を設けておき、S142ではその項目の値を「登録無し」から「登録有り」に変更すればよい。
また、キャッシュ管理部130は、当該キャッシュエントリの使用カウンタの値を0にリセットするとともに(S144)、当該エントリをステージ1"New Cache"からステージ3"Cached"に遷移させる(S146)。このとき、当該エントリの「データ作成中のRIP」の項目をクリアする。
以上、RIP部120からの各種のアクセス(問合せ、使用開始要求、使用終了通知、領域確保要求、登録要求)に対するキャッシュ管理部130の処理手順の例を説明した。以上に説明した処理手順では、1以上のRIP部120から使用中のキャッシュエントリに対して追い出し予約(キャッシュデータは削除されないが、ステージは4"Cached Out"に変更される)がなされる場合がある。第1例では、追い出し予約がなされたキャッシュエントリについては、いずれのRIP部120からもキャッシュデータが使用されなくなった段階で、できるだけすみやかに実際の追い出しを行い、それまでのそのデータが占めていた領域を解放する。このような追い出し予約がなされたキャッシュエントリの解放には、いくつかの方式が考えられる。
1つは、定期的にエントリ管理テーブル132を調べて、解放すべきキャッシュエントリを探す方式である。この方式に従った手順の例を図13に示す。
図13の手順では、キャッシュ管理部130は、定期的な調査のタイミング(クリーニングタイミングと呼ぶ)が到来すると、エントリ管理テーブル132においてステージが4"Cached Out"で且つ使用カウンタの値が0であるエントリを探し(S150)、そのようなエントリがあれば(S152の判定結果がYES)、そのエントリのキャッシュデータがまだキャッシュメモリ140内にあるかどうかを判定する(S154)。S154の判定結果がYESであれば、そのキャッシュデータをキャッシュメモリ140から追い出し、それまでそのデータが占めていた領域を解放し(S156)、再びS150に戻る。S154の判定結果がNOであれば、S156を飛ばしてS150に戻る。このようにして、ステージが4"Cached Out"で且つ使用カウンタの値が0である全てのキャッシュエントリのキャッシュデータを追い出す。
また、追い出し予約がなされたキャッシュエントリの解放を、キャッシュデータの使用終了通知に対する処理の中で行う方式も考えられる。この方式に沿った手順の例を、図14に示す。
図14の手順は、いずれかのRIP部120からキャッシュデータの使用終了通知が到来した場合に実行される。この手順では、キャッシュ管理部130は、使用終了通知に含まれるID等に対応するキャッシュエントリをエントリ管理テーブル132から特定し、そのエントリの使用カウンタの値を1つ減少させる(S160)。そして、そのエントリがステージ4"Cached Out"であるか否か(S162)及び使用カウンタの値が0であるか否か(S164)をそれぞれ判定し、両方の判定結果がYESの場合に、当該エントリのキャッシュデータをキャッシュメモリ140から追い出す(S166)。これにより、それまでそのキャッシュデータが占めていた領域が解放される。特定したエントリがステージ4でないか、又は使用カウンタの値が0でない場合は、キャッシュデータの削除は行わず、処理を終了する。追い出し予約がなされたキャッシュエントリのキャッシュデータは、この手順により、使用しているRIP部120が無くなり次第直ちに追い出されることとなる。
次に、図15を参照して、いったん"Cached Out"ステージに遷移させたキャッシュエントリの見直し処理の一例を説明する。この処理は、例えば一定周期ごとなどのように、あらかじめ定められた規則に応じて決定された見直しタイミングが到来するごとに実行される。
この手順では、キャッシュ管理部130は、見直しのタイミングが到来すると、エントリ管理テーブル132からステージが4"Cached Out"である(すなわち追い出された状態にある)キャッシュエントリを探し(S170)、そのようなエントリがあれば(S172の判定結果がYES)、そのエントリのスコアがあらかじめ定められた閾値以上であるかどうかを判定する(S174)。キャッシュエントリのスコアがある範囲に収まるように正規化されたものであれば、この判定に用いる閾値は固定値でもよい。そうでない場合は、エントリ管理テーブル132に登録されているキャッシュエントリのスコアの分布に応じて閾値を適応的に変化させる。閾値の決め方には、様々な方式が考えられる。例えば、全キャッシュエントリにわたるスコアの平均値を閾値としてもよいし、全キャッシュエントリのスコアのうち上位から見てあらかじめ定められた順位に該当するスコアを閾値としてもよい。また、現在ステージが3"Cached"であるキャッシュエントリのうちの最低スコアを基準に閾値を定めてもよい(例えば、最低スコアに対してあらかじめ定めた値を足した値を閾値とするなど)。
S174で当該キャッシュエントリのスコアが閾値以上であると判定された場合、それはそのキャッシュエントリはキャッシュメモリ140に戻す価値があることを意味する。この場合、キャッシュ管理部130は、そのキャッシュエントリをステージ4"Cached Out"からステージ2"Caching"へと遷移させる(S176)。これにより、その後当該キャッシュエントリに対していずれかのRIP部120から問合せが到来すると、当該エントリはステージ1"New Cache"に遷移し、そのRIP部120が当該エントリのキャッシュデータの登録を試みることとなる(図7のS66及び図4,図5を参照)。
《変形例1−1》
以上の第1例では、あるキャッシュエントリのキャッシュデータが作成中(すなわちステージ1"New Cache")である場合、そのエントリの問合せを行ったRIP部120が、そのキャッシュデータが完成するのを待つのか待たないのかを判断した(図7のS42,S43参照)。しかし、その判断は、問合せを受けたキャッシュ管理部130が行ってもよい。その判断をキャッシュ管理部130が行う例を、以下に説明する。
この例において、RIP部120からキャッシュエントリの問合せを受けたときのキャッシュ管理部130の処理手順を、図16及び図17に示す。図16に示す手順は、問合せの対象のキャッシュエントリのステージが1"New Cache"である場合の処理を除き、図7の手順と同じである。
問合せの対象のキャッシュエントリのステージが1"New Cache"である場合は、キャッシュ管理部130は、図17に例示する手順を実行する。この手順では、キャッシュ管理部130は、問合せ元のRIP部120(第1のRIP部と呼ぶ)が当該オブジェクトのPDLデータを自らRIP処理する場合と、そのオブジェクトのキャッシュデータを作成中のRIP部120(第2のRIP部と呼ぶ)がそのキャッシュデータを完成させるのを待って第1のRIP部にそのキャッシュデータを利用させる場合との、どちらが早く処理が完了するかを評価する(S182)。評価の仕方は、図6のS42の評価と同様でよい。
S183では、S182の評価の結果に基づき、作成中のキャッシュデータの完成を待つ方がよいか待たない方がよいかを判定する。S183で第1のRIP部がキャッシュデータの完成を待った方がよいと判定された場合、キャッシュ管理部130は、第2のRIP部から当該キャッシュデータの登録要求が来るのを待つ(S184)。登録要求が来ることで、キャッシュデータが完成したことが分かる。すると、キャッシュ管理部130は、第1のRIP部に対し"Hit"を応答する(S186)。この時点では、そのキャッシュデータはキャッシュメモリ140内にあるので、"Hit"を受け取った第1のRIP部は、そのキャッシュデータを用いてページのRIP処理を進める。
すなわち、この例では、待つ方がよいと判断した場合は、キャッシュ管理部130はすぐには問合せ元のRIP部120(第1のRIP部)に応答を行わず、そのキャッシュデータの完成を待って"Hit"を応答している。その間、問合せ元のRIP部120は、キャッシュ管理部130の応答を待っている。しかし、このような処理は一例に過ぎない。この代わりに、待つ方がよいと判断した時点で即座に問合せ元のRIP部120に待つように明示的に指示を行い、その後キャッシュデータが完成した時点で"Hit"を応答するようにしてもよい。
一方、S183で、待たない方がよい(すなわち第1のRIP部がPDLデータをRIP処理した方が早く処理が完了する)と判定した場合は、キャッシュ管理部130は、即座に、第1のRIP部に対し"Creating"を応答する(S188)。"Creating"を受け取った第1のRIP部は、キャッシュデータの完成を待たずに、当該オブジェクトのPDLデータをRIP処理し、ページの描画を進める。この場合、RIP処理結果はキャッシュされない。
《変形例1−2》
また、更に別の変形例も考えられる。すなわち、上記第1例では、あるキャッシュエントリのキャッシュデータが作成中である場合、そのエントリの問合せを行ったRIP部120が、そのキャッシュデータが完成するのを待つのか待たないのかを判断していた(図6のS42,S43参照)が、この変形例では、そのRIP部120の処理負荷が高い場合にはこの判断自体を取りやめる。この変形例の手順の一例を図18に示す。図18は、図4の手順のS16で応答が"Creating"であると判定された後の処理の流れを示す。
この変形例では、その場合、まず、RIP部120は自身の負荷があらかじめ定めた閾値以上であるかどうかを判定する(S41)。ここでの負荷は、負荷監視部114が監視している当該RIP部120の負荷と同じものである。負荷がその閾値を超えている場合、図6の手順と同様のS42及びS43の処理を実行すること自体が、当該RIP部120にとって無視できない負担となる(すなわち、実行中の他の処理の妨げとなる)。逆に言えば、閾値は、そのような状況を生じる下限の負荷であり、これは実験等によりあらかじめ求めておけばよい。
S41の判定で、RIP部120の負荷が閾値以上と判定された場合、RIP部120は、S42及びS43を飛ばし、キャッシュデータの完成を待つと自動的に判定し、S44へと進む。すなわち、この場合、RIP部120は負荷が高いので、自分でPDLデータをRIP処理することはしない。その他のステップは、図6と同様でよい。
《変形例1−3》
また、上記第1例では、RIP部120は、キャッシュ管理部130から"Creating"の応答を受け取った場合、作成中のキャッシュデータの完成を待つか否かを判定したが、このような判定を行わず、"Creating"を受け取った場合には、作成中のキャッシュデータの完成を必ず待つようにしてもよい。また、この逆に、必ず、待たずに自らRIP処理し、処理結果をキャッシュしないようにしてもよい。このような場合でも、RIP部120は、"Creating"というキャッシュデータ作成中を示す従来にない応答を受け取ることで、"Miss"又は"Hit"という従来の応答の場合とは異なる対応をとる。すなわち、"Miss"及び"Hit"という応答しか無ければ、"Miss"という応答を受けた場合、RIP部120は目的のキャッシュデータが作成中であってもそのことが分からないので、その完成を待つこともできず、自分でPDLデータをRIP処理することとなり、その処理結果をキャッシュメモリ140に重複登録してしまうことになる。
[第2例]
本発明の実施形態の領域確保のための構成及び処理の適用対象となり得る第2例のシステムを説明する。この第2例の印刷文書変換システムの構成は、図1に示したものと同様でよい。また、この第2例において、明示的に第1例と異なる構成及び処理を示した点以外は、第1例と同じ構成及び処理が用いられるものとする。
《第2例の概要》
上述の第1例では、領域確保要求があった段階で、その要求の対象エントリよりもスコアの低い使用中のキャッシュエントリをステージ4"Cached Out"に遷移させることで、明示的にそのキャッシュエントリの追い出し予約を行った(図11のS126,S128)。これに対し、この第2例では、追い出すべきと判定される使用中のキャッシュエントリをステージ3"Cached"のままで、暗黙のうちに追い出し予約状態とする。第1例ではステージ4"Cached Out"は、キャッシュデータがキャッシュメモリ140内にあるキャッシュエントリ(追い出し予約されたエントリ)にも適用されるのに対し、この第2例ではステージ4"Cached Out"はそのようなエントリには適用されず、キャッシュデータがキャッシュメモリ140から実際に追い出されたエントリのみに適用される。
《第2例の状態遷移》
この第2例でのキャッシュエントリの状態遷移を図19に示す。図19に示す通り、第2例では、ステージ3"Cached"のキャッシュエントリに対していずれかのRIP部120から問合せがあった場合、キャッシュ管理部130は、そのキャッシュエントリのスコアに応じて応答を"Hit"と"Deleted"の間で切り替える。すなわち、そのキャッシュエントリのスコアが閾値以上であれば"Hit"を応答し、そうでなければ"Deleted"を応答する。応答"Deleted"の意味とこれを受け取ったときのRIP部120の挙動は、第1例の場合と同じである。すなわち、この第2例では、スコアが閾値未満であれば、"Deleted"を応答することで当該キャッシュエントリのキャッシュデータの使用を認めないようにする。これにより、当該キャッシュエントリのキャッシュデータが新たに使用されることが無くなるので、仮に現在そのキャッシュデータが使用中であっても、時間の経過に伴い使用カウンタの値が減っていき、追い出しが可能な状態(すなわち使用カウンタの値が0)に至る。このように、第2例では、スコアが閾値より低いと"Deleted"を応答することで、暗黙のうちに(すなわち明示的に"Cached Out"に遷移させることなく)当該キャッシュエントリを追い出し予約状態としている。ここで用いる閾値は、第1例の図15の手順のS174で用いる閾値とは使用目的が異なるものなので、基本的にはS174で用いる閾値とは独立に定めればよいが、処理の簡略化などのためにS174で用いる閾値と同じ値を用いてもよい。
ステージ3"Cached"のキャッシュエントリがステージ4"Cached Out"に遷移するのは、そのキャッシュエントリのキャッシュデータが実際にキャッシュメモリ140から追い出されたときである。
図19の状態遷移は、以上に説明した点以外は、図3の例と同様である。
《第2例の処理手順》
第2例での各RIP部120の処理手順は、第1例の場合と同様でよい(図4〜図6参照)。
第2例でのキャッシュ管理部130の動作は、第1例の場合と一部異なる。以下では、第1例と異なる部分に焦点を当てて説明する。
まず、いずれかのRIP部120から問合せを受けたときのキャッシュ管理部130の処理手順の一例を図20に示す。この例では、キャッシュ管理部130は、問合せの対象のキャッシュエントリのステージが3"Cached"である場合、そのエントリのスコアを調べ、スコアが閾値以上であれば"Hit"を応答し、閾値未満であれば"Deleted"を応答する(S68A)。図20の他のステップは、第1例の図7のステップと同様でよい。
いずれかのRIP部120から使用開始要求を受けたときのキャッシュ管理部130の処理手順は、第1例の図8の手順と同様でよい。
いずれかのRIP部120から使用終了通知を受けたときのキャッシュ管理部130の処理手順は、例えば図21に示すようなものとなる。
この手順では、キャッシュ管理部130は、使用終了通知に含まれるID等から、対象となるキャッシュエントリを特定し、そのエントリの使用カウンタの値を1つ減少させる(S160)。そして、そのキャッシュエントリの使用カウンタの値が0であるか否か(S163)及びそのキャッシュエントリのスコアが閾値未満であるか否か(S165)をそれぞれ判定する。そして、両方の判定結果がYESの場合には、当該キャッシュエントリのキャッシュデータをキャッシュメモリ140から追い出し、そのエントリのステージを現在値3"Cached"から4"Cached Out"に変更する(S167)。これにより、それまでそのキャッシュデータが占めていた領域が解放される。対象のキャッシュエントリの使用カウンタの値が0でないか、又はスコアが閾値以上である場合は、キャッシュデータの削除及びステージ変更(S167)は行わず、処理を終了する。スコアが閾値未満となって暗黙のうちに追い出し予約状態(すなわち新規の使用を受け付けない状態)となっていたキャッシュエントリは、この手順により、使用しているRIP部120が無くなり次第直ちに追い出され、ステージ4"Cached Out"に遷移することとなる。
図21の例では、スコアが閾値より低いキャッシュエントリのキャッシュデータを、使用終了通知を受けたタイミングで追い出したが、これは一例に過ぎない。この代わりに、例えば、第1例における図13の手順と同様の方法で、見直しタイミングごとにステージが3"Cached"の各キャッシュエントリのスコアと使用カウンタを調べ、スコアが閾値未満且つ使用カウンタの値が0となっているエントリのキャッシュデータを追い出すようにしてもよい。
いずれかのRIP部120から領域確保要求が到来した場合のキャッシュ管理部130の処理手順は、例えば図22及び図23に示すものとなる。
まず図22に示す手順は、ほとんどの部分は図10に示した第1例における処理手順と同様であり、S99を含む点のみが第1例の場合と異なる。すなわち、この第2例では、S96及びS98で領域確保の対象のキャッシュエントリ(オブジェクト)が制限条件をクリアし、キャッシュメモリ140の空き領域に収容可能(空き容量が十分)と判定された場合に、図21の手順のS165で用いられるスコアの閾値を、取り得る範囲の最低値(例えば0)にリセットする(S99)。S98で空き容量が十分と判定されたということは、この判定の時点では、キャッシュメモリ140の空き領域が追い出しを必要としない程度に十分大きいということである。そこで、この例では、そのような場合に、キャッシュメモリ140内に残すキャッシュエントリの選別基準を下げて、現在キャッシュメモリ140内にあるキャッシュデータができるだけ追い出されないようにしている。
なお、以上の例ではS99で閾値を最低値にリセットしたが、これは一例に過ぎない。この代わりに、S99では閾値をあらかじめ定められた幅又は割合だけ低下させるようにしてもよい。
また、図22の手順のS106で劣位エントリ有りと判定した場合にキャッシュ管理部130が行う処理手順は、図23に示すようなものとなる。この処理手順は、第1例における図11の手順とほぼ同様であるが、図11の手順におけるS126〜S130のステップ群が、図23の手順ではS125に置き換えられている。
使用されていない劣位エントリのキャッシュデータをすべてキャッシュメモリ140から追い出してもまだ必要な空き容量が確保できない場合、図23の手順でも、図11の手順と同様、領域確保要求の対象のキャッシュエントリ(「対象エントリ」)のステージを2"Caching"に変更し(S122)、要求元のRIP部120bに領域確保の失敗を示す応答を行う(S124)。すなわち、第2例でも、今回の領域確保要求については失敗を返すことで、要求元のRIP部120は、対象エントリのPDLデータをRIP処理してビットマップ画像を生成し、それをキャッシュしないようにする。そして、その後同じ対象エントリに対して問合せが到来したときにその対象エントリのキャッシュデータを収容するだけの空き容量ができるよう、現時点では、使用中の他のエントリのキャッシュデータの追い出しの予約を行う。図23の手順は、その予約の仕方が図11の手順と異なる。
すなわち、図11の手順では、まだいずれかのRIP部120から使用されているキャッシュエントリのステージを明示的に4"Cached Out"に遷移させることで追い出しの予約を行った。これに対し、図23の手順ではそのような明示的なステージ変更は行わず、追い出し処理(図21のS165及びS167)における追い出し対象の判定の閾値の調整を行い(S125)、調整後の閾値よりもスコアの低いキャッシュエントリが今後新たに使用されないようにする(図20のS68A参照)ことで、それらスコアの低いキャッシュエントリが追い出されやすくする。
S125の閾値の調整は、対象エントリのスコアを基準とする。すなわち、ここでは、対象エントリをキャッシュできるようにするために、対象エントリのスコアより少し低いスコアを閾値に設定する。すなわち、S125では、例えば、対象エントリのスコアからあらかじめ定められた値又は割合を減じた結果を閾値に設定する。より厳密には、閾値は、対象エントリのスコアより低く、少なくとも1つの劣位エントリのスコアよりも高い値に設定する。このように閾値を設定すれば、その閾値よりスコアの低いキャッシュエントリのキャッシュデータは、いずれのRIP部120からも使用されなくなった時点で図21の手順でキャッシュメモリ140から追い出されることとなる。その後いずれかのRIP部120がキャッシュ管理部130に対象エントリについて問合せ行った時点で、閾値に基づく追い出しにより対象エントリのキャッシュデータ以上の容量が確保できていれば、対象エントリのキャッシュデータがキャッシュメモリ140に登録されることになる。対象エントリのスコアは、S125で設定された閾値よりも高いので、その設定の後閾値を更に上昇させる変更が行われていなければ、対象エントリのキャッシュデータは追い出されずにキャッシュメモリ140に残ることとなる。
いずれかのRIP部120からキャッシュデータの登録要求を受けたときのキャッシュ管理部130の処理手順は、第1例の図12の手順と同様でよい。
また、この第2例でも、第1例と同様、いったん"Cached Out"ステージに遷移させたキャッシュエントリの見直し処理(図15)を行ってもよい。
《変形例2−1)》
以上、実施形態の基礎となり得る第2例のシステムを説明した。以上では、閾値は、追い出すキャッシュエントリを判別するために用いた(図20のS68A及び図21のS165及びS167参照)。これに対し、同じ閾値を用いて、キャッシュを要求されたキャッシュエントリがキャッシュ登録に値するかどうかを判定してもよい。このような判定を行う例を図24に示す。
図24に示す手順は、いずれかのRIP部120から領域確保要求があった場合のキャッシュ管理部130の処理手順であり、図22の手順に対してS103を追加したものである。図24の手順では、キャッシュメモリ140の空き容量が十分でない場合、対象エントリに対する劣位エントリを抽出(S104)する前に、対象エントリのスコアが閾値以上であるかどうかを判定する(S103)。そして、対象エントリのスコアが閾値未満であれば、そもそもその対象エントリはキャッシュする価値がないとみなし、劣位エントリの抽出(S104)等のステップは実行せずに、その対象エントリをステージ4"Cached Out"に遷移させ(S108)、要求元のRIP部120に領域確保の失敗を応答する(S110)。
《変形例2−2》
上述の変形例2−1では、追い出すキャッシュエントリを判別するための閾値(図20のS68A及び図21のS165及びS167参照)と、キャッシュエントリを登録するか否かの判定に用いる閾値(図24のS103参照)とが共通のものであった。これに対し、この変形例2−2では、それら2種類の閾値を使い分ける例を説明する。以下では、前者の閾値を追出用閾値、後者の閾値を登録用閾値と呼ぶ。
この変形例2−2では、いずれかのRIP部120からキャッシュエントリについての問合せが来た場合に、図25に示すように、そのキャッシュエントリのスコアが「追出用」閾値以上であれば"Hit"を応答し、「追出用」閾値未満であれば"Deleted"を応答する(S68B)。図25の他のステップは、図20に示した第2例の手順と同様でよい。すなわち、この例では、S68Bにて暗黙的な追い出し予約状態とするキャッシュエントリを判定するのに、2種類の閾値のうち追出用閾値を用いる。
また、いずれかのRIP部120から使用終了通知を受けたときのキャッシュ管理部130の処理手順は図26に示すようなものとなる。この手順は、対象のエントリのスコアを「追出用」閾値と比較する(S165A)点以外は、図21の手順と同様である。すなわち、この例では、キャッシュエントリを追い出すか否かの判定に、2種類の閾値のうち追出用閾値を用いている。
また、いずれかのRIP部120から領域確保要求が到来した場合のキャッシュ管理部130の処理手順は、図27及び図28に示すものとなる。
図27の手順は、上述の変形例2−1の図24の手順に対応するものである。変形例2−1(図24)では対象エントリがキャッシュするのに値するかどうかを判定する場合に、対象エントリのスコアを(追出用と登録用とに分けない)共通の閾値と比較していたのに対し、この変形例2−2では、対象エントリのスコアを「登録用」閾値と比較する(S103A)。また、変形例2−1(図24)ではS98で空き容量が十分と判定した場合、共通の閾値をリセット(S99)したのに対し、この変形例2−2では、その場合には登録用閾値をリセットする(S99A)。
また、図28の手順は、第2例の図23の手順に対応している。第2例(図23)では、ステップS125において、(追出用と登録用とに分けない)共通の閾値を対象エントリのスコアに基づき計算していたのに対し、この変形例2−2では、追出用及び登録用の各閾値を対象エントリのスコアに基づき計算する(S125A)。例えば、追出用及び登録用の各閾値は、ともに、対象エントリのスコアより低く、少なくとも1つの劣位エントリのスコアよりも高い値に設定する。ここでは、例えば、登録用閾値の方が追出用閾値以上となるよう、各閾値を定めればよい。例えば、対象エントリのスコアから第1の正の値を引いた値を登録用閾値とし、更にその登録用閾値から第2の正の値を引いた値を追出用閾値とするなどである。
また、この変形例2−2でも、第1例の図15の手順と同様、いったん"Cached Out"ステージに遷移させたキャッシュエントリの見直し処理を行ってもよい。ここで、この変形例2−2では、図29に示すように、"Cached Out"ステージにあるキャッシュエントリを、キャッシュ登録の対象に戻すか否かを判定する閾値として、登録用閾値を用いる(S174A)。図29の手順のそれ以外のステップは、図15の場合と同じである。
[実施形態]
《概要》
本発明の実施形態を説明する。この実施形態は、上記第1例又は第2例の構成及び処理のうち、RIP部120からの領域確保要求に対するキャッシュ管理部130の処理を変更したものである。この実施形態において、明示的に第1例又は第2例と異なる構成及び処理を示した点以外は、第1例又は第2例と同じ構成及び処理が用いられるものとする。この実施形態の印刷文書変換システムの構成は、図1に示したものと同様でよい。
上述の第1例及び第2例では、RIP部120から領域確保要求を受け取ったときに、空き容量が足りない場合に、キャッシュ済(ステージ3"Cached")である劣位エントリを追い出す(削除する)ことで、空き容量を増大させた(図10のS104、S106及び図11参照)。これに対し、この実施形態では、ステージが3"Cached" である劣位エントリを追い出すのに加え、キャッシュデータ作成中(ステージ1"New Cache")の劣位エントリが確保した領域も解放することで、空き容量を増大させる。
すなわち、キャッシュデータを作成するRIP部120は、図5に示すようにまず領域確保要求(S30)を行ってキャッシュデータを記憶させる領域を確保し、その後その領域にキャッシュデータを生成し(S32)、登録する(S36)。したがって、ステージ1"New Cache"のキャッシュエントリには、領域が確保されてはいるもののキャッシュデータがまだ完成していない期間が存在する。この実施形態では、このような期間に該当するステージ1"New Cache"のキャッシュエントリの領域を解放するのである。なお、ステージ1"New Cache"のキャッシュエントリでも、領域確保前のものについては、解放する領域がないので、この実施形態における解放処理の対象とはならない。
本実施形態では、キャッシュ管理部130は、図30に示すようにエントリ管理テーブル132にてキャッシュエントリの領域確保が済んでいるか否かを示す項目(図中の「領域確保」欄)を管理している。この項目は、ステージ1"New Cache"のキャッシュエントリについてのみ値が登録されていればよく、他のステージのキャッシュエントリについてはこの項目は空値である。
《状態遷移》
本実施形態におけるキャッシュエントリの状態遷移は、図31に示すようなものとなる。図31の状態遷移は、図3に示した第1例の状態遷移とほぼ同じであり、異なる点は、ステージ1"New Cache"からステージ4"Cached Out"に遷移する条件が増えている点である。すなわち、本実施形態では、領域確保が成功した後、他のキャッシュエントリの領域確保のためにその領域を強制的に解放された場合にも、ステージ1"New Cache"からステージ4"Cached Out"への遷移が起こる。
本実施形態での各RIP部120の処理手順は、第1例の場合と同様でよい(図4〜図6参照)。
本実施形態でのキャッシュ管理部130の動作は、第1例と同様の部分が多い。同様の点を説明すると、まずいずれかのRIP部120から問合せを受けたときのキャッシュ管理部130の処理手順は、第1例と同様でよい(図7参照)。また、いずれかのRIP部120から使用開始要求を受けたときのキャッシュ管理部130の処理手順も、第1例と同様でよい(図8参照)。また、いずれかのRIP部120から使用終了通知を受けたときのキャッシュ管理部130の処理手順も、第1例と同様でよい(図9又は図14参照)。また、クリーニングタイミング到来時及び見直しタイミング到来時の処理も、第1例の場合と同様でよい(図13及び図15参照)。
以下、第1例と異なる部分に焦点を当てて説明する。
本実施形態において、いずれかのRIP部120から領域確保要求が到来した場合のキャッシュ管理部130の処理手順は、例えば図32〜図38に示すものとなる。
まず図32に示す手順は、ほとんどの部分は図10に示した第1例における処理手順と同様であり、S100A及びS104Aのみが異なる。S100Aでは、領域確保を要求元のRIP部120に応答することに加え、当該キャッシュエントリの領域が確保済になったことをエントリ管理テーブル132の「領域確保」の欄に登録する。なお、キャッシュエントリの「領域確保」の欄は、当該エントリがステージ1"New Cache"に遷移したときに、「未確保」に初期化されているものとする。S104Aでは、ステージ3だけでなく、ステージ1且つ領域確保済のキャッシュエントリの中からも劣位エントリ(対象エントリよりもスコアが低いエントリ)を探す。このとき、領域確保済かどうかは、エントリ管理テーブル132の「領域確保」の欄を参照して判定すればよい。
また、図32の手順のS106で劣位エントリ有りと判定した場合、キャッシュ管理部130は図33の手順に進む。
図33の手順では、まず見つかった劣位エントリのなかに、ステージが3"Cached"で使用カウンタの値が0のものが残っているかどうかを判定する(S111A)。残っていれば、その中からスコアの低い順に1つずつ抽出し(S112A)、抽出した劣位エントリのキャッシュデータをキャッシュメモリ140から追い出し(削除し)、その劣位エントリを現在のステージ3 "Cached"からステージ4"Cached Out"に変更する(S114)。ステージが3"Cached"で使用カウンタの値が0の劣位エントリが残っている間は、S112A及びS114を繰り返すことで、キャッシュメモリ140の空き容量を増大させる(S116)。このような手順で対象エントリをキャッシュするのに必要な空き容量が確保できた場合(S116の判定結果がYES)、キャッシュ管理部130は、キャッシュメモリ140の空き領域の中から、そのキャッシュデータのサイズに応じた領域を確保し、領域確保の成功を要求元のRIP部120に応答すると共に、当該キャッシュエントリの領域が確保済になったことをエントリ管理テーブル132の「領域確保」の欄に登録する。(S118A)。
ステージ3 "Cached"且つ使用カウンタの値が0の劣位エントリを全てキャッシュメモリ140から追い出しても対象エントリをキャッシュするのに必要な空き容量が確保できない場合、S111Aの判定結果がNOとなる。
S111Aの判定結果がNOとなった場合、キャッシュ管理部130は、ステージ1"New Cache"且つ領域確保済のキャッシュエントリの領域を解放することで、十分な空き容量を確保することを試みる。このための処理手順には、例えば、3つの方式がある。以下、それら3つの方式の処理手順の例を順に説明する。
《第1方式:一時的オーバーフロー方式》
この方式では、キャッシュ管理部130は図34に例示する処理手順を実行する。この手順では、まず、ステージ1"New Cache"で領域確保済の劣位エントリが残っているかどうかを判定する(S200)。残っていれば、その中から最もスコアの低いものを1つ抽出する(S202)。そして、抽出した劣位エントリをステージ1"New Cache"からステージ4"Cached Out"に遷移させ(S204)、この領域を解放したと仮定した場合のキャッシュメモリ140の空き容量を計算する。この空き容量が、対象エントリのキャッシュデータを収容するのに十分な大きさかどうかを判定し(S206)、まだ不十分であれば、S200に戻り、ステージ1"New Cache"で領域確保済の別の劣位エントリが残っている間は、S202〜S204の処理を繰り返す。このようなステージ1"New Cache"で領域確保済の劣位エントリ群の領域の解放で対象エントリに必要な空き領域が確保できれば(S206の判定結果がYES)、キャッシュ管理部130は、対象エントリのための領域をキャッシュメモリ140内で確保し、要求元のRIP部120に領域確保の旨を示すコードと確保した領域のアドレスの情報を返す(S208)。また、このとき、エントリ管理テーブル132の対象エントリのレコードの「領域確保」欄に対し、領域確保が済んだ旨を記録する。S208の後、キャッシュ管理部130は、当該領域確保要求についての処理を終了する。
ここで注意すべきは、S204では、劣位エントリをステージ1"New Cache"からステージ4"Cached Out"に遷移させるのみであり、その劣位エントリのために確保されているキャッシュ領域は実際には解放しない点である。この解放は、現在作成されているその劣位エントリのキャッシュデータの作成が完了し、作成しているRIP部120がそのデータを使用し終えた時点で行われる。このように、S204では、いわば領域解放の予約が行われるだけである。このため、S208を実行する時点では、キャッシュメモリ140の空き容量は、実際には対象エントリのために必要な量よりも少ない。このため、S208での領域の確保は、オペレーティングシステムからキャッシュメモリ140に割り当てられた全体容量の制限を一時的に超える(オーバーフローする)形で行う。すなわち、キャッシュ管理部130及びキャッシュメモリ140を実現するコンピュータのオペレーティングシステムは、自身が管理するメモリ空間の一部をキャッシュメモリ140に割り当てており、S208ではその割り当てられた領域からはみ出して対象エントリのためのキャッシュ領域を確保するのである。このような確保処理により、キャッシュメモリ140として実際に使用される領域のサイズは、本来割り当てられたキャッシュメモリサイズを超えることとなるが、このオーバーフロー状態は領域解放を予約された劣位エントリ群のキャッシュデータの作成が完了するまでの一時的な状態に過ぎない。
なお、ステージ1"New Cache"で領域確保済のすべての劣位エントリの領域を解放したとしても、対象エントリのために必要な領域が確保できない場合、S200の判定結果がNOとなる。この場合、キャッシュ管理部130は、第1例の図11のS122〜S130と同様の処理を行う。すなわち、対象エントリのステージを2"Caching"に変更し(S122)、要求元のRIP部120に領域確保の失敗を応答し(S124)、ステージ3の使用中の劣位エントリに対し、スコアの低い順に、必要な空き容量が確保されるまで追い出し予約(ステージ4への変更)を行う(S126〜S130)。
この第1方式では、対象エントリのための領域確保を要求したRIP部120は、ステージ3で使用カウンタ値が0のキャッシュエントリと、ステージ1で領域確保済のキャッシュエントリの領域を解放すれば、必要な容量が得られる場合には、即座にキャッシュ領域の割当を受けることとなる。
また、この第1方式では、S204で領域解放の予約がなされたキャッシュエントリについての領域の解放を、例えば、キャッシュデータの登録要求をトリガとして実行する。この手順を図35に示す。
図35の手順では、キャッシュ管理部130は、いずれかのRIP部120からキャッシュデータの登録要求(この要求にはキャッシュエントリを特定するID等の特定情報が含まれている)が到来すると、その要求の対象であるキャッシュエントリ(対象エントリ)のステージをエントリ管理テーブル132から求める(S140)。この場合、対象エントリのステージは1"New Cache"又は4"Cached Out"のどちらかである。ステージが1"New Cache"の場合は、第1例における図12の手順と同様、S142〜S146の各ステップを実行する。ステージが4"Cached Out"の場合、対象エントリのキャッシュ領域は他のキャッシュエントリのキャッシュ領域を確保するために解放するべく予約されている(図34のS204参照)ので、作成されたばかりの対象エントリのキャッシュデータを削除し、それまでそのキャッシュデータが占めていた領域を解放する(S148)。なお、この解放の前までに対象エントリのキャッシュデータを作成していたRIP部120は、既にそのキャッシュデータをページの印刷画像データに合成する処理を済ませている(図5の手順で、登録要求(S36)の前にビットマップ作成(S34)が実行されている)ので、この時点でキャッシュデータを削除しても、そのRIP部120に悪影響はない。
このような領域解放の処理により、キャッシュメモリ140のオーバーフロー状態が解消されていくことになる。
《第2方式:即時強制解放方式》
この方式では、キャッシュ管理部130は図36に例示する処理手順を実行する。この手順では、まず、ステージ1"New Cache"で領域確保済の劣位エントリが残っているかどうかを判定する(S200)。残っていれば、その中から最もスコアの低いものを1つ抽出する(S202)。そして、抽出した劣位エントリのキャッシュデータを作成中のRIP部120(これはエントリ管理テーブル132から分かる)に対し、キャッシュデータの作成中止、及びキャッシュ領域ではなく通常のメモリ領域を用いて当該オブジェクトの元のPDLデータをRIP処理すること、を指示する(S203)。これに応じ、そのRIP処理部120は、そのオブジェクトのRIP処理を行い、そのRIP処理結果をページの画像に合成した後、キャッシュせずに破棄する。また、抽出した劣位エントリをステージ1"New Cache"からステージ4"Cached Out"に遷移させ、この劣位エントリのために確保していたキャッシュ領域を解放する(S204A)。
すなわち、上述の第1方式のS204では、劣位エントリのステージを4に変更するだけでキャッシュ領域は解放しなかったのに対し、この第2方式ではキャッシュ領域を解放する。そして、この解放の後、キャッシュメモリ140の空き容量が対象エントリのキャッシュデータを収容するのに十分な大きさかどうかを判定し(S206)、まだ不十分であれば、S200に戻り、ステージ1"New Cache"で領域確保済の別の劣位エントリが残っている間は、S202〜S204Aの処理を繰り返す。このようなステージ1"New Cache"且つ領域確保済の劣位エントリ群の領域の解放で対象エントリに必要な空き領域が確保できれば(S206の判定結果がYES)、キャッシュ管理部130は、対象エントリのための領域をキャッシュメモリ140に確保し、要求元のRIP部120に領域確保の旨を示すコードと確保した領域のアドレスの情報を返す(S208)。また、このとき、エントリ管理テーブル132の対象エントリのレコードの「領域確保」欄に対し、領域確保が済んだ旨を記録する。S208の後、キャッシュ管理部130は、当該領域確保要求についての処理を終了する。
なお、ステージ1"New Cache"で領域確保済のすべての劣位エントリの領域を解放したとしても、対象エントリのために必要な領域が確保できない場合、S200の判定結果がNOとなる。この場合、キャッシュ管理部130は、第1例の図11のS122〜S130と同様の処理を行う。
この第2方式では、キャッシュ領域を強制解放されたRIP部120は再度PDLデータのRIP処理を行う必要があるが、キャッシュメモリ140に割り当てられた容量の超過は生じず、対象エントリに必要なキャッシュ領域が即座に確保される。なお、キャッシュ領域を強制解放されたステージ1の劣位エントリは、対象エントリよりもスコアが低いので、対象エントリのキャッシュをあきらめるより、劣位エントリの作成中のキャッシュデータの領域を解放した方が、キャッシュの利用効率の点では有利と言える。
《第3方式:作成完了後解放方式》
この方式では、キャッシュ管理部130は図37に例示する処理手順を実行する。この手順は、S200〜S206までは、図34に示した第1方式の場合と同様である。すなわち、ステップS204では、ステージ1"New Cache"で領域確保済の劣位エントリのステージを4に変更するのみで、キャッシュ領域の解放は行わない。
前述の第1方式では、それらステージ4に遷移させたステージ1の劣位エントリの領域解放を待たず、キャッシュメモリ140に割り当てられた容量からオーバーフローする形で対象エントリのための領域確保(S208)を行った。これに対し、この第3方式ではオーバーフローせずに、それらステージ4に遷移させたステージ1のすべての劣位エントリの領域解放を待ち(S207)、それらすべての劣位エントリの領域が解放された後に、対象エントリのための領域確保を行う(S208)。ここで、S207では、例えば、ステージ4に遷移させたステージ1の各劣位エントリについて、エントリ管理テーブル132の「領域確保」欄(図30参照)を監視し、それら監視対象のすべての劣位エントリの「領域確保」欄が「解放済」を示す値となったときに、S207の判定結果をYESとする。すなわち、この方式では、「領域確保」欄の取り得る値は、「未確保」、「確保済」、及び「開放済」の3値である。なお、それら各劣位エントリの「領域確保」欄には、後述するように、登録要求に対する処理の中で、「解放済」の値が書き込まれる。その他のステップは、第1方式の図34の手順と同様でよい。
この第3方式では、いずれかのRIP部120からキャッシュデータの登録要求があった場合、キャッシュ管理部130は図38に示す処理を実行する。この手順は、図35に示した第1方式の手順にS149を追加したものである。すなわち、本実施形態では、キャッシュ管理部130は、S148で登録要求の対象のキャッシュデータをキャッシュメモリ140から削除してその領域を解放した後、例えばエントリ管理テーブル132の当該エントリの「領域確保」の欄の値を、当該エントリの領域が解放された旨の値「確保済」に変更する。
この第3方式では、対象エントリに必要なキャッシュ領域が即座には確保されないものの、キャッシュメモリ140に割り当てられた容量を超えることはない。
《混合方式》
以上、3つの方式について説明した。キャッシュ管理部130は、それら3つの方式の1つに従って処理を実行してもよいが、それら3つの方式を動的に切り替えながら処理を進めてもよい。このような動的切り替えの手順の一例を、図39及び図40に例示する。
図39の手順は、図32の手順のS106の判定結果がYESとなった場合の手順であり、図33の手順にS300及びS302を追加したものである。したがって、図33を参照して既に説明したステップについては説明を省略する。
図39の手順では、S111Aの判定結果がNOとなった場合、すなわち、使用されていないキャッシュデータを全てキャッシュメモリから削除しても対象エントリに必要なキャッシュ領域が確保できない場合、まずキャッシュ管理部130はオペレーティングシステム(OS)に対し、OSが管理しているメモリの空き容量(あるいは使用率など)を問い合わせる(S300)。キャッシュ管理部130は、OSが管理するメモリのうちの一部をキャッシュメモリ140として割り当ててもらっているが、S300ではその割り当てられたメモリ空間を超えて(オーバーフローして)キャッシュメモリ140の領域を一時的に拡大できるかどうかを判定するために、メモリの空き容量を問い合わせるのである。そして、キャッシュ管理部130は、その結果得られたメモリの空き容量に基づき、OSが管理するメモリに、対象エントリのためのキャッシュ領域分だけキャッシュメモリ140のための割当を増やす余裕があるかどうかを判定する(S302)。この判定では、例えば、OSが管理するメモリの空き容量から対象エントリのキャッシュデータサイズを減算し、その減算結果が、OSが適切に動作するためのメモリの空き容量の閾値を超えていれば、「余裕がある」と判定するなどすればよい。
S302でメモリに余裕があると判定すると、キャッシュ管理部130は図34に示す第1(オーバーフロー)方式の処理を実行する。
S302でメモリに余裕がないと判定すると、キャッシュ管理部130は、第2(即時強制解放)方式又は第3(作成完了後解放)方式を選択する。このための手順の例を図40に示す。図40の手順は、図37(第3方式)の手順に似ている。図40の手順では、まず、ステージ1"New Cache"で領域確保済の劣位エントリが残っているかどうかを判定する(S200)。S200の判定結果がNOとなった場合は、図37の手順と同様、S122〜S130の処理を実行する。
S200の判定結果がYESであれば、未処理で残っているステージ1"New Cache"で領域確保済の劣位エントリの中から最もスコアの低いものを1つ抽出する(S202)。そして、抽出した劣位エントリをステージ1"New Cache"からステージ4"Cached Out"に遷移させ(S204)、この領域を解放したと仮定した場合のキャッシュメモリ140の空き容量を計算する。また、抽出した劣位エントリのキャッシュ領域を今すぐに強制的に解放したと仮定した場合のペナルティを評価する(S304)。ここでいう「ペナルティ」は、抽出した各劣位エントリのキャッシュ領域を即時に解放した場合に、それまでそれら劣位エントリのキャッシュデータを作成していた各RIP部120が被る損害を表す評価値である。
S304のペナルティ評価には、様々な方式が考えられる。例えば1つの方式として、評価対象の劣位エントリのキャッシュデータのサイズ(このキャッシュデータは作成中であり未だ完成してはいないが、PDLの記述からキャッシュデータのサイズが計算又は推定され、エントリ管理テーブル132に登録されている)に基づいて評価する方式がある。この方式では、キャッシュデータのサイズが大きいほど、そのキャッシュデータの領域をすぐに解放した場合のペナルティが高くなる。これは、大きいキャッシュデータは、再度作成するのにコストがかかるからである。
また、別の方式では、評価対象の劣位エントリのキャッシュデータの作成の完了率(すなわちキャッシュデータの全体のうち作成が完了した部分の割合)に基づいて評価する。この方式では、キャッシュデータの作成完了率が高いほど、そのキャッシュデータの領域をすぐに解放した場合のペナルティが高くなる。これは、領域解放によりそれまでのキャッシュデータ作成のための処理が無駄になるが、作成完了率が高いほどその無駄が大きくなるためである。なお、この方式のためには、各キャッシュエントリのキャッシュデータの作成完了率は、当該キャッシュデータを作成しているRIP部120から例えば定期的にキャッシュ管理部130に通知する。キャッシュ管理部130は、通知された作成完了率をエントリ管理テーブル132等に登録して管理すればよい。
また、更に別の方式では、評価対象の劣位エントリのキャッシュデータの作成が完了する時刻の予測値(作成完了予測時刻)に基づいて評価する。この方式では、キャッシュデータの作成完了予測時刻が現在時刻に近いほど、そのキャッシュデータの領域をすぐに解放した場合のペナルティが高くなる。これは、作成完了予測時刻が現在時刻に近いほど、対象エントリのためにその作成完了を待つ時間が短いので、すぐに領域を解放しない方が損が少ない(すなわちペナルティが低い)ためである。なお、この方式のためには、各キャッシュエントリのキャッシュデータを作成しているRIP部120から例えば定期的にキャッシュ管理部130に作成完了率を通知し、キャッシュ管理部130が、毎回通知される作成完了率の時間的な変化から、作成完了予測時刻を求めればよい。求めた作成完了予測時刻は、エントリ管理テーブル132等に登録して管理すればよい。
また、S204で計算した空き容量が、対象エントリのキャッシュデータを収容するのに十分な大きさかどうかを判定し(S206)、まだ不十分であれば、S200に戻り、ステージ1"New Cache"で領域確保済の別の劣位エントリが残っている間は、S202、S204、S304の処理を繰り返す。このような繰り返しによりS206の判定結果がYESとなると、キャッシュ管理部130は、S202で抽出した領域解放の対象の劣位エントリのすべてについて、S304で計算したペナルティの値があらかじめ定められた閾値より小さいかどうかを判定する(S306)。ある劣位エントリについてのペナルティが閾値より小さい場合、その劣位エントリのために確保したキャッシュ領域をすぐに解放しても、その解放による不利益(例えば解放される領域にキャッシュデータを作成していたRIP部120が再度PDLデータをRIP処理することによるコスト)が、対象エントリのためのキャッシュエントリをすぐに確保することによる利益より補ってあまりあるものである可能性が高い。逆に言えば、そのような閾値を実験やシミュレーションによりあらかじめ求めておく。
S306の判定で、領域解放対象の劣位エントリのペナルティがすべて閾値より小さければ、どの劣位エントリについてもキャッシュ領域を即時解放しても不利益が少ないということである。この場合、キャッシュ管理部130は、それら領域解放対象の各劣位エントリのキャッシュデータを作成中のRIP部120に領域解放を行う旨を通知し、それら各劣位エントリのために確保したキャッシュ領域を解放する(S308)。これは第2(即時解放)方式である。そして、S208に進み、対象エントリのための領域をキャッシュメモリ140に確保し、要求元のRIP部120に領域確保の旨を示すコードと確保した領域のアドレスの情報を返す。
一方、S306の判定で、領域解放対象の劣位エントリのなかに1つでもペナルティが閾値以上のものがあれば、キャッシュ領域を即時解放すると不利益が多い劣位エントリが存在するということである。この場合、第3(作成完了後解放)方式を採用する。すなわち、キャッシュ管理部130は、領域解放対象のすべての劣位エントリのキャッシュ領域が実際に解放されるのを待ち(S207)、それらすべての劣位エントリの領域が解放された後に、対象エントリのための領域確保を行う(S208)。
図39及び図40の例では、3つの方式を動的に切り替えて使用したが、3つの方式全てを用いる必要はない。別の例として、それら3つの方式のうちの2つを動的に切り替えて使用してもよい。例えば、第1(オーバーフロー)方式と第2(即時強制解放)方式とを動的に切り替える場合は、図39のS300及びS302のステップによりどちらの方式を使用するかを判定すればよい。第1方式と第3(作成完了後解放)方式とを動的に切り替える場合も同様である。また第2方式と第3方式とを動的に切り替える場合は、図40のS304及びS306のステップによりどちらの方式を使用するかを判定すればよい。
以上の例では、第2方式と第3方式を切り替えるのに、S306ですべてのペナルティ値が閾値より小さいか否か、という判定基準を用いたが、これは一例に過ぎない。この代わりに、ペナルティ値が閾値以上である劣位エントリの割合が、あらかじめ定められた割合閾値以下であれば、第2(即時強制解放)方式を採用するなどといった、他の判定基準も考えられる。
なお、以上に説明した本実施形態は、上述の第1例に基づく形で説明したが、上述の第2例に基づく例も考えられる。すなわち、第1例と第2例の相違は、ステージが3"Cached"であり且つ使用カウンタの値が0でないキャッシュエントリの追い出し(キャッシュデータの削除)の予約を明示的(第1例)に行うか、暗黙的に行うか(第2例)の相違であり、この相違は、本実施形態における、ステージ1"New Cache"の領域確保済のキャッシュエントリの領域を解放する処理とは依存関係にない。本実施形態の領域確保方法を第2例に適用する場合、例えば図34の手順のうちS122〜S130のステップ群を、図23のS122、S124及びS125に置き換えればよい。
以上に例示した印刷文書変換システム100、またはこれを構成するジョブ管理部110、RIP部120及びキャッシュ管理部130は、例えば、汎用のコンピュータに上述の各機能モジュールの処理を表すプログラムを実行させることにより実現される。ここで、コンピュータは、例えば、ハードウエアとして、CPU等のマイクロプロセッサ、ランダムアクセスメモリ(RAM)およびリードオンリメモリ(ROM)等のメモリ(一次記憶)、HDD(ハードディスクドライブ)を制御するHDDコントローラ、各種I/O(入出力)インタフェース、ローカル・エリア・ネットワークなどのネットワークとの接続のための制御を行うネットワークインタフェース等が、たとえばバスを介して接続された回路構成を有する。また、そのバスに対し、例えばI/Oインタフェース経由で、CDやDVDなどの可搬型ディスク記録媒体に対する読み取り及び/又は書き込みのためのディスクドライブ、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体に対する読み取り及び/又は書き込みのためのメモリリーダライタ、などが接続されてもよい。上に例示した各機能モジュールの処理内容が記述されたプログラムがCDやDVD等の記録媒体を経由して、又はネットワーク等の通信手段経由で、ハードディスクドライブ等の固定記憶装置に保存され、コンピュータにインストールされる。固定記憶装置に記憶されたプログラムがRAMに読み出されCPU等のマイクロプロセッサにより実行されることにより、上に例示した機能モジュール群が実現される。