(57)【要約】【課題】  メモリのフラグメンテーションの発生を防ぎ、連続した大容量のメモリ空間を確保しやすくすること。【解決手段】  メモリ管理システムにおいて、メモリのフラグメンテーションの発生を防ぎ、連続した大容量のメモリ空間を確保しやすくするという目的を物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理部とを有することにより解決した。【選択図】図９
2010176578.tif 000002
【特許請求の範囲】
【請求項１】
物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、
前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理部と、を有する
ことを特徴とするメモリ管理システム。
【請求項２】
請求項１のメモリ管理システムであって、
アプリケーションプログラムのためのメモリ取得・解放・一括解放の要求を受けつけるアプリケーションプログラムインタフェースを有し、
前記メモリコントロールブロック表管理部は、前記アプリケーションプログラムインタフェースからのメモリ取得・解放・一括解放の要求に応じて、前記物理メモリの取得・解放・一括解放を行って、前記メモリコントロールブロック表を更新し、
前記メモリコントロールブロック制御表管理部は、前記アプリケーションプログラムインタフェースからのメモリ取得・解放・一括解放の要求に応じて、前記メモリコントロールブロック表管理部が行った前記メモリコントロールブロック表の更新に応じて、前記メモリコントロールブロック制御表を更新する
ことを特徴とするメモリ管理システム。
【請求項３】
請求項１または２のメモリ管理システムであって、
前記メモリコントロールブロック表管理部は、前記メモリコントロールブロック表の同じアプリケーション毎のメモリコントロールブロックを連結リストで連結して管理し、
前記メモリコントロールブロック制御表管理部は、アプリケーション毎に、前記アプリケーション毎の前記メモリコントロールブロックの連結リストの先頭ポインタを有するメモリコントロールブロック制御ブロックを有する
ことを特徴とするメモリ管理システム。
【請求項４】
請求項１から３のいずれかのメモリ管理システムを有する
ことを特徴とする電子機器。
【請求項５】
コンピュータに、
物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理機能と、
前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理機能と、を実現させる
ことを特徴とするメモリ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
メモリ管理システム、電子機器及びメモリ管理プログラムにおいて、メモリの割当・解放動作に関して、フラグメンテーションの発生を抑制し効率的なメモリ管理を行う技術に関する。
【背景技術】
【０００２】
半導体メモリや磁気回転ディスクなどの記憶装置を備える電子機器では、メモリの管理を効率的に行う技術的要求がある。メモリは使用時に必要領域を確保（割当）し、その使用が終わった後は解放して再使用に備える。このような、メモリの割当・解放動作を繰り返すと、フラグメンテーションと呼ばれる使用可能なメモリ空間がアドレス空間上に細かく分散して存在するようになってしまい、メモリの使用率としては少ない状態であっても大きなアドレス空間が取れない状況が発生する。
【０００３】
従来技術として、画像形成装置などのデータ処理装置において、フラグメンテーションの発生を少なくし、メモリの空き待ちやメモリ内のデータの移動等によるスループットの低下を起こさないメモリ管理方法を実現する以下の方法がある。ページ検出処理部がページ開始を検出すると、メモリ資源取得処理部がメモリを確保し、パーテーション分割が行われ、入力データ用および加工データ用のパーテーションにメモリ領域がそれぞれ確保される。データ加工処理部によって加工データが生成され加工データ用メモリ領域に格納されると、メモリ資源解放処理部によって、不要となるメモリ領域の解放が行われる。解放されたメモリ領域は、加工データ用パーテーションの空き領域の一部となる（特許文献１参照）。
【０００４】
また、高い書き込み速度を実現可能なホスト機器を提供するために、管理システムがメモリ領域上で区画された単位領域を書き込みデータが記憶される書き込み領域として順次割り当てる機能を有し、単位領域の自然数倍の大きさからなる管理単位を割り当て位置の決定単位として用い、書き込み関数呼び出しを受けて管理単位ごとの実現可能な書き込み速度順に従って管理単位を前記書き込み領域として割り当てて、コントローラが、管理システムが割り当てた単位領域に書き込みデータを書き込む旨の指示をメモリカードに出す方法があった（特許文献２参照）。
【０００５】
しかし、特許文献１の方法では画像形成装置のページ単位毎の処理を前提としているため、複数ページに跨る処理には対応できない。また、パーテーションの区切りは２つという制限がある。さらに、パーテーションのサイズは、最初の割当時の容量で不足しても、その連続的メモリ空間の増量はできず、ひとつのパーテーションのサイズを減少する方向にしか容量変化に対応できない。
【０００６】
また、特許文献２の方法は、書き込みの際のメモリ割当に関するものであり、メモリが連続的に割当・解放動作を伴う際のフラグメンテーションの抑制には対応できない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００２−３５１７３９号公報
【特許文献２】特開２００６−２８５６６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
解決しようとする問題点は、メモリ管理システム、電子機器及びメモリ管理プログラムにおいて、メモリのフラグメンテーションを効率的に回避することができなかった点と、高速に連続的なメモリ空間の割当、解放動作を行い、割当てられた連続的なメモリ空間のサイズの増減を行うことができなかった点である。
【課題を解決するための手段】
【０００９】
本発明のメモリ管理システムは、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理部と、を有することを特徴とする。
【００１０】
また、本発明のメモリ管理システムは、アプリケーションプログラムのためのメモリ取得・解放・一括解放の要求を受けつけるアプリケーションプログラムインタフェースを有し、前記メモリコントロールブロック表管理部は、前記アプリケーションプログラムインタフェースからのメモリ取得・解放・一括解放の要求に応じて、前記物理メモリの取得・解放・一括解放を行って、前記メモリコントロールブロック表を更新し、前記メモリコントロールブロック制御表管理部は、前記アプリケーションプログラムインタフェースからのメモリ取得・解放・一括解放の要求に応じて、前記メモリコントロールブロック表管理部が行った前記メモリコントロールブロック表の更新に応じて、前記メモリコントロールブロック制御表を更新することを特徴としてもよい。
【００１１】
また、本発明のメモリ管理システムの前記メモリコントロールブロック表管理部は、前記メモリコントロールブロック表を同じアプリケーション毎のメモリコントロールブロックを連結リストで連結して管理し、前記メモリコントロールブロック制御表管理部は、アプリケーション毎に前記メモリコントロールブロックの連結リストの先頭ポインタを有するメモリコントロールブロック制御ブロックを有することを特徴としてもよい。
【００１２】
本発明の電子機器は、請求項１から３のいずれかのメモリ管理システムを有することを特徴とする。
【００１３】
本発明のメモリ管理プログラムは、コンピュータに、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理機能と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理機能と、を実現させることを特徴とする。
【発明の効果】
【００１４】
本発明のメモリ管理システムは、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理部と、を有することを特徴とする。
【００１５】
このため、アプリケーション毎のメモリ空間の割当、解放動作可能となり、結果としてフラグメンテーションの発生を少なくし、連続的な大きなメモリ空間の取得が可能となる。
【００１６】
また、本発明のメモリ管理システムは、アプリケーションプログラムのためのメモリ取得・解放・一括解放の要求を受けつけるアプリケーションプログラムインタフェースを有し、前記メモリコントロールブロック表管理部は、前記アプリケーションプログラムインタフェースからのメモリ取得・解放・一括解放の要求に応じて、前記物理メモリの取得・解放・一括解放を行って、前記メモリコントロールブロック表を更新し、前記メモリコントロールブロック制御表管理部は、前記アプリケーションプログラムインタフェースからのメモリ取得・解放・一括解放の要求に応じて、前記メモリコントロールブロック表管理部が行った前記メモリコントロールブロック表の更新に応じて、前記メモリコントロールブロック制御表を更新することを特徴としてもよい。
【００１７】
このため、アプリケーションプログラムは、当該アプリケーションインタフェースを呼び出すだけで、メモリの管理について意識することなく前記メモリコントロールブロック表管理部とメモリコントロールブロック制御表管理部がメモリをアプリケーション毎に管理することが可能となり、プログラマの負担が大きく軽減される。
【００１８】
また、本発明のメモリ管理システムの前記メモリコントロールブロック表管理部は、前記メモリコントロールブロック表を同じアプリケーション毎のメモリコントロールブロックを連結リストで連結して管理し、前記メモリコントロールブロック制御表管理部は、アプリケーション毎に前記メモリコントロールブロックの連結リストの先頭ポインタを有するメモリコントロールブロック制御ブロックを有することを特徴としてもよい。
【００１９】
このため、単純な連結リスト構造により、割当てられたメモリ領域に到達可能なため、例えばメモリの一括解放が単純な手続きにより高速に行われる。
【００２０】
本発明の電子機器は、請求項１から３のいずれかのメモリ管理システムを有することを特徴とする。
【００２１】
このため、アプリケーション毎のメモリ空間の割当、解放動作可能となり、結果としてフラグメンテーションの発生を少なくし、連続的な大きなメモリ空間の取得が可能となる。
【００２２】
本発明のメモリ管理プログラムは、コンピュータに、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理機能と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理機能と、を実現させることを特徴とする。
【００２３】
このため、アプリケーション毎のメモリ空間の割当、解放動作可能となり、結果としてフラグメンテーションの発生を少なくし、連続的な大きなメモリ空間の取得が可能となる。
【図面の簡単な説明】
【００２４】
【図１】従来例と本発明のメモリ管理システムの比較図である。
【図２】本発明実施例のメモリ管理システムのシステム構成図である。
【図３】本発明実施例のメモリ管理システムのソフトウェアの構成図である。
【図４】本発明実施例のメモリ管理システムのメモリ一括解放用テーブルの構成図である。
【図５】本発明実施例のメモリ管理システムのメモリ割当のフローチャートである。
【図６】本発明実施例のメモリ管理システムのメモリ解放のフローチャートである。
【図７】本発明実施例のメモリ管理システムのメモリ一括解放のフローチャートである。
【図８】本発明実施例のメモリ管理システムのメモリ一括解放のＭＣＢ制御テーブルをメモリから解放する処理のフローチャートである。
【図９】従来例のメモリ管理システムのメモリ一括解放用テーブルの構成図である。
【図１０】従来例のメモリ管理システムのメモリ割当のフローチャートである。
【図１１】従来例のメモリ管理システムのメモリ解放のフローチャートである。
【図１２】従来例のメモリ管理システムのメモリ一括解放のフローチャートである。
【図１３】従来例のメモリ管理システムのメモリ一括解放のＭＣＢをメモリから解放する処理のフローチャートである。
【発明を実施するための形態】
【００２５】
メモリ管理システムにおいて、メモリのフラグメンテーションの発生を防ぎ、連続した大容量のメモリ空間を確保しやすくするという目的を物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理部とを有することにより解決した。
【実施例】
【００２６】
図１（Ａ）は、従来のメモリ管理システムにおけるアドレス空間でのメモリの割り当てに関する説明図である。従来は、アドレス空間を単一のパーテーションとして区切り、これら単一のパーテーションをメモリ管理のＡＰＩ（Application Program Interface）によって、メモリの割り当て（malloc()）、解放（free()）を行っていた。このようなメモリ管理の下では、メモリの割当て・解放を繰り返した結果として、図９中のアプリケーションメモリ領域に示すように使用中、未使用中（フリー領域）のアドレス空間が分散してフラグメンテーションを発生し、メモリ内のデータの移動処理を行わなければ連続的な大容量のメモリ空間を確保することができない。しかし、メモリ内のデータの移動処理には時間がかかり、メモリ内のデータの移動中はメモリの使用が大きく制限されるため、画像形成装置などのリアルタイム処理が必要な電子機器では非常に問題となる。
【００２７】
図１（Ｂ）は、本発明のメモリ管理システムにおける、メモリ管理システムの説明図である。本発明においては、メモリ一括解放を可能とする独自のメモリ管理システムを作成した。これらのメモリ管理ステムは、user_malloc(), user_free(), user_free_all()の関数を定義して、これらが独自のアルゴリズムの下に従来のメモリ管理システムのmalloc(), free()を呼び出して使用する。本発明では、全体のアドレス空間を複数のパーテーション毎にＩＤを与えて区切り、ＩＤをアプリケーション毎に関連付けて割当てるようにすると、ひとつのアプリケーションが終了した場合（例えば図４におけるＩＤ＝２のアプリケーション）には、パーテーション２をＩＤ指定による一括解放（user_free_all(ID=2)、図１（Ｂ）参照）を行うことにより大きな連続アドレス空間を得ることができる。
【００２８】
［構成］
図２に本発明の実施例に係るメモリ管理システムのプログラム全体における位置付けについて説明する。
【００２９】
アプリケーションプログラムは、動的なメモリ領域を扱うための本メモリ管理システムのＡＰＩ（Application Program Interface）である user_malloc(), user_free(), user_free_all()を呼び出して用いる。これらのＡＰＩによって呼び出されたメモリ管理システムは、静的メモリ領域にあるＭＣＢ（Memory Control Block）制御テーブル用管理テーブル（メモリコントロールブロック制御表用管理表）、動的メモリ領域にあるＭＣＢ（Memory Control Block）制御テーブル（メモリコントロールブロック制御表）、同じく動的メモリ領域にあるＭＣＢ（Memory Control Block）テーブル（メモリコントロールブロック表）を用いてメモリの管理を行う。メモリ管理システムはシステムが保持するメモリ領域取得・解放のＡＰＩであるmalloc(), free()を呼び出して、従来のシステムによるメモリ取得・解放を行わせる。
【００３０】
図３に本発明実施例のメモリ管理システムのソフトウェア構成図を示す。メモリ管理システムは、前記したＡＰＩ関数（user_malloc(), user_free(), user_free_all()）（アプリケーションプログラムインタフェース；Ｐ１１）と「ＭＣＢ制御テーブル用管理テーブル」管理プログラムＰ１３、「ＭＣＢ制御テーブル」管理プログラム（メモリコントロールブロック制御表管理部；Ｐ１５）、「ＭＣＢテーブル」管理プログラム（メモリコントロールブロック表管理部；Ｐ１７）を有する。
【００３１】
ＡＰＩ関数Ｐ１１は、アプリケーションプログラムのためのメモリ取得・解放・一括解放の要求を受けつける。従来、プログラマは、malloc()やfree()などを自らアプリケーションプログラム中に書き込むことによりメモリの管理を行っていたが、本メモリ管理システムでは、前記したＡＰＩ関数（user_malloc(), user_free(), user_free_all()）がアプリケーション毎のメモリの管理を行うため、特にuser_free_all()によりメモリの一括解放が行えることによりプログラマの負担が大きく軽減される。
【００３２】
「ＭＣＢ制御テーブル用管理テーブル」管理プログラムＰ１３は、ＭＣＢ（Memory Control Block）で割当てられる物理メモリアドレス空間（動的メモリ領域）と論理アドレス空間（静的メモリ領域）との間を変換する。又、後述のメモリコントロールブロック制御表の先頭のメモリコントロールブロック制御ブロックのポインタと最後尾のポインタを有する。
【００３３】
「ＭＣＢ制御テーブル」管理プログラム（メモリコントロールブロック制御表管理部）Ｐ１５は、メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理する。
【００３４】
「ＭＣＢテーブル」管理プログラム（メモリコントロールブロック表管理部）Ｐ１７は、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理する。
【００３５】
［ＭＣＢテーブル、ＭＣＢ制御テーブル］
図９を用いて従来のＭＣＢテーブル（メモリコントロールブロック表）について説明する。図９に示すように、アプリケーション用メモリ領域は、ＭＣＢテーブルの各ブロックによって示される領域を有する。メモリコントロールブロックには、確保を要求したアプリケーション毎の識別ＩＤを有しているが、全体のＭＣＢブロックはＭＣＢ用管理テーブルで一元的に管理されているため、アプリケーション毎の管理（例えばアプリケーションが終了したときのメモリの一括解放）を行うには、ＭＣＢテーブルの各ブロックのＩＤをチェックしながら行わなければならない。
【００３６】
次に、本実施例のメモリ管理システムのＭＣＢテーブルの構成図を図４に示す。アプリケーション用メモリ領域は、確保される毎にＭＣＢテーブルの各ブロックにより参照されるが、それぞれのメモリコントロールブロックは、アプリケーション毎にメモリコントロールブロックを参照するＭＣＢ制御テーブルにより参照されている。同じアプリケーションにより確保されたメモリ領域は、ＭＣＢ制御テーブルのアプリケーション毎のブロックがＭＣＢの先頭のブロックに対するポインタを有しており、前記ポインタで参照されるＭＣＢは、同じアプリケーションで確保されている次のメモリ領域を指し示すＭＣＢへのポインタを有して、連結リスト構造をなしている。このため、メモリ一括の解放の場合には、前記ＭＣＢ制御テーブル中から該当アプリケーションのブロックを探し出し、当該ブロックが指し示すＭＣＢにたどり着き、続いてＭＣＢが指し示すメモリ領域にたどり着くことができる。また、連結リストにより最後尾のブロックまでたどり着けるため、簡単にメモリの一括解放を可能とさせる。
【００３７】
［従来例のメモリ管理システムの動作；フローチャート］
まず、図１０から図１３のフローチャートを用いて従来例のメモリ管理システムのメモリ動作について説明する。
【００３８】
図１０を用いて従来のメモリ割り当て方法について説明する。
【００３９】
Ｓ１０１：アプリケーション用メモリを確保する。
【００４０】
Ｓ１０３：メモリの確保が成功したかどうかを判断する。成功した場合は、動作をＳ１０５に移行する。失敗した場合は動作をＳ１１１に移行する。
【００４１】
Ｓ１０５：ＭＣＢを確保する。
【００４２】
Ｓ１０７：ＭＣＢの確保が成功したかどうかを判断する。成功した場合は、動作をＳ１１３に移行する。失敗した場合は動作をＳ１０９に移行する。
【００４３】
Ｓ１０９：ＭＣＢの確保に失敗したので、アプリケーション用メモリを解放する。
【００４４】
Ｓ１１１：メモリの割り当てに失敗したので動作を終了する。
【００４５】
Ｓ１１３：ＭＣＢ用管理テーブルの「先頭のＭＣＢへのポインタ」を獲得する。
【００４６】
Ｓ１１５：「先頭のＭＣＢへのポインタ」は有効であるかどうかを判断する。有効な場合は、動作をＳ１２１に移行する。有効でない場合は動作をＳ１１７に移行する。
【００４７】
Ｓ１１７：ＭＣＢ用管理テーブルの「先頭のＭＣＢへのポインタ」を更新する。
【００４８】
Ｓ１１９：ＭＣＢ用管理テーブルの「最後尾のＭＣＢへのポインタ」を更新する。
【００４９】
Ｓ１２１：ＭＣＢ用管理テーブルの「最後尾のＭＣＢへのポインタ」を獲得する。
【００５０】
Ｓ１２３：最後尾のＭＣＢテーブルの「次のＭＣＢへのポインタ」を更新する。
【００５１】
Ｓ１２５：ＭＣＢ用管理テーブルの「最後尾のＭＣＢへのポインタ」を更新する。
【００５２】
Ｓ１２７：確保したＭＣＢの「識別ＩＤ」を更新する。
【００５３】
Ｓ１２９：確保したＭＣＢの「メモリへの先頭アドレス」と「メモリサイズ」を更新する。
【００５４】
Ｓ１３１：確保しＭＣＢの「次のＭＣＢへのポインタ」を無効に設定する。
【００５５】
Ｓ１３３：メモリ割り当てに成功する。
【００５６】
以上の一連の動作により従来方法でのアプリケーションプログラム用のメモリ領域の確保を行う。
【００５７】
次に、図１１を用いて従来のメモリの解放方法について説明する。
【００５８】
Ｓ２０１：ＭＣＢ用管理テーブルの「先頭のＭＣＢへのポインタ」を取得する。
【００５９】
Ｓ２０３：ＭＣＢ用管理テーブルの「最後尾のＭＣＢへのポインタ」を取得する。
【００６０】
Ｓ２０５：ＭＣＢの「メモリの先頭アドレス」と「メモリサイズ」を取得する。
【００６１】
Ｓ２０７：「メモリの先頭アドレス」は解放対象アドレスと一致するかどうかを判断する。一致する場合は動作をＳ２１５に移行する。一致しない場合は動作をＳ２０９に移行する。
【００６２】
Ｓ２０９：ＭＣＢの「次のＭＣＢへのポインタ」を取得する。
【００６３】
Ｓ２１１：「次のＭＣＢへのポインタ」は有効であるかどうかを判断する。有効である場合は、動作をＳ２０５に移行する。有効でない場合は動作をＳ２１３に移行する。
【００６４】
Ｓ２１３：メモリの解放に失敗したので動作を終了する。
【００６５】
Ｓ２１５：解放対象は、ＭＣＢテーブルの先頭であるかどうかを判断する。先頭の場合は動作をＳ２１７に移行する。先頭でない場合は動作をＳ２３３に移行する。
【００６６】
Ｓ２１７：ＭＣＢの「次のＭＣＢへのポインタ」を取得する。
【００６７】
Ｓ２１９：アプリケーション用メモリを解放する。
【００６８】
Ｓ２２１：ＭＣＢをメモリから解放する。
【００６９】
Ｓ２２３：「次のＭＣＢへのポインタ」は有効であるかどうかを判断する。有効である場合は、動作をＳ２２５に移行する。有効でない場合は動作をＳ２２７に移行する。
【００７０】
Ｓ２２５：ＭＣＢ用管理テーブルの「先頭のＭＣＢへのポインタ」を更新する。
【００７１】
Ｓ２２７：ＭＣＢ用管理テーブルの「先頭のＭＣＢへのポインタ」を無効に設定する。
【００７２】
Ｓ２２９：ＭＣＢ用管理テーブルの「最後尾のＭＣＢへのポインタ」を無効に設定する。
【００７３】
Ｓ２３１：メモリの解放に成功し動作を終了する。
【００７４】
Ｓ２３３：解放対象は、ＭＣＢテーブルの途中であるかどうかを判断する。途中の場合は、動作をＳ２３５に移行する。途中でない場合は動作をＳ２４３に移行する。
【００７５】
Ｓ２３５：ＭＣＢの「次のＭＣＢへのポインタ」を取得する。
【００７６】
Ｓ２３７：取得したポインタを、前のＭＣＢの「次のＭＣＢへのポインタ」へ設定する。
【００７７】
Ｓ２３９：アプリケーション用メモリを解放する。
【００７８】
Ｓ２４１：ＭＣＢをメモリから解放する。この後Ｓ２３１に移行して動作を終了する。
【００７９】
Ｓ２４３：前のＭＣＢの「次のＭＣＢへのポインタ」を無効に設定する。
【００８０】
Ｓ２４５：ＭＣＢ用管理テーブルの「最後尾のＭＣＢへのポインタ」を更新する。
【００８１】
Ｓ２４７：アプリケーション用のメモリ領域を解放する。
【００８２】
Ｓ２４９：ＭＣＢをメモリから解放する。この後Ｓ２３１に移行して動作を終了する。
【００８３】
以上の一連の動作により従来方法でのアプリケーションプログラム用のメモリ領域の解放を行う。
【００８４】
次に、図１２を用いて従来のメモリの一括解放方法について説明する。
【００８５】
Ｓ３０１：ＭＣＢ用管理テーブルの「先頭のＭＣＢへのポインタ」を取得する。
【００８６】
Ｓ３０３：「先頭のＭＣＢへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をＳ３０５に移行する。有効でない場合は動作を終了する。
【００８７】
Ｓ３０５：ＭＣＢの「次のＭＣＢへのポインタ」を取得する。
【００８８】
Ｓ３０７：ＭＣＢの「識別ＩＤ」と一致するかどうかを判断する。一致する場合は動作をＳ３１１に移行する。一致しない場合は動作をＳ３０９に移行する。
【００８９】
Ｓ３０９：「次のＭＣＢへのポインタ」は有効であるかどうかを判断する。有効である場合は、動作をＳ３０５に戻して繰り返す。有効でない場合は動作を終了する。
【００９０】
Ｓ３１１：アプリケーション用メモリを解放する。
【００９１】
Ｓ３１３：ＭＣＢをメモリから解放する（図１３の動作を参照）。次にＳ３０９に動作を移行し繰り返す。
【００９２】
以上の一連の動作により従来方法でのアプリケーションプログラム用のメモリ領域の一括解放を行う。
【００９３】
次に、図１３を用いて従来のメモリの一括解放方法時のＭＣＢをメモリから解放する処理について説明する。
【００９４】
Ｓ４０１：ＭＣＢ用管理テーブルの「先頭のＭＣＢへのポインタ」を取得する。
【００９５】
Ｓ４０３：解放対象はＭＣＢテーブルの先頭であるかどうかを判断する。先頭の場合は動作をＳ４０５に移行する。先頭でない場合は動作をＳ４１７に移行する。
【００９６】
Ｓ４０５：ＭＣＢのテーブルの「次のＭＣＢへのポインタ」を取得する。
【００９７】
Ｓ４０７：「次のＭＣＢへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をＳ４１３に移行する。有効でない場合は動作をＳ４０９に移行する。
【００９８】
Ｓ４０９：ＭＣＢ用管理テーブルの「先頭のＭＣＢへのポインタ」を無効に設定する。
【００９９】
Ｓ４１１：ＭＣＢ用管理テーブルの「最後尾のＭＣＢへのポインタ」を無効に設定する。
【０１００】
Ｓ４１３：ＭＣＢ用管理テーブルの「先頭のＭＣＢへのポインタ」を更新する。
【０１０１】
Ｓ４１５：ＭＣＢをメモリから解放して動作を終了する。
【０１０２】
Ｓ４１７：解放対象は、ＭＣＢの最後尾であるかどうかを判断する。最後尾である場合は、動作をＳ４２３に移行する。最後尾でない場合は動作をＳ４１９に移行する。
【０１０３】
Ｓ４１９：ＭＣＢのテーブルの「次のＭＣＢへのポインタ」を取得する。
【０１０４】
Ｓ４２１：取得したポインタを、前のＭＣＢの「次のＭＣＢへのポインタ」に設定する。この後、動作をＳ４１５に移行してＭＣＢをメモリから解放して動作を終了する。
【０１０５】
Ｓ４２３：前のＭＣＢの「次のＭＣＢへのポインタ」を無効に設定する。
【０１０６】
Ｓ４２５：ＭＣＢ用管理テーブルの「最後尾のＭＣＢへのポインタ」を更新する。この後、動作をＳ４１５に移行してＭＣＢをメモリから解放して動作を終了する。
【０１０７】
以上の一連の動作により従来方法でのアプリケーションプログラム用のメモリ領域の一括解放時のＭＣＢをメモリから解放する処理を行う。
【０１０８】
［実施例のメモリ管理システムの動作；フローチャート］
次に、図５を用いて本発明実施例のメモリの割当処理について説明する。
【０１０９】
Ｓ５０１：アプリケーション用メモリの確保を行う。
【０１１０】
Ｓ５０３：Ｓ５０１でのメモリの確保が成功したかどうかを判断する。成功した場合は、動作をＳ５０７に移行する。失敗した場合は動作をＳ５０５に移行する。
【０１１１】
Ｓ５０５：メモリの割り当てに失敗したので動作を終了する。
【０１１２】
Ｓ５０７：ＭＣＢ用のメモリ領域を確保する。
【０１１３】
Ｓ５０９：Ｓ５０７でのＭＣＢのメモリ領域確保が成功したかどうかを判断する。成功した場合は、動作をＳ５１３に移行する。失敗した場合は動作をＳ５１１に移行する。
【０１１４】
Ｓ５１１：アプリケーション用メモリを解放する。この後動作をＳ５０５に移行して動作を終了する。
【０１１５】
Ｓ５１３：全てのＭＣＢ制御テーブルの「識別ＩＤ」と比較する。
【０１１６】
Ｓ５１５：Ｓ５１３の結果「識別ＩＤ」と一致したかどうかを判断する。一致した場合には動作をＳ５５７に移行する。一致しない場合には、動作をＳ５１７に移行する。
【０１１７】
Ｓ５１７：ＭＣＢ制御テーブル用のメモリ領域を確保する。
【０１１８】
Ｓ５１９：Ｓ５１７におけるＭＣＢ制御テーブル用のメモリ領域確保が成功したかどうかを判断する。成功した場合は、動作をＳ５２５に移行する。失敗した場合は動作をＳ５２１に移行する。
【０１１９】
Ｓ５２１：アプリケーション用メモリを解放する。
【０１２０】
Ｓ５２３：ＭＣＢをメモリから解放する。この後Ｓ５０５に動作を移行し、メモリ割当失敗として動作を終了する。
【０１２１】
Ｓ５２５：ＭＣＢ制御テーブル用管理テーブルの「先頭のＭＣＢ制御テーブルへのポインタ」を獲得する。
【０１２２】
Ｓ５２７：「先頭のＭＣＢ制御テーブルへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をＳ５４９に移行する。有効でない場合は動作をＳ５２９に移行する。
【０１２３】
Ｓ５２９：ＭＣＢ制御テーブル用管理テーブルの「先頭のＭＣＢ制御テーブルへのポインタ」を更新する。
【０１２４】
Ｓ５３１：ＭＣＢ制御テーブル用管理テーブルの「最後尾のＭＣＢ制御テーブルへのポインタ」を更新する。
【０１２５】
Ｓ５３３：ＭＣＢ制御テーブルの「前のＭＣＢ制御テーブルへのポインタ」を無効に設定する。
【０１２６】
Ｓ５３５：ＭＣＢ制御テーブルの「先頭のＭＣＢへのポインタ」を更新する。
【０１２７】
Ｓ５３７：ＭＣＢ制御テーブルの「識別ＩＤ」を更新する。
【０１２８】
Ｓ５３９：ＭＣＢ制御テーブルの「次のＭＣＢ制御テーブルへのポインタ」を無効に設定する。
【０１２９】
Ｓ５４１：ＭＣＢ制御テーブルの「最後尾のＭＣＢへのポインタ」を設定する。
【０１３０】
Ｓ５４３：確保したＭＣＢの「メモリへの先頭アドレス」と「メモリサイズ」を更新する。
【０１３１】
Ｓ５４５：確保したＭＣＢの「次のＭＣＢへのポインタ」を無効に設定する。
【０１３２】
Ｓ５４７：メモリ割当に成功して動作を終了する。
【０１３３】
Ｓ５４９：ＭＣＢ制御テーブル用管理テーブルの「最後尾のＭＣＢ制御テーブルへのポインタ」を獲得する。
【０１３４】
Ｓ５５１：最後尾のＭＣＢ制御テーブルの「次のＭＣＢ制御テーブルへのポインタ」を更新する。
【０１３５】
Ｓ５５３：ＭＣＢ制御テーブル用管理テーブルの「最後尾のＭＣＢ制御テーブルへのポインタ」を更新する。
【０１３６】
Ｓ５５５：最後尾のＭＣＢ制御テーブルの「前のＭＣＢ制御テーブルへのポインタ」を設定する。この後、動作をＳ５３５に移行して動作を続ける。
【０１３７】
Ｓ５５７：ＭＣＢ制御テーブルから「最後尾のＭＣＢへのポインタ」を取得する。
【０１３８】
Ｓ５５９：最後尾のＭＣＢの「次のＭＣＢへのポインタ」を更新する。この後、動作をＳ５４１に移行して動作を続ける。
【０１３９】
以上の一連の動作により本発明実施例によるアプリケーションプログラム用のメモリ領域割当についての動作を完了する。
【０１４０】
次に、図６を用いて本発明実施例のメモリの解放処理について説明する。
【０１４１】
Ｓ６０１：ＭＣＢ制御テーブル用管理テーブルの「先頭のＭＣＢ制御テーブルへのポインタ」を取得する。
【０１４２】
Ｓ６０３：ＭＣＢ制御テーブルの「先頭のＭＣＢへのポインタ」を取得する。
【０１４３】
Ｓ６０５：ＭＣＢ制御テーブルの「最後尾のＭＣＢへのポインタ」を取得する。
【０１４４】
Ｓ６０７：ＭＣＢの「メモリの先頭アドレス」と「メモリサイズ」を取得する。
【０１４５】
Ｓ６０９：「メモリの先頭アドレス」は解放対象アドレスと一致するかどうかを判断する。一致する場合は動作をＳ６２１に移行する。一致しない場合は動作をＳ６２３に移行する。
【０１４６】
Ｓ６１１：ＭＣＢの「次のＭＣＢへのポインタ」を取得する。
【０１４７】
Ｓ６１３：「次のＭＣＢへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をＳ６０７に戻して繰り返す。有効でない場合は動作をＳ６１５に移行する。
【０１４８】
Ｓ６１５：ＭＣＢ制御テーブルの「次のＭＣＢ制御テーブルへのポインタ」を取得する。
【０１４９】
Ｓ６１７：「次のＭＣＢ制御テーブルへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をＳ６０３に戻して繰り返す。有効でない場合は動作をＳ６１９に移行する。
【０１５０】
Ｓ６１９：メモリ解放動作に失敗したので動作を終了する。
【０１５１】
Ｓ６２１：解放対象は、ＭＣＢテーブルの先頭であるかどうかを判断する。先頭の場合は動作をＳ６２３に移行する。先頭でない場合は動作をＳ６３７に移行する。
【０１５２】
Ｓ６２３：ＭＣＢの「次のＭＣＢへのポインタ」を取得する。
【０１５３】
Ｓ６２５：アプリケーション用メモリを解放する。
【０１５４】
Ｓ６２７：ＭＣＢをメモリから解放する（図１３参照）。
【０１５５】
Ｓ６２９：「次のＭＣＢへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をＳ６３１に移行する。有効でない場合は動作をＳ６３５に移行する。
【０１５６】
Ｓ６３１：ＭＣＢ制御テーブルの「先頭のＭＣＢへのポインタ」を更新する。
【０１５７】
Ｓ６３３：メモリの解放に成功し、動作を終了する。
【０１５８】
Ｓ６３５：ＭＣＢ制御テーブルをメモリから解放する（図８参照）。この後動作をＳ６３３に移行してメモリの解放に成功し、動作を終了する。
【０１５９】
Ｓ６３７：解放対象は、ＭＣＢテーブルの途中であるかどうかを判断する。途中の場合は、動作をＳ６３９に移行する。途中でない場合は動作をＳ６４７に移行する。
【０１６０】
Ｓ６３９：ＭＣＢの「次のＭＣＢへのポインタ」を取得する。
【０１６１】
Ｓ６４１：取得したポインタを前のＭＣＢの「次のＭＣＢへのポインタ」へ設定する。
【０１６２】
Ｓ６４３：アプリケーション用メモリを解放する。
【０１６３】
Ｓ６４５：ＭＣＢをメモリから解放する（図１３参照）。この後動作をＳ６３３に移行してメモリの解放に成功し、動作を終了する。
【０１６４】
Ｓ６４７：前のＭＣＢの「次のＭＣＢへのポインタ」を向こうに設定する。
【０１６５】
Ｓ６４９：ＭＣＢ制御テーブルの「最後尾のＭＣＢへのポインタ」を更新する。
【０１６６】
Ｓ６５１：アプリケーション用メモリを解放する。
【０１６７】
Ｓ６５３：ＭＣＢをメモリから解放する（図１３参照）。この後動作をＳ６３３に移行してメモリの解放に成功し、動作を終了する。
【０１６８】
以上の一連の動作により本発明実施例でのアプリケーションプログラム用のメモリ領域解放処理を行う。
【０１６９】
次に、図７を用いて本発明実施例のメモリの一括解放処理について説明する。
【０１７０】
Ｓ７０１：ＭＣＢ制御テーブル用管理テーブルの「先頭のＭＣＢ制御テーブルへのポインタ」を取得する。
【０１７１】
Ｓ７０３：「先頭のＭＣＢ制御テーブルへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をＳ７０５に移行する。有効でない場合は動作を終了する。
【０１７２】
Ｓ７０５：ＭＣＢ制御テーブルの「識別ＩＤ」と一致するかどうかを判断する。一致する場合は動作をＳ７０７に移行する。一致しない場合は動作をＳ７１９に移行する。
【０１７３】
Ｓ７０７：ＭＣＢ制御テーブルの「先頭のＭＣＢへのポインタ」を取得する。
【０１７４】
Ｓ７０９：ＭＣＢの「次のＭＣＢへのポインタ」を取得する。
【０１７５】
Ｓ７１１：アプリケーション用メモリ領域を解放する。
【０１７６】
Ｓ７１３：ＭＣＢをメモリから解放する（図１３参照）。
【０１７７】
Ｓ７１５：「次のＭＣＢへのポインタ」は有効であるかどうかを判断する。有効である場合は、動作をＳ７０９に戻して繰り返す。有効でない場合は動作をＳ７１７に移行する。
【０１７８】
Ｓ７１７：ＭＣＢ制御テーブルをメモリから解放する（図８参照）。
【０１７９】
Ｓ７１９：ＭＣＢ制御テーブルの「次のＭＣＢの制御テーブルへのポインタ」を取得する。
【０１８０】
Ｓ７２１：「次のＭＣＢへの制御テーブル」へのポインタは有効であるかどうかを判断する。有効である場合は動作をＳ７０５に戻して繰り返す。有効でない場合は動作を終了する。
【０１８１】
以上の一連の動作により本発明実施例でのアプリケーションプログラム用のメモリ領域の一括解放を完了する。
【０１８２】
次に、図８を用いて本発明実施例のメモリの一括解放方法時のＭＣＢ制御テーブルをメモリから解放する処理について説明する。
【０１８３】
Ｓ８０１：ＭＣＢ制御テーブル用管理テーブルの「先頭のＭＣＢ制御テーブルへのポインタ」を取得する。
【０１８４】
Ｓ８０３：ＭＣＢ制御テーブル用管理テーブルの「最後尾のＭＣＢ制御テーブルへのポインタを取得する。
【０１８５】
Ｓ８０５：解放対象はＭＣＢ制御テーブルテーブルの先頭であるかどうかを判断する。先頭の場合は動作をＳ８０７に移行する。先頭でない場合は動作をＳ８２１に移行する。
【０１８６】
Ｓ８０７：ＭＣＢ制御テーブルのテーブルの「次のＭＣＢ制御テーブルへのポインタ」を取得する。
【０１８７】
Ｓ８０９：「次のＭＣＢ制御テーブルへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をＳ８１７に移行する。有効でない場合は動作をＳ８１１に移行する。
【０１８８】
Ｓ８１１：ＭＣＢ制御テーブル用管理テーブルの「先頭のＭＣＢ制御テーブルへのポインタ」を無効に設定する。
【０１８９】
Ｓ８１３：ＭＣＢ制御テーブル用管理テーブルの「最後尾のＭＣＢ制御テーブルへのポインタ」を無効に設定する。
【０１９０】
Ｓ８１５：ＭＣＢ制御テーブルをメモリから解放して動作を終了する。
【０１９１】
Ｓ８１７：ＭＣＢ制御テーブル用管理テーブルの「先頭のＭＣＢ制御テーブルへのポインタ」を更新する。
【０１９２】
Ｓ８１９：次のＭＣＢ制御テーブルの「前のＭＣＢ制御テーブルへのポインタを無効に設定する。この後、動作をＳ８１５に移行してＭＣＢ制御テーブルをメモリから解放して動作を終了する。
【０１９３】
Ｓ８２１：削除対象は、ＭＣＢ制御テーブルの最後尾であるかどうかを判断する。最後尾である場合は、動作をＳ８３１に移行する。最後尾でない場合は動作をＳ８２３に移行する。
【０１９４】
Ｓ８２３：ＭＣＢ制御テーブルの「次のＭＣＢ制御テーブルへのポインタ」を取得する。
【０１９５】
Ｓ８２５：ＭＣＢ制御テーブルの「前のＭＣＢ制御テーブルへのポインタ」を取得する。
【０１９６】
Ｓ８２７：取得した「次のＭＣＢ制御テーブルへのポインタ」を、前のＭＣＢ制御テーブルの「次のＭＣＢ制御テーブルへのポインタ」に設定する。
【０１９７】
Ｓ８２９：取得した「前のＭＣＢ制御テーブルへのポインタ」を、次のＭＣＢ制御テーブルの「前のＭＣＢ制御テーブルへのポインタ」に設定する。この後、動作をＳ８１５に移行してＭＣＢ制御テーブルをメモリから解放して動作を終了する。
【０１９８】
Ｓ８３１：ＭＣＢ制御テーブルの「前のＭＣＢ制御テーブルへのポインタ」を取得する。
【０１９９】
Ｓ８３３：前のＭＣＢ制御テーブルの「次のＭＣＢ制御テーブルへのポインタ」を無効に設定する。
【０２００】
Ｓ８３５：ＭＣＢ制御テーブル用管理テーブルの「最後尾のＭＣＢ制御テーブルへのポインタ」を更新する。この後、動作をＳ８１５に移行してＭＣＢ制御テーブルをメモリから解放して動作を終了する。
【０２０１】
以上の一連の動作により本発明実施例でのアプリケーションプログラム用のメモリ領域の一括解放時のＭＣＢ制御テーブルをメモリから解放する処理を行う。
【０２０２】
［実施例の効果］
本発明実施例のメモリ管理システムにより、以下のことが可能となる。
【０２０３】
本実施例のメモリ管理システムは、ＭＣＢテーブルとＭＣＢ制御テーブルの２段階のＭＣＢ制御を行ってアプリケーション毎のＭＣＢ管理が可能である。
【０２０４】
このため、アプリケーション毎のメモリ空間の割当、解放動作可能となり、結果としてフラグメンテーションの発生を少なくし、連続的な大きなメモリ空間の取得が可能となる。
【０２０５】
また、メモリ管理のアプリケーションプログラムインタフェースを備えて、アプリケーション毎のメモリ管理をメモリコントロールブロック表管理部と、メモリコントロールブロック制御表管理部が行うため、アプリケーションプログラムは、当該アプリケーションインタフェースを呼び出すだけで、メモリの管理について意識することなく前記メモリコントロールブロック表管理部とメモリコントロールブロック制御表管理部がメモリをアプリケーション毎に管理することが可能となり、プログラマの負担が大きく軽減される。
【０２０６】
また、本発明のメモリ管理システムのメモリコントロールブロック表は同じアプリケーション毎のメモリコントロールブロックが連結された連結リストでできているため、この単純な連結リスト構造により、割当てられたメモリ領域に高速で到達可能なため、例えばメモリの一括解放が単純な手続きにより高速に行われる。具体的には、アプリケーションのインスタンスの終了時には、当該アプリケーションのＩＤをパラメータとして、user_free_all()をコールすることにより、当該アプリケーションにより用いられていたメモリ領域を一度に解放可能となる。
【符号の説明】
【０２０７】
Ｐ１１  ＡＰＩ関数（アプリケーションプログラムインタフェース）
Ｐ１３  ＭＣＢ制御テーブル用管理テーブル管理プログラム
Ｐ１５  ＭＣＢ制御テーブル管理プログラム（メモリコントロールブロック制御表管理部）
Ｐ１７  ＭＣＢテーブル管理プログラム（メモリコントロールブロック表管理部）
【図１】
2010176578.tif 000003
【図２】
2010176578.tif 000004
【図３】
2010176578.tif 000005
【図４】
2010176578.tif 000006
【図５】
2010176578.tif 000007
【図６】
2010176578.tif 000008
【図７】
2010176578.tif 000009
【図８】
2010176578.tif 000010
【図９】
2010176578.tif 000011
【図１０】
2010176578.tif 000012
【図１１】
2010176578.tif 000013
【図１２】
2010176578.tif 000014
【図１３】
2010176578.tif 000015