(57)【要約】【課題】  フラグメンテーションを原理的に引き起こさないメモリ管理装置を提供する。【解決手段】    割付けられた論理アドレスと物理アドレスの対応を記憶するマッピングメモリと、  固定長ブロックで獲得又は解放が行われるヒープメモリと、論理アドレスへのアクセスを前記マッピングメモリによって対応づけられた物理アドレスへのアクセスに写像し、前記ヒープメモリにアクセスするメモリマネジメントユニットと、前記ヒープメモリの物理アドレスの割付、解放を行う物理空間管理ブロックと、前記ヒープメモリの論理アドレスの割付、解放を行う論理空間管理ブロックと、物理アドレスと論理アドレスの対応を前記マッピングメモリへ登録し又は削除するヒープ管理ブロックと  を備える。  【選択図】                    図１
2008217183.tif 000002
【特許請求の範囲】
【請求項１】
割付けられた論理アドレスと物理アドレスの対応を記憶するマッピングメモリと、
固定長ブロックで領域の獲得又は解放が行われるヒープメモリと、
論理アドレスへのアクセスを前記マッピングメモリによって対応づけられた物理アドレスへのアクセスに写像し、前記ヒープメモリにアクセスするメモリマネジメントユニットと、
前記ヒープメモリの物理アドレスの割付、解放を行う物理空間管理ブロックと、
前記ヒープメモリの論理アドレスの割付、解放を行う論理空間管理ブロックと、
物理アドレスと論理アドレスの対応を前記マッピングメモリへ登録し又は削除するヒープ管理ブロックと
を備えたことを特徴とするメモリ管理装置。
【請求項２】
割付けられた論理アドレスと物理アドレスの対応を記憶するマッピングメモリと、
前記マッピングメモリの物理アドレスの割付情報を記憶する物理空間管理メモリと、
前記マッピングメモリの論理アドレスの割付情報を記憶する論理空間管理メモリと、
固定長ブロックで領域の獲得又は解放が行われるヒープメモリと、
前記ヒープメモリの領域の獲得又は解放に必要な関数を呼び出すと共に、割付けされた論理アドレスにアクセスする制御部と、
この制御部による論理アドレスへのアクセスを前記マッピングメモリによって対応づけられた物理アドレスへのアクセスに写像し、前記ヒープメモリにアクセスするメモリマネジメントユニットと、
前記制御部から前記関数の通知を受けると共に、前記ヒープメモリの領域の割付と解放を制御するヒープ管理部と、
このヒープ管理部から所定サイズのメモリの割付依頼を受けると共に、前記ヒープメモリの領域を獲得するために必要なブロックを求めるメモリ割付部と、
前記物理空間管理メモリを参照して未使用ブロックを把握し、前記メモリ割付部で求められた必要なブロックを割付けると共に、割り付けられたブロックの情報を前記物理空間管理メモリに登録する物理空間割付部と、
前記論理空間管理メモリを参照して未使用アドレスを把握し、前記メモリ割付部で求められた必要なアドレスを割付けると共に、割付けられた論理アドレスの情報を論理空間管理メモリに登録する論理空間割付部と
を備えたメモリ管理装置。
【請求項３】
前記ヒープメモリの領域の解放が必要な場合において、
前記マッピングメモリから対応する物理アドレスリストを得て、物理アドレス及び論理アドレスの解放を依頼するメモリ解放部と、
前記物理アドレスの内容を前記物理空間管理メモリから削除する物理空間解放部と、
前記論理アドレスの内容を前記論理空間管理メモリから削除する論理空間解放部と
を備えた請求項２記載のメモリ管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的にメモリを管理するメモリ管理装置に関し、特に、フラグメンテーションを原理的に引き起こさないメモリ管理装置に関する。
【背景技術】
【０００２】
一般に、MMU（メモリ マネジメント ユニット）は、論理アドレスを物理アドレスに写像するものであり、通常固定長ブロック単位で論理アドレスと物理アドレスの対応をマッピングメモリに登録しておくと論理アドレスへのリード／ライトアクセスが対応する物理アドレスのリード／ライトに置き換わるものである。また、MMUの役割の一つに動的メモリ管理が挙げられる。
【０００３】
すなわち、MMUを利用して動的メモリを管理すると、必要なときに必要なサイズのメモリを獲得し、不要になったときはメモリを返却することができるので、搭載されたメモリを有効に活用することができる。メモリ管理装置の先行技術文献としては特許文献１のようなものがある。
【０００４】
【特許文献１】特開平４―１４５５５４号公報
【０００５】
以下、図３を参照して従来のメモリ管理装置について説明するが、図３の具体的な動作説明に先立ち、図３の動作の理解に必要とされるmalloc()関数とfree()関数の利用方法を説明する。
【０００６】
malloc()関数はメモリ資源を獲得する関数であるが、使用方法としては、
void *malloc(size_t size)
からなる要求バイトを渡すことで、要求バイトの連続メモリ空間が獲得され、そのアドレスを戻り値として得ることができる。また、メモリ資源を解放する際は、
void free(void *ptr)
からなるコマンドにより、獲得されたメモリのアドレスを渡すことで、そのメモリ空間をヒープ領域に返却することができる。
【０００７】
次に、これらの関数の利用方法を踏まえて図３の動作を具体的に説明する。
（動的メモリの獲得）
制御部１１は、サイズSのヒープメモリ１７（動的メモリ）を取得するため、malloc(S)を呼び出し、後述するヒープ管理部１２に通知する（符号s1）。なお、制御部１１の機能は、例えばプログラム（アプリケーション）がＣＰＵを動作させることで実現できる。また、図３はプログラムがシングルプロセスのとき、すなわちプログラムの実行開始から実行終了までCPUを独占して実行するときに正しく動作する。
【０００８】
ヒープ管理部１２はメモリ割付部にサイズSのメモリの割付を依頼する（符号s2）。メモリ割付部１３は、後述する管理メモリ１４の使用中メモリのリストを参照して未使用領域を把握し、そこから依頼されたサイズSが連続に確保できるアドレスAを検索すると共に、確定したアドレスAとサイズSの対を管理メモリ１４に登録する（符号s3）。獲得されたアドレスAはヒープ管理部１４を経由して制御部１１に渡される（符号s4）。
【０００９】
（動的メモリへのアクセス）
制御部１１は獲得されたアドレスAからサイズSの範囲を自由にヒープメモリ１７からリード／ライトする（符号s5）。
【００１０】
（動的メモリの返却）
制御部１１は、ヒープメモリ１７が不要になった時点で free(A)を呼び出すと共に、ヒープ管理部１２に通知する（符号s6）。ヒープ管理部１２はメモリ解放部１５にアドレスAのメモリの解放を依頼する（符号s7）。メモリ解放部１５は管理メモリ１４の使用中メモリのリストを参照して登録されているアドレスAを検索し、その内容を削除する（符号s8）。
【００１１】
次に、図４の動作を説明する。図４は、図３で説明したフラグメンテーション（メモリの断片化）を発生させない方法として、ヒープメモリを固定長のメモリブロックとして管理するものである。
【００１２】
（動的メモリの獲得）
制御部２１はサイズSの動的メモリを取得するため、malloc(S)を呼び出すと共に、ヒープ管理部に通知する（符号s1）。ヒープ管理部２２は、後述するメモリ割付部２３にメモリの割付を依頼する（符号s2）。メモリ割付部２３は管理メモリ２４の使用中メモリのリストを参照して未使用ブロックを把握し、そこから１つの未使用のブロックを検索すると共に、そのブロックのアドレスAを管理メモリに登録する（符号s3）。獲得されたアドレスAはヒープ管理部２２を経由して制御部２１に渡される（符号s4）。
【００１３】
（動的メモリのアクセス）
制御部２１は獲得されたアドレスAからサイズSの範囲をヒープメモリ２７から自由にリード／ライトする（符号s5）。
【００１４】
（動的メモリの返却）
制御部２１は、動的メモリが不要になった時点で free(A)を呼び出し、ヒープ管理部に通知する（符号s6）。ヒープ管理部２２はメモリ解放部２５にアドレスAのメモリの解放を依頼する（符号s7）。メモリ解放部２５は管理メモリ２４の使用中メモリのリストを参照して登録されているアドレスAを検索し、その内容を削除する（符号s8）。
【発明の開示】
【発明が解決しようとする課題】
【００１５】
以下、従来のメモリ管理装置の問題点について説明する。図３のメモリ管理装置はシングルプロセスでは問題が起こらないが、複数のプロセス（マルチプロセス）が非同期にmalloc()、free()を繰返す場合にはフラグメンテーション（メモリの断片化）が発生する。ここで複数のプロセスとは、マルチタスクＯＳやスレッドライブラリによって複数のプロセスが切り替りながら並列動作することを意味し、さらに複数のプロセスからmalloc()、free()が呼ばれる状態を意味している。また、このような現象は、malloc()が可変長サイズを要求するサービスであるところから発生するものである。
【００１６】
図５はフラグメンテーションが発生したヒープメモリの様子である。図５の斜線部分はmalloc()中の領域、それ以外は未使用領域である。未使用領域が分散しているため、未使用領域の総サイズにくらべ実際にmalloc()可能な連続領域のサイズが小さくなっていることが分かる。このフラグメンテーションが発生すると、容量的には余裕があるのにメモリ獲得できたりできないといった事象が発生する。
【００１７】
一方、図４はメモリを固定サイズのブロックとして扱うのでフラグメンテーションは発生しないが、固定サイズ以上の領域を獲得することはできないため自由度が制限される。また固定サイズより小さいサイズの獲得を行っても実際には固定サイズ分の領域が割り付けられるため、メモリ使用効率が非常に悪いものとなる。
【００１８】
本発明は、これらの問題点に鑑みてなされたものであり、フラグメンテーションを原理的に引き起こさないメモリ管理装置を提供することを目的とする。
【課題を解決するための手段】
【００１９】
このような課題を解決するために請求項１記載の発明は、
割付けられた論理アドレスと物理アドレスの対応を記憶するマッピングメモリと、
固定長ブロックで領域の獲得又は解放が行われるヒープメモリと、
論理アドレスへのアクセスを前記マッピングメモリによって対応づけられた物理アドレスへのアクセスに写像し、前記ヒープメモリにアクセスするメモリマネジメントユニットと、
前記ヒープメモリの物理アドレスの割付、解放を行う物理空間管理ブロックと、
前記ヒープメモリの論理アドレスの割付、解放を行う論理空間管理ブロックと、
物理アドレスと論理アドレスの対応を前記マッピングメモリへ登録し又は削除するヒープ管理ブロックと
を備える。
【００２０】
また、請求項２記載の発明は、
割付けられた論理アドレスと物理アドレスの対応を記憶するマッピングメモリと、
前記マッピングメモリの物理アドレスの割付情報を記憶する物理空間管理メモリと、
前記マッピングメモリの論理アドレスの割付情報を記憶する論理空間管理メモリと、
固定長ブロックで領域の獲得又は解放が行われるヒープメモリと、
前記ヒープメモリの領域の獲得又は解放に必要な関数を呼び出すと共に、割付けされた論理アドレスにアクセスする制御部と、
この制御部による論理アドレスへのアクセスを前記マッピングメモリによって対応づけられた物理アドレスへのアクセスに写像し、前記ヒープメモリにアクセスするメモリマネジメントユニットと、
前記制御部から前記関数の通知を受けると共に、前記ヒープメモリの領域の割付と解放を制御するヒープ管理部と、
このヒープ管理部から所定サイズのメモリの割付依頼を受けると共に、前記ヒープメモリの領域を獲得するために必要なブロックを求めるメモリ割付部と、
前記物理空間管理メモリを参照して未使用ブロックを把握し、前記メモリ割付部で求められた必要なブロックを割付けると共に、割り付けられたブロックの情報を前記物理空間管理メモリに登録する物理空間割付部と、
前記論理空間管理メモリを参照して未使用アドレスを把握し、前記メモリ割付部で求められた必要なアドレスを割付けると共に、割付けられた論理アドレスの情報を論理空間管理メモリに登録する論理空間割付部と
を備える。
【００２１】
また、請求項３記載の発明は、請求項２記載の発明において、
前記ヒープメモリの領域の解放が必要な場合において、
前記マッピングメモリから対応する物理アドレスリストを得て、物理アドレス及び論理アドレスの解放を依頼するメモリ解放部と、
前記物理アドレスの内容を前記物理空間管理メモリから削除する物理空間解放部と、
前記論理アドレスの内容を前記論理空間管理メモリから削除する論理空間解放部と
を備える。
【発明の効果】
【００２２】
固定長ブロックで獲得又は解放が行われるヒープメモリと、論理アドレスへのアクセスをマッピングメモリによって対応づけられた物理アドレスへのアクセスに写像し、ヒープメモリにアクセスするメモリマネジメントユニットとを備えたので、実際には不連続なメモリブロックを連続したサイズのメモリとして働かせることが可能になる。また、固定長ブロックのヒープメモリを使用しているのでフラグメンテーションを引き起こさない。
【発明を実施するための最良の形態】
【００２３】
以下、本発明のメモリ管理装置の構成例について図１を参照して説明する。ヒープ管理ブロック１００は、後述するヒープ管理部３２、メモリ割付部３３、メモリ解放部４３で構成され、物理アドレスと論理アドレスの対応をマッピングメモリ４０へ登録し又は削除する。物理空間管理ブロック１１０は、物理空間管理部３４、物理空間割付部３５、物理空間解放部４４、物理空間管理メモリ３６で構成され、ヒープメモリ４２の物理アドレスの割付、解放を行う。論理空間管理ブロックは、論理空間管理部３７、論理空間割付部３８、論理空間解放部４５で構成され、ヒープメモリ４２の論理アドレスの割付、解放を行う。
【００２４】
制御部３１は、サイズsの動的メモリを取得するためmalloc(s)を呼び出し、後述するヒープ管理部３２に通知する。ヒープ管理部３２は、メモリの割付と解放を制御するユニットである。メモリ割付部３３は、後述する物理空間管理メモリ３６と論理空間管理メモリ３９の割付を行うユニットである。物理空間管理部３４は、物理空間管理メモリ３６の割付と解放を制御するユニットである。
【００２５】
物理空間割付部３５は、物理空間管理メモリ３６の割付を行うユニットである。物理空間管理メモリ３６は、物理空間の割付情報を記憶しておくメモリである。論理空間管理部３７は、論理空間メモリ３９の割付と解放を制御するユニットである。論理空間割付部３８は、論理空間管理メモリ３９の割付を行うユニットである。論理空間管理メモリ３９は、論理空間の割付情報を記憶しておくメモリである。マッピングメモリ４０は、割付けられた論理空間と割付された物理空間の対応を記憶するメモリである。
【００２６】
メモリマネジメントユニット４１は、論理アドレスへのアクセスを、マッピングメモリ４０によって対応づけられた物理アドレスへのアクセスに写像するユニットである。ヒープメモリ４２は、固定サイズのブロックの配列で、動的メモリ管理で割り付けられる物理メモリである。メモリ解放部４３は、対象となる物理空間管理メモリ３６と論理空間管理メモリ３９の開放を行うユニットである。物理空間解放部４４は、物理空間管理メモリ３６の解放を行うユニットである。論理空間解放部４５は、論理空間管理メモリ３９の解放を行うユニットである。
【００２７】
次に、図１の動作を説明する。
（動的メモリの獲得）
制御部３１はサイズsの動的メモリを取得するため、malloc(s)を呼び出し、ヒープ管理部Aに通知する(符号s1)。ヒープ管理部３２はメモリ割付部３３にサイズsのメモリの割付を依頼する（符号s2）。メモリ割付部３３はサイズsから必要なブロック数mを計算し（m*ヒープメモリのブロックサイズ >= s）、物理空間管理部３４にブロック数mの割付を依頼する（符号s3）。物理空間管理部３４は物理空間割付部３５にブロック数mの割付を依頼する（符号s4）。
【００２８】
物理空間割付部３５は物理空間管理メモリ３６を参照して未使用ブロックを把握し、そこから依頼された個数mのブロックを割付け、割り付けられたブロックの情報を物理空間管理メモリ３６に登録する（符号s5）。獲得されたm個のブロックのアドレスリストp[ ]が物理空間管理部３４を介してメモリ割付３３に渡される（符号s6）。メモリ割付部３３は論理空間管理部３７にサイズsのメモリ割付を依頼する（符号s7）。
【００２９】
論理空間管理部３７は論理空間割付部３８にサイズsのメモリ割付を依頼する（符号s8）。論理空間割付部３８は論理空間管理メモリ３９を参照して未使用空間を把握し、そこから依頼されたサイズsの空間を割付け、割付られた空間の情報を論理空間管理メモリ３９に登録する（符号s9）。獲得された論理アドレスvが論理空間管理部３７を介してメモリ割付部３３に渡される（符号s10）。
【００３０】
物理アドレスリストp[ ]と論理アドレスvを得たメモリ割付部３３は、vとp[ ]の対応をマッピングメモリ４０に登録する（符号s11）。割付られた論理アドレスvはヒープ管理部３２を介して制御部３１に渡される（符号s12）。
【００３１】
（動的メモリのアクセス）
制御部３１は獲得された論理アドレスvからサイズsの範囲を自由にリード／ライトする（符号s13）。論理アドレスvへのアクセスが発生すると、メモリ マネジメント ユニットMが働き、マッピングメモリ４０に書かれた論理アドレスvと物理メモリp[ ]に従って対応付けられたヒープメモリ４２のブロックがアクセスされる（符号s14）。
【００３２】
（動的メモリの返却）
制御部３１は動的メモリが不要になった時点でfree(v)を呼び出し、これはヒープ管理部３２に通知される（符号s15）。ヒープ管理部３２はメモリ解放部４３に論理アドレスvの解放を依頼する（符号s16）。メモリ解放部４３はマッピングメモリ４０から論理アドレスvを検索し、対応する物理アドレスリストp[ ]を得て、物理空間管理部３４に物理アドレスリストp[ ]の解放を依頼する（符号s17）。
【００３３】
物理空間管理部３４は物理空間解放部４４に物理アドレスリストp[ ]の解放を依頼する（符号s18）。物理空間解放部４４はアドレスリストp[ ]の内容を物理空間管理メモリ３６から削除する（符号s19）。
【００３４】
メモリ解放部４３は論理空間管理部３７に論理アドレスvの解放を依頼する（符号s20）。
論理空間管理部３７は論理空間解放部４５に論理アドレスvの解放を依頼する（符号s21）。
論理空間解放部４５は論理アドレスvの内容を論理空間管理メモリ３９から削除する（符号s22）。物理アドレスリストp[ ]と論理アドレスvの解放を終えたメモリ解放部４３は、最後にマッピングメモリ４０からも論理アドレスvと物理アドレスの対応情報を削除する（符号s23）。
【００３５】
このように、固定長ブロックで獲得又は解放が行われるヒープメモリ４２と、論理アドレスへのアクセスをマッピングメモリ４０によって対応づけられた物理アドレスへのアクセスに写像し、ヒープメモリ４２にアクセスするメモリマネジメントユニット４１とを備えたので、例えば図２のヒープメモリ５２にあるように実際には不連続なメモリブロック１〜３を論理アドレスAから配置された連続したサイズ３Δのメモリとして働かせることが可能になる。また、フラグメンテーションを起こさない固定長ブロック管理に不連続な複数ブロックを連続空間にマッピングできるMMUを利用することによって、固定長ブロックサイズを小さくし、１ブロック内の死蔵領域を小さくすることができる。また、複数ブロックをメモリマネジメントユニットの機能で連続空間にマッピングすることにより取得可能な最大メモリサイズの制限をなくすことが可能となる。
【図面の簡単な説明】
【００３６】
【図１】本発明によるメモリ管理装置の構成例である。
【図２】不連続なメモリブロックを連続したメモリとして動作させることが可能となることを示した図面である。
【図３】可変長ブロックでヒープメモリ１７を管理するメモリ管理装置の構成例である。
【図４】固定長ブロックでヒープメモリ２７を管理するメモリ管理装置の構成例である。
【図５】フラグメンテーションの説明図である。
【符号の説明】
【００３７】
３１          制御部
３２          ヒープ管理部
３３          メモリ割付部
３４          物理空間管理部
３５          物理空間割付部
３６          物理空間管理メモリ
３７          論理空間管理部
３８          論理空間割付部
３９          論理空間管理メモリ
４０          マッピングメモリ
４１          メモリマネジメントユニット
４２          ヒープメモリ
４３          メモリ解放部
４４          物理空間解放部
４５          論理空間解放部
１００        ヒープ管理ブロック
１１０        物理空間管理ブロック
１２０        論理空間管理ブロック
【図１】
2008217183.tif 000003
【図２】
2008217183.tif 000004
【図３】
2008217183.tif 000005
【図４】
2008217183.tif 000006
【図５】
2008217183.tif 000007