(57)【要約】      （修正有）【課題】メモリ管理システム、電子機器及びメモリ管理プログラムにおいて、メモリのフラグメンテーションを効率的に回避し、高速に連続的なメモリ空間の割当、解放動作を行い、割当てられた連続的なメモリ空間のサイズの増減を行う。【解決手段】メモリ管理システム、電子機器及びメモリ管理プログラムにおいて、物理アドレス空間を小サイズ毎に区切ったマイクロパーテーション単位で扱い、アプリケーション等毎に区切った連続的な論理アドレス空間を必要数の前記マイクロパーテーションに割当て、各マイクロパーテーションのフラグメンテーション率を監視して、フラグメンテーション率が所定の上限閾値を超えたマイクロパーテーションにはメモリの再割当を行わない方法により、メモリの割当を高速に行うことを可能とした。【選択図】図５
2010204763.tif 000002
【特許請求の範囲】
【請求項１】
論理アドレス空間においてアプリケーションが使用する仮想メモリの割当と解放を管理する論理パーテーション管理部と、
物理アドレス空間において実メモリを小サイズ毎の物理パーテーションに切り分けて前記実メモリの割当と解放を管理する物理パーテーション管理部と、
前記論理アドレス空間と前記物理アドレス空間との間のアドレス変換を行う変換部とを有し、
前記物理パーテーション管理部は、前記物理パーテーションのフラグメンテーション率を監視して当該フラグメンテーション率が所定の上限閾値を超えた物理パーテーションに対するメモリの割当を禁止する
ことを特徴とするメモリ管理システム。
【請求項２】
請求項１のメモリ管理システムであって、
前記物理パーテーション管理部は、前記メモリの割当を禁止したフラグメンテーション率が所定の上限閾値を超えた物理パーテーションの当該フラグメンテーション率が所定の下限閾値を下回った場合には、再度のメモリの割当を許可する
ことを特徴とするメモリ管理システム。
【請求項３】
請求項１又は２のメモリ管理システムであって、
前記変換部は、前記論理アドレス空間と前記物理アドレス空間とを関連付ける変換テーブルを生成又は消去する
ことを特徴とするメモリ管理システム。
【請求項４】
請求項１から３のいずれかのメモリ管理システムであって、
前記論理パーテーション管理部は、前記仮想メモリの割当をアプリケーション毎に連続した論理アドレス空間に確保する
ことを特徴とするメモリ管理システム。
【請求項５】
請求項１から４のいずれかのメモリ管理システムであって、
前記物理パーテーション管理部は、ハードウェア依存によるアクセス領域を固定領域とし、前記論理パーテーション管理部からの前記アプリケーションによる仮想メモリ割当に対して、前記固定領域には割当を行わない
ことを特徴とするメモリ管理システム。
【請求項６】
請求項１から５のいずれかのメモリ管理システムを有する
ことを特徴とする電子機器。
【請求項７】
コンピュータに、
論理アドレス空間においてアプリケーションが使用する仮想メモリの割当と解放を管理する論理パーテーション管理機能と、
物理アドレス空間において実メモリを小サイズ毎の物理パーテーションに切り分けて前記実メモリの割当と解放を管理する物理パーテーション管理機能と、
前記論理アドレス空間と前記物理アドレス空間との間のアドレス変換を行う変換機能とを実現させ、
前記物理パーテーション管理機能は、前記物理パーテーションのフラグメンテーション率を監視して当該フラグメンテーション率が所定の上限閾値を超えた物理パーテーションに対するメモリの割当を禁止する
ことを特徴とするメモリ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
メモリ管理システム、電子機器及びメモリ管理プログラムにおいて、メモリの割当・解放動作に関して、フラグメンテーションの発生を抑制し効率的なメモリ管理を行う技術に関する。
【背景技術】
【０００２】
半導体メモリや磁気回転ディスクなどの記憶装置を備える電子機器では、メモリの管理を効率的に行う技術的要求がある。メモリは使用時に必要領域を確保（割当）し、その使用が終わった後は解放して再使用に備える。このような、メモリの割当・解放動作を繰り返すと、フラグメンテーションと呼ばれる使用可能なメモリ空間がアドレス空間上に細かく分散して存在する状態になってしまい、メモリの使用率としては少ない状態であっても大きなアドレス空間が取れない状況が発生する。
【０００３】
従来技術として、画像形成装置などのデータ処理装置において、フラグメンテーションの発生を少なくし、メモリの空き待ちやメモリ内のデータ移動等によるスループットの低下を起こさないメモリ管理方法を実現する以下の方法がある。ページ検出処理部がページ開始を検出すると、メモリ資源取得処理部がメモリを確保し、パーティション（パーテーション）分割が行われ、入力データ用および加工データ用のパーティション（パーテーション）にメモリ領域がそれぞれ確保される。データ加工処理部によって加工データが生成され加工データ用メモリ領域に格納されると、メモリ資源解放処理部によって、不要となるメモリ領域の解放が行われる。解放されたメモリ領域は、加工データ用パーティション（パーテーション）の空き領域の一部となる（特許文献１参照）。
【０００４】
また、高い書き込み速度を実現可能なホスト機器を提供するために、管理システムがメモリ領域上で区画された単位領域を書き込みデータが記憶される書き込み領域として順次割り当てる機能を有し、単位領域の自然数倍の大きさからなる管理単位を割り当て位置の決定単位として用い、書き込み関数呼び出しを受けて管理単位ごとの実現可能な書き込み速度順に従って管理単位を前記書き込み領域として割り当てて、コントローラが、管理システムが割り当てた単位領域に書き込みデータを書き込む旨の指示をメモリカードに出す方法があった（特許文献２参照）。
【０００５】
しかし、特許文献１の方法では画像形成装置のページ単位毎の処理を前提としているため、複数ページに跨る処理には対応できない。また、パーテーションの区切りは２つという制限がある。さらに、パーテーションのサイズは、最初の割当時の容量で不足しても、その連続的メモリ空間の増量はできず、ひとつのパーテーションのサイズを減少する方向にしか容量変化に対応できない。
【０００６】
また、特許文献２の方法は、書き込みの際のメモリ割当に関するものであり、メモリが連続的に割当・解放動作を伴う際のフラグメンテーションの抑制には対応できない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００２−３５１７３９号公報
【特許文献２】特開２００６−２８５６６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
解決しようとする問題点は、メモリ管理システム、電子機器及びメモリ管理プログラムにおいて、メモリのフラグメンテーションを効率的に回避することができなかった点と、高速に連続的なメモリ空間の割当・解放動作を行い、割当てられた連続的なメモリ空間のサイズの増減を行うことができなかった点である。さらに、物理パーテーションのフラグメンテーション率が高くなった場合で大きなメモリの再割当が必要な際には、細分化されたメモリを多数合わせて用いることに起因する物理アドレスと論理アドレスの変換処理に時間がかかることを回避できなかった点である。
【課題を解決するための手段】
【０００９】
本発明のメモリ管理システムは、論理アドレス空間においてアプリケーションが使用する仮想メモリの割当と解放を管理する論理パーテーション管理部と、物理アドレス空間において実メモリを小サイズ毎の物理パーテーションに切り分けて前記実メモリの割当と解放を管理する物理パーテーション管理部と、前記論理アドレス空間と前記物理アドレス空間との間のアドレス変換を行う変換部とを有し、前記物理パーテーション管理部は、前記物理パーテーションのフラグメンテーション率を監視して当該フラグメンテーション率が所定の上限閾値を超えた物理パーテーションに対するメモリの割当を禁止することを特徴とする。
【００１０】
また、本発明のメモリ管理システムの前記物理パーテーション管理部は、前記メモリの割当を禁止したフラグメンテーション率が所定の上限閾値を超えた物理パーテーションの当該フラグメンテーション率が所定の下限閾値を下回った場合には、再度のメモリの割当を許可することを特徴としてもよい。
【００１１】
また、本発明のメモリ管理システムの前記変換部は、前記論理アドレス空間と前記物理アドレス空間とを関連付ける、前記変換テーブルを生成又は消去することを特徴としてもよい。
【００１２】
また、本発明のメモリ管理システムの前記論理パーテーション管理部は、前記仮想メモリの割当をアプリケーション毎に連続した論理アドレス空間に確保することを特徴としてもよい。
【００１３】
また、本発明のメモリ管理システムの前記物理パーテーション管理部は、ハードウェア依存によるアクセス領域を固定領域とし、前記論理パーテーション管理部からの前記アプリケーションによる仮想メモリ割当てに対して、前記固定領域には割当を行わないことを特徴としてもよい。
【００１４】
本発明の電子機器は、前記メモリ管理システムを有することを特徴とする。
【００１５】
本発明のメモリ管理プログラムは、コンピュータに、論理アドレス空間においてアプリケーションが使用する仮想メモリの割当と解放を管理する論理パーテーション管理機能と、物理アドレス空間において実メモリを小サイズ毎に切り分けて前記実メモリの割当と解放を管理する物理パーテーション管理機能と、変換テーブルに基づいて前記論理アドレス空間と前記物理アドレス空間との間のアドレス変換を行う変換機能とを実現させることを特徴とする。
【発明の効果】
【００１６】
本発明のメモリ管理システムは、論理アドレス空間においてアプリケーションが使用する仮想メモリの割当と解放を管理する論理パーテーション管理部と、物理アドレス空間において実メモリを小サイズ毎の物理パーテーションに切り分けて前記実メモリの割当と解放を管理する物理パーテーション管理部と、前記論理アドレス空間と前記物理アドレス空間との間のアドレス変換を行う変換部とを有し、前記物理パーテーション管理部は、前記物理パーテーションのフラグメンテーション率を監視して当該フラグメンテーション率が所定の上限閾値を超えた物理パーテーションに対するメモリの割当を禁止することを特徴とする。
【００１７】
このため、論理アドレス空間におけるフラグメンテーションを効率的に回避する。また、高速に連続的な仮想メモリ空間の割当、解放動作が可能となり、割当てられた連続的な仮想メモリ空間のサイズの増減を行うことが可能となる。そして、物理パーテーションのフラグメンテーション率が上限閾値を越えた場合には、当該物理パーテーションを使用させないため、フラグメンテーションによる細かいメモリ領域を物理パーテーションから集めるような効率の悪いメモリ管理を行うことが無くなり、物理メモリと論理メモリとの間の変換に大きなコスト（変換処理のステップ増）がかかるのを抑制可能となる。
【００１８】
また、本発明のメモリ管理システムの前記物理パーテーション管理部は、前記メモリの割当を禁止したフラグメンテーション率が所定の上限閾値を超えた物理パーテーションの当該フラグメンテーション率が所定の下限閾値を下回った場合には、再度のメモリの割当を許可することを特徴としてもよい。
【００１９】
このため、一旦メモリの再割当を禁止したものであっても、フラグメンテーション率が下限閾値を下回った場合には、再度改善されたフラグメンテーション率での連続したメモリ領域がとれているために、新規の物理パーテーションを使用することなく、メモリの利用効率を高めることが可能となる。
【００２０】
また、本発明のメモリ管理システムの前記変換部は、前記論理アドレス空間と前記物理アドレス空間とを関連付ける、前記変換テーブルを生成又は消去することを特徴としてもよい。
【００２１】
このため、アプリケーションが使用する仮想メモリの論理アドレス空間から、実メモリの物理アドレス空間へのアドレス変換が効率よく行うことができる。
【００２２】
また、本発明のメモリ管理システムの前記論理パーテーション管理部は、前記仮想メモリの割当をアプリケーション毎に連続した論理アドレス空間に確保することを特徴としてもよい。
【００２３】
このため、アプリケーション毎に区切られたパーテーションを一度に解放することにより、仮想メモリの解放が高速に行うことが可能となり、かつ、連続した大きな論理アドレス空間を得ることが可能となる。
【００２４】
また、本発明のメモリ管理システムの前記物理パーテーション管理部は、ハードウェア依存によるアクセス領域を固定領域とし、前記論理パーテーション管理部からの前記アプリケーションによる仮想メモリ割当てに対して、前記固定領域には割当を行わないことを特徴としてもよい。
【００２５】
このため、ＤＭＡ（Direct Memory Access）等のハードウェア依存アクセスがあっても、当該箇所が他のアプリケーション等に割当てられることがなく動作する。
【００２６】
本発明の電子機器は、前記メモリ管理システムを有することを特徴とする。
【００２７】
このため、論理アドレス空間におけるフラグメンテーションの発生を効率的に回避する。また、高速に連続的な仮想メモリ空間の割当、解放動作が可能となり、割当てられた連続的な仮想メモリ空間のサイズの増減を行うことが可能となる。また、アプリケーション毎に区切られたパーテーションを一度に解放することにより、仮想メモリの解放を高速に行うことが可能となり、かつ、連続した大きな論理アドレス空間を得ることが可能となる。また、ＤＭＡ（Direct Memory Access）等のハードウェア依存アクセスがあっても、当該箇所が他のアプリケーション等に割当てられることがなく動作する。
【００２８】
本発明のメモリ管理プログラムは、コンピュータに、論理アドレス空間においてアプリケーションが使用する仮想メモリの割当と解放を管理する論理パーテーション管理機能と、物理アドレス空間において実メモリを小サイズ毎に切り分けて前記実メモリの割当と解放を管理する物理パーテーション管理機能と、変換テーブルに基づいて前記論理アドレス空間と前記物理アドレス空間との間のアドレス変換を行う変換機能とを実現させることを特徴とする。
【００２９】
このため、論理アドレス空間におけるフラグメンテーションの発生を効率的に回避する。また、高速に連続的な仮想メモリ空間の割当、解放動作が可能となり、割当てられた連続的な仮想メモリ空間のサイズの増減を行うことが可能となる。
【図面の簡単な説明】
【００３０】
【図１】従来例と本発明実施例のパーテーションの違いを示す説明図である。
【図２】従来例のパーテーションのメモリ割当ての図である。
【図３】本実施例のパーテーションのメモリ割当ての図である。
【図４】本発明実施例のメモリ管理システムの機能ブロック図である。
【図５】本発明実施例の変換テーブルの例である。
【図６】本発明実施例のマイクロパーテーションの使用例の説明図である。
【図７】本発明実施例のマイクロパーテーションのサイズ確保の例の説明図である。
【図８】本発明実施例のマイクロパーテーションの固定領域の説明図である。
【図９】従来例のメモリマップと物理パーテーションの関係図である。
【図１０】本発明実施例のメモリマップと物理パーテーションの関係図である（割当停止が発生した場合）。
【図１１】本発明実施例のメモリマップと物理パーテーションの関係図である（割当待機に復帰した場合）。
【図１２】変換テーブルの例である。
【図１３】初期化処理のフローチャートである。
【図１４】メモリ割当処理のフローチャートである。
【図１５】メモリ解放処理のフローチャートである。
【図１６】メモリ一括解放のフローチャートである。
【図１７】本発明実施例のメモリ管理システムのソフトウェアの構成図である。
【発明を実施するための形態】
【００３１】
メモリ管理システム、電子機器及びメモリ管理プログラムにおいて、メモリのフラグメンテーションを効率的に回避することができない問題点と、高速に連続的な仮想メモリ空間の割当、解放動作を行い、割当てられた連続的なメモリ空間のサイズの増減を行うことができない問題点を物理アドレス空間を小サイズ毎に区切ったマイクロパーテーション単位で扱い、アプリケーション等毎に区切った連続的な論理アドレス空間を必要数の前記マイクロパーテーションに割当て、各マイクロパーテーションのフラグメンテーション率を監視して、フラグメンテーション率が所定の上限閾値を超えたマイクロパーテーションにはメモリの再割当を行わない方法により、メモリの割当を高速に行うことを可能とした。
【実施例】
【００３２】
［パーテーション］
図１（Ａ）は、従来のメモリ管理システムにおけるアドレス空間での実メモリの割り当てに関する説明図である。従来は、アドレス空間を単一のパーテーションとして区切り、これら単一のパーテーションをメモリ管理のＡＰＩ（Application Program Interface）によって、実メモリの割り当て（malloc()）、解放（free()）を行っていた。このようなメモリ管理の下では、実メモリの割当・解放を繰り返した結果として、図２（Ａ）から図２（Ｂ）に示すように使用中、未使用中のアドレス空間が分散してフラグメンテーションを発生し、実メモリ内のデータ移動処理を行わなければ連続的な大容量の実メモリ空間を確保することができない。しかし、実メモリ内のデータ移動処理には時間がかかり、データ移動中は実メモリの使用が大きく制限されるため、画像形成装置などのリアルタイム処理が必要な電子機器では非常に問題となる。
【００３３】
図１（Ｂ）は、本発明のメモリ管理システムにおける、物理アドレス空間をパーテーション毎に区切って使用する場合の物理アドレス空間の割当てに関する説明図である。図３（Ａ）に示すように全体の物理アドレス空間を複数のパーテーション毎にＩＤを与えて区切り、ＩＤをアプリケーション毎に関連付けて割当てるようにすると、ひとつのアプリケーションが終了した場合（図３（Ｂ）におけるＩＤ＝２のアプリケーション）には、パーテーション２をＩＤ指定による一括解放（free_all(ID=2)、図１（Ｂ）参照）を行うことにより大きな連続アドレス空間を得ることができる。
【００３４】
しかし、このパーテーションを区切る方法だけでは、最初に割当てられたパーテーションサイズと実際に使用されるメモリサイズとの間に大きな差異があった場合、特にパーテーションで割当てられた実メモリサイズでは、容量が足りなくなった場合には、連続した大きな物理アドレス空間を得ることはできない。
【００３５】
そこで、本発明ではアプリケーション側が要求する論理アドレス空間を、物理メモリ空間を小サイズに区切ったマイクロパーテーションの物理アドレス空間に変換することにより、前記の問題を解決した。
【００３６】
［構成］
図４は、本発明の実施例に係わるメモリ管理システムの機能ブロック図である。
【００３７】
メモリ管理部Ｍ１０は、物理パーテーション管理部Ｍ１７、変換部Ｍ１９，論理パーテーション管理部Ｍ２１の機能部を有する。
【００３８】
上記の各機能部は、物理アドレス空間での物理マイクロパーテーションＭ１１にアクセスし、物理アドレスと論理アドレスの間の変換テーブルＭ１３を生成又は消去し、論理アドレス空間での論理パーテーションＭ１５にアクセスする。
【００３９】
以下に各機能部毎にその動作について説明する。
【００４０】
論理パーテーション管理部Ｍ２１は、論理アドレス空間においてアプリケーションが使用する仮想メモリの割当を管理し、該仮想メモリ割当てについてはアプリケーション毎に連続した論理アドレスのパーテーション毎（論理パーテーションＭ１５）に区切って管理する。
【００４１】
変換部Ｍ１９は、論理アドレス空間と物理アドレス空間との間のアドレス変換を行う。アドレス変換には前記論理アドレス空間と前記物理アドレス空間とを関連付ける変換テーブルＭ１３を用いる（詳細後述）。すなわち、変換部Ｍ１９は、仮想メモリ及び実メモリの未使用領域を、それぞれ論理パーテーション管理部Ｍ１９及び物理パーテーション管理部Ｍ１７から取得し、前記論理アドレス空間に前記物理アドレス空間を関連付ける。変換部Ｍ１９は、アプリケーションの使用状況に応じて、変換テーブルＭ１３の生成と消去を行う。詳細には、変換部Ｍ１９は、アプリケーションの起動や動作に伴う要求に応じて変換テーブルＭ１３を生成し、アプリケーションの終了に応じて変換テーブルＭ１３を消去する。
【００４２】
物理パーテーション管理部Ｍ１７は、物理アドレス空間において実メモリを小サイズ毎の物理マイクロパーテーションＭ１１に切り分けて実メモリの割当と解放を管理する。
【００４３】
さらに、物理パーテーションのフラグメンテーション率を監視して、フラグメンテーション率が所定の上限閾値を超えた物理パーテーションについては、それ以上のメモリの割当を禁止する。また、一旦メモリの割当が禁止された物理パーテーションであっても、そのフラグメンテーション率が所定の下限閾値より下回った場合には、再度のメモリの割当を許可する。これらの上限閾値と下限閾値は例えば、典型的には上限閾値を７０％、下限閾値を３０％としてもよい。また、上限閾値は最大値に近い例えば９９％といった値であってもよい。
【００４４】
ここで、フラグメンテーション率は次式から算出される。
【００４５】
フラグメンテーション率（％）＝｛［フラグメント数］／（［マイクロパーテーション数］−１）｝×１００
この上限閾値による物理パーテーションの割当を禁止する方法により、メモリの割当が必要になった場合には、他の物理パーテーションからの割当を行う。
【００４６】
［ソフトウェア構成］
さらに詳細にソフトウェア構成について図１７のソフトウェア構成図を用いて説明する。
【００４７】
メモリ管理システムは、メモリマネージメント初期化部２００、変換テーブル管理部２０１、アドレス変換部２２１、メモリ統計情報管理部２４１、ＭＣＢ管理部２６１の各機能部を有する。以下に各機能部について説明する。
【００４８】
メモリマネージメント初期化部２００は、メモリマネージメントの初期化に必要な動作を行う。初期化時にメモリマネージメントを行うメモリ領域や、物理アドレス空間、論理アドレス空間、固定アドレス空間の設定等を行う。
【００４９】
変換テーブル管理部２０１（論理パーテーション管理部、物理パーテーション管理部）は、物理アドレス空間において実メモリを小サイズに切り分けたマイクロパーテーションに対するメモリの割当と解放の管理を行う。また、論理アドレス空間においてアプリケーションが使用する仮想メモリの割当と解放の管理を行う。変換テーブル管理部２０１は、さらに個々の機能部に分かれており、パーテーション管理部２１１、パーテーションサイズの管理部２１３、アドレス（物理、論理）管理部２１５、ＩＤ管理部２１７、フラグ（待機、停止）管理部２１９とを有する。
【００５０】
パーテーション管理部２１１は、前記した物理アドレス空間をマイクロパーテーションに切り分けてその割当解放の管理を行う。
【００５１】
パーテーションサイズの管理部２１３は、パーテーションのサイズの管理を行う。
【００５２】
アドレス（物理、論理）管理部２１５は、論理アドレスでのメモリの割当及び解放と、それに呼応する物理アドレスの管理を行う。
【００５３】
ＩＤ管理部２１７は、アプリケーション毎に持つＩＤを管理し、変換テーブル中に各メモリブロックがどのアプリケーションから使われているかのＩＤを記載して管理する。
【００５４】
フラグ（待機、停止）管理部２１９は、各メモリブロックの状態（待機、停止）を管理する。
【００５５】
次にアドレス変換部２２１（変換部）は、前記論理アドレス空間と物理アドレス空間との間のアドレス変換を行う。物理アドレスから論理アドレスへの変換部２３１と論理アドレスから物理アドレスへの変換部２３３との二つの機能部を有する。
【００５６】
メモリ統計情報管理部２４１（物理パーテーション管理部）は、物理パーテーション管理部の一部の機能を担う。物理パーテーション内の未使用領域をそのサイズによりグループに分けてリンクリスト構造を形成し、メモリの割当要求の際には、最適なサイズのグループの中のリンクリストから未使用領域を検索する。
【００５７】
メモリ使用ブロック数の管理部２３１は、メモリ使用ブロック数を管理する。
【００５８】
メモリ使用バイト数の管理部２５３は、メモリ使用バイト数を管理する。
【００５９】
パーテーションの閾値チェック部２５５は、パーテーションのフラグメンテーション率をチェックし、そのフラグメンテーション率が上限の閾値を超えた場合には、当該パーテーションからのメモリの再割当を禁止する。一旦再割当を禁止されたパーテーションのフラグメンテーション率が下限の閾値を下回った場合には、メモリの再割当の禁止を解除する。
【００６０】
閾値種別管理２５７は、メモリの未使用領域のサイズに従って、物理パーテーション内でサイズ毎にグループ分けを行う。
【００６１】
ＭＣＢ管理部２６１は、メモリコントロールブロック（ＭＣＢ）の管理を行う。ＭＣＢは、実メモリのメモリブロックの先頭部にあるポインターやサイズ情報等を納めた部分であり、その管理を行う。ＭＣＢの動作の詳細については後述する。
【００６２】
［変換テーブル及びマイクロパーテーション］
図５を用いて変換テーブルについて説明する。
【００６３】
物理アドレス空間は、変換テーブルＴ０１に示すように、サイズが０ｘ０８００（このサイズは、一例であって、その他のサイズであってもよい）毎のマイクロパーテーションに区切られている。各マイクロパーテーションは、どのアプリケーションによって使用されているかを示すＩＤを有し、その物理アドレス及び対応する論理アドレスの値を有する。
【００６４】
例えばＩＤ＝２のアプリケーションに使用されているマイクロパーテーションについてみると、変換テーブルＴ１１に示すようにマイクロパーテーション番号＝１がＩＤ＝２での先頭のマイクロパーテーションであり、そのリンク先ポインタは次の変換テーブルＴ３１でマイクロパーテーション番号＝３を示し、次がマイクロパーテーション番号＝６を示している。
【００６５】
このように、変換部Ｍ１９は、物理パーテーション管理部Ｍ１７によって物理アドレス空間ではとびとびに割当てられている実メモリの物理アドレスを連続した論理アドレスに変換することができる。更に、論理パーテーション管理部Ｍ１５は、変換部Ｍ１９から取得した変換された連続した論理アドレスを、仮想メモリ空間に割当てることが可能である。
【００６６】
図６（Ａ）にＩＤ指定による実メモリ一括解放の場合を示す。この場合にマイクロパーテーション２は、グラフィックスアプリケーションによって占有されていたが、グラフィックアプリケーションが終了したため、その実メモリを必要としなくなる。そこで、物理パーテーション管理部Ｍ１７は、ＩＤ＝グラフィックスを指定してメモリの一括解放を行う。この場合、前記変換テーブルのＴ１１からＴ６１に示したようなリンク先ポインタを用いて、ＩＤ＝グラフィックスに割当てられていた実メモリをすべて解放することが可能である。解放されたマイクロパーテーションは他のアプリケーションにより使用が可能である。
【００６７】
図６（Ｂ）に最初に割当てられた実メモリのパーテーションを再割当する場合についての図を示す。最初に物理パーテーション管理部Ｍ１７により割当てられた物理メモリ空間が足りなくなった場合には、未使用であったマイクロパーテーション５をＩＤ＝グラフィックスのために割当てる。この場合、物理アドレス空間は、とびとびに存在するが、論理アドレス空間は連続的に存在する。
【００６８】
図６（Ｃ）では、新規にマイクロパーテーションを複数割当てる場合について説明する。割当てに必要なアドレス空間がマイクロパーテーションのひとつのサイズより大きい場合には、例えば図のようにマイクロパーテーション３，４，５の３つを割当てるようにしてもよい。
【００６９】
図７を用いて、物理アドレス空間ではマイクロパーテーションの使用空間が分散して存在している場合でも、連続した論理アドレス空間が得られることを説明する。図７では、例えばＩＤ＝インタープリタのアプリケーションは、その使用実メモリがマイクロパーテーションの１，６，９に分散しており、フラグメントは２つ（マイクロパーテーション２から５と、マイクロパーテーション７，８）存在している。同様に、ＩＤ＝グラフィックスのアプリケーションは、マイクロパーテーションの２，４，５，８に分散しており、フラグメントは２つ（マイクロパーテーション３と、マイクロパーテーション６，７）存在している。また、ＩＤ＝レンダリングのアプリケーションは、マイクロパーテーションの３，７に分散しており、フラグメントは１つ（マイクロパーテーション４から６）存在している。物理パーテーション内のフラグメント数は５で、マイクロパーテーション数は９なので、フラグメンテーション率は、｛５／（９−１）｝×１００＝６２．５％となる。
【００７０】
しかしながら、変換部Ｍ１９が前記した変換テーブルＭ１３を用いて物理アドレスと論理アドレス間のアドレス変換を行うために、論理パーテーション管理部Ｍ２１へは、常に連続したメモリ空間への論理アドレスでのアクセスが可能である。グラフィックス及びレンダリングのアプリケーションについても同様にメモリ管理される。
【００７１】
例えば、図７において、ＩＤ＝インタープリタのアプリケーションは、マイクロパーテーション１，６，９の順で論理アドレスが連続している。同様に、ＩＤ＝グラフィックスのアプリケーションはマイクロパーテーションの２，４，５，８の順で、ＩＤ＝レンダリングのアプリケーションは、マイクロパーテーションの３，７の順で、それぞれ論理アドレスが連続している。
【００７２】
図８を用いて、特定のマイクロパーテーションを固定メモリ領域に指定する例について示す。実メモリのアドレス空間においては、ＤＭＡ（Direct Memory Access）などのハードウェアから直接メモリ空間をアクセスする場合などがあるが、本メモリ管理システムにおいて、そのようなハードウェア依存アクセスがあっても、問題なく動作する。その場合は、変換部Ｍ１９は、変換テーブルＭ１３中の該当マイクロパーテーションに例えばＩＤ＝ハードウェア依存のようなマークを付ける。当該ＩＤを有するマイクロパーテーションは固定領域であるために、物理パーテーション管理部Ｍ１７は、論理パーテーション管理部Ｍ２１からのメモリ割当要求がきても、該当部分（固定領域）には割当を行わない。図８に示すように、論理パーテーション管理部Ｍ２１に割当て要求があったアプリケーションのインタープリタ、グラフィックス、レンダリングのいずれも、ＩＤ＝ハードウェア依存のマイクロパーテーション領域（固定領域）を避けてメモリの物理アドレスの割り当てを行うために、これらＤＭＡ等によってアクセスされる領域との競合は生じない。
【００７３】
［未使用領域のフラグメンテーション率による再割当の禁止・許可］
次に、未使用領域のフラグメンテーション率による再割当の禁止・許可の動作について詳細に説明する。
【００７４】
ダブル・ポインタ方式を利用したメモリ管理システムでは、メモリのデフラグメンテーションは行えるが、メモリ内のデータ転送によりパフォーマンスが低下する欠点がある。その為、前述したマイクローパーテーションを用いるメモリ管理方法を提案した。このメモリ管理システムは、メモリを利用するアプリケーション毎に専用のパーテーションを割当てることで、アプリケーションが一切のメモリを使用しなくなった時点で、パーテーション内のメモリを全て解放するものである。上記のメモリ管理システムでは、パーテーション連結の為の論理アドレスを導入し、物理アドレスと論理アドレスの相互変換を行う「変換テーブル」を用意した。図９は、前述したマイクロパーテーションによる「メモリマップと物理パーテーションの関係」を示している。但し、上記方法においても、アプリケーションがメモリを使用している間は、そのパーテーション内でメモリのフラグメンテーションが発生する欠点がある。（メモリ利用効率の低下）
本発明の目的は、アプリケーションがメモリを使用中にパーテーション内で発生するフラグメンテーションを効率的に解消することである。
【００７５】
上記を実現する為、新たに「上限閾値」と「下限閾値」を用意した。各々のパーテーションでは、「上限閾値」を超えるとフラグメンテーションが多数発生したとして「割当」を中断し、以降は「解放」のみ行う。「割当」は、新たにパーテーションを作成（「変換テーブル」にパーテーション情報を登録）し、そのパーテーション内で行う。「割当」を中断したパーテーションは、「解放」が進み「下限閾値」未満に達すると、フラグメンテーションが少なくなったとして、再び「割当」を再開する。この様に、「上限閾値」と「下限閾値」を設け、パーテーションを「割当」可能な状態（「待機」）と、「解放」のみ行われる状態（「停止」）の２状態で管理することで、パーテーション使用中もデフラグメンテーションを効率よく行うことが出来る様になる。尚、「閾値」としては、パーテーション内における「メモリ使用ブロック数」、「メモリ使用バイト数」などが考えられる。
【００７６】
図１０に本発明実施例での割当停止が発生した場合のメモリマップと物理パーテーションの関係を示す。
【００７７】
物理パーテーション番号１，３，４は、フラグメンテーションが「上限閾値」以上に達したので、「割当」は停止し、「解放」のみ行われる。代わりに、物理パーテーション番号６，７，８が新たに「割当」に使用される。
【００７８】
図１１に本発明実施例での割当が「待機」に復帰した場合のメモリマップと物理パーテーションの関係を示す。
【００７９】
物理パーテーション番号１，３，４は、「解放」によりフラグメンテーションが「下限閾値」未満に達したので、「割当」が再開される。
【００８０】
ここで、上限閾値とは、パーテーション内で「割当」を停止する為の閾値。この値以上に達すると、以降「解放」のみ行われ、フラグメンテーションの解消が進む。
【００８１】
下限閾値とは、パーテーション内で「割当」を再開する為の閾値。この値未満に達すると、以降「割当」が再開される。
【００８２】
これまで説明したマイクロパーテーション番号、ＩＤ、フラグ、物理開始アドレス、レングス、対象論理アドレスの関係を表１に示す。
【００８３】
【表１】
2010204763.tif 000003
［アドレス変換方法］
本発明では、パーテーションを連結する為、メモリ割当およびメモリ解放は「論理アドレス」を介して行う。
【００８４】
例えば、メモリ解放では解放対象となるアドレスを「論理アドレス」で指定する。
【００８５】
［論理アドレスから物理アドレスへの変換方法］
以下、図１２を利用して論理アドレスから物理アドレスへの変換方法を説明する。アプリケーション(ID=2)が論理アドレス0x1234を先頭アドレスとするメモリ領域を解放する場合を考える。始めに、メモリ管理システムの「変換プログラム」は、変換テーブルを参照する。
【００８６】
１つ目の変換テーブルの論理開始アドレス0x0000とレングス0x0800から、対象論理アドレス0x0000〜0x07FFを求めるが、指定された0x1234は範囲外である。
【００８７】
次に、リンク先ポインタから２つ目の変換テーブルを求める。２つ目の変換テーブルの論理開始アドレス0x0800とレングス0x0800から、対象論理アドレス0x0800〜0x0FFFを求めるが、指定された0x1234は範囲外である。
【００８８】
次に、リンク先ポインタから３つ目の変換テーブルを求める。３つ目の変換テーブルの論理開始アドレス0x1000とレングス0x0800から、対象論理アドレス0x1000〜0x17FFを求めると、指定された0x1234は範囲内である。
【００８９】
ここで、指定された0x1234と論理開始アドレス0x1000の差（オフセット値）を求めると、0x0234となる。
【００９０】
最後に、物理開始アドレス0x5500に、オフセット値0x0234を加えて、物理アドレス0x5734を求めることが出来る。
【００９１】
［物理アドレスから論理アドレスへの変換方法］
以下、図１２を利用して物理アドレスから論理アドレスへの変換方法を説明する。アプリケーション(ID=2)が物理アドレス0x5734を先頭アドレスとするメモリ領域を確保（割当）した場合を考える。
【００９２】
始めに、メモリ管理システムの「変換プログラム」は、変換テーブルを参照する。１つ目の変換テーブルの物理開始アドレス0x３000とレングス0x0800から、対象物理アドレス0x3000〜0x37FFを求めるが、確保した領域の先頭アドレス0x5734は範囲外である。
【００９３】
次に、リンク先ポインタから２つ目の変換テーブルを求める。２つ目の変換テーブルの物理開始アドレス0x4000とレングス0x0800から、対象物理アドレス0x4000〜0x47FFを求めるが、確保した領域の先頭アドレス0x5734は範囲外である。
【００９４】
次に、リンク先ポインタから３つ目の変換テーブルを求める。３つ目の変換テーブルの物理開始アドレス0x5500とレングス0x0800から、対象物理アドレス0x5500〜0x5CFFを求めると、確保した先頭アドレス0x5734は範囲内である。
【００９５】
ここで、確保した先頭アドレス0x5734から、物理パーテーションの先頭（物理）アドレス0x0x5500の差（オフセット値）を求めると0x0234となる。
【００９６】
最後に、論理開始アドレス0x1000に、オフセット値0x0234を加えて、物理アドレス0x1234を求めることが出来る。
【００９７】
［割当、解放、一括解放の例］
以下に、「論理アドレス」を使用した「割当」、「解放」、「一括解放」の例を示す。
【００９８】
「割当」の例
void *malloc( int id, size_t size ) （注）戻り値は、論理アドレス
「解放」の例
void free( int id, void *pointer ) （注）pointer は、論理アドレス
「一括解放」の例
void free_all( int id )
上記の動作を行う際には以下の点に注意する。
【００９９】
・DMA転送を行う場合は、物理パーテーションの領域を固定化すること。
【０１００】
・メモリアクセスを伴うライブラリ関数（memcpy, strcpy, 等）を使用する場合は、独自のライブラリ関数（論理アドレス指定）に置き換えること。
【０１０１】
［動作の流れ；フローチャート］
次に実際の動作の流れについて、フローチャートを用いて説明する。
【０１０２】
まず、初期化時の動作；void init_memory(void)についての動作の流れについて、図１３を用いて説明する。
【０１０３】
Ｓ１１：パーテーションサイズの定義ファイルがあるかどうかを判断する。ある場合には動作をＳ１５に、無い場合にはＳ１３に動作を移行する。
【０１０４】
Ｓ１３：パーテーションサイズはデフォルト値を使用する。
【０１０５】
Ｓ１５：パーテーションサイズの定義ファイルを読み込む。
【０１０６】
Ｓ１７：閾値と閾値種別定義ファイルがあるかどうかを判断する。ある場合はＳ２３に、無い場合にはＳ１９に動作を移行する。
【０１０７】
Ｓ１９：パーテーションサイズはデフォルト値を使用する。
【０１０８】
Ｓ２１：パーテーションサイズはデフォルト値を使用する。
【０１０９】
Ｓ２３：閾値（上限閾値、下限閾値）を定義ファイルから読み込む。
【０１１０】
Ｓ２５：閾値種別（メモリ使用ブロック数またはメモリ使用パイと数）を定義ファイルから読み込む。
【０１１１】
以上の一連の動作により、初期化動作を完了する。
【０１１２】
次にメモリ割当処理の動作について、図１４のフローチャートを用いて説明する。
【０１１３】
Ｓ３１：メモリ割当要求を受信する。
【０１１４】
Ｓ３３：ポインターをＭＣＢの先頭にセットする。
【０１１５】
Ｓ３５：ＭＣＢ有りかどうかを判断する。ＭＣＢがあれば動作をＳ３７に、無ければ動作をＳ６１に移行する。
【０１１６】
Ｓ３７：空き領域のサーチを行う。
【０１１７】
Ｓ３９：空き領域あるかどうかを判断する。空き領域があればＳ４１に、無ければＳ４７に動作を移行する。
【０１１８】
Ｓ４１：変換テーブル内のＩＤとフラグを参照する。
【０１１９】
Ｓ４３：空き領域のＩＤは指定されたｉｄと一致するかどうかを判断する。一致する場合は動作をＳ４５に、無ければＳ４７に移行する。
【０１２０】
Ｓ４５：フラグは、待機状態かどうかを判断する。待機状態であればＳ４９に、そうでなければＳ４７に移行する。
【０１２１】
Ｓ４７：ポインターを次のＭＣＢへ進める。
【０１２２】
Ｓ４９：ＭＣＢを更新する。
【０１２３】
Ｓ５１：物理アドレスを論理アドレスに変換する。
【０１２４】
Ｓ５３：メモリ利用率は上限閾値以上かどうかを判断する。そうであればＳ５５に、そうでなければＳ５７に動作を移行する。
【０１２５】
Ｓ５５：変換テーブル内のフラグを待機から停止に変更する。
【０１２６】
Ｓ５７：確保した領域の先頭アドレス（論理アドレス）をリターンする。
【０１２７】
Ｓ６１：パーテーション情報を変換テーブルに追加し、フラグを待機にセットする。
【０１２８】
Ｓ６３：パーテーション情報は追加できたかどうかを判断する。追加できたときはＳ６７に、そうでない場合はＳ６５に動作を移行する。
【０１２９】
Ｓ６５：ポインターをＭＣＢの先頭にセットする。
【０１３０】
Ｓ６７：パーテーション情報の連結を行う。
【０１３１】
Ｓ６９：ＭＣＢが有るかどうかを判断する。有る場合はＳ７１に、無い場合はＳ８７に動作を移行する。
【０１３２】
Ｓ７１：空き領域のサーチを行う。
【０１３３】
Ｓ７３：空き領域があるかどうかを判断する。有る場合にはＳ７５に、無い場合にはＳ８１に動作を移行する。
【０１３４】
Ｓ７５：変換テーブル内のＩＤとフラグを参照する。
【０１３５】
Ｓ７７：空き領域のＩＤは、指定されたｉｄと一致するかどうかを判断する。一致する場合にはＳ７９に、一致しない場合にはＳ８１に動作を移行する。
【０１３６】
Ｓ７９：フラグは停止状態かどうかを判断する。停止状態の場合は動作をＳ８３に、そうでない場合はＳ８１に動作を移行する。
【０１３７】
Ｓ８１：ポインターを次のＭＣＢへ進める。
【０１３８】
Ｓ８３：ＭＣＢを更新する。
【０１３９】
Ｓ８５：物理アドレスを論理アドレスに変換する。
【０１４０】
Ｓ８７：ＮＵＬＬ（割当失敗）をリターンする。
【０１４１】
以上の一連の動作により、メモリの割当処理を完了する。
【０１４２】
次にメモリ解放処理の動作について、図１５のフローチャートを用いて説明する。
【０１４３】
Ｓ１０１：メモリ解放要求を受信する。
【０１４４】
Ｓ１０３：論理アドレスを物理アドレスに変換する。
【０１４５】
Ｓ１０５：ポインターをＭＣＢの先頭にセットする。
【０１４６】
Ｓ１０７：解放する領域の先頭アドレスをサーチする。
【０１４７】
Ｓ１０９：先頭アドレスが見つかったかどうかを判断する。見つかった場合はＳ１１１に、見つからない場合はＳ１１３に動作を移行する。
【０１４８】
Ｓ１１１：メモリの領域を解放して、ＭＣＢを更新する。
【０１４９】
Ｓ１１３：ポインターを次のＭＣＢへ進める。
【０１５０】
Ｓ１１５：パーテーション内に使用中メモリ無しかどうかを判断する。使用中メモリが無い場合にはＳ１１７に、有る場合はＳ１１９に動作を移行する。
【０１５１】
Ｓ１１７：変換テーブルからパーテーション情報を削除する。これにより動作を終了する。
【０１５２】
Ｓ１１９：メモリ利用率は下限閾値未満かどうかを判断する。下限未満であればＳ１２１に、そうでなければＳ１２３に動作を移行する。
【０１５３】
Ｓ１２１：変換テーブル内に同じＩＤの待機がないかどうかを判断する。待機が無い場合にはＳ１２３に移行する。そうでない場合には動作を終了する。
【０１５４】
Ｓ１２３：変換テーブル内のフラグを停止から待機に変更する。
【０１５５】
以上の一連の動作によりメモリの解放動作を完了する。
【０１５６】
次にメモリの一括解放動作について図１６のフローチャートを用いて説明する。
【０１５７】
Ｓ１３１：メモリ一括解放要求を受信する。
【０１５８】
Ｓ１３３：指定されたｉｄから該当する物理パーテーションを選択する。
【０１５９】
Ｓ１３５；変換テーブルからパーテーション情報を削除する。
【０１６０】
以上の一連の動作によりメモリの一括解放動作が行われる。
【０１６１】
［実施例の効果］
本発明実施例のメモリ管理システムにより、以下のことが可能となる。
【０１６２】
フラグメンテーションを効率的に回避することが可能となる。
【０１６３】
フラグメンテーションを回避する為の手段であるパーテーションを複数化することが可能となる。
【０１６４】
フラグメンテーションを回避する為の手段であるパーテーションの区切り位置を動的に変更することが可能となる。
【０１６５】
メモリの解放順序に制限を必要とせず、不要になったメモリから解放可能となる。
【０１６６】
物理パーテーション中のフラグメンテーション率を監視して、フラグメンテーション率が上限閾値を超えた場合には、当該物理パーテーションに対するメモリの割当を禁止するため、細分化されたメモリ領域を使用することによる処理速度の低下を抑制可能となる。さらに、当該物理パーテーションのフラグメンテーション率が下限閾値を下回った場合には割当の禁止を解除するため、新規にパーテーションを消費することなくメモリ利用効率が向上する。
【符号の説明】
【０１６７】
Ｍ１０  メモリ管理部（メモリ管理システム）
Ｍ１３  変換テーブル
Ｍ１７  物理パーテーション管理部
Ｍ１９  変換部
Ｍ２１  論理パーテーション管理部
２００  メモリマネージメント初期化部
２０１  変換テーブル管理部（物理パーテーション管理部、論理パーテーション管理部）
２１１  パーテーション管理部
２１３  パーテーションサイズ管理部
２１５  アドレス（物理・論理）管理部
２１７  ＩＤ管理部
２１９  フラグ（待機・停止）管理部
２２１  アドレス変換部（変換部）
２３１  物理アドレスから論理アドレスへの変換部
２３３  論理アドレスから物理アドレスへの変換部
２４１  メモリ統計情報管理部（物理パーテーション管理部）
２５１  メモリ使用ブロック数の管理部
２５３  メモリ使用バイト数の管理部
２５５  パーテーションの閾値チェック部
２５７  閾値種別管理部
２６１  ＭＣＢ管理部
２７１  malloc()処理部
２７３  free()処理部
【図１】
2010204763.tif 000004
【図２】
2010204763.tif 000005
【図３】
2010204763.tif 000006
【図４】
2010204763.tif 000007
【図５】
2010204763.tif 000008
【図６】
2010204763.tif 000009
【図７】
2010204763.tif 000010
【図８】
2010204763.tif 000011
【図９】
2010204763.tif 000012
【図１０】
2010204763.tif 000013
【図１１】
2010204763.tif 000014
【図１２】
2010204763.tif 000015
【図１３】
2010204763.tif 000016
【図１４】
2010204763.tif 000017
【図１５】
2010204763.tif 000018
【図１６】
2010204763.tif 000019
【図１７】
2010204763.tif 000020