(57)【特許請求の範囲】
【請求項１】
メモリ空間におけるメモリ領域の割り当て及び解放を行うメモリ制御手段と、
前記メモリ制御手段により割り当てているメモリ領域を移動させてメモリ空間に連続した空き領域を作る再編処理を行うメモリ再編手段と、
前記メモリ制御手段が前記メモリ領域の割り当てを行おうとした際に前記メモリ空間にその割り当てようとするメモリ領域のサイズ以上の連続した空き領域がなかった場合に、前記再編処理を実行したとした場合に前記メモリ空間にできる連続した空き領域のサイズを算出し、その算出した連続した空き領域のサイズが前記割り当てようとするメモリ領域のサイズ以上か否か判断する判断処理を実行する判断手段と、
該判断手段が、算出した連続した空き領域のサイズが前記割り当てようとするメモリ領域のサイズ以上と判断した場合に前記メモリ再編手段に前記再編処理を実行させ、前記算出した連続した空き領域のサイズが前記割り当てようとするメモリ領域のサイズ以上でないと判断した場合に前記メモリ再編手段に前記再編処理を実行させない再編制御手段とを備えた電子装置。
【請求項２】
メモリ空間におけるメモリ領域の割り当て及び解放を行うメモリ制御手段と、
前記メモリ制御手段により割り当てているメモリ領域を移動させてメモリ空間に連続した空き領域を作る再編処理を行うメモリ再編手段と、
前記メモリ制御手段が前記メモリ領域の割り当てを行おうとした際に前記メモリ空間にその割り当てようとするメモリ領域のサイズ以上の連続した空き領域がなかった場合に、前記メモリ制御手段により既に割り当てられている前記メモリ領域の中に所定の閾値以上のサイズのメモリ領域があるか否かを判断する判断処理を実行する判断手段と、
該判断手段が前記所定の閾値以上のサイズのメモリ領域がないと判断した場合に前記メモリ再編手段に前記再編処理を実行させ、前記所定の閾値以上のサイズのメモリ領域があると判断した場合に前記メモリ再編手段に前記再編処理を実行させない再編制御手段とを備えた電子装置。
【請求項３】
メモリ空間におけるメモリ領域の割り当て及び解放を行うメモリ制御手段と、
前記メモリ制御手段により割り当てているメモリ領域を移動させてメモリ空間に連続した空き領域を作る再編処理を行うメモリ再編手段と、
前記メモリ制御手段が前記メモリ領域の割り当てを行おうとした際に前記メモリ空間にその割り当てようとするメモリ領域のサイズ以上の連続した空き領域がなかった場合に、割り当て済みのメモリ領域のうちある閾値時間より前に割り当ての行われた領域の合計サイズが所定の閾値以上であるか否かを判断する判断処理を実行する判断手段と、
該判断手段が前記所定の閾値以上であると判断した場合に前記メモリ再編手段に前記再編処理を実行させず、前記所定の閾値以上でないと判断した場合に前記メモリ再編手段に前記再編処理を実行させる再編制御手段とを備えた電子装置。
【請求項４】
メモリ空間におけるメモリ領域の割り当て及び解放を行うメモリ制御手段と、
前記メモリ制御手段により割り当てているメモリ領域を移動させてメモリ空間に連続した空き領域を作る再編処理を行うメモリ再編手段と、
前記メモリ制御手段が前記メモリ領域の割り当てを行おうとした際に前記メモリ空間にその割り当てようとするメモリ領域のサイズ以上の連続した空き領域がなかった場合に、前記メモリ空間の空き領域の合計サイズと割り当てようとするメモリ領域のサイズとの差分が所定の閾値以上であるか否かを判断する判断処理を実行する判断手段と、
該判断手段が前記差分が所定の閾値以上であると判断した場合に前記メモリ再編手段に前記再編処理を実行させ、前記差分が所定の閾値以上でないと判断した場合に前記メモリ再編手段に前記再編処理を実行させない再編制御手段とを備えた電子装置。
【請求項５】
請求項２に記載の電子装置において、
前記所定の閾値が前記割り当てようとするメモリ領域のサイズであることを特徴とする電子装置。
【請求項６】
請求項１乃至５の何れか一項に記載の電子装置において、
前記判断手段は、前記メモリ制御手段が前記メモリ領域の割り当てを行おうとした際に前記メモリ空間にその割り当てようとするメモリ領域のサイズ以上の連続した空き領域がなかった場合に、前記メモリ空間の空き領域の合計サイズが前記割り当てようとするメモリ領域のサイズ以上あるか否かを判断し、前記メモリ空間の空き領域の合計サイズが割り当てようとするメモリ領域のサイズ以上あると判断した場合に前記判断処理を実行する手段であり、
前記再編制御手段は、前記判断手段が前記メモリ空間の空き領域の合計サイズが割り当てようとするメモリ領域のサイズ以上ないと判断した場合に前記メモリ再編手段に再編処理を実行させない手段であることを特徴とする電子装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、電子装置に関する。
【背景技術】
【０００２】
一般的に、パーソナルコンピュータ（ＰＣ）等の電子装置のメモリ制御において、例えばプログラムの実行を行うような場合、必要なメモリ領域をＲＡＭ等のメインメモリに割り当て、そのプログラムの実行が終了すると割り当て済みのメモリ領域を解放するようにしている。
このようなメモリ制御では、メモリを固定長のメモリブロックに分割して、必要なメモリ領域を各ブロックに割り当てる固定長メモリブロックを用いた手法と、必要なメモリ領域の大きさに合わせて割り当てられるメモリブロックのサイズが動的に変化する可変長メモリブロックを用いた手法とがある。
【０００３】
そして、可変長のメモリブロックを用いたメモリ制御において、メモリブロックの割り当てと解放を繰り返すと、一般的に解放のタイミングはランダムなので、空き領域が断片化していき使用可能な連続した空き領域が細切れになるメモリフラグメンテーションが発生する。
このため、空き領域の断片化を解消して、連続した広い空き領域に再編するメモリコンパクションという技術が既に知られている。
【０００４】
また、このメモリコンパクションの技術とは別に、割り当てたメモリ領域のうち、不要になったメモリ領域を自動的に解放するガーベッジコレクションという技術も知られている。
このガーベッジコレクションに関する技術として特許文献１では、ガーベッジコレクション処理の要求に対し、算出したガーベッジコレクション処理前のメモリの空き記憶容量の合計量に基づいて、要求するガーベッジコレクションの処理を実行するか否か制御する構成が開示されている。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、上記メモリコンパクションでは、処理時間のかかるメモリコンパクションを実行しても、所望のサイズの連続したメモリ領域を確保できないことがあるという問題があった。
この点、上記特許文献１ではメモリコンパクションに関する言及がなく、上記問題を解決するための手法については記載されていない。
【０００６】
この発明は、このような問題を解決し、電子装置において、メモリ管理の効率を向上させることを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、この発明の電子装置は、メモリ空間におけるメモリ領域の割り当て及び解放を行うメモリ制御手段と、上記メモリ制御手段により割り当てているメモリ領域を移動させてメモリ空間に連続した空き領域を作る再編処理を行うメモリ再編手段と、上記メモリ制御手段が上記メモリ領域の割り当てを行おうとした際に上記メモリ空間にその割り当てようとするメモリ領域のサイズ以上の連続した空き領域がなかった場合に、上記再編処理を実行したとした場合に上記メモリ空間にできる連続した空き領域のサイズを算出し、その算出した連続した空き領域のサイズが上記割り当てようとするメモリ領域のサイズ以上か否か判断する判断処理を実行する判断手段と、その判断手段が、算出した連続した空き領域のサイズが上記割り当てようとするメモリ領域のサイズ以上と判断した場合に上記メモリ再編手段に上記再編処理を実行させ、上記算出した連続した空き領域のサイズが上記割り当てようとするメモリ領域のサイズ以上でないと判断した場合に上記メモリ再編手段に上記再編処理を実行させない再編制御手段とを設けたものである。
【発明の効果】
【０００８】
以上のようなこの発明の電子装置によれば、メモリ管理の効率を向上させることができる。
【図面の簡単な説明】
【０００９】
【図１】この発明の一実施形態である画像形成装置のハードウェア構成を示すブロック図である。
【図２】図１に示した画像形成装置の制御部の機能を示すブロック図である。
【図３】図２に示したメモリ割当解放部が行うメモリ管理手法を説明するための図である。
【図４】図２に示したコンパクション実行部が行うコンパクションについて説明するための図である。
【図５】メモリ領域の割り当て要求を受けた場合にメモリ制御部が行う処理を示すフローチャートである。
【図６】図５の処理の別の例（第２の例）を示すフローチャートである。
【図７】コンパクションの結果、メモリ空間にできる連続した空き領域のサイズを算出する手法の一例を示した図である。
【図８】図５の処理の別の例（第３の例）を示すフローチャートである。
【図９】そのさらに別の例（第４の例）を示すフローチャートである。
【図１０】そのさらに別の例（第５の例）を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、この発明を実施するための形態を図面に基づいて説明する。
まず、この発明の電子装置の一実施形態である、用紙に画像形成が可能なプリンタあるいは複合機（ＭＦＰ）等の画像形成装置について説明する。図１は、その画像形成装置のハードウェア構成を示したブロック図である。
図１において、この画像形成装置１００は、ＣＰＵ１０１、ＲＯＭ１０２、ＲＡＭ１０３、プロッタ部Ｉ／Ｆ１０４、プロッタ部１０５、通信Ｉ／Ｆ部１０６、ＨＤＤ１０７を備えている。
【００１１】
ＣＰＵ１０１は、この画像形成装置１００全体を統括制御する制御手段である。
ＲＯＭ１０２は、ＣＰＵ１０１が実行するプログラムを格納している読み出し専用の記憶手段である。
ＲＡＭ１０３は、ＣＰＵ１０１が実行するプログラムを展開し、各種処理を行う際の作業領域として使用する読み書き可能な記憶手段である。
プロッタ部Ｉ／Ｆ１０４は、画像形成装置１００の画像形成に関わる給紙から定着に至る機能を実行するための各種ハードウェアを含むプロッタ部１０５と通信を行うための物理的なインタフェースである。
【００１２】
通信Ｉ／Ｆ１０６は、画像形成装置１００が、ＰＣ１０８とネットワーク又はＵＳＢケーブルなどを介して通信を行うための物理的なインタフェースである。なお、このインタフェースは、ネットワークの規格や使用する通信プロトコル等に応じて適切なものを用意する。
ＨＤＤ１０７は、各種データを記憶する大容量記憶手段である。
【００１３】
このような画像形成装置１００において、ＣＰＵ１０１が各種プログラムをＲＯＭ１０２から読み出し、ＲＡＭ１０３に展開した後、その各種プログラムを適宜実行して画像形成装置１００を制御するための制御部２００として機能することにより、ＰＣ１０８から印刷データを受け付けて必要な処理を行いプロッタ部１０５に出力することができる。
図２は、その制御部２００の具体的な機能を示したブロック図である。この図２に示すように、制御部２００は、機能としてメモリ制御部２１０、画像描画部２２０、通信Ｉ／Ｆ機能部２３０、プロッタＩ／Ｆ機能部２４０を備えている。
なお、これら各部は、この発明の特徴に係る部分を中心に示したものであり、これら以外にも制御部２００は画像形成装置１００を制御するための図示しない機能を備えるものである。また、各部の機能は、ＣＰＵ１０１が対応するプログラムをＲＡＭ１０３に展開して実行することにより実現するものであるが、説明の便宜上各部が機能の実行主体であるものとして説明する。
【００１４】
上記各部のうち、メモリ制御部２１０は、ＲＡＭ１０３のメモリ領域を管理する機能を備える。この実施形態の特徴に関する機能部としては、メモリ割当解放部２１１、コンパクション実行部２１２及びコンパクション要否判断部２１３を備えている。
このうち、メモリ割当解放部２１１は、ＣＰＵ１０１が各種プログラムを実行しようとする場合や、実行中のプログラムに係るプロセスが大きなサイズのデータを取り扱おうとする場合等に、そのプログラムやプロセスにメモリ領域を割り当てたり、必要がなくなった場合に割り当て済みのメモリ領域を解放したりする機能を有する。このメモリ割当解放部２１１が、メモリ制御手段に対応する。
【００１５】
ここで、このメモリ割当解放部２１１が行うメモリ管理手法について説明する。図３は、そのメモリ管理手法を説明するための図である。なお、ここではＲＡＭ１０３に対して、印刷データの描画処理を行うにあたって必要なワークエリアとなるメモリ領域を割り当てて、描画処理の後割り当てたメモリ領域を解放することを例にとって説明する。
なお、この割り当てにおいては、ＲＡＭ１０５に印刷データの描画処理を行うにあたって必要なメモリ領域の割り当てを行うためのメモリ空間が予め設けておき、メモリ割当解放部２１１はこのメモリ空間の開始アドレスから終了アドレスの範囲内でメモリ領域を割り当てるものとする。
また、メモリ管理手法は、必要なメモリ領域のサイズに合わせて割り当てられるメモリブロックのサイズが動的に変化する可変長メモリブロックを用いた手法を用いており、図中斜線で示す領域は割り当て済みのメモリ領域を、空白領域は空き領域をそれぞれ示している。
【００１６】
まず、メモリ割当解放部２１１は、画像描画部２２０から印刷データの描画処理を行うにあたって必要なメモリ領域の割り当て要求を受け取る。
そして、メモリ領域の割り当て要求を受け取ったメモリ割当解放部２１１は、ＲＡＭ１０３のメモリ空間に割り当てようとするメモリ領域のサイズ以上の連続した空き領域があるかないか判断し、あればメモリアドレスの開始アドレスからメモリ領域を割り当てる。
【００１７】
図３の場合、まず、印刷データの描画処理を行うにあたって必要なメモリ領域のサイズに合ったメモリブロックを、開始アドレス（0x00001000）から割り当てることになる。そして、メモリ領域として割り当てたひとかたまりのメモリ領域の識別子であるブロックＩＤと、メモリ領域の開始アドレス及びサイズとからなる管理データを作成する。
次に、メモリ割当解放部２１１が再度メモリ領域の割り当て要求を受けると、メモリ領域間で隙間ができないように、前回割り当てたメモリブロックの末尾のメモリアドレスの次のメモリアドレスを新たに割り当てるメモリ領域の開始アドレス（0x00001100）としてメモリ領域を割り当て、上記と同様に管理データを作成する。
【００１８】
一方、図示はしていないが、一旦割り当てたメモリ領域は、割り当て要求元からメモリ領域の解放要求を受けたり、割り当てから所定の時間が経過したりした場合に、割り当てを解放する。そして、解放が行われると、割り当て済み領域の間に空き領域が存在する状態となる。
例えば、図３における、ＩＤ＝２のメモリ領域とＩＤ＝３のメモリ領域との間の領域がこれに当たる。このように、割り当て済み領域に挟まれて存在する空き領域を、フラグメンテーションと呼ぶ。また、このフラグメンテーションが発生すると、ＲＡＭ１０３全体として十分な空き領域があっても、割り当てたいサイズの連続した空き領域がなく、割り当てが行えないケースが生じることが考えられる。
【００１９】
ここで、メモリ領域の割り当てにより順次作成した管理データ３００は、メモリ管理テーブルとして例えばＲＡＭ１０３に確保したシステム領域に記憶する。このメモリ管理テーブルを、メモリアドレスが昇順となるように構成しておけば、隣接する管理データのメモリアドレスとサイズから、発生しているフラグメンテーションのサイズを算出することができる。例えば、隣接するブロックＩＤ２と３それぞれの管理データ３００のメモリアドレスとサイズから、図中で発生しているフラグメンテーションのサイズを算出できる。また、各管理データ３００のメモリ領域のサイズを合計することにより、割り当て済みのメモリ領域の合計サイズも算出できる。
【００２０】
また、メモリ割当解放部２１１は、メモリ領域を解放する場合、メモリ管理テーブルから該当する管理データを検索して、見付けるとその管理データのブロックＩＤを持つメモリブロックのメモリ領域を解放するとともに、その管理データをメモリ管理テーブルから削除するようにする。
【００２１】
次に、コンパクション実行部２１２は、メモリ割当解放部２１１により割り当てられたメモリ領域を移動させてメモリ空間に連続した空き領域を作る再編処理を行うものである。なお、このコンパクション実行部２１２が、メモリ再編手段に対応する。ここで、このコンパクション実行部２１２が行うコンパクションについて図４を参照しながら説明する。図４は、そのコンパクションについて説明するための図である。
【００２２】
コンパクション実行部２１２がコンパクションを実行すると、割り当て済みのメモリ領域間に生じた断片化している空き領域（フラグメンテーション）を無くすように、管理データ３００が示す各メモリブロックの割り当て先を図中矢印で示すように片側の方向へと順に移動させて連続した空き領域を得るようにしている（（ａ）乃至（ｅ））。
【００２３】
この割り当て先の移動は、例えばあるメモリブロックの内容を、移動先のメモリ領域にコピーした後、管理データ３００における開始アドレスをそれに合わせて変更することによって行うことができる。そして、１つのメモリブロックの割り当て先を移動させた後、移動後のメモリ領域の末尾の次のアドレスから次のメモリブロックが開始するように、次のメモリブロックの割り当て先を移動させ、これを次々繰り返すことにより、フラグメンテーションを解消することができる。
【００２４】
次に、コンパクション要否判断部２１３は、上述したコンパクションの実行要否について判断するものであって、この判断結果に応じてコンパクション実行部２１２にコンパクションを実行させたりあるいはコンパクションを実行させなかったりする制御を行うものである。なお、コンパクションの実行要否を判断する際の具体的な手法については後述する。
【００２５】
次に、画像描画部２２０は、ＰＣ１０８からページ記述言語（ＰＤＬ）で示される印刷対象の印刷データを受け取り、その印刷データのＰＤＬを解析してプロッタ部１０５が画像形成できる形式のビットマップデータに描画し、その描画したビットマップデータからなる画像データをプロッタ部１０５に送信するものである。この描画処理は、メモリ割当解放部２１１によって割り当てられたＲＡＭ１０３のメモリ領域をワークエリアとして行われる。また、上記印刷データの受け取りは通信Ｉ／Ｆ機能部２３０の通信機能により実現され、上記画像データの送信はプロッタＩ／Ｆ機能部２４０の通信機能により実現される。
【００２６】
次に、画像描画部２２０からメモリ領域の割り当て要求を受けた場合にメモリ制御部２１０が行う処理について説明する。図５は、その基本的なコンパクション要否判断処理を示したフローチャートである。
なお、このフローチャートに係る処理は、ＣＰＵ１０１が所要のプログラムを実行することにより実行するものであり、メモリ制御部２１０のメモリ割当解放部２１１、コンパクション実行部２１２及びコンパクション要否判断部２１３の各機能と対応するものであるが、説明の便宜上メモリ制御部２１０が実行するものとして説明する。
【００２７】
メモリ領域の割り当て要求を受けた場合にメモリ制御部２１０は以下の処理を順に実行する。まず、メモリ制御部２１０は、メモリ空間に、要求されたサイズ以上の連続した空きメモリ領域があるか否か判断する（Ｓ１１）。この判断は、管理データ３００を参照して行うことができる。
そして、あると判断した場合、発見したメモリ領域のいずれかから、割り当て要求に係るサイズのメモリブロックを、割り当て要求に係る割り当て先に割り当てる（Ｓ１８）。その後、割り当て要求元に対し、メモリ領域の割り当てを行った旨を通知して（Ｓ１９）処理を終了する。
【００２８】
一方、ステップＳ１１でないと判断した場合、そのままではメモリ領域を割り当てることができないので、コンパクションの実行により連続した空き領域を得られるか否かの判断を含むステップＳ１２以降の処理を順に実行していく。
ここの処理において、メモリ制御部２１０は、まず動的に割り当てることのできるメモリ空間のうち空き領域の合計サイズを計算し（Ｓ１２）、その空き領域の合計サイズが割り当てようとするメモリ領域のサイズ以上あるか否か判断する（Ｓ１３）。
ここで、メモリ空間の空き領域の合計サイズは、ＲＡＭ１０３の全メモリ領域のサイズから割り当て済みのメモリ領域の合計サイズを引いて算出するようにする。
【００２９】
そして、メモリ制御部２１０は、ステップＳ１３でＮｏの場合、コンパクションを実行しても必要なサイズの連続した空き領域が得られず、要求に従った割り当てが不可能であることがわかるため、コンパクションを実行しないことを決定する（Ｓ１７）。その後、割り当て要求元に対し、メモリ領域の割り当てを行えなかった旨を通知して（Ｓ２０）処理を終了する。
【００３０】
一方、メモリ制御部２１０は、ステップＳ１３でＹｅｓの場合、コンパクションの実行要否を判断するための判断処理を行う（Ｓ１４）。そして、その判断処理の結果コンパクションの実行が必要であると判断すると（Ｓ１５のＹｅｓ方向）、コンパクションを実行して（Ｓ１６）、ステップＳ１１でＹｅｓの場合と同様、コンパクションにより得られた連続した空き領域に、割り当て要求に従ってメモリ領域を割り当てる（Ｓ１８）。また、判断処理の結果コンパクションの実行が必要ないと判断すると（Ｓ１５のＮｏ方向）、コンパクションを実行せず（Ｓ１７）、ステップＳ１３でＮｏの場合と同様、メモリ領域の割り当ても行わずに処理を終了する。
【００３１】
以上の図５の処理においては、ステップＳ１３で、空き領域の合計サイズが割り当てようとするメモリ領域のサイズ未満であるような場合にはコンパクションを実行しないようにしているので、コンパクションを行っても要求に従った割り当てを行うことが不可能であることが明らかな場合にまで処理負荷の高いコンパクション処理を行ってしまうことを防止でき、メモリ管理の効率を向上させることができる。
また、空き領域の合計サイズが割り当てようとするメモリ領域のサイズ未満であるような場合には、ステップＳ１４の判断処理を行うこともないため、コンパクションの要否判断の処理負荷を低いものとすることができる。
なお、上記各ステップのうち、ステップＳ１２乃至Ｓ１５の処理は判断手段に対応し、ステップＳ１５によりコンパクションの実行、非実行を制御することは再編制御手段に対応する。
【００３２】
ところで、図５に示した処理には、いくつかバリエーションが考えられる。そこで、以下、図５に示した処理の別の例について説明する。
〔第２の例：図６及び図７〕
まず図６に、図５に示した処理の第２の例を示す。
なお、図６に示す処理のステップＳ１１乃至Ｓ１３及びＳ１６乃至Ｓ２０は、図５に示した処理と共通であり、ステップＳＡ１及びＳＡ２が図５のステップＳ１４及びＳ１５より具体化されている点が異なるのみである。そこで、このステップＳＡ１及びＳＡ２の処理を中心に説明する。
【００３３】
図６の処理においては、ステップＳ１３でＹｅｓの場合、コンパクションを実行した場合にメモリ空間にできる連続した空き領域のサイズを算出する（ＳＡ１）。そして、ここで算出したサイズが割り当てようとするメモリ領域のサイズ以上であると判断すると（ＳＡ２のＹｅｓ方向）、コンパクションを実行して（Ｓ１６）、ステップＳ１１でＹｅｓの場合と同様、コンパクションにより得られた連続した空き領域に、割り当て要求に従ってメモリ領域を割り当てる（Ｓ１８）。また、割り当てようとするメモリ領域のサイズ未満であると判断すると（ＳＡ２のＮｏ方向）、コンパクションを実行せず（Ｓ１７）、ステップＳ１３でＮｏの場合と同様、メモリ領域の割り当ても行わずに処理を終了する。
【００３４】
このステップＳＡ１における算出手法について図７を参照しながら説明する。図７は、コンパクションの結果、メモリ空間にできる連続した空き領域のサイズを算出する手法の一例を示した図である。なお、Ｓ１乃至Ｓ５はそれぞれ、割り当てられた各メモリ領域のサイズを示している。
【００３５】
この算出に際しては、現在割り当て済みのメモリ領域が、全て移動可能なものであれば、図７に示すように、現在割り当て済みのメモリ領域について割り当て先を端から詰めるように移動させた場合の、移動先の所要メモリ領域の合計を計算する。これは、図７の例ではＳ１からＳ５までを加えた値となる。そしてこれを、動的な割り当ての可能なメモリ領域の総サイズから引いた値Ｒが、コンパクションを実行した場合にメモリ空間にできる連続した空き領域のサイズとなる。
【００３６】
この値は、現在割り当て済みのメモリ領域が、全て移動可能なものであれば、ステップＳ１２で計算した空き領域のサイズと同じ値になると考えられる。しかし、割り当て済みのメモリ領域の中に、処理の都合で移動できないものがある場合、動的な割り当ての可能な全メモリ領域のうち、その移動できないメモリ領域によって区切られた各領域において、移動可能なメモリ領域を端から詰めていくことになる。そして、この場合、コンパクションを行っても、フラグメンテーションが完全に解消できず、コンパクションを実行した場合にメモリ空間にできる連続した空き領域のサイズは、ステップＳ１２で計算した空き領域のサイズより小さくなる場合がある。どのメモリ領域が移動不可であるかは、管理データ３００に記載しておけばよい。
このようなことが想定される場合に、ＳＡ１の処理により実際得られる連続した空き領域を算出することは有効である。
【００３７】
この図６に示した処理においては、コンパクションの結果実際得られる連続した空き領域のサイズが割り当てようとするメモリ領域のサイズ以上ある場合にコンパクションを実行するようにしているので、処理時間のかかるコンパクションを実施したにも拘わらず割り当て予定のメモリ領域のサイズを獲得できないということがなくなり、無駄なコンパクションを抑制することができる。従って、メモリ管理の効率を向上させることができる。
【００３８】
〔第３の例：図８〕
次に図８に、図５に示した処理の第３の例を示す。
なお、図８に示す処理のステップＳ１１乃至Ｓ１３及びＳ１６乃至２０は、図５に示した処理と共通であり、ステップＳＢ１が図５のステップＳ１４及びＳ１５より具体化されている点が異なるのみである。そこで、このステップＳＢ１の処理を中心に説明する。
【００３９】
図８の処理においては、ステップＳ１３でＹｅｓの場合、既に割り当てられているメモリ領域の中に所定の閾値以上のサイズのメモリ領域があるか否か判断する（ＳＢ１）。そして、これがＮｏであると、コンパクションを実行して（Ｓ１６）、ステップＳ１１でＹｅｓの場合と同様、コンパクションにより得られた連続した空き領域に、割り当て要求に従ってメモリ領域を割り当てる（Ｓ１８）。また、ステップＳＢ１でＹｅｓと判断すると、コンパクションを実行せず（Ｓ１７）、ステップＳ１３でＮｏの場合と同様、メモリ領域の割り当ても行わずに処理を終了する。
【００４０】
図８の処理において、ステップＳＢ１の判断をコンパクション実行要否の基準として用いているのは、上記閾値以上のサイズのメモリ領域があれば、コンパクションを実行せずとも自然解放により閾値以上の連続した空き領域が得られ、その自然解放後にメモリ領域の割り当てが可能になることが期待できるためである。
【００４１】
すなわち、大きなメモリ領域が割り当て中であるなら、そのメモリ領域が解放されさえすれば、コンパクションを行わなくても、割り当て要求に係る割り当てを行うに十分な連続した空きメモリ領域が確保できると考えられるためである。そして、このような場合には、時間のかかるコンパクション処理を行うより、メモリ領域の解放を待った方が結果的に早く割り当てができることが期待できるためである。
【００４２】
なお、上記閾値は、割り当てようとするメモリ領域のサイズ以上とするとよい。このことにより、該当する閾値以上のメモリ領域が自然解放されれば確実にメモリ領域の割り当てを行うことができることが保証されるためである。
また、ステップＳＢ１でＹｅｓの場合、コンパクションを実行しないと、すぐには割り当てを行えないことが考えられるため、メモリ領域の解放により割り当てに必要なメモリ領域が確保されるまで待機するようにしてもよい。
【００４３】
また、図８の処理において、ステップＳＢ１でＹｅｓの場合、メモリ領域の割り当てを行わず、ステップＳ２０で、割り当てが行えなかった旨の結果を通知するようになっている。これは、ステップＳ１１でＮｏでありかつコンパクションを行わない決定をした以上、要求に従ったメモリ領域の割り当てを直ちに行うことはできないため、一旦割り当てが行えなかったものとして扱うためである。
【００４４】
割り当て要求元は、引き続きメモリ領域が必要であれば、再度割り当て要求を送信してくることが予想される。そして、再度の要求を受けるときまでに、ステップＳＢ１で発見したようなメモリ領域が解放されていれば、今度はステップＳ１１でＹｅｓとなり、要求に従った割り当てが可能であると考えられる。
しかし、単に割り当てを行わなかった旨の応答を返すのでは不都合な場合、リトライを求める応答を返すことも考えられる。また、応答を返すまでに所定時間待機し、その間に、メモリ領域の解放等により割り当てに必要なメモリ領域が確保できた場合、ステップＳ１８に進んで割り当てを行うようにすることも考えられる。
【００４５】
〔第４の例：図９〕
次に図９に、図５に示した処理の第４の例を示す。
なお、図９に示す処理のステップＳ１１乃至Ｓ１３及びＳ１６乃至Ｓ２０は、図５に示した処理と共通であり、ステップＳＣ１及びＳＣ２が図５のステップＳ１４及びＳ１５より具体化されている点が異なるのみである。そこで、このステップＳＣ１及びＳＣ２の処理を中心に説明する。
【００４６】
図９の処理においては、ステップＳ１３でＹｅｓの場合、割り当て済みのメモリ領域のうちある閾値時間より前に割り当ての行われた領域の合計サイズを算出する（ＳＣ１）。この第４の例の処理を採用する場合、この計算のため、管理データ３００に、メモリ領域の割り当てを行った時刻を登録しておくものとする。
そして、算出した合計サイズが所定の閾値以上でなければ（ＳＣ２のＮｏ）、コンパクションを実行して（Ｓ１６）、ステップＳ１１でＹｅｓの場合と同様、コンパクションにより得られた連続した空き領域に、割り当て要求に従ってメモリ領域を割り当てる（Ｓ１８）。また、ステップＳＣ２でＹｅｓと判断すると、コンパクションを実行せず（Ｓ１７）、ステップＳ１３でＮｏの場合と同様、メモリ領域の割り当ても行わずに処理を終了する。
【００４７】
図９の処理において、ステップＳＣ２の判断をコンパクション実行要否の基準として用いているのは、割り当ててから長時間経過しているメモリ領域が多くあれば、それらが短時間のうちに解放され、コンパクションを実行せずとも解放により閾値以上の連続した空き領域が得られ、その解放後にメモリ領域の割り当てが可能になることが期待できるためである。
【００４８】
ただし、ここでは、割り当ててから長時間経過しているメモリ領域が連続しているか否かは見ていないため、解放により割り当てに必要なサイズの連続した空き領域が確保されることを期待するためには、領域サイズの閾値は、割り当てに必要なサイズよりも大きい値とするとよい。
【００４９】
また、逆に、割り当ててから長時間経過しているメモリ領域が連続して（間に他の割り当て済みメモリ領域がなければ空き領域を挟んでいてもよい）存在しているのであれば、短時間のうちにそれらが全て解放されて連続したメモリ領域が空くことが期待できる。この場合、領域サイズの閾値は、割り当てに必要なサイズと同じ値でよい。また、閾値と比較する値は、連続したメモリ領域の合計サイズ（間に空き領域がある場合にはそれも加えたサイズ）がよい。
また、時間の閾値は、例えばＲＡＭ１０５に印刷データの描画処理を行うにあたって必要なワークエリアとなるメモリ領域を割り当てるような場合においては、メモリ領域を割り当ててから描画処理終了後にその割り当てたメモリ領域を解放するまでの時間である平均解放時間程度にするとよく、平均解放時間に基づき定めることができる。
この平均解放時間は、ページ記述言語（ＰＤＬ）の種類、ＣＰＵ１０１の性能及び描画処理を行うプロッタ部１０５の性能などに依存するが、例えば３〜５ｓｅｃ程度となると考えられる。
【００５０】
また、図９の処理において、ステップＳＣ２でＹｅｓの場合、メモリ領域の割り当てを行わないようになっている点については、図８の場合と同様な趣旨であり、同様な変形が考えられる。
【００５１】
〔第５の例：図１０〕
次に図１０に、図５に示した処理の第５の例を示す。
なお、図１０に示す処理のステップＳ１１乃至Ｓ１３及びＳ１６乃至Ｓ２０は、図５に示した処理と共通であり、ステップＳＤ１及びＳＤ２が図５のステップＳ１４及びＳ１５より具体化されている点が異なるのみである。そこで、このステップＳＤ１及びＳＤ２の処理を中心に説明する。
【００５２】
図１０の処理においては、ステップＳ１３でＹｅｓの場合、ステップＳ１２で算出したメモリ空間の空き領域の合計サイズと割り当てようとするメモリ領域のサイズとの差分を算出する（ＳＤ１）。そして、算出した差分が所定の閾値以上であれば（ＳＤ２のＹｅｓ）、コンパクションを実行して（Ｓ１６）、ステップＳ１１でＹｅｓの場合と同様、コンパクションにより得られた連続した空き領域に、割り当て要求に従ってメモリ領域を割り当てる（Ｓ１８）。また、ステップＳＤ２でＮｏと判断すると、コンパクションを実行せず（Ｓ１７）、ステップＳ１３でＮｏの場合と同様、メモリ領域の割り当ても行わずに処理を終了する。
【００５３】
図１０の処理において、ステップＳＤ２の判断をコンパクション実行要否の基準として用いているのは、空き領域のサイズと、要求に従って割り当てようとするメモリ領域のサイズとの差分が大きい場合には、コンパクションにより解消されるフラグメンテーションが多く、コンパクションの効果が大きいと考えられるためである。上記差分が大きいことは、ステップＳ１１の判断がＮｏであったことを考え合わせると、割り当てを要求されたサイズ以下の断片化された領域がメモリ空間内に多数存在することを意味するためである。したがって、このような場合にのみコンパクションを行うことにより、コンパクションの効率を向上させ、全体としてメモリ管理の効果を向上させることができる。
【００５４】
以上で実施形態の説明を終了するが、画像形成装置１００の具体的な構成やコンパクション要否判断処理の内容等が上述の説明したものに限られないことはもちろんである。
例えば、第２乃至第５の例でも、ステップＳ１２及びＳ１３の処理をそれぞれ共通して行うようにしているが、この処理は必ずしも必須の処理ではなく、スキップしてもよい。このことにより、各実施例のコンパクション要否判断処理を単純化することができる。ただし、第５の例でスキップする場合は、ステップＳＤ１での差分算出に用いるため、メモリ空間の空き領域の合計サイズの算出を別途行う必要がある。
【００５５】
また、上述したメモリ制御部２１０のメモリ制御に関する機能は、ＲＡＭ１０３を例にとって説明したがＨＤＤ１０７等の他の記憶手段に対するメモリ制御に適用してもよい。また、この発明は画像形成装置１００に限らず、図２に示したメモリ制御部２１０の各機能を実現するハードウェアを備えたものであれば、ＰＣ等の汎用コンピュータも含め、動的な割り当ての可能な記憶手段を備えた任意の電子装置に適用可能である。
また、以上説明してきた各実施例は、相互に矛盾しない限り任意に組み合わせて実施可能であることはもちろんである。
【符号の説明】
【００５６】
１００：画像形成装置      １０１：ＣＰＵ      １０２：ＲＯＭ      １０３：ＲＡＭ
１０４：プロッタ部Ｉ／Ｆ      １０５：プロッタ部      １０６：通信Ｉ／Ｆ
１０７：ＨＤＤ      １０８：ＰＣ      ２００：制御部      ２１０：メモリ制御部
２１１：メモリ割当解放部      ２１２：コンパクション実行部
２１３：コンパクション要否判断部      ２２０：画像描画部
２３０：通信Ｉ／Ｆ機能部      ２４０：プロッタＩ／Ｆ機能部
３００：管理データ
【先行技術文献】
【特許文献】
【００５７】
【特許文献１】特開２００５−２５７２７号公報
【図１】
0005853765.tif 000002
【図２】
0005853765.tif 000003
【図３】
0005853765.tif 000004
【図４】
0005853765.tif 000005
【図５】
0005853765.tif 000006
【図６】
0005853765.tif 000007
【図７】
0005853765.tif 000008
【図８】
0005853765.tif 000009
【図９】
0005853765.tif 000010
【図１０】
0005853765.tif 000011