JP2013254523A - メモリ管理システム、電子機器及びメモリ管理プログラム - Google Patents
メモリ管理システム、電子機器及びメモリ管理プログラム Download PDFInfo
- Publication number
- JP2013254523A JP2013254523A JP2013195342A JP2013195342A JP2013254523A JP 2013254523 A JP2013254523 A JP 2013254523A JP 2013195342 A JP2013195342 A JP 2013195342A JP 2013195342 A JP2013195342 A JP 2013195342A JP 2013254523 A JP2013254523 A JP 2013254523A
- Authority
- JP
- Japan
- Prior art keywords
- memory
- control block
- mcb
- pointer
- memory control
- 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
Links
Abstract
【課題】メモリのフラグメンテーションの発生を防ぎ、連続した大容量のメモリ空間を確保しやすくすること。
【解決手段】 メモリ管理システムにおいて、メモリのフラグメンテーションの発生を防ぎ、連続した大容量のメモリ空間を確保しやすくするという目的を物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理部とを有することにより解決した。
【選択図】図9
【解決手段】 メモリ管理システムにおいて、メモリのフラグメンテーションの発生を防ぎ、連続した大容量のメモリ空間を確保しやすくするという目的を物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理部とを有することにより解決した。
【選択図】図9
Description
メモリ管理システム、電子機器及びメモリ管理プログラムにおいて、メモリの割当・解放動作に関して、フラグメンテーションの発生を抑制し効率的なメモリ管理を行う技術に関する。
半導体メモリや磁気回転ディスクなどの記憶装置を備える電子機器では、メモリの管理を効率的に行う技術的要求がある。メモリは使用時に必要領域を確保(割当)し、その使用が終わった後は解放して再使用に備える。このような、メモリの割当・解放動作を繰り返すと、フラグメンテーションと呼ばれる使用可能なメモリ空間がアドレス空間上に細かく分散して存在するようになってしまい、メモリの使用率としては少ない状態であっても大きなアドレス空間が取れない状況が発生する。
従来技術として、画像形成装置などのデータ処理装置において、フラグメンテーションの発生を少なくし、メモリの空き待ちやメモリ内のデータの移動等によるスループットの低下を起こさないメモリ管理方法を実現する以下の方法がある。ページ検出処理部がページ開始を検出すると、メモリ資源取得処理部がメモリを確保し、パーテーション分割が行われ、入力データ用および加工データ用のパーテーションにメモリ領域がそれぞれ確保される。データ加工処理部によって加工データが生成され加工データ用メモリ領域に格納されると、メモリ資源解放処理部によって、不要となるメモリ領域の解放が行われる。解放されたメモリ領域は、加工データ用パーテーションの空き領域の一部となる(特許文献1参照)。
また、高い書き込み速度を実現可能なホスト機器を提供するために、管理システムがメモリ領域上で区画された単位領域を書き込みデータが記憶される書き込み領域として順次割り当てる機能を有し、単位領域の自然数倍の大きさからなる管理単位を割り当て位置の決定単位として用い、書き込み関数呼び出しを受けて管理単位ごとの実現可能な書き込み速度順に従って管理単位を前記書き込み領域として割り当てて、コントローラが、管理システムが割り当てた単位領域に書き込みデータを書き込む旨の指示をメモリカードに出す方法があった(特許文献2参照)。
しかし、特許文献1の方法では画像形成装置のページ単位毎の処理を前提としているため、複数ページに跨る処理には対応できない。また、パーテーションの区切りは2つという制限がある。さらに、パーテーションのサイズは、最初の割当時の容量で不足しても、その連続的メモリ空間の増量はできず、ひとつのパーテーションのサイズを減少する方向にしか容量変化に対応できない。
また、特許文献2の方法は、書き込みの際のメモリ割当に関するものであり、メモリが連続的に割当・解放動作を伴う際のフラグメンテーションの抑制には対応できない。
解決しようとする問題点は、メモリ管理システム、電子機器及びメモリ管理プログラムにおいて、メモリのフラグメンテーションを効率的に回避することができなかった点と、高速に連続的なメモリ空間の割当、解放動作を行い、割当てられた連続的なメモリ空間のサイズの増減を行うことができなかった点である。
本発明のメモリ管理システムは、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当を前記メモリコントロールブロック制御表を介してアプリケーション毎に管理するメモリコントロールブロック制御表管理部と、を有し、前記メモリコントロールブロック表管理部は、前記メモリコントロールブロック表の同じアプリケーションで確保されている次のメモリ領域を指し示すメモリコントロールブロックへのポインタを有した連結リスト構造によりメモリコントロールブロックを連結リストで連結して管理し、前記メモリコントロールブロック制御表管理部は、前記メモリコントロールブロック制御表の先頭のメモリコントロールブロック制御ブロックのポインタと最後尾のポインタとを有し、このメモリコントロールブロック制御表管理部のポインタで参照される前記メモリコントロールブロック制御ブロックは、次のメモリコントロールブロック制御ブロックを指し示すメモリ領域のポインタを有して連結リスト構造をなす、ことを特徴とする。
本発明の電子機器は、前記メモリ管理システムを有することを特徴とする。
本発明のメモリ管理プログラムは、コンピュータに、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理機能と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理機能が管理する物理メモリの割当を前記メモリコントロールブロック制御表を介してアプリケーション毎に管理するメモリコントロールブロック制御表管理機能と、を有し、前記メモリコントロールブロック表管理機能は、前記メモリコントロールブロック表の同じアプリケーションで確保されている次のメモリ領域を指し示すメモリコントロールブロックへのポインタを有した連結リスト構造によりメモリコントロールブロックを連結リストで連結して管理し、前記メモリコントロールブロック制御表管理機能は、前記メモリコントロールブロック制御表の先頭のメモリコントロールブロック制御ブロックのポインタと最後尾のポインタとにより前記メモリコントロールブロック制御ブロックを探し出し、このメモリコントロールブロック制御表管理機能のポインタで参照される前記メモリコントロールブロック制御ブロックは、次のメモリコントロールブロック制御ブロックを指し示すメモリ領域のポインタを有して連結リスト構造により管理されることを実現させることを特徴とする。
本発明のメモリ管理システムは、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当を前記メモリコントロールブロック制御表を介してアプリケーション毎に管理するメモリコントロールブロック制御表管理部と、を有し、前記メモリコントロールブロック表管理部は、前記メモリコントロールブロック表の同じアプリケーションで確保されている次のメモリ領域を指し示すメモリコントロールブロックへのポインタを有した連結リスト構造によりメモリコントロールブロックを連結リストで連結して管理し、前記メモリコントロールブロック制御表管理部は、前記メモリコントロールブロック制御表の先頭のメモリコントロールブロック制御ブロックのポインタと最後尾のポインタとを有し、このメモリコントロールブロック制御表管理部のポインタで参照される前記メモリコントロールブロック制御ブロックは、次のメモリコントロールブロック制御ブロックを指し示すメモリ領域のポインタを有して連結リスト構造をなす、ことを特徴とする。
このため、アプリケーション毎のメモリ空間の割当、解放動作可能となり、結果としてフラグメンテーションの発生を少なくし、連続的な大きなメモリ空間の取得が可能となる。
単純な連結リスト構造により、割当てられたメモリ領域に到達可能なため、例えばメモリの一括解放が単純な手続きにより高速に行われる。
本発明の電子機器は、前記メモリ管理システムを有することを特徴とする。
このため、アプリケーション毎のメモリ空間の割当、解放動作可能となり、結果としてフラグメンテーションの発生を少なくし、連続的な大きなメモリ空間の取得が可能となる。
本発明のメモリ管理プログラムは、コンピュータに、物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理機能と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理機能が管理する物理メモリの割当を前記メモリコントロールブロック制御表を介してアプリケーション毎に管理するメモリコントロールブロック制御表管理機能と、を有し、前記メモリコントロールブロック表管理機能は、前記メモリコントロールブロック表の同じアプリケーションで確保されている次のメモリ領域を指し示すメモリコントロールブロックへのポインタを有した連結リスト構造によりメモリコントロールブロックを連結リストで連結して管理し、前記メモリコントロールブロック制御表管理機能は、前記メモリコントロールブロック制御表の先頭のメモリコントロールブロック制御ブロックのポインタと最後尾のポインタとにより前記メモリコントロールブロック制御ブロックを探し出し、このメモリコントロールブロック制御表管理機能のポインタで参照される前記メモリコントロールブロック制御ブロックは、次のメモリコントロールブロック制御ブロックを指し示すメモリ領域のポインタを有して連結リスト構造により管理されることを実現させることを特徴とする。
このため、アプリケーション毎のメモリ空間の割当、解放動作可能となり、結果としてフラグメンテーションの発生を少なくし、連続的な大きなメモリ空間の取得が可能となる。
メモリ管理システムにおいて、メモリのフラグメンテーションの発生を防ぎ、連続した大容量のメモリ空間を確保しやすくするという目的を物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当をアプリケーション毎に管理するメモリコントロールブロック制御表管理部とを有することにより解決した。
図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に本発明の実施例に係るメモリ管理システムのプログラム全体における位置付けについて説明する。
図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をチェックしながら行わなければならない。
図9を用いて従来のMCBテーブル(メモリコントロールブロック表)について説明する。図9に示すように、アプリケーション用メモリ領域は、MCBテーブルの各ブロックによって示される領域を有する。メモリコントロールブロックには、確保を要求したアプリケーション毎の識別IDを有しているが、全体のMCBブロックはMCB用管理テーブルで一元的に管理されているため、アプリケーション毎の管理(例えばアプリケーションが終了したときのメモリの一括解放)を行うには、MCBテーブルの各ブロックのIDをチェックしながら行わなければならない。
次に、本実施例のメモリ管理システムのMCBテーブルの構成図を図4に示す。アプリケーション用メモリ領域は、確保される毎にMCBテーブルの各ブロックにより参照されるが、それぞれのメモリコントロールブロックは、アプリケーション毎にメモリコントロールブロックを参照するMCB制御テーブルにより参照されている。同じアプリケーションにより確保されたメモリ領域は、MCB制御テーブルのアプリケーション毎のブロックがMCBの先頭のブロックに対するポインタを有しており、前記ポインタで参照されるMCBは、同じアプリケーションで確保されている次のメモリ領域を指し示すMCBへのポインタを有して、連結リスト構造をなしている。このため、メモリ一括の解放の場合には、前記MCB制御テーブル中から該当アプリケーションのブロックを探し出し、当該ブロックが指し示すMCBにたどり着き、続いてMCBが指し示すメモリ領域にたどり着くことができる。また、連結リストにより最後尾のブロックまでたどり着けるため、簡単にメモリの一括解放を可能とさせる。
[従来例のメモリ管理システムの動作;フローチャート]
まず、図10から図13のフローチャートを用いて従来例のメモリ管理システムのメモリ動作について説明する。
まず、図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を用いて本発明実施例のメモリの割当処理について説明する。
次に、図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に移行する。先頭でない場合は動作を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テーブル管理プログラム(メモリコントロールブロック表管理部)
P13 MCB制御テーブル用管理テーブル管理プログラム
P15 MCB制御テーブル管理プログラム(メモリコントロールブロック制御表管理部)
P17 MCBテーブル管理プログラム(メモリコントロールブロック表管理部)
Claims (3)
- 物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理部と、
前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理部が管理する物理メモリの割当を前記メモリコントロールブロック制御表を介してアプリケーション毎に管理するメモリコントロールブロック制御表管理部と、を有し、
前記メモリコントロールブロック表管理部は、前記メモリコントロールブロック表の同じアプリケーションで確保されている次のメモリ領域を指し示すメモリコントロールブロックへのポインタを有した連結リスト構造によりメモリコントロールブロックを連結リストで連結して管理し、
前記メモリコントロールブロック制御表管理部は、前記メモリコントロールブロック制御表の先頭のメモリコントロールブロック制御ブロックのポインタと最後尾のポインタとを有し、
このメモリコントロールブロック制御表管理部のポインタで参照される前記メモリコントロールブロック制御ブロックは、次のメモリコントロールブロック制御ブロックを指し示すメモリ領域のポインタを有して連結リスト構造をなす、
ことを特徴とするメモリ管理システム。 - 請求項1のメモリ管理システムを有する
ことを特徴とする電子機器。 - コンピュータに、
物理メモリの割当て位置を示すメモリコントロールブロック表を有して、物理アドレス空間でのメモリの割当を管理するメモリコントロールブロック表管理機能と、
前記メモリコントロールブロック表をアプリケーション毎に纏めるメモリコントロールブロック制御表を有して、前記メモリコントロールブロック表管理機能が管理する物理メモリの割当を前記メモリコントロールブロック制御表を介してアプリケーション毎に管理するメモリコントロールブロック制御表管理機能と、を有し、
前記メモリコントロールブロック表管理機能は、前記メモリコントロールブロック表の同じアプリケーションで確保されている次のメモリ領域を指し示すメモリコントロールブロックへのポインタを有した連結リスト構造によりメモリコントロールブロックを連結リストで連結して管理し、
前記メモリコントロールブロック制御表管理機能は、前記メモリコントロールブロック制御表の先頭のメモリコントロールブロック制御ブロックのポインタと最後尾のポインタとにより前記メモリコントロールブロック制御ブロックを探し出し、このメモリコントロールブロック制御表管理機能のポインタで参照される前記メモリコントロールブロック制御ブロックは、次のメモリコントロールブロック制御ブロックを指し示すメモリ領域のポインタを有して連結リスト構造により管理される
ことを実現させるメモリ管理プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013195342A JP5485459B2 (ja) | 2013-09-20 | 2013-09-20 | メモリ管理システム、電子機器及びメモリ管理プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013195342A JP5485459B2 (ja) | 2013-09-20 | 2013-09-20 | メモリ管理システム、電子機器及びメモリ管理プログラム |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009020810A Division JP5376973B2 (ja) | 2008-10-30 | 2009-01-30 | メモリ管理システム、電子機器及びメモリ管理プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2013254523A true JP2013254523A (ja) | 2013-12-19 |
JP5485459B2 JP5485459B2 (ja) | 2014-05-07 |
Family
ID=49951904
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013195342A Active JP5485459B2 (ja) | 2013-09-20 | 2013-09-20 | メモリ管理システム、電子機器及びメモリ管理プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5485459B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107077422A (zh) * | 2015-02-18 | 2017-08-18 | 国际商业机器公司 | 确定存储器外部碎片的原因 |
-
2013
- 2013-09-20 JP JP2013195342A patent/JP5485459B2/ja active Active
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107077422A (zh) * | 2015-02-18 | 2017-08-18 | 国际商业机器公司 | 确定存储器外部碎片的原因 |
CN107077422B (zh) * | 2015-02-18 | 2020-05-12 | 国际商业机器公司 | 确定存储器外部碎片的原因 |
Also Published As
Publication number | Publication date |
---|---|
JP5485459B2 (ja) | 2014-05-07 |
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) | 一种文件迁移方法、装置和存储设备 | |
US20150074355A1 (en) | Efficient caching of file system journals | |
US20150106410A1 (en) | Memory System with Shared File System | |
JP5915378B2 (ja) | ストレージ装置およびストレージ装置の制御方法 | |
US20210049044A1 (en) | Slab memory allocator with dynamic buffer resizing | |
JP6341628B2 (ja) | 情報処理装置、情報処理方法、情報処理システム、プログラム | |
JP5516728B2 (ja) | マルチコアプロセッサシステム、制御プログラム、および制御方法 | |
US10732878B1 (en) | Enabling secondary scratchpad cache with solid-state devices for low cost hosts | |
JP5485459B2 (ja) | メモリ管理システム、電子機器及びメモリ管理プログラム | |
US8972659B2 (en) | Memory control device, memory device, memory control method, and program | |
JP5376973B2 (ja) | メモリ管理システム、電子機器及びメモリ管理プログラム | |
WO2017001305A1 (en) | Automatic memory management using a memory management unit | |
CN113010453A (zh) | 一种内存管理的方法、系统、设备及可读存储介质 | |
JP5708861B2 (ja) | マルチプロセッサシステム、制御方法、および制御プログラム | |
JP7337228B2 (ja) | メモリシステムおよび制御方法 | |
KR101851948B1 (ko) | 데이터 페이지의 버퍼 풀 관리 방법 | |
JP2003248620A (ja) | 動的メモリ管理方法及び動的メモリ管理情報処理装置 | |
CN117667764A (zh) | 内存管理方法、装置、电子设备及存储介质 | |
US20140281342A1 (en) | Migrating and retrieving queued data in byte-addressable storage | |
JP2636484B2 (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: 20130924 |
|
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: 20140121 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20140219 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5485459 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |