JP2010176578A - メモリ管理システム、電子機器及びメモリ管理プログラム - Google Patents

メモリ管理システム、電子機器及びメモリ管理プログラム Download PDF

Info

Publication number
JP2010176578A
JP2010176578A JP2009020810A JP2009020810A JP2010176578A JP 2010176578 A JP2010176578 A JP 2010176578A JP 2009020810 A JP2009020810 A JP 2009020810A JP 2009020810 A JP2009020810 A JP 2009020810A JP 2010176578 A JP2010176578 A JP 2010176578A
Authority
JP
Japan
Prior art keywords
memory
mcb
control block
application
pointer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009020810A
Other languages
English (en)
Other versions
JP5376973B2 (ja
Inventor
Toshiaki Ueno
敏昭 上野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kyocera Document Solutions Inc
Original Assignee
Kyocera Mita Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kyocera Mita Corp filed Critical Kyocera Mita Corp
Priority to JP2009020810A priority Critical patent/JP5376973B2/ja
Priority to US12/607,673 priority patent/US8291192B2/en
Publication of JP2010176578A publication Critical patent/JP2010176578A/ja
Priority to US13/606,784 priority patent/US8539198B2/en
Application granted granted Critical
Publication of JP5376973B2 publication Critical patent/JP5376973B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

【課題】 メモリのフラグメンテーションの発生を防ぎ、連続した大容量のメモリ空間を確保しやすくすること。
【解決手段】 メモリ管理システムにおいて、メモリのフラグメンテーションの発生を防ぎ、連続した大容量のメモリ空間を確保しやすくするという目的を物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理部とを有することにより解決した。
【選択図】図9

Description

メモリ管理システム、電子機器及びメモリ管理プログラムにおいて、メモリの割当・解放動作に関して、フラグメンテーションの発生を抑制し効率的なメモリ管理を行う技術に関する。
半導体メモリや磁気回転ディスクなどの記憶装置を備える電子機器では、メモリの管理を効率的に行う技術的要求がある。メモリは使用時に必要領域を確保(割当)し、その使用が終わった後は解放して再使用に備える。このような、メモリの割当・解放動作を繰り返すと、フラグメンテーションと呼ばれる使用可能なメモリ空間がアドレス空間上に細かく分散して存在するようになってしまい、メモリの使用率としては少ない状態であっても大きなアドレス空間が取れない状況が発生する。
従来技術として、画像形成装置などのデータ処理装置において、フラグメンテーションの発生を少なくし、メモリの空き待ちやメモリ内のデータの移動等によるスループットの低下を起こさないメモリ管理方法を実現する以下の方法がある。ページ検出処理部がページ開始を検出すると、メモリ資源取得処理部がメモリを確保し、パーテーション分割が行われ、入力データ用および加工データ用のパーテーションにメモリ領域がそれぞれ確保される。データ加工処理部によって加工データが生成され加工データ用メモリ領域に格納されると、メモリ資源解放処理部によって、不要となるメモリ領域の解放が行われる。解放されたメモリ領域は、加工データ用パーテーションの空き領域の一部となる(特許文献1参照)。
また、高い書き込み速度を実現可能なホスト機器を提供するために、管理システムがメモリ領域上で区画された単位領域を書き込みデータが記憶される書き込み領域として順次割り当てる機能を有し、単位領域の自然数倍の大きさからなる管理単位を割り当て位置の決定単位として用い、書き込み関数呼び出しを受けて管理単位ごとの実現可能な書き込み速度順に従って管理単位を前記書き込み領域として割り当てて、コントローラが、管理システムが割り当てた単位領域に書き込みデータを書き込む旨の指示をメモリカードに出す方法があった(特許文献2参照)。
しかし、特許文献1の方法では画像形成装置のページ単位毎の処理を前提としているため、複数ページに跨る処理には対応できない。また、パーテーションの区切りは2つという制限がある。さらに、パーテーションのサイズは、最初の割当時の容量で不足しても、その連続的メモリ空間の増量はできず、ひとつのパーテーションのサイズを減少する方向にしか容量変化に対応できない。
また、特許文献2の方法は、書き込みの際のメモリ割当に関するものであり、メモリが連続的に割当・解放動作を伴う際のフラグメンテーションの抑制には対応できない。
特開2002−351739号公報 特開2006−285669号公報
解決しようとする問題点は、メモリ管理システム、電子機器及びメモリ管理プログラムにおいて、メモリのフラグメンテーションを効率的に回避することができなかった点と、高速に連続的なメモリ空間の割当、解放動作を行い、割当てられた連続的なメモリ空間のサイズの増減を行うことができなかった点である。
本発明のメモリ管理システムは、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理部と、を有することを特徴とする。
また、本発明のメモリ管理システムは、アプリケーションプログラムのためのメモリ取得・解放・一括解放の要求を受けつけるアプリケーションプログラムインタフェースを有し、前記メモリコントロールブロック表管理部は、前記アプリケーションプログラムインタフェースからのメモリ取得・解放・一括解放の要求に応じて、前記物理メモリの取得・解放・一括解放を行って、前記メモリコントロールブロック表を更新し、前記メモリコントロールブロック制御表管理部は、前記アプリケーションプログラムインタフェースからのメモリ取得・解放・一括解放の要求に応じて、前記メモリコントロールブロック表管理部が行った前記メモリコントロールブロック表の更新に応じて、前記メモリコントロールブロック制御表を更新することを特徴としてもよい。
また、本発明のメモリ管理システムの前記メモリコントロールブロック表管理部は、前記メモリコントロールブロック表を同じアプリケーション毎のメモリコントロールブロックを連結リストで連結して管理し、前記メモリコントロールブロック制御表管理部は、アプリケーション毎に前記メモリコントロールブロックの連結リストの先頭ポインタを有するメモリコントロールブロック制御ブロックを有することを特徴としてもよい。
本発明の電子機器は、請求項1から3のいずれかのメモリ管理システムを有することを特徴とする。
本発明のメモリ管理プログラムは、コンピュータに、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理機能と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理機能と、を実現させることを特徴とする。
本発明のメモリ管理システムは、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理部と、を有することを特徴とする。
このため、アプリケーション毎のメモリ空間の割当、解放動作可能となり、結果としてフラグメンテーションの発生を少なくし、連続的な大きなメモリ空間の取得が可能となる。
また、本発明のメモリ管理システムは、アプリケーションプログラムのためのメモリ取得・解放・一括解放の要求を受けつけるアプリケーションプログラムインタフェースを有し、前記メモリコントロールブロック表管理部は、前記アプリケーションプログラムインタフェースからのメモリ取得・解放・一括解放の要求に応じて、前記物理メモリの取得・解放・一括解放を行って、前記メモリコントロールブロック表を更新し、前記メモリコントロールブロック制御表管理部は、前記アプリケーションプログラムインタフェースからのメモリ取得・解放・一括解放の要求に応じて、前記メモリコントロールブロック表管理部が行った前記メモリコントロールブロック表の更新に応じて、前記メモリコントロールブロック制御表を更新することを特徴としてもよい。
このため、アプリケーションプログラムは、当該アプリケーションインタフェースを呼び出すだけで、メモリの管理について意識することなく前記メモリコントロールブロック表管理部とメモリコントロールブロック制御表管理部がメモリをアプリケーション毎に管理することが可能となり、プログラマの負担が大きく軽減される。
また、本発明のメモリ管理システムの前記メモリコントロールブロック表管理部は、前記メモリコントロールブロック表を同じアプリケーション毎のメモリコントロールブロックを連結リストで連結して管理し、前記メモリコントロールブロック制御表管理部は、アプリケーション毎に前記メモリコントロールブロックの連結リストの先頭ポインタを有するメモリコントロールブロック制御ブロックを有することを特徴としてもよい。
このため、単純な連結リスト構造により、割当てられたメモリ領域に到達可能なため、例えばメモリの一括解放が単純な手続きにより高速に行われる。
本発明の電子機器は、請求項1から3のいずれかのメモリ管理システムを有することを特徴とする。
このため、アプリケーション毎のメモリ空間の割当、解放動作可能となり、結果としてフラグメンテーションの発生を少なくし、連続的な大きなメモリ空間の取得が可能となる。
本発明のメモリ管理プログラムは、コンピュータに、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理機能と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理機能と、を実現させることを特徴とする。
このため、アプリケーション毎のメモリ空間の割当、解放動作可能となり、結果としてフラグメンテーションの発生を少なくし、連続的な大きなメモリ空間の取得が可能となる。
従来例と本発明のメモリ管理システムの比較図である。 本発明実施例のメモリ管理システムのシステム構成図である。 本発明実施例のメモリ管理システムのソフトウェアの構成図である。 本発明実施例のメモリ管理システムのメモリ一括解放用テーブルの構成図である。 本発明実施例のメモリ管理システムのメモリ割当のフローチャートである。 本発明実施例のメモリ管理システムのメモリ解放のフローチャートである。 本発明実施例のメモリ管理システムのメモリ一括解放のフローチャートである。 本発明実施例のメモリ管理システムのメモリ一括解放のMCB制御テーブルをメモリから解放する処理のフローチャートである。 従来例のメモリ管理システムのメモリ一括解放用テーブルの構成図である。 従来例のメモリ管理システムのメモリ割当のフローチャートである。 従来例のメモリ管理システムのメモリ解放のフローチャートである。 従来例のメモリ管理システムのメモリ一括解放のフローチャートである。 従来例のメモリ管理システムのメモリ一括解放のMCBをメモリから解放する処理のフローチャートである。
メモリ管理システムにおいて、メモリのフラグメンテーションの発生を防ぎ、連続した大容量のメモリ空間を確保しやすくするという目的を物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理部とを有することにより解決した。
図1(A)は、従来のメモリ管理システムにおけるアドレス空間でのメモリの割り当てに関する説明図である。従来は、アドレス空間を単一のパーテーションとして区切り、これら単一のパーテーションをメモリ管理のAPI(Application Program Interface)によって、メモリの割り当て(malloc())、解放(free())を行っていた。このようなメモリ管理の下では、メモリの割当て・解放を繰り返した結果として、図9中のアプリケーションメモリ領域に示すように使用中、未使用中(フリー領域)のアドレス空間が分散してフラグメンテーションを発生し、メモリ内のデータの移動処理を行わなければ連続的な大容量のメモリ空間を確保することができない。しかし、メモリ内のデータの移動処理には時間がかかり、メモリ内のデータの移動中はメモリの使用が大きく制限されるため、画像形成装置などのリアルタイム処理が必要な電子機器では非常に問題となる。
図1(B)は、本発明のメモリ管理システムにおける、メモリ管理システムの説明図である。本発明においては、メモリ一括解放を可能とする独自のメモリ管理システムを作成した。これらのメモリ管理ステムは、user_malloc(), user_free(), user_free_all()の関数を定義して、これらが独自のアルゴリズムの下に従来のメモリ管理システムのmalloc(), free()を呼び出して使用する。本発明では、全体のアドレス空間を複数のパーテーション毎にIDを与えて区切り、IDをアプリケーション毎に関連付けて割当てるようにすると、ひとつのアプリケーションが終了した場合(例えば図4におけるID=2のアプリケーション)には、パーテーション2をID指定による一括解放(user_free_all(ID=2)、図1(B)参照)を行うことにより大きな連続アドレス空間を得ることができる。
[構成]
図2に本発明の実施例に係るメモリ管理システムのプログラム全体における位置付けについて説明する。
アプリケーションプログラムは、動的なメモリ領域を扱うための本メモリ管理システムのAPI(Application Program Interface)である user_malloc(), user_free(), user_free_all()を呼び出して用いる。これらのAPIによって呼び出されたメモリ管理システムは、静的メモリ領域にあるMCB(Memory Control Block)制御テーブル用管理テーブル(メモリコントロールブロック制御表用管理表)、動的メモリ領域にあるMCB(Memory Control Block)制御テーブル(メモリコントロールブロック制御表)、同じく動的メモリ領域にあるMCB(Memory Control Block)テーブル(メモリコントロールブロック表)を用いてメモリの管理を行う。メモリ管理システムはシステムが保持するメモリ領域取得・解放のAPIであるmalloc(), free()を呼び出して、従来のシステムによるメモリ取得・解放を行わせる。
図3に本発明実施例のメモリ管理システムのソフトウェア構成図を示す。メモリ管理システムは、前記したAPI関数(user_malloc(), user_free(), user_free_all())(アプリケーションプログラムインタフェース;P11)と「MCB制御テーブル用管理テーブル」管理プログラムP13、「MCB制御テーブル」管理プログラム(メモリコントロールブロック制御表管理部;P15)、「MCBテーブル」管理プログラム(メモリコントロールブロック表管理部;P17)を有する。
API関数P11は、アプリケーションプログラムのためのメモリ取得・解放・一括解放の要求を受けつける。従来、プログラマは、malloc()やfree()などを自らアプリケーションプログラム中に書き込むことによりメモリの管理を行っていたが、本メモリ管理システムでは、前記したAPI関数(user_malloc(), user_free(), user_free_all())がアプリケーション毎のメモリの管理を行うため、特にuser_free_all()によりメモリの一括解放が行えることによりプログラマの負担が大きく軽減される。
「MCB制御テーブル用管理テーブル」管理プログラムP13は、MCB(Memory Control Block)で割当てられる物理メモリアドレス空間(動的メモリ領域)と論理アドレス空間(静的メモリ領域)との間を変換する。又、後述のメモリコントロールブロック制御表の先頭のメモリコントロールブロック制御ブロックのポインタと最後尾のポインタを有する。
「MCB制御テーブル」管理プログラム(メモリコントロールブロック制御表管理部)P15は、メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理する。
「MCBテーブル」管理プログラム(メモリコントロールブロック表管理部)P17は、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理する。
[MCBテーブル、MCB制御テーブル]
図9を用いて従来のMCBテーブル(メモリコントロールブロック表)について説明する。図9に示すように、アプリケーション用メモリ領域は、MCBテーブルの各ブロックによって示される領域を有する。メモリコントロールブロックには、確保を要求したアプリケーション毎の識別IDを有しているが、全体のMCBブロックはMCB用管理テーブルで一元的に管理されているため、アプリケーション毎の管理(例えばアプリケーションが終了したときのメモリの一括解放)を行うには、MCBテーブルの各ブロックのIDをチェックしながら行わなければならない。
次に、本実施例のメモリ管理システムのMCBテーブルの構成図を図4に示す。アプリケーション用メモリ領域は、確保される毎にMCBテーブルの各ブロックにより参照されるが、それぞれのメモリコントロールブロックは、アプリケーション毎にメモリコントロールブロックを参照するMCB制御テーブルにより参照されている。同じアプリケーションにより確保されたメモリ領域は、MCB制御テーブルのアプリケーション毎のブロックがMCBの先頭のブロックに対するポインタを有しており、前記ポインタで参照されるMCBは、同じアプリケーションで確保されている次のメモリ領域を指し示すMCBへのポインタを有して、連結リスト構造をなしている。このため、メモリ一括の解放の場合には、前記MCB制御テーブル中から該当アプリケーションのブロックを探し出し、当該ブロックが指し示すMCBにたどり着き、続いてMCBが指し示すメモリ領域にたどり着くことができる。また、連結リストにより最後尾のブロックまでたどり着けるため、簡単にメモリの一括解放を可能とさせる。
[従来例のメモリ管理システムの動作;フローチャート]
まず、図10から図13のフローチャートを用いて従来例のメモリ管理システムのメモリ動作について説明する。
図10を用いて従来のメモリ割り当て方法について説明する。
S101:アプリケーション用メモリを確保する。
S103:メモリの確保が成功したかどうかを判断する。成功した場合は、動作をS105に移行する。失敗した場合は動作をS111に移行する。
S105:MCBを確保する。
S107:MCBの確保が成功したかどうかを判断する。成功した場合は、動作をS113に移行する。失敗した場合は動作をS109に移行する。
S109:MCBの確保に失敗したので、アプリケーション用メモリを解放する。
S111:メモリの割り当てに失敗したので動作を終了する。
S113:MCB用管理テーブルの「先頭のMCBへのポインタ」を獲得する。
S115:「先頭のMCBへのポインタ」は有効であるかどうかを判断する。有効な場合は、動作をS121に移行する。有効でない場合は動作をS117に移行する。
S117:MCB用管理テーブルの「先頭のMCBへのポインタ」を更新する。
S119:MCB用管理テーブルの「最後尾のMCBへのポインタ」を更新する。
S121:MCB用管理テーブルの「最後尾のMCBへのポインタ」を獲得する。
S123:最後尾のMCBテーブルの「次のMCBへのポインタ」を更新する。
S125:MCB用管理テーブルの「最後尾のMCBへのポインタ」を更新する。
S127:確保したMCBの「識別ID」を更新する。
S129:確保したMCBの「メモリへの先頭アドレス」と「メモリサイズ」を更新する。
S131:確保しMCBの「次のMCBへのポインタ」を無効に設定する。
S133:メモリ割り当てに成功する。
以上の一連の動作により従来方法でのアプリケーションプログラム用のメモリ領域の確保を行う。
次に、図11を用いて従来のメモリの解放方法について説明する。
S201:MCB用管理テーブルの「先頭のMCBへのポインタ」を取得する。
S203:MCB用管理テーブルの「最後尾のMCBへのポインタ」を取得する。
S205:MCBの「メモリの先頭アドレス」と「メモリサイズ」を取得する。
S207:「メモリの先頭アドレス」は解放対象アドレスと一致するかどうかを判断する。一致する場合は動作をS215に移行する。一致しない場合は動作をS209に移行する。
S209:MCBの「次のMCBへのポインタ」を取得する。
S211:「次のMCBへのポインタ」は有効であるかどうかを判断する。有効である場合は、動作をS205に移行する。有効でない場合は動作をS213に移行する。
S213:メモリの解放に失敗したので動作を終了する。
S215:解放対象は、MCBテーブルの先頭であるかどうかを判断する。先頭の場合は動作をS217に移行する。先頭でない場合は動作をS233に移行する。
S217:MCBの「次のMCBへのポインタ」を取得する。
S219:アプリケーション用メモリを解放する。
S221:MCBをメモリから解放する。
S223:「次のMCBへのポインタ」は有効であるかどうかを判断する。有効である場合は、動作をS225に移行する。有効でない場合は動作をS227に移行する。
S225:MCB用管理テーブルの「先頭のMCBへのポインタ」を更新する。
S227:MCB用管理テーブルの「先頭のMCBへのポインタ」を無効に設定する。
S229:MCB用管理テーブルの「最後尾のMCBへのポインタ」を無効に設定する。
S231:メモリの解放に成功し動作を終了する。
S233:解放対象は、MCBテーブルの途中であるかどうかを判断する。途中の場合は、動作をS235に移行する。途中でない場合は動作をS243に移行する。
S235:MCBの「次のMCBへのポインタ」を取得する。
S237:取得したポインタを、前のMCBの「次のMCBへのポインタ」へ設定する。
S239:アプリケーション用メモリを解放する。
S241:MCBをメモリから解放する。この後S231に移行して動作を終了する。
S243:前のMCBの「次のMCBへのポインタ」を無効に設定する。
S245:MCB用管理テーブルの「最後尾のMCBへのポインタ」を更新する。
S247:アプリケーション用のメモリ領域を解放する。
S249:MCBをメモリから解放する。この後S231に移行して動作を終了する。
以上の一連の動作により従来方法でのアプリケーションプログラム用のメモリ領域の解放を行う。
次に、図12を用いて従来のメモリの一括解放方法について説明する。
S301:MCB用管理テーブルの「先頭のMCBへのポインタ」を取得する。
S303:「先頭のMCBへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をS305に移行する。有効でない場合は動作を終了する。
S305:MCBの「次のMCBへのポインタ」を取得する。
S307:MCBの「識別ID」と一致するかどうかを判断する。一致する場合は動作をS311に移行する。一致しない場合は動作をS309に移行する。
S309:「次のMCBへのポインタ」は有効であるかどうかを判断する。有効である場合は、動作をS305に戻して繰り返す。有効でない場合は動作を終了する。
S311:アプリケーション用メモリを解放する。
S313:MCBをメモリから解放する(図13の動作を参照)。次にS309に動作を移行し繰り返す。
以上の一連の動作により従来方法でのアプリケーションプログラム用のメモリ領域の一括解放を行う。
次に、図13を用いて従来のメモリの一括解放方法時のMCBをメモリから解放する処理について説明する。
S401:MCB用管理テーブルの「先頭のMCBへのポインタ」を取得する。
S403:解放対象はMCBテーブルの先頭であるかどうかを判断する。先頭の場合は動作をS405に移行する。先頭でない場合は動作をS417に移行する。
S405:MCBのテーブルの「次のMCBへのポインタ」を取得する。
S407:「次のMCBへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をS413に移行する。有効でない場合は動作をS409に移行する。
S409:MCB用管理テーブルの「先頭のMCBへのポインタ」を無効に設定する。
S411:MCB用管理テーブルの「最後尾のMCBへのポインタ」を無効に設定する。
S413:MCB用管理テーブルの「先頭のMCBへのポインタ」を更新する。
S415:MCBをメモリから解放して動作を終了する。
S417:解放対象は、MCBの最後尾であるかどうかを判断する。最後尾である場合は、動作をS423に移行する。最後尾でない場合は動作をS419に移行する。
S419:MCBのテーブルの「次のMCBへのポインタ」を取得する。
S421:取得したポインタを、前のMCBの「次のMCBへのポインタ」に設定する。この後、動作をS415に移行してMCBをメモリから解放して動作を終了する。
S423:前のMCBの「次のMCBへのポインタ」を無効に設定する。
S425:MCB用管理テーブルの「最後尾のMCBへのポインタ」を更新する。この後、動作をS415に移行してMCBをメモリから解放して動作を終了する。
以上の一連の動作により従来方法でのアプリケーションプログラム用のメモリ領域の一括解放時のMCBをメモリから解放する処理を行う。
[実施例のメモリ管理システムの動作;フローチャート]
次に、図5を用いて本発明実施例のメモリの割当処理について説明する。
S501:アプリケーション用メモリの確保を行う。
S503:S501でのメモリの確保が成功したかどうかを判断する。成功した場合は、動作をS507に移行する。失敗した場合は動作をS505に移行する。
S505:メモリの割り当てに失敗したので動作を終了する。
S507:MCB用のメモリ領域を確保する。
S509:S507でのMCBのメモリ領域確保が成功したかどうかを判断する。成功した場合は、動作をS513に移行する。失敗した場合は動作をS511に移行する。
S511:アプリケーション用メモリを解放する。この後動作をS505に移行して動作を終了する。
S513:全てのMCB制御テーブルの「識別ID」と比較する。
S515:S513の結果「識別ID」と一致したかどうかを判断する。一致した場合には動作をS557に移行する。一致しない場合には、動作をS517に移行する。
S517:MCB制御テーブル用のメモリ領域を確保する。
S519:S517におけるMCB制御テーブル用のメモリ領域確保が成功したかどうかを判断する。成功した場合は、動作をS525に移行する。失敗した場合は動作をS521に移行する。
S521:アプリケーション用メモリを解放する。
S523:MCBをメモリから解放する。この後S505に動作を移行し、メモリ割当失敗として動作を終了する。
S525:MCB制御テーブル用管理テーブルの「先頭のMCB制御テーブルへのポインタ」を獲得する。
S527:「先頭のMCB制御テーブルへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をS549に移行する。有効でない場合は動作をS529に移行する。
S529:MCB制御テーブル用管理テーブルの「先頭のMCB制御テーブルへのポインタ」を更新する。
S531:MCB制御テーブル用管理テーブルの「最後尾のMCB制御テーブルへのポインタ」を更新する。
S533:MCB制御テーブルの「前のMCB制御テーブルへのポインタ」を無効に設定する。
S535:MCB制御テーブルの「先頭のMCBへのポインタ」を更新する。
S537:MCB制御テーブルの「識別ID」を更新する。
S539:MCB制御テーブルの「次のMCB制御テーブルへのポインタ」を無効に設定する。
S541:MCB制御テーブルの「最後尾のMCBへのポインタ」を設定する。
S543:確保したMCBの「メモリへの先頭アドレス」と「メモリサイズ」を更新する。
S545:確保したMCBの「次のMCBへのポインタ」を無効に設定する。
S547:メモリ割当に成功して動作を終了する。
S549:MCB制御テーブル用管理テーブルの「最後尾のMCB制御テーブルへのポインタ」を獲得する。
S551:最後尾のMCB制御テーブルの「次のMCB制御テーブルへのポインタ」を更新する。
S553:MCB制御テーブル用管理テーブルの「最後尾のMCB制御テーブルへのポインタ」を更新する。
S555:最後尾のMCB制御テーブルの「前のMCB制御テーブルへのポインタ」を設定する。この後、動作をS535に移行して動作を続ける。
S557:MCB制御テーブルから「最後尾のMCBへのポインタ」を取得する。
S559:最後尾のMCBの「次のMCBへのポインタ」を更新する。この後、動作をS541に移行して動作を続ける。
以上の一連の動作により本発明実施例によるアプリケーションプログラム用のメモリ領域割当についての動作を完了する。
次に、図6を用いて本発明実施例のメモリの解放処理について説明する。
S601:MCB制御テーブル用管理テーブルの「先頭のMCB制御テーブルへのポインタ」を取得する。
S603:MCB制御テーブルの「先頭のMCBへのポインタ」を取得する。
S605:MCB制御テーブルの「最後尾のMCBへのポインタ」を取得する。
S607:MCBの「メモリの先頭アドレス」と「メモリサイズ」を取得する。
S609:「メモリの先頭アドレス」は解放対象アドレスと一致するかどうかを判断する。一致する場合は動作をS621に移行する。一致しない場合は動作をS623に移行する。
S611:MCBの「次のMCBへのポインタ」を取得する。
S613:「次のMCBへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をS607に戻して繰り返す。有効でない場合は動作をS615に移行する。
S615:MCB制御テーブルの「次のMCB制御テーブルへのポインタ」を取得する。
S617:「次のMCB制御テーブルへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をS603に戻して繰り返す。有効でない場合は動作をS619に移行する。
S619:メモリ解放動作に失敗したので動作を終了する。
S621:解放対象は、MCBテーブルの先頭であるかどうかを判断する。先頭の場合は動作をS623に移行する。先頭でない場合は動作をS637に移行する。
S623:MCBの「次のMCBへのポインタ」を取得する。
S625:アプリケーション用メモリを解放する。
S627:MCBをメモリから解放する(図13参照)。
S629:「次のMCBへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をS631に移行する。有効でない場合は動作をS635に移行する。
S631:MCB制御テーブルの「先頭のMCBへのポインタ」を更新する。
S633:メモリの解放に成功し、動作を終了する。
S635:MCB制御テーブルをメモリから解放する(図8参照)。この後動作をS633に移行してメモリの解放に成功し、動作を終了する。
S637:解放対象は、MCBテーブルの途中であるかどうかを判断する。途中の場合は、動作をS639に移行する。途中でない場合は動作をS647に移行する。
S639:MCBの「次のMCBへのポインタ」を取得する。
S641:取得したポインタを前のMCBの「次のMCBへのポインタ」へ設定する。
S643:アプリケーション用メモリを解放する。
S645:MCBをメモリから解放する(図13参照)。この後動作をS633に移行してメモリの解放に成功し、動作を終了する。
S647:前のMCBの「次のMCBへのポインタ」を向こうに設定する。
S649:MCB制御テーブルの「最後尾のMCBへのポインタ」を更新する。
S651:アプリケーション用メモリを解放する。
S653:MCBをメモリから解放する(図13参照)。この後動作をS633に移行してメモリの解放に成功し、動作を終了する。
以上の一連の動作により本発明実施例でのアプリケーションプログラム用のメモリ領域解放処理を行う。
次に、図7を用いて本発明実施例のメモリの一括解放処理について説明する。
S701:MCB制御テーブル用管理テーブルの「先頭のMCB制御テーブルへのポインタ」を取得する。
S703:「先頭のMCB制御テーブルへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をS705に移行する。有効でない場合は動作を終了する。
S705:MCB制御テーブルの「識別ID」と一致するかどうかを判断する。一致する場合は動作をS707に移行する。一致しない場合は動作をS719に移行する。
S707:MCB制御テーブルの「先頭のMCBへのポインタ」を取得する。
S709:MCBの「次のMCBへのポインタ」を取得する。
S711:アプリケーション用メモリ領域を解放する。
S713:MCBをメモリから解放する(図13参照)。
S715:「次のMCBへのポインタ」は有効であるかどうかを判断する。有効である場合は、動作をS709に戻して繰り返す。有効でない場合は動作をS717に移行する。
S717:MCB制御テーブルをメモリから解放する(図8参照)。
S719:MCB制御テーブルの「次のMCBの制御テーブルへのポインタ」を取得する。
S721:「次のMCBへの制御テーブル」へのポインタは有効であるかどうかを判断する。有効である場合は動作をS705に戻して繰り返す。有効でない場合は動作を終了する。
以上の一連の動作により本発明実施例でのアプリケーションプログラム用のメモリ領域の一括解放を完了する。
次に、図8を用いて本発明実施例のメモリの一括解放方法時のMCB制御テーブルをメモリから解放する処理について説明する。
S801:MCB制御テーブル用管理テーブルの「先頭のMCB制御テーブルへのポインタ」を取得する。
S803:MCB制御テーブル用管理テーブルの「最後尾のMCB制御テーブルへのポインタを取得する。
S805:解放対象はMCB制御テーブルテーブルの先頭であるかどうかを判断する。先頭の場合は動作をS807に移行する。先頭でない場合は動作をS821に移行する。
S807:MCB制御テーブルのテーブルの「次のMCB制御テーブルへのポインタ」を取得する。
S809:「次のMCB制御テーブルへのポインタ」は有効であるかどうかを判断する。有効である場合は動作をS817に移行する。有効でない場合は動作をS811に移行する。
S811:MCB制御テーブル用管理テーブルの「先頭のMCB制御テーブルへのポインタ」を無効に設定する。
S813:MCB制御テーブル用管理テーブルの「最後尾のMCB制御テーブルへのポインタ」を無効に設定する。
S815:MCB制御テーブルをメモリから解放して動作を終了する。
S817:MCB制御テーブル用管理テーブルの「先頭のMCB制御テーブルへのポインタ」を更新する。
S819:次のMCB制御テーブルの「前のMCB制御テーブルへのポインタを無効に設定する。この後、動作をS815に移行してMCB制御テーブルをメモリから解放して動作を終了する。
S821:削除対象は、MCB制御テーブルの最後尾であるかどうかを判断する。最後尾である場合は、動作をS831に移行する。最後尾でない場合は動作をS823に移行する。
S823:MCB制御テーブルの「次のMCB制御テーブルへのポインタ」を取得する。
S825:MCB制御テーブルの「前のMCB制御テーブルへのポインタ」を取得する。
S827:取得した「次のMCB制御テーブルへのポインタ」を、前のMCB制御テーブルの「次のMCB制御テーブルへのポインタ」に設定する。
S829:取得した「前のMCB制御テーブルへのポインタ」を、次のMCB制御テーブルの「前のMCB制御テーブルへのポインタ」に設定する。この後、動作をS815に移行してMCB制御テーブルをメモリから解放して動作を終了する。
S831:MCB制御テーブルの「前のMCB制御テーブルへのポインタ」を取得する。
S833:前のMCB制御テーブルの「次のMCB制御テーブルへのポインタ」を無効に設定する。
S835:MCB制御テーブル用管理テーブルの「最後尾のMCB制御テーブルへのポインタ」を更新する。この後、動作をS815に移行してMCB制御テーブルをメモリから解放して動作を終了する。
以上の一連の動作により本発明実施例でのアプリケーションプログラム用のメモリ領域の一括解放時のMCB制御テーブルをメモリから解放する処理を行う。
[実施例の効果]
本発明実施例のメモリ管理システムにより、以下のことが可能となる。
本実施例のメモリ管理システムは、MCBテーブルとMCB制御テーブルの2段階のMCB制御を行ってアプリケーション毎のMCB管理が可能である。
このため、アプリケーション毎のメモリ空間の割当、解放動作可能となり、結果としてフラグメンテーションの発生を少なくし、連続的な大きなメモリ空間の取得が可能となる。
また、メモリ管理のアプリケーションプログラムインタフェースを備えて、アプリケーション毎のメモリ管理をメモリコントロールブロック表管理部と、メモリコントロールブロック制御表管理部が行うため、アプリケーションプログラムは、当該アプリケーションインタフェースを呼び出すだけで、メモリの管理について意識することなく前記メモリコントロールブロック表管理部とメモリコントロールブロック制御表管理部がメモリをアプリケーション毎に管理することが可能となり、プログラマの負担が大きく軽減される。
また、本発明のメモリ管理システムのメモリコントロールブロック表は同じアプリケーション毎のメモリコントロールブロックが連結された連結リストでできているため、この単純な連結リスト構造により、割当てられたメモリ領域に高速で到達可能なため、例えばメモリの一括解放が単純な手続きにより高速に行われる。具体的には、アプリケーションのインスタンスの終了時には、当該アプリケーションのIDをパラメータとして、user_free_all()をコールすることにより、当該アプリケーションにより用いられていたメモリ領域を一度に解放可能となる。
P11 API関数(アプリケーションプログラムインタフェース)
P13 MCB制御テーブル用管理テーブル管理プログラム
P15 MCB制御テーブル管理プログラム(メモリコントロールブロック制御表管理部)
P17 MCBテーブル管理プログラム(メモリコントロールブロック表管理部)

Claims (5)

  1. 物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、
    前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理部と、を有する
    ことを特徴とするメモリ管理システム。
  2. 請求項1のメモリ管理システムであって、
    アプリケーションプログラムのためのメモリ取得・解放・一括解放の要求を受けつけるアプリケーションプログラムインタフェースを有し、
    前記メモリコントロールブロック表管理部は、前記アプリケーションプログラムインタフェースからのメモリ取得・解放・一括解放の要求に応じて、前記物理メモリの取得・解放・一括解放を行って、前記メモリコントロールブロック表を更新し、
    前記メモリコントロールブロック制御表管理部は、前記アプリケーションプログラムインタフェースからのメモリ取得・解放・一括解放の要求に応じて、前記メモリコントロールブロック表管理部が行った前記メモリコントロールブロック表の更新に応じて、前記メモリコントロールブロック制御表を更新する
    ことを特徴とするメモリ管理システム。
  3. 請求項1または2のメモリ管理システムであって、
    前記メモリコントロールブロック表管理部は、前記メモリコントロールブロック表の同じアプリケーション毎のメモリコントロールブロックを連結リストで連結して管理し、
    前記メモリコントロールブロック制御表管理部は、アプリケーション毎に、前記アプリケーション毎の前記メモリコントロールブロックの連結リストの先頭ポインタを有するメモリコントロールブロック制御ブロックを有する
    ことを特徴とするメモリ管理システム。
  4. 請求項1から3のいずれかのメモリ管理システムを有する
    ことを特徴とする電子機器。
  5. コンピュータに、
    物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理機能と、
    前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理機能と、を実現させる
    ことを特徴とするメモリ管理プログラム。
JP2009020810A 2008-10-30 2009-01-30 メモリ管理システム、電子機器及びメモリ管理プログラム Expired - Fee Related JP5376973B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2009020810A JP5376973B2 (ja) 2009-01-30 2009-01-30 メモリ管理システム、電子機器及びメモリ管理プログラム
US12/607,673 US8291192B2 (en) 2008-10-30 2009-10-28 Memory management system
US13/606,784 US8539198B2 (en) 2008-10-30 2012-09-07 Memory management system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009020810A JP5376973B2 (ja) 2009-01-30 2009-01-30 メモリ管理システム、電子機器及びメモリ管理プログラム

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2013195342A Division JP5485459B2 (ja) 2013-09-20 2013-09-20 メモリ管理システム、電子機器及びメモリ管理プログラム

Publications (2)

Publication Number Publication Date
JP2010176578A true JP2010176578A (ja) 2010-08-12
JP5376973B2 JP5376973B2 (ja) 2013-12-25

Family

ID=42707456

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009020810A Expired - Fee Related JP5376973B2 (ja) 2008-10-30 2009-01-30 メモリ管理システム、電子機器及びメモリ管理プログラム

Country Status (1)

Country Link
JP (1) JP5376973B2 (ja)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0438540A (ja) * 1990-06-05 1992-02-07 Toshiba Corp メモリ管理方式
JPH0895849A (ja) * 1994-09-27 1996-04-12 Canon Inc メモリ管理方法
JP2005196343A (ja) * 2004-01-05 2005-07-21 Mitsubishi Electric Corp メモリ管理装置及びメモリ管理方法及びプログラム
WO2008084531A1 (ja) * 2007-01-10 2008-07-17 Netcleus Systems Corporation メモリ管理装置
JP2008217183A (ja) * 2007-03-01 2008-09-18 Yokogawa Electric Corp メモリ管理装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0438540A (ja) * 1990-06-05 1992-02-07 Toshiba Corp メモリ管理方式
JPH0895849A (ja) * 1994-09-27 1996-04-12 Canon Inc メモリ管理方法
JP2005196343A (ja) * 2004-01-05 2005-07-21 Mitsubishi Electric Corp メモリ管理装置及びメモリ管理方法及びプログラム
WO2008084531A1 (ja) * 2007-01-10 2008-07-17 Netcleus Systems Corporation メモリ管理装置
JP2008217183A (ja) * 2007-03-01 2008-09-18 Yokogawa Electric Corp メモリ管理装置

Also Published As

Publication number Publication date
JP5376973B2 (ja) 2013-12-25

Similar Documents

Publication Publication Date Title
JP6314355B2 (ja) メモリ管理方法およびデバイス
US9477591B2 (en) Memory access requests in hybrid memory system
US9390020B2 (en) Hybrid memory with associative cache
WO2016045096A1 (zh) 一种文件迁移方法、装置和存储设备
US6016490A (en) Database management system
US20150074355A1 (en) Efficient caching of file system journals
JPH08129457A (ja) 外部記憶ストラクチャを拡大、縮小、及び再配分するための方法及び装置
US11372681B2 (en) Slab memory allocator with dynamic buffer resizing
JP5516728B2 (ja) マルチコアプロセッサシステム、制御プログラム、および制御方法
JPH11143844A (ja) ネットワークノード間を移動するメッセージに対する遠隔割り当て及び管理用システム及び方法
US10732878B1 (en) Enabling secondary scratchpad cache with solid-state devices for low cost hosts
JP5485459B2 (ja) メモリ管理システム、電子機器及びメモリ管理プログラム
US9772776B2 (en) Per-memory group swap device
JP5376973B2 (ja) メモリ管理システム、電子機器及びメモリ管理プログラム
US8972659B2 (en) Memory control device, memory device, memory control method, and program
CN114780246A (zh) 内存访问信息的确定方法、存储介质及程序产品
CN113010453A (zh) 一种内存管理的方法、系统、设备及可读存储介质
JP5708861B2 (ja) マルチプロセッサシステム、制御方法、および制御プログラム
JP7337228B2 (ja) メモリシステムおよび制御方法
KR101851948B1 (ko) 데이터 페이지의 버퍼 풀 관리 방법
US20230244383A1 (en) Memory system and method of controlling nonvolatile memory
CN117667764A (zh) 内存管理方法、装置、电子设备及存储介质
JP3030030B2 (ja) 領域管理処理方式
CN111782560A (zh) 内存回收方法、装置、终端设备以及存储介质
JPS63292456A (ja) 複数媒体収納型デ−タ記録装置の媒体割り当て制御方式

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110421

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130115

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130122

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130325

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130730

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130808

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130827

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130924

R150 Certificate of patent or registration of utility model

Ref document number: 5376973

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees