説明

ラスタ化のためのメモリマネージメント方法、コンピュータ可読媒体及びコンピュータ可読メモリ

【課題】フレームバッファメモリおよびディスプレイリストメモリを備える単一のメモリプールをマネージメントする。
【解決手段】単一のメモリプールは、複数のスーパーブロックオブジェクトを有するスーパーブロックプールと、複数のノードオブジェクトを有するノードプールと、複数のブロックを有するブロックプールとを含むサブプールを備え得る。この方法は、ローカルサブプールオブジェクトがメモリ要求を満たすために利用できる場合に、メモリ要求側で識別されたサブプールにローカルなオブジェクトを割り当て、メモリ要求がノードプールまたはブロックプールへ向けられており、メモリ要求を満たすために各サブプール内に利用可能なローカルオブジェクトが存在しない場合に、スーパーブロックプールからのオブジェクトを割り当て、サブプールが利用可能な空きオブジェクトを欠く場合に、複数のメモリ解放ストラテジーのうちの少なくとも1つを適用する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、印刷の分野に関し、詳しくは、ラスタ化のためのメモリマネージメント方法、コンピュータ可読媒体及びコンピュータ可読メモリに関する。
【背景技術】
【0002】
文書処理ソフトウェアによれば、ユーザは、文書を都合よく閲覧し、編集し、処理し、記憶することができる。文書中のページは、それらが印刷物に現れるとおりに、スクリーン上に正確に表示され得る。しかしながら、文書を印刷する前に、文書中のページは、多くの場合、ページ記述言語(「PDL」)で記述される。この文書において使用されるように、PDLには、ポストスクリプト(商標)、アドビ(商標)PDF、HP(商標)PCL、マイクロソフト(商標)XPS(商標)、並びにこれらの変形体、および文書中のページを記述するために使用される他の言語が含まれ得る。文書のPDL記述によれば、文書中のそれぞれのページのハイレベルな記述がもたらされる。このPDL記述は、文書が印刷されるときには、多くの場合、一連のよりローレベルなプリンタ特有コマンドへ変換される。文書のPDL記述から、印刷媒体にマークを付けるために使用することのできる、よりローレベルの記述への変換の処理は、ラスタ化と称される。
【0003】
PDLからよりローレベルなプリンタ特有コマンドへの変換処理は、複雑になりかねず、また、特定のプリンタによってもたらされる特性および機能に左右されることがある。文書のPDL記述をプリンタ特有コマンドへ変換するための、順応性がありかつ移植可能な(portable)多目的方式によれば、利用可能なメモリ、所望の印刷速度、他のコストおよび性能基準に基づいたプリンタ性能の最適化が可能になる。
【発明の概要】
【発明が解決しようとする課題】
【0004】
従来、印刷システムにおけるメモリは、ディスプレイリストメモリとフレームバッファメモリとを備える2つの別個のプールに体系化(organized)されている。ディスプレイリストメモリは、一般にラスタ化のためのディスプレイリストオブジェクトを保持し、フレームバッファメモリは、一般に、印刷されるページに形成されるべきマークを特定するビットマップデータを保持する。別個のメモリプールの使用は、フレームバッファ目的のためのディスプレイリストメモリの使用を妨げ、逆もまた同様である。印刷失敗はいずれかのプール内のメモリ不足に起因して生じる可能性がある。このような状況では、一方のプール内に十分な追加メモリが存在することがあるが、2つのプールの分離性のため、メモリは他方のメモリプールで使用するためには利用不可能である。その上、ディスプレイリストメモリプールおよびフレームバッファメモリプールをマネージメントするための別個のメモリのマネージメントルーチンの使用は、プロダクトファミリを通じてメモリをマネージメントするために使用されるコードを修正し維持するのを困難にすることがある。個別のプロダクトにおいては、異なるストラテジー(strategies)および最適化が使用され得るためである。たとえば、ディスプレイリストメモリが使い尽くされるとき、あるプロダクトは事前ラスタ化を始動させ、別のプロダクトはディスプレイリストメモリをディスクにスワップすることがある。統一性の欠如と、実施されるメモリマネージメントルーチンの多くの場合でのばらばらな組み合わせとが、最新版を提供すること、および機能性と性能を改善することの困難さを非常に増大させる。
【0005】
よって、ラスタ化のためのプリンタ上のメモリをマネージメントする方法、コンピュータ可読媒体及びコンピュータ可読メモリであって、付加的な最適化を行いつつ、継ぎ目のないアップグレードパスを可能にするものが求められている。
【課題を解決するための手段】
【0006】
開示された実施形態によれば、フレームバッファメモリおよびディスプレイリストメモリを備える単一のメモリプールをマネージメントする方法、コンピュータ可読媒体及びコンピュータ可読メモリが示される。いくつかの実施形態では、単一のメモリプールは、複数のスーパーブロックオブジェクトを有するスーパーブロックプールと、複数のノードオブジェクトを有するノードプールと、複数のブロックオブジェクトを有するブロックプールと、を含むサブプールを備えることができる。この方法は、サブプールのうちの少なくとも1つへ向けられたメモリ割り当て要求を受信するステップと、ローカルオブジェクトがメモリ要求を満たすためにサブプール内で利用可能である場合に、メモリ要求に応答してサブプールにローカルなオブジェクトを割り当てるステップと、メモリ要求がノードプールまたはブロックプールへ向けられており、メモリ要求を満たすためにそれぞれのサブプール内に利用可能なローカルオブジェクトが存在しない場合に、メモリ要求に応答してスーパーブロックプールからのオブジェクトを割り当てるステップと、いずれのサブプール内にも利用可能な空きオブジェクトが存在しない場合に、複数のメモリ解放ストラテジーのうちの少なくとも1つを適用するステップと、を備えることがある。
【0007】
実施形態は、コンピュータ可読媒体またはコンピュータ可読メモリを使用してプロセッサによって作成、保存、アクセス、または、修正された方法にも関する。
【0008】
上記の実施形態およびその他の実施形態は次の図面を参照して以下にさらに説明されている。
【図面の簡単な説明】
【0009】
【図1】いくつかの実施形態により文書を印刷するシステムにおける構成要素を示すブロック図である。
【図2】例示的なプリンタのハイレベルブロック図である。
【図3】メモリプールのマネージメントのためのシステムの例示的なハイレベルアーキテクチャを示す図である。
【図4】メモリプール310のマネージメントのための例示的なクラス階層を示す図である。
【図5】ラスタ化での例示的なメモリの割り当てを説明するためのスナップショットを示す図である。
【図6】メモリプール310からの新しいブロックの割り当てのためのアルゴリズムの例示的なフローチャート700である。
【図7】割り当てられたブロックへのポインタを取得するために例示的な方法で実行されるステップを説明するフローチャートである。
【図8】割り当てられるべき適切なメモリプールと、対応するオブジェクトとを決定する例示的な所定のルーチン730のフローチャートである。
【発明を実施するための形態】
【0010】
本発明の種々の特徴を反映する実施形態によれば、第1の印刷可能データから生成される第2の形式すなわち中間形式の印刷可能データの自動的な保存、操作、および処理のシステムおよび方法が示される。いくつかの実施形態では、第1の印刷可能データは文書のPDL記述の形式をとることがあり、中間印刷可能データはPDL記述から生成されるオブジェクトのディスプレイリストの形式をとることがある。
【0011】
図1は、本発明のいくつかの実施形態によって文書を印刷するためのシステムにおける構成要素を示すブロック図である。図1に示すように、本発明と整合性を有するコンピュータソフトウェアアプリケーションはコンピュータのネットワークで展開することができ、このネットワークは、従来の通信プロトコルおよび/またはデータポートインターフェースを使って情報が交換されることを可能にする通信リンクを介して接続されている。
【0012】
図1に示すように、例示的なシステム100には、演算装置110とサーバ130とを含む複数のコンピュータが備えられる。さらに演算装置110とサーバ130とはコネクション120を通して交信し、コネクションはネットワーク140を通る。ネットワーク140は、一例ではインターネットとすることもできる。演算装置110はコンピュータワークステーション、デスクトップコンピュータ、ラップトップコンピュータ、またはネットワーク環境で使用することのできる他の演算装置とすることができる。サーバ130は、演算装置110およびその他の装置(図示しない)へ接続することのできるプラットフォームとすることができる。演算装置110とサーバ130とは、プリンタ170を使った文書の印刷を可能にするソフトウェア(図示しない)を実行することができる。
【0013】
例示的なプリンタ170は電子データから物理文書を生成する装置を含んでおり、この装置にはレーザープリンタ、インクジェットプリンタ、LEDプリンタ、プロッタ、ファクシミリ装置、およびディジタルコピー機が包含されるが、これらに限定されない。いくつかの実施形態では、プリンタ170は、演算装置110またはサーバ130からコネクション120を介して受信した文書を直接印刷することもできる。いくつかの実施形態においては、このような構成は、演算装置110またはサーバ130による追加の処理を伴って(またはこれを伴わずに)、文書の直接印刷を可能にする。いくつかの実施形態においては、文書はテキスト、図形、および画像のうちの1つ以上を含む。いくつかの実施形態においては、プリンタ170は印刷用の文書のPDL記述を受信することができる。また、文書印刷処理を分散させることもできることに留意されたい。よって、演算装置110、サーバ130、および/またはプリンタ170は、文書がプリンタ170によって物理的に印刷される前に、ハーフトーニング、カラーマッチング、および/またはその他の操作プロセスといった文書印刷処理の部分を実行し得る。
【0014】
また演算装置110は着脱可能型メディアドライブ150も含む。着脱可能型メディアドライブ150には、例えば、3.5インチフロッピードライブ、CD−ROMドライブ、DVD−ROMドライブ、CD±RWもしくはDVD±RWドライブ、USBフラッシュドライブ、および/または本発明の実施形態と整合性を有する他の着脱可能型メディアドライブなどが含まれ得る。いくつかの実施形態においては、ソフトウェア・アプリケーションの一部は、着脱可能型メディアに存在していてもよく、また、着脱可能型メディアドライブ150を使用して演算装置110によって読み取られ、実行される。
【0015】
コネクション120は、演算装置110とサーバ130とプリンタ170とを接続するものであり、従来の通信プロトコルおよび/またはデータポートインターフェースを使った有線または無線の接続として実施され得る。一般にコネクション120は、装置間のデータの伝送を可能にする任意の通信路とすることができる。一実施形態では、例えば各装置は、パラレルポート、シリアルポート、イーサネット(商標)、USB、SCSI、FIREWIRE(商標)、および/または適切な接続を介したデータ伝送用の同軸ケーブルポートといった、従来のデータポートを備える。いくつかの実施形態においては、コネクション120は、ディジタル加入者線(DSL)、非対称ディジタル加入者線(ADSL)、またはケーブル接続とすることができる。通信リンクは無線リンクでも、有線リンクでも、様々な装置間の通信を可能とする本発明の各実施形態と整合性を有する任意の組み合わせとすることもできる。
【0016】
ネットワーク140はローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)、またはインターネットを含んでいてもよい。いくつかの実施形態においては、ネットワーク140を介して送られる情報は、送信されるデータのセキュリティを確保するために暗号化することができる。プリンタ170はコネクション120を介してネットワーク140へ接続することができる。いくつかの実施形態においては、プリンタ170は演算装置110および/またはサーバ130へ直接接続される。またシステム100は、本発明のいくつかの実施形態によれば、他の周辺機器(図示しない)を含んでいてもよい。本発明と整合性を有するコンピュータソフトウェアアプリケーションは、図1に示すように、例示的コンピュータおよびプリンタのいずれに配備されていてもよい。例えば、演算装置110は、サーバ130から直接ダウンロードされるソフトウェアを実行することもできる。これらのアプリケーションの各部分は、本発明のいくつかの実施形態に従って、プリンタ170によって実行されても良い。
【0017】
図2に例示的なプリンタ170のハイレベルなブロック図を示す。いくつかの実施形態においては、プリンタ170は、CPU176、ファームウェア171、メモリ172、入出力ポート175、印刷エンジン177、および補助記憶装置173を接続するバス174を含む。またプリンタ170は、本発明のいくつかの実施形態によれば、PPMLを処理するためのアプリケーションの一部分を実行することのできるその他の特定用途向け集積回路(ASIC)、および/またはフィールドプログラマブルゲートアレイ(FPGA)178を含んでいてもよい。いくつかの実施形態では、プリンタ170は、入出力ポート175およびコネクション120を使って2次記憶メモリまたは演算装置110内のその他のメモリにアクセスすることもできる。いくつかの実施形態では、プリンタ170は、プリンタオペレーティングシステムおよび他の適切なアプリケーションソフトウェアを含むソフトウェアを実行することもできる。いくつかの実施形態においては、プリンタ170は、他のオプションのうち、用紙サイズ、排紙トレイ、色選択、および印刷解像度をユーザ設定可能なものにすることができる。
【0018】
いくつかの実施形態では、CPU176は、汎用プロセッサとすることも、専用プロセッサとすることも、組み込みプロセッサとすることもできる。CPU176は、制御情報および命令を含むデータをメモリ172および/またはファームウェア171と交換することができる。メモリ172は、SDRAMやRDRAMといった任意の種類のダイナミックランダムアクセスメモリ(DRAM)とすることができるが、これらには限定されない。ファームウェア171は、起動シーケンス、事前定義のルーチン、およびその他のコードを含む命令およびデータを保持するが、これらには限定されない。いくつかの実施形態では、ファームウェア171の中のコードおよびデータは、CPU176によって処理される前にメモリ172へコピーされる。ファームウェア171に含まれるルーチンには、演算装置110から受け取られるページ記述をディスプレイリストおよび画像バンドへ変換するためのコードを含めることができる。いくつかの実施形態においては、ファームウェア171には、ディスプレイリストにおける表示コマンドを適切なラスタ化ビットマップへ変換するとともに当該ビットマップをメモリ172の中に記憶するためのラスタ化ルーチンが含まれても良い。また、ファームウェア171には、圧縮ルーチンおよびメモリマネージメントルーチンが含まれていてもよい。いくつかの実施形態においては、ファームウェア171内のデータおよび命令をアップグレード可能とすることもできる。
【0019】
いくつかの実施形態においては、CPU176が命令およびデータに従って動作し、ASICS/FPGAS178および印刷エンジン177に制御およびデータを提供して印刷文書を生成する。いくつかの実施形態においては、ASICS/FPGAS178が印刷エンジン177に制御およびデータを提供する。またFPGAS/ASICS178は、変換、圧縮、およびラスタ化のアルゴリズムのうちの1つ以上を実施してもよい。いくつかの実施形態においては、演算装置110が文書データを第1の印刷可能データに変換することができる。次いで第1の印刷可能データを、中間印刷可能データに変換するためにプリンタ170に送ることができる。プリンタ170は、中間印刷可能データを最終形態の印刷可能データに変換して、この最終形態に従って印刷を行う。いくつかの実施形態においては、第1の印刷可能データは、文書のPDL記述に該当する。いくつかの実施形態では、文書のPDL記述から、一連のよりローレベルなプリンタ特有コマンドを有する上記最終形態の印刷可能データへの変換処理には、オブジェクトのディスプレイリストを有する中間印刷可能データの生成が含まれている。
【0020】
いくつかの実施形態では、ディスプレイリストには、テキスト、図形、および画像のデータオブジェクトの1つ以上が保有されていてもよい。いくつかの実施形態では、ディスプレイリストの中のオブジェクトは、ユーザ文書の中の類似オブジェクトに対応していてもよい。いくつかの実施形態では、ディスプレイリストは、中間印刷可能データの生成を支援することができる。いくつかの実施形態では、ディスプレイリストは、メモリ172あるいは補助記憶装置173の中に記憶することができる。例示的な補助記憶装置173は、内部あるいは外部のハードディスク、メモリスティック、あるいはシステム200に使用することのできる他の記憶装置であってよい。いくつかの実施形態では、上記ディスプレイリストは、プリンタ170、演算装置110、およびサーバ130の1つ以上に存在していてもよい。ディスプレイリストを記憶するためのメモリは、開示された実施形態によれば、専用メモリであってもよく、または、汎用メモリの一部を形成してもよく、または、専用メモリと汎用メモリのある種の組み合わせでもよい。いくつかの実施形態では、メモリは、複数のディスプレイリストを必要に応じて保有するために動的(dynamically)に割り当てることができるようになっている。いくつかの実施形態では、複数のディスプレイリストを記憶するために割り当てられたメモリは、処理の後に動的に解放(released)されるようになっている。
【0021】
図3はメモリプールのマネージメントのためのシステムの例示的なハイレベルアーキテクチャを示している。図3に示されているように、言語サーバ340、エンジンサーバ360、およびラスタサーバ320は、互いに通信することができる。加えて、言語サーバ340、エンジンサーバ360、およびラスタサーバ320は、ルーチンを呼び出すとともにRDLライブラリ330と通信することができる。このシステムは、ラスタサーバ320、エンジンサーバ360、およびメモリマネージメントアプリケーションプログラミングインターフェイス(API)370と通信するフレームバッファマネージメントライブラリ335をさらに含んでもよい。いくつかの実施形態では、メモリマネージャ375によって提供される機能性(functionality)の使用は、メモリマネージメントアプリケーションプログラミングインターフェイス(API)370を介して行われてもよい。メモリマネージャ375はメモリマネージメントAPI370の機能(functions)を定義する。いくつかの実施形態では、フレームバッファライブラリ335内のコードのように、ディスプレイリストおよびフレームバッファ350に関係があるコードは、メモリマネージメントAPI370を介してメモリマネージャ375と接続する(intreface)。したがって、これらの実施形態では、メモリマネージャは、ディスプレイリストまたはフレームバッファをマネージメントおよび/または操作するために使用されるプログラムコードを変更することなく、プロダクト固有のメモリマネージャによって置き換えられるか、または修正され得る。いくつかの実施形態では、ディスプレイリストは、印刷されるべき文書内、または印刷されるべき文書におけるページ内でのデータオブジェクトと、これらデータオブジェクトのコンテキストとを定義するコマンドを含んでもよい。これらの表示コマンドには、文字あるいはテキスト、ラインドローイングあるいはベクトル、及び、画像あるいははラスタデータを有するデータが含まれていてもよい。
【0022】
いくつかの実施形態では、ディスプレイリストは、動的に再構成することのできるものであり、また、再構成可能型ディスプレイリスト(RDL)と呼ばれる。1つの実施形態では、或るディスプレイリストオブジェクトが動的に操作できる態様で記憶されるデータ構造を使用して、RDLを実施することができる。例えば、画像オブジェクトは、利用可能なメモリの量を増大させるために適切に圧縮されてもよく、また、参照されかつ/または使用されるときに復元されてもよい。いくつかの実施形態では、RDLはまた、RDLオブジェクトの実際の記憶場所へのポインタ、オフセット値(offsets)、あるいはアドレスを保持することでRDLオブジェクトをメモリおよび/または補助記憶装置に記憶させることができ、その後、RDLオブジェクトが参照されかつ/または使用されるときにこの実際の記憶場所が検索される。一般に、RDLによれば、ディスプレイリストオブジェクトは、順応性を伴って記憶することができるとともに、システムの制約条件およびパラメータに基づいて操作することができる。
【0023】
1つの実施形態では、文書のPDL記述をディスプレイリストおよび/またはRDL表示へ変換することは、RDLライブラリ330およびメモリマネージャ375の中のルーチンを用いて言語サーバ340によって実行することができる。例えば、言語サーバ340は、PDL言語基本要素を受け取り、かつ、これらのPDL言語基本要素をデータおよび図形オブジェクトに変換し、さらに、RDLライブラリ330およびメモリマネージャ375の中の関数によってもたらされる機能を用いて、再構成可能なディスプレイリストへこれらデータおよび図形オブジェクトを追加することができる。いくつかの実施形態では、メモリマネージャ375の中の関数およびルーチンへのアクセスは、メモリマネージメントAPI370を通してもたらされる。いくつかの実施形態では、ディスプレイリストは、例示的なメモリプール320のような、動的に割り当てられたメモリプールの中において、記憶され、操作される。このメモリプールは、メモリ172の一部であってもよい。
【0024】
いくつかの実施形態では、RDLを作成することは、実際の印刷に先立つデータの処理における中間ステップであってもよい。RDLは、変換される前に、その後の形態(a subsequent form)に構文解析される。いくつかの実施形態では、その後の形態は最終表示であってもよく、また、変換処理はデータのラスタ化と呼ばれることがある。いくつかの実施形態では、フレームバッファマネージメントライブラリ335内のルーチンを使用してラスタ化はラスタサーバ320によって実行されてもよい。ラスタ化の際に、ラスタ化されたデータは、メモリマネージメントAPI370を介してアクセスされるメモリマネージャ375内のルーチンを使用して、メモリプール310の一部分であるフレームバッファ350内に保存されてもよい。いくつかの実施形態では、ラスタ化されたデータは、印刷ページに付けられるマークを指定するビットマップの形態を採ることができる。
【0025】
一実施形態では、メモリマネージャ375内のルーチンは、メモリ172内における利用可能なメモリのいくつかのサブセットをメモリプール310として管理し、メモリマネージメントAPI370を介して、要求されている処理にメモリプール310中からメモリを割り当ててもよい。いくつかの実施形態では、メモリマネージャ375は、メモリマネージメントAPI370と相互作用し、メモリマネージャ375によって提供される機能へのアクセスがメモリマネージメントAPI370を介して行われる。要求されている処理によってメモリがもはや必要とされないときには、メモリは、割り当て解除されてメモリプール130へ戻り、他の処理に利用可能なものとなることができる。いくつかの実施形態では、メモリマネージャ370内のルーチンには、メモリ解放へのルーチン(routines to free memory)、メモリ回復へのルーチン(routines to recover memory)、およびメモリを補助記憶装置173へスワップすることのできるスワッピングルーチンが包含される他のさまざまなメモリマネージメントルーチンもまた含まれている。いくつかの実施形態では、フレームバッファ350はメモリプール310の一部分でもよく、メモリマネージャ370によって管理されてもよい。たとえば、フレームバッファマネージメントライブラリ335内の関数への呼び出しは、メモリマネージメントAPI370内の関数への呼び出しをもたらすことがある。その後に、メモリマネージメントAPIは、メモリマネージャ370内の1つ以上の関数を呼び出すことがある。メモリマネージャ375によって行われた動作の結果は、呼び出し側プロセスへ送られる(be routed back to)ことがある。一実施形態では、フレームバッファ350は、メモリの一次連続ブロック(an initial contiguous block)へ割り当てられてもよく、また、その後のメモリブロックは、要求されたときにフレームバッファ350へ割り当てられてもよい。メモリブロックは、他のフレームバッファ目的のためにメモリプール310から割り当てられてもよい。いくつかの実施形態では、フレームバッファ350またはその他の処理に割り当てられた異なるメモリブロックによって、メモリ172内の非連続な記憶場所が占領される。
【0026】
印刷エンジン177は、フレームバッファライブラリ335内のルーチンを使用して、ラスタ化されたデータをフレームバッファ350の中で処理し、用紙のような印刷媒体の上にページの印刷可能画像を形成することができる。いくつかの実施形態では、ラスタサーバ320およびエンジンサーバ360はまた、これらの機能を実行するために、RDLライブラリ330の中のルーチンを使用することができる。いくつかの実施形態では、エンジンサーバ360は、印刷エンジン177へ制御情報、指示、およびデータを提供することができる。いくつかの実施形態では、エンジンサーバ360は、メモリプール320へ返却するための処理後に、フレームバッファライブラリ及びメモリマネージメントAPI370を介してメモリマネージャ375によって提供される機能を使用して、ディスプレイリストオブジェクトによって使用されたメモリを解放させるルーチンを呼び出すことがある。いくつかの実施形態では、RDLメモリプールの一部および/またはフレームバッファ350は、メモリ172あるいは補助記憶装置173の中に存在していてもよい。いくつかの実施形態では、言語サーバ340、ラスタサーバ320、およびエンジンサーバ360のためのルーチンはファームウェア171の中に設けられてもよく、あるいは、ASICS/FPGAS178を使用して実施されてもよい。
【0027】
図4は、ラスタ化中にメモリプールをマネージメントするシステムの例示的なオブジェクト指向型実施における例示的なクラス図500の一部を示している。このクラス構造は、永続的な(persistent)単体のmm主制御装置510を含む。mm主制御装置510を永続的な単体として宣言することによって、mm主制御装置510の単一インスタンスがあるということと、mm主制御装置510の同一性がコード実行中に変化しないということと、mm主制御装置510へのアクセスの大域包括的な箇所(a global point of access to Master Control)があるということが保証される。クラス、サブクラス、および/またはオブジェクト520〜560によって、ラスタ化中のメモリマネージメントのためのシステムの一つの実施が示されている。さまざまなクラスに属しているオブジェクトは、実行中にインスタンス化することができる。
【0028】
図4に示されているように、mm主制御装置510は、クラスmmプール560の3つのオブジェクトを含む。これらのオブジェクトは、ノードオブジェクト、ブロックオブジェクト、およびスーパーブロックオブジェクトを有する。これらのmmプールオブジェクトは、共有されたメモリプール310のマネージメントにおいて使用され得る。たとえば、メモリプール310は、スーパーブロックプール560−1、ノードプール560−2、およびブロックプール560−3を有すると論理的にみなされ得る。したがって、スーパーブロックプール560−1、ノードプール560−2、およびブロックプール560−3は、メモリプール310のサブプールである。さらに、各サブプールは当該サブプールにローカルな(local to that sub-pool)オブジェクトを有する可能性がある。オブジェクトと共に「ローカル」という用語を使用することは、記述的な目的のためにオブジェクトとそれぞれのプールとを関連付けるだけのために役立つ。したがって、スーパーブロックオブジェクトはスーパーブロックプール560−1にローカルでもよく、ノードオブジェクトはノードプール560−2にローカルでもよく、ブロックオブジェクトはブロックプール560−3にローカルでもよい。たとえば、フレームバッファ350と関連付けられたフレームバッファマネージメントライブラリ335内のルーチンは、メモリマネージメントAPI370を介してメモリマネージャ375を使用し、スーパープール560−1にスーパーブロックを要求することが可能である。同様に、RDLによってブロックオブジェクトがブロックプール560−3に要求されることがある。mmノードオブジェクト530は、ブロック割り当ておよびスーパーブロック割り当てをマネージメントする要求時に、ノードプール560−2からメモリマネージャ575によって割り当てられ得る。一実施形態では、1つのmmノードオブジェクト530は、ブロックの割り当て毎、或いはスーパーブロックの割り当て毎に使用されてもよい。いくつかの実施形態では、1つずつの個別のオブジェクトは、メモリの離散的な連続セクションを含んでもよい。
【0029】
いくつかの実施形態では、mm主制御装置510は、mm優先度つきキューオブジェクト(PriorityQueue object)550を含むことができる。図4に示されているように、mm優先度つきキューオブジェクト550はmmリストオブジェクト540を含むことができる。さらに、mmリストオブジェクト540は、mmリンクオブジェクト520を使用してmmノードオブジェクト530を保持する。いくつかの実施では、mmノードオブジェクト530は、割り当て済みのブロックまたはスーパーブロックのそれぞれの経過を追う(keeps track)。mm優先度つきキューオブジェクト550はスワップ可能なブロックの経過を追うために使用され得る。利用可能なメモリが少なく、スワッピングが使用可能であるとき、mm優先度つきキューオブジェクト550は、メモリからブロックをスワップする順序を決定するために使用され得る。たとえば、割り当て済みブロックは優先度と関連付けられ得る。たとえば、優先度は、ブロックをアクセスしやすい状態に保つことで得られる性能優位性の指標である場合がある。一実施形態では、mm優先度つきキューオブジェクト550は、優先度の増加する順序にオブジェクトを順序付け、これによって、低優先度ブロックが高優先度ブロックよりも先にスワップアウトされることを可能にすることがある。その他の関数およびルーチンは、1つ以上の高優先度のメモリチャンクを瞬時にアクセスできる形式に保つために優先番号を使用することがある。
【0030】
図5は、ラスタ化でのメモリプール310の例示的な割り当てを説明するためのスナップショット600を示している。ラスタ化中の様々な時点で、メモリプール310は、空きスーパーブロック630、割り当て済みスーパーブロック630−2、空きブロック610−1および割り当て済みブロック610−2にのいくつかの組み合わせを含むことがある。論理的な観点から、メモリプール310は、最初は空きスーパーブロック630−1、ノードブロック、および空きブロック610−1の集まりであると考えてもよい。いくつかの実施形態では、全てのスーパーブロックオブジェクトは、一様な一定サイズでもよい。いくつかの実施形態では、ブロックオブジェクトもまた一様な一定サイズでもよい。いくつかの実施形態では、ブロックオブジェクトの一様な一定サイズは、スーパーブロックオブジェクトのサイズより小さく、スーパーブロックオブジェクトのサイズと異なる。いくつかの実施形態では、スーパーブロックオブジェクトのサイズはブロックオブジェクトのサイズの整数倍でもよい。いくつかの実施形態では、スーパーブロックオブジェクトのサイズはブロックオブジェクトのサイズの偶数倍でもよい。たとえば、図5に示されているように、スーパーブロック630のサイズは4つのブロック610のサイズと等しくてもよい。
【0031】
例えばビットマップを保存するためなど、フレームバッファ350による使用のためにメモリが要求されるときには、スーパーブロック630−1が割り当てられ得る。RDLのため、または一時的な保存および処理の目的のためにメモリが要求されるときには、より小さい単位のメモリが割り当てられ得る。たとえば、空きスーパーブロック630−1は等しいサイズのブロック610に分割されることができ、これらのブロック610の1つがRDLのため、または、一時的な保存および処理の目的のために使用されるときに割り当てられ得る。スーパーブロックプール560−1、ノードプール560−2、およびブロックプール560−3の使用は、一つには、メモリ割り当ての細かさ(granularity)を制御することを可能にする。ノードプール560−1およびブロックブール560−3は、スーパーブロックプール560−1からのメモリを割り当てるときに増大することができる。いくつかの実施形態では、メモリプール310内でばらばらに散在するブロックから新しいスーパーブロックを作成するために、メモリデフラグルーチンは、周期的に、または、利用可能なメモリがある種の閾値より少ないときに用いられ、或いは、メモリを解放するストラテジーとして用いられることがある。
【0032】
図6は、メモリプール310から新しいブロック610−1を割り当てるアルゴリズムの例示的なフローチャート700を示している。ステップ710において、アルゴリズムが呼び出される。次に、所定のルーチン730において、新しいノードオブジェクトがノードプール560−2から割り当てられる。いくつかの実施形態では、新しいオブジェクトのためのメモリの割り当ては、新しい要素を割り当てる一般的な(generic)所定のルーチンを使用して実行されることがある。所定のルーチン730は、適切なメモリプール560と、割り当てられるべき対応オブジェクトとを決定するために、供給されるパラメータを使用することがある。たとえば、所定のルーチン730は、ノードプール560−2から新しいノードを割り当ててもよい。ステップ740において割り当てが成功であると判定される場合には、異なるパラメータのセットと共に所定のルーチン730を使用して、新しいスーパーブロック630−1又はブロック610−1が割り当てられてもよい。たとえば、メモリがビットマップを保存するためにフレームバッファ350によって使用中である場合には、所定のルーチン730はスーパーブロックプール560−3から新しいスーパーブロック630−1を割り当てることがある。ステップ760において割り当てが成功であると判定される場合には、新たに割り当てられるブロック610−2がノードに割り当てられ、当該ノードはステップ770において優先度つきキューに収容されることがある。いくつかの実施形態では、ノードはmm優先度つきキューオブジェクト550にリンクされてもよい。所定のルーチン730を使用した割り当てが失敗である場合には、アルゴリズムはステップ780へ進み、「割り当て失敗」メッセージが呼び出し側ルーチンへ返送されてもよい。
【0033】
図7は、割り当て済みブロック610−2へのポインタを取得するための例示的な方法で実行されるステップを示すフローチャート800である。ステップ810において、アルゴリズムが呼び出される。次に、ステップ820において、割り当て済みブロック610−2に対応するノードが決定され得る。ステップ830および840においてそれぞれ判定されるように、ブロック610−2がメモリ内に存在し、ブロック610−2に対応するノードの参照カウントが「0」である場合には、ステップ850において、ノードが優先度つきキューから削除されることがある。いくつかの実施形態では、ノードを削除するために適切な動作がmm優先度つきキューオブジェクト550で実行されることがある。
【0034】
ステップ830において判定され得るように、ブロック610−2がメモリ内に存在しない場合には、所定のルーチン730は供給されるパラメータを使用し、適切なメモリプール560と、割り当てられるべき、対応するスーパーブロック又はブロックオブジェクトとを決定することができる。次に、ステップ880において判定され得るように、オブジェクトの割り当てが成功の場合には、ブロック610−2のためのデータが補助記憶装置173から読み出されるか、またはスワップインされ、アルゴリズムはステップ860へ進む。ステップ840において、ノードの参照カウントが零でない場合には、アルゴリズムはステップ860へ進むことができる。ステップ860において、ノードの参照カウントが1つ増加され、ブロック610−2へのポインタが返却されることがある。ステップ880において所定のルーチン730によるメモリの割り当てが失敗であると判定される場合には、ステップ895において「メモリ不足」メッセージが呼び出し側ルーチンへ返送される。
【0035】
図8は、適切なメモリプールと、割り当てられるべき対応オブジェクトとを決定する例示的な所定のルーチン730のフローチャートを示している。ステップ910において、アルゴリズムが呼び出される。次に、ステップ920において、使用されるべきサブプールが決定される。いくつかの実施形態では、サブプールは、スーパーブロックプール560−1でもよく、または、ノードプール560−2とブロックプール560−3との一方でもよい。割り当て要求がスーパーブロックプール560−1に対して行われると、ステップ930において、スーパーブロックプール560−1内のスーパーブロック630−1の可用性が決定され得る。スーパーブロック630−1が利用可能である場合には、ステップ940においてスーパーブロック630−1が割り当てられ得る。たとえば、スーパーブロック630−1は、フレームバッファ350と関連付けられたルーチンに割り当てられることがある。
【0036】
ノードプール560−2またはブロックプール560−3に対してブロック610−1の要求が行われる場合には、ステップ965において、ノードプール560−2またはブロックプール560−3における空き、もしくは割り当てられていない要素又は割り当てユニットについての可用性が決定され得る。ノードオブジェクトまたはブロック610−1が利用可能である場合には、ステップ970において、要求されるオブジェクトのタイプに基づいてノードオブジェクトまたはブロック610−1が割り当てられ得る。たとえば、ノードオブジェクトがメモリマネージャ375による内部使用のために割り当てられてもよい。ステップ965における可用性のチェックによってノードプール560−2またはブロックプール560−3内に空き要素または割り当てられていない要素が存在しないと判定される場合には、アルゴリズムはステップ930へ進む。ステップ930において、スーパーブロックプール560−1内のスーパーブロック630−1の可用性が判定され得る。スーパーブロック630−1が利用可能である場合には、ステップ940においてスーパーブロックはブロック610−1に分割され、適切なプール560−2または560−3に割り当てられ得る。たとえば、スーパーブロック630−1はブロック610−1に分割され、1つのブロック610−1がRDLに割り当てられてもよい。
【0037】
スーパーブロックプール560−1内に利用可能なスーパーブロック630−1が存在しない場合には、ステップ960において、アルゴリズムは、複数のメモリ解放ストラテジーのうちの一つを呼び出すことができる。たとえば、このアルゴリズムは、メモリが別のプロセスによって解放されるまで待機することができる。いくつかの実施形態では、アルゴリズムは、低優先度のノードを優先度つきキューから補助記憶装置173にスワップすることがある。メモリ解放ストラテジーが失敗の場合には、アルゴリズムは、メモリ不足を呼び出し側プロセスに報告することがある。
【0038】
本発明の他の実施形態は、本明細書の考察、及び、本明細書中に開示された本発明の1つ以上の実施形態の実施により、当業者にとって明らかになるであろう。明細書及び例は例示的なものに過ぎないことを意図しており、本発明の本来の範囲及び要旨は、以下の特許請求の範囲に示されるものである。
【符号の説明】
【0039】
100 システム
110 演算装置
120 コネクション
130 サーバ
140 ネットワーク
150 着脱可能型メディアドライブ
170 プリンタ
171 ファームウェア
172 メモリ
173 補助記憶装置
174 バス
175 入出力ポート
176 CPU
177 印刷エンジン
178 FPGA
310 メモリプール
320 ラスタサーバ
330 RDLライブラリ
335 フレームバッファマネージメントライブラリ
340 言語サーバ
350 フレームバッファ
360 エンジンサーバ
370 メモリマネージメントアプリケーションプログラミングインターフェイス
375 メモリマネージャ
510,520,530,540,550,560 オブジェクト
560−1 スーパーブロックプール
560−2 ノードプール
560−3 ブロックプール
600 メモリレイアウト
610−1 空きブロック
610−2 割り当て済みブロック
630−1 空きスーパーブロック
630−2 割り当て済みスーパーブロック

【特許請求の範囲】
【請求項1】
フレームバッファメモリおよびディスプレイリストメモリを備える単一のメモリプールをマネージメントする方法であって、
前記単一のメモリプールは、
複数のスーパーブロックオブジェクトを有するスーパーブロックプールと、
複数のノードオブジェクトを有するノードプールと、
複数のブロックオブジェクトを有するブロックプールと、
を含むサブプールを備え、
当該方法は、
前記サブプールのうちの少なくとも1つへ向けられたメモリ割り当て要求を受信するステップと、
前記メモリ要求を満たすためにローカルオブジェクトが前記サブプール内で利用可能である場合に、前記メモリ要求内で識別された前記サブプールにローカルなオブジェクトを割り当てるステップと、
前記メモリ要求が前記ノードプールまたは前記ブロックプールへ向けられており、前記メモリ要求を満たすために各サブプール内に利用可能なローカルオブジェクトが存在しない場合に、前記スーパーブロックプールからのオブジェクトを割り当てるステップと、
いずれの前記サブプール内にも利用可能な空きオブジェクトが存在しない場合に、複数のメモリ解放ストラテジーのうちの少なくとも1つを適用するステップと、
を備える方法。
【請求項2】
前記スーパーブロックプールが整数個の均一サイズのスーパーブロックオブジェクトを備え、
前記ブロックプールが整数個の均一サイズのブロックオブジェクトを備え、
前記スーパーブロックオブジェクトのサイズが前記ブロックオブジェクトのサイズの整数倍である請求項1に記載の方法。
【請求項3】
前記スーパーブロックオブジェクトのサイズが前記ブロックオブジェクトのサイズの偶数倍である請求項2に記載の方法。
【請求項4】
前記複数のメモリ復旧ストラテジーが、
割り当て済みのメモリ常駐ブロックオブジェクトが解放されるのを待機するステップと、
前記ノードプールおよび前記ブロックプールのうちの少なくとも一方をデフラグするステップと、
メモリ常駐ブロックオブジェクトを補助記憶装置に保存するステップと、
のうちの少なくとも1つを備える請求項1に記載の方法。
【請求項5】
前記スーパーブロックの前記サイズが複数の所定のサイズのうちの1つから選択される請求項1に記載の方法。
【請求項6】
前記単一のメモリプールが印刷装置に常駐する請求項1に記載の方法。
【請求項7】
メモリ常駐ブロックオブジェクトが補助記憶装置に保存される順序は、当該メモリ常駐ブロックオブジェクトに対応するノードオブジェクトと関連付けられた優先度に基づく請求項4に記載の方法。
【請求項8】
アプリケーションプログラミングインターフェイスを使用して呼び出される請求項1に記載の方法。
【請求項9】
フレームバッファメモリの要求が前記スーパーブロックプールへ向けられる請求項1に記載の方法。
【請求項10】
ディスプレイリストメモリの要求が前記ブロックプールへ向けられる請求項1に記載の方法。
【請求項11】
複数の命令を記憶するコンピュータ可読媒体であって、
前記複数の命令は、プロセッサによって実行されると、フレームバッファメモリおよびディスプレイリストメモリを備える単一のメモリプールをマネージメントする方法を実行するものであり、
前記単一のメモリプールは、
複数のスーパーブロックオブジェクトを有するスーパーブロックプールと、
複数のノードオブジェクトを有するノードプールと、
複数のブロックオブジェクトを有するブロックプールと、
を含むサブプールを備え、
前記方法は、
前記サブプールのうちの少なくとも1つへ向けられたメモリ割り当て要求を受信するステップと、
前記メモリ要求を満たすためにローカルオブジェクトが前記サブプール内で利用可能である場合に、前記メモリ要求内で識別された前記サブプールにローカルなオブジェクトを割り当てるステップと、
前記メモリ要求が前記ノードプールまたは前記ブロックプールへ向けられており、前記メモリ要求を満たすために各サブプール内に利用可能なローカルオブジェクトが存在しない場合に、前記スーパーブロックプールからのオブジェクトを割り当てるステップと、
いずれの前記サブプール内にも利用可能な空きオブジェクトが存在しない場合に、複数のメモリ解放ストラテジーのうちの少なくとも1つを適用するステップと、
を備えるコンピュータ可読媒体。
【請求項12】
前記スーパーブロックプールが整数個の均一サイズのスーパーブロックオブジェクトを備え、
前記ブロックプールが整数個の均一サイズのブロックオブジェクトを備え、
前記スーパーブロックオブジェクトのサイズが前記ブロックオブジェクトのサイズの整数倍である請求項11に記載のコンピュータ可読媒体。
【請求項13】
前記スーパーブロックオブジェクトのサイズが前記ブロックオブジェクトのサイズの偶数倍である請求項12に記載のコンピュータ可読媒体。
【請求項14】
前記複数のメモリ復旧ストラテジーが、
メモリ常駐ブロックオブジェクトが解放されるのを待機するステップと、
前記ノードプールおよび前記ブロックプールのうちの少なくとも一方をデフラグするステップと、
メモリ常駐ブロックオブジェクトを補助記憶装置に保存するステップと、
のうちの少なくとも1つを備える請求項11に記載のコンピュータ可読媒体。
【請求項15】
前記メモリプールが印刷装置に常駐する請求項11に記載のコンピュータ可読媒体。
【請求項16】
メモリ常駐ブロックオブジェクトが補助記憶装置に保存される順序は、当該メモリ常駐ブロックオブジェクトに対応するノードオブジェクトと関連付けられた優先度に基づく請求項14に記載のコンピュータ可読媒体。
【請求項17】
前記方法がアプリケーションプログラミングインターフェイスを使用して呼び出される請求項11に記載のコンピュータ可読媒体。
【請求項18】
複数の命令を記憶するコンピュータ可読メモリであって、
前記複数の命令は、プロセッサによって実行されるとき、フレームバッファメモリおよびディスプレイリストメモリを備える単一のメモリプールをマネージメントする方法を実行するものであり、
前記単一のメモリプールは、
複数のスーパーブロックオブジェクトを有するスーパーブロックプールと、
複数のノードオブジェクトを有するノードプールと、
複数のブロックオブジェクトを有するブロックプールと、
を含むサブプールを備え、
前記方法は、
前記サブプールのうちの少なくとも1つへ向けられたメモリ割り当て要求を受信するステップと、
前記メモリ要求を満たすためにローカルオブジェクトが前記サブプール内で利用可能である場合に、前記メモリ要求内で識別された前記サブプールにローカルなオブジェクトを割り当てるステップと、
前記メモリ要求が前記ノードプールまたは前記ブロックプールへ向けられており、前記メモリ要求を満たすために一つ一つの前記サブプール内に利用可能なローカルオブジェクトが存在しない場合に、前記スーパーブロックプールからのオブジェクトを割り当てるステップと、
いずれの前記サブプール内にも利用可能な空きオブジェクトが存在しない場合に、複数のメモリ解放ストラテジーのうちの少なくとも1つを適用するステップと、
を備えるコンピュータ可読メモリ。
【請求項19】
前記スーパーブロックプールが整数個の均一サイズのスーパーブロックオブジェクトを備え、
前記ブロックプールが整数個の均一サイズのブロックオブジェクトを備え、
前記スーパーブロックオブジェクトのサイズが前記ブロックオブジェクトのサイズの整数倍である請求項18に記載のコンピュータ可読メモリ。
【請求項20】
前記複数のメモリ復旧ストラテジーが、
メモリ常駐ブロックオブジェクトが解放されるのを待機するステップと、
前記ノードプールおよび前記ブロックプールのうちの少なくとも一方をデフラグするステップと、
メモリ常駐ブロックオブジェクトを補助記憶装置に保存するステップと、
のうちの少なくとも1つを備える請求項1に記載の方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2009−245437(P2009−245437A)
【公開日】平成21年10月22日(2009.10.22)
【国際特許分類】
【外国語出願】
【出願番号】特願2009−81519(P2009−81519)
【出願日】平成21年3月30日(2009.3.30)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.フロッピー
【出願人】(507031918)コニカ ミノルタ システムズ ラボラトリー, インコーポレイテッド (157)
【Fターム(参考)】