JP2007523412A - メモリ割当て - Google Patents
メモリ割当て Download PDFInfo
- Publication number
- JP2007523412A JP2007523412A JP2006552570A JP2006552570A JP2007523412A JP 2007523412 A JP2007523412 A JP 2007523412A JP 2006552570 A JP2006552570 A JP 2006552570A JP 2006552570 A JP2006552570 A JP 2006552570A JP 2007523412 A JP2007523412 A JP 2007523412A
- Authority
- JP
- Japan
- Prior art keywords
- segment
- memory
- bitmap
- free
- bit
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
メモリ割当て要求の処理を向上させるために、データメモリを管理する方法が提供される。メモリセグメントが、そのサイズによって異なるレベルに関連づけられる。2の累乗に相当する異なるグラニュルサイズが、各レベル向けに定義される。グラニュルサイズは、各レベルに関連づけられたセグメントサイズの範囲を定義する。レベルのうち、どれが空きセグメントを含むか、および空きセグメントのサイズを示す多段階ビットマップが提供される。ビットマップは、メモリセグメントが解放され、または割り当てられる度にアップデートされる。そうすることによって、タスクおよび割込みレベル両方でメモリセグメントの割当ておよび解放を許可し、メモリのフラグメント化を低減させる決定論的「最良適合」手法が提供される。
【選択図】図6
【選択図】図6
Description
本発明は、データメモリのメモリブロックの割当てを求める要求を処理する方法、およびデータメモリを管理する方法に関する。
アプリケーションからの要求があると、空きメモリを割り当てるのに、メモリアロケータが運用システムによって使用される。ページメモリ管理ユニット(PMMU)を使用するハードウェアにおいて、メモリは、固定サイズのメモリページに分けられる。したがって、メモリの簡単な割当て方は、空いている固定サイズのメモリページの割当てである。この手法の欠点の1つは、特に、小さいメモリブロックおよび大きいメモリブロックの割当てを必要とするアプリケーションにおいて、柔軟性がないことである。その結果、メモリが無駄にされる。
概して、メモリ割当ての問題を扱うための様々な手法がある。1つの手法は、「最初適合」と呼ばれる。この手法は速いが、メモリを無駄にする。一例は、要求されたサイズに最も近い、2の累乗値であるサイズのうち上位のものを、メモリセグメントに割り当てるものである。たとえば、2049バイトを求める要求を満たすと、4096バイトを割り当てることになる。したがって、2047バイトが無駄にされる。この結果、メモリのフラグメント化を引き起こす。数百または数千回のメモリ割当ておよび割当て解除の後、空きセグメントがメモリ中に分散され、十分に大きいセグメントを割り当てることがますます難しくなる。というのは、十分なメモリが残されているのに、空きセグメントが小さく、ばらばらにされているからである。
別の手法は、「最良適合」と呼ばれる。この手法では、メモリの浪費は制限されるが、セグメントの割当ては、要求されたメモリブロックのサイズに最も近いサイズのセグメントを選択するために、すべての空きセグメントが探索されることを必要とする。この手法は、フラグメント化の問題に対処するが、決定論的ではない。
リアルタイムのオペレーティングシステムは、メモリの迅速な割当ておよび低フラグメント化を要する。さらに、メモリの割当ておよび割当て解除は、タスクおよび割込みレベルで実施可能であるべきである。後者のケースでは、応答時間および決定論の両方が重大である。現時点で、従来の「最初適合」および「最良適合」アルゴリズムは、こうした要件を満たしていない。
したがって、メモリ割当て要求を管理する改良型の方法が必要とされる。本発明は、この必要性に対処することを目的とする。
本発明の一態様によると、データメモリのメモリブロックの割当てを求める要求を処理する方法が提供され、データメモリのセグメントが、そのサイズに従って異なるレベルに割り当てられ、この方法は、(a)メモリブロックの割当てを求める要求を受け取るステップと、(b)要求されたメモリブロックと同じサイズの、またはそれより大きいセグメントを含む、前記レベルのうち最低のものを判定するステップと、(c)ステップ(b)で判定されたレベルにおいて、要求されたメモリブロックと同じ、またはそれより大きいサイズの空きセグメントの利用可能性を判定するステップと、(d)ステップ(c)での判定に応じて、空きセグメントを割り当てるステップとを含む。
本発明の別の態様によると、データメモリを管理する方法が提供され、この方法は、データメモリのいくつかのレベルを定義すること、各レベル向けに異なるグラニュル(granule)サイズを定義すること、各レベル向けに、メモリセグメントの異なる複数のサイズの異なる範囲を定義することを含み、各メモリセグメントのサイズは、それぞれのレベルのグラニュルサイズに関係し、メモリブロックの割当てを求める要求が、要求されたメモリブロックと同じサイズの、またはそれより大きいセグメントを含むレベルを判定すること、およびそのレベルにある、要求されたメモリブロックと同じ、またはそれより大きいサイズの空きセグメントを割り当てることによって処理可能である。
本発明の別の態様によると、メモリ割当て要求に応答した割当て用の、異なるサイズのメモリセグメントを備えるデータメモリを管理する方法が提供され、この方法は、サイズおよび状況(空き、割当て済み)に関わらず、連続したメモリセグメントからなる第1の二重連結リストを作成すること、および同じサイズの空きメモリセグメントからなる第2の二重連結リストを作成することを含む。
本発明の別の態様によると、データメモリを管理する方法が提供され、この方法は、データメモリの空きセグメントを、そのサイズに従って異なるレベルに割り当てること、および異なる段階を備えるビットマップを提供することを含み、ある段階のビットが、前記レベルにある空きセグメントの利用可能性を示し、別の段階のビットが、空きセグメントの状態および/またはサイズおよび/または場所を示す。具体的には、ビットマップの最終段階が、セグメントの状態、ならびに空きセグメントのサイズおよび場所を直接示す。
本発明の別の態様によると、データメモリのセグメントの解放および割当てを含む、データメモリを管理する方法が提供され、この方法は、メモリセグメントを解放するとき、解放されるメモリセグメントに隣接するメモリセグメントの状態を判定すること、および解放されるメモリセグメントを、隣接する空きメモリセグメントとマージすることを含む。
本発明の別の態様によると、上記方法のいずれかを実施するように適合された、コンピュータ用のオペレーティングシステムが提供される。
本発明の別の態様によると、コンピュータ上で作動されると、上記方法のいずれかを実施するように適合されたコンピュータプログラムが提供される。
本発明の別の態様によると、コンピュータによって実行されると、上記方法のいずれかを実施する1組の命令を格納している記憶媒体が提供される。
本発明の別の態様によると、上記方法のいずれかを実施するようにプログラミングされたコンピュータシステムが提供される。
本発明の別の態様によると、上記方法のいずれかを実施するように構成されたプロセッサが提供される。
本発明の一実施形態によるアルゴリズムは、タスクおよび割込みレベル両方でメモリセグメントを割り当て、解放し、そうすることによって、メモリのフラグメント化を低減させ、メモリを管理する際の効率を上げるための決定論的「最良適合」手法を可能にする。具体的には、このアルゴリズムは、空きセグメントを求めてメモリを走査するとき、ループを排除し、そうすることによって、決定論および予測可能性をもたらす。このアルゴリズムは、どのプロセッサを使っても実装することができる。また、このアルゴリズムは、ハードウェアを使っても、ソフトウェアを使っても実装することができる。本発明は、無駄にされるメモリを最小限にすることを目的とする。640バイトより大きい要求サイズに対して、無駄にされるメモリの割合は、5%未満である。
本発明の例示的な実施形態を、これ以降で図面を参照して記述する。
本発明の実施形態によると、相異なるレベルから、メモリセグメントを、そのサイズに従って割り当てること、各レベルに対して異なるグラニュルサイズ(2の累乗)を使用すること、およびメモリブロックの割当てを求める要求を扱うとき、速度を増すために、多段階ビットマップを使用することを特徴とするアルゴリズムが提供される。
より具体的には、メモリセグメントが、そのサイズに従って7つのレベルから割り当てられる。許容可能なセグメントサイズの範囲が、各レベルごとに定義される。具体的には、グラニュルサイズが各レベルごとに定義され、255通りの固定セグメントサイズが、グラニュルサイズの倍数として定義される。所与のレベルに対して、サポートされる最も大きいセグメントサイズは、
maxSegSize=2N=256×G
であり、Gは、そのレベルのグラニュルサイズである。
maxSegSize=2N=256×G
であり、Gは、そのレベルのグラニュルサイズである。
各レベルは、そのレベル向けに定義されたサイズの空きメモリセグメントのリストをポイントするポインタを含むテーブルを表す。したがって、各テーブルには、最大255個のポインタがある。
図1は、レベル0向けに定義される、メモリセグメントのサイズを示す。レベル0は、32バイトのグラニュルサイズを有する。レベル0のセグメントのサイズは、64バイトより大きく、8192バイトより小さい範囲である。255通りのセグメントサイズがある。
フラグメント化は、グラニュルサイズに直接関係している。グラニュルサイズが小さい程、フラグメント化は低下する。一方、グラニュルサイズが小さい程、管理可能な最大メモリセグメントサイズが小さくなる。したがって、グラニュルサイズと管理可能な最大メモリセグメントサイズの間には、トレードオフが存在する。したがって、グラニュルサイズは、割り当てられるメモリブロックのサイズに従って選択される。たとえば、要求されたメモリブロックのサイズが4Kバイトを超えない場合、レベル0に対する16バイトのグラニュルにより、1バイト〜4Kバイトの範囲の255通りのセグメントサイズのサポートが可能になる。こうすることにより、メモリ使用効率がかなり上がる。
上述したように、各レベルは、最大255個のポインタからなるテーブルに関連づけられる。ただし、空きメモリセグメントを割り当てるために、あるレベルのポインタからなるテーブルを走査するのではなく、3段階ビットマップが用いられる。そうすることによって、メモリ割当てアルゴリズムの決定論的行動が実現される。この手法も、正しいサイズの空きメモリセグメントの識別をかなり高速化する。
本発明の実施形態において使用するための例示的な3段階ビットマップを、図2に示す。このビットマップは、ルートビットマップ1(第1段階)、第2段階ビットマップ2および第3段階ビットマップ3を備える。ルートビットマップ1は、その各ビットが、第2段階ビットマップ2の関連づけられた8ビットワードを制御する、8ビットワードである。第2段階ビットマップ2の関連づけられた8ビットワードの1つまたは複数のビットが1にセットされると、対応するルートビットマップのビットも1にセットされる。同様に、第2段階ビットマップ2の各ビットは、第3段階ビットマップ3の32ビットに関連づけられる。第3段階ビットマップ3の32ビットワードの1つまたは複数のビットがセットされると、関連づけられた第2段階ビットマップ2の対応するビットも1にセットされる。したがって、ルートビットマップ1の各ビットは、第3段階ビットマップ3の256ビットを表す。したがって、第3段階ビットマップ3は、それぞれが8つの32ビットワードからなる256ビット列を備える。
第3段階ビットマップ3の各ビットは、ポインタテーブル中のエントリに関連づけられる。3段階ビットマップを使うことによって、空きメモリセグメントを求める、256ビットアレイ(すなわち、あるレベルのポインタからなるテーブル)の走査を、これ以降でさらに詳しく説明するように、ルートビットマップの1ビットのみを調べることによって実施することができる。そうすることによって、走査動作は、かなり単純化され、高速化される。
本実施形態では、ルートビットマップ1および第2段階ビットマップ2は、8ビットワードからなる。ただし、異なるアプリケーション向けの代替実施形態では、ルートビットマップおよび第2段階ビットマップは、ルートビットマップの各ビットが第3段階ビットマップの1024ビットを表す、32ビットワードからなるものでもよい。
本実施形態のアルゴリズムは、メモリ割当て要求に応答して、最良適合するメモリセグメントを割り当てる。このアルゴリズムを、図3に示す。要求されるメモリブロックのサイズは、図4に示すように、32ビットワード10に含まれる。要求されるメモリブロックサイズは、最低グラニュルサイズ、すなわち本実施形態では、32バイトに最も近い因数に切り上げられる。
7つの32ビットワードのマスクの組11および31個のエントリを含むルックアップテーブル12が、一度の動作で、適切なレベルおよび関連づけられたビットマップ(ルート、第2および第3段階ビットマップ)への対応する索引を判定するのに使われる。マスク11は、予め定められ、それぞれ、レベルの1つに関連づけられる。
ルックアップテーブル12の内容は、初期化の際に計算される。上述したように、要求されたメモリブロックサイズを、最も小さいグラニュルサイズに従って丸めた後、32ビットワード10の最も高位のセットビットは、最上位ビットから始まると判定される。最も高位のセットビットは、要求されたメモリブロックのサイズに対応するレベルを含む、ルックアップテーブル12中のエントリへの索引を表す。このビットは、そのレベルに関連づけられた、マスク11の1つにも索引づけを行う。
このように判定されたレベルは、ルートビットマップ1の関連づけられたビットに索引づけを行う。このビットが1にセットされると、第1および第2段階ビットマップ2、3への索引が計算される。第1および第2段階ビットマップ2、3への索引は、32ビットワード10の内容と、ルックアップテーブル12によって索引づけされたマスクとを論理的に結合することによって計算される。この論理結合は、AND/シフト演算である。
第3段階ビットマップ3の索引づけられたビットが1にセットされている場合、必要とされるサイズの空きメモリセグメントが見つかっている。0にセットされている場合、より大きい空きセグメントを見つけ、割り当てなければならない。より大きいセグメントの探索は、図5に示すように、以下のステップを含む。
・第3段階ビットマップ3の現在の32ビットワード中で、次のセットビットを見つける。
・現在の第3段階32ビットワード中で他のどのビットもセットされていない場合、第2段階ビットマップ2の現在の8ビットワード中で、次のセットビットを見つける。
・現在の第2段階8ビットワード中で他のビットがセットされていない場合、ルートビットマップ1の中で、次のセットビットを見つける。
・第3段階ビットマップ3の現在の32ビットワード中で、次のセットビットを見つける。
・現在の第3段階32ビットワード中で他のどのビットもセットされていない場合、第2段階ビットマップ2の現在の8ビットワード中で、次のセットビットを見つける。
・現在の第2段階8ビットワード中で他のビットがセットされていない場合、ルートビットマップ1の中で、次のセットビットを見つける。
ルートビットマップ1の中で他のどのビットもセットされていない場合、メモリ割当て要求を満たすような空きメモリセグメントはなく、ヌルポインタが返される。
[第1の実施例]
第1の実施例では、全体的なメモリは1Gバイトであり、そのすべてが空いている。400バイトの割当てを求める要求が受け取られる。
第1の実施例では、全体的なメモリは1Gバイトであり、そのすべてが空いている。400バイトの割当てを求める要求が受け取られる。
第1ステップで、要求されたメモリのサイズが、最も小さいグラニュルサイズ、すなわち32バイト(レベル0のグラニュルサイズ)に従って丸められる。この結果、丸められたサイズは、2進数110100000に対応する416バイトになる。この2進数は、32ビットワード10(図4)に含まれる。
続いて、32ビットワード10の最も高位のセットビットが判定される。このビットは、8番のビットであり、ルックアップテーブル12の第8のエントリへの索引に対応する。ルックアップテーブル12の8つのエントリは、要求されたメモリブロックのサイズに対応するレベル、すなわち本実施例ではレベル0を示す。次のステップで、レベル0に関連づけられたルートビットマップ1のビットの内容が判定される。本実施例において、メモリ全体が空いており、1Gバイトのただ1つの空きセグメントがあり、すなわち、ルートビットマップ1の、最上位を除くすべてのビットが0であるので、ルートビットマップ1のレベル0ビットは0である。この結果により、第2および第3段階ビットマップへの索引を計算するためのAND/シフト演算は実施されない。
レベル0ビットは0なので、ルートビットマップ1の次のセットビットが判定される。上で説明したように、このビットは、ルートビットマップ1の最上位ビット、すなわち、レベル6に関連づけられたものである。
次いで、第2段階ビットマップ2の最も低位のセットビットが判定される。このビットは、7番のビット、すなわち第2段階ビットマップ2の最も高位の有効ビットである。同様に、第2段階ビットマップ2の7番のビットに関連づけられた、第3段階ビットマップ3の32ビットワードの最も低位のセットビットが判定される。このビットは、32ビットワードの最上位ビット、すなわち31番のビットである。このビットは、割り当てられる空きメモリセグメントの物理メモリアドレスを示すポインタに関連づけられる。
本実施例において、空きメモリセグメントのサイズは、1Gバイト−1バイト(テーブル1と比較されたい)であるが、416バイトしか要求されていない。したがって、空きセグメントは2つ、すなわち、448未満のサイズの割当て済みセグメント(図1を参照)と、1Gバイト−(448+1)バイトの新たな空きセグメントとに分割される。ビットマップは、それに従ってアップデートされる。
[第2の実施例]
第2の実施例では、全体的なメモリサイズは、やはり1Gバイトである。レベル0の1つのセグメント(たとえば、1024バイト未満)およびレベル1の1つのセグメント(たとえば、32,768バイト未満)を除くすべてのメモリが割り当てられている。18,030バイトを求める要求が受け取られる。
第2の実施例では、全体的なメモリサイズは、やはり1Gバイトである。レベル0の1つのセグメント(たとえば、1024バイト未満)およびレベル1の1つのセグメント(たとえば、32,768バイト未満)を除くすべてのメモリが割り当てられている。18,030バイトを求める要求が受け取られる。
第1ステップで、要求は、18,048バイトに丸められる。これは、100011010000000という2進数に対応する。したがって、32ビットワード10の最も高位のセットビットは、15番のビットである。
次のステップで、ルックアップテーブル12の15番のエントリが判定される。これは、要求されたメモリのサイズに従った、レベル1への索引である。
続いて、ルートビットマップ1のレベル1ビットの状態が判定される。レベル1には空きメモリセグメントがあるので、このビットは、1にセットされている。
次いで、メモリ要求のサイズに対応する2進数(100011010000000)およびマスク11のレベル1エントリ(7F80に対応する11111111000000)に対して、AND/シフト演算が実施される。演算結果は、10001101である。
演算結果は、最良適合するメモリセグメントサイズに関連づけられた、第2および第3段階ビットマップのビットに索引をつける。この例では、第2段階ビットマップ2の4番のビット、および第2段階ビットマップ2の4番のビットに関連づけられた第3段階ビットマップ3の32ビットワードの13番のビットである。これは、141番のポインタ(=演算結果)に対応し、最良適合するサイズである18,176バイト未満のセグメントの物理メモリアドレスを示す。具体的には、演算結果の3つの上位ビット(100)が、第2段階ビットマップ2の4番のビットに対応し、演算結果の5つの下位ビットが、第3段階ビットマップ3の13番のビットに対応する。
しかし、このサイズの空きメモリセグメントで空いているものはないので、第3段階ビットマップの13番のビットは0である。したがって、上述したように、第3段階ビットマップ3の中のセットビットが見つかるまで、第3および第2段階ビットマップが探索される。本実施例において、このセットビットは、レベル1の第2段階ビットマップ2の最上位ビットに関連づけられた、第3段階ビットマップ3の32ビットワードの最上位ビットであり、32,768未満のサイズの空きメモリセグメント(256番のポインタ)に対応する。
続いて、この空きメモリセグメントは、2つ、すなわち、18,176バイト未満のサイズの割当て済みセグメントと、32,768(18,176+1)バイトのサイズの新たな空きセグメントとに分割される。ビットマップは、それに従ってアップデートされる。
実施例に示したように、最初に、空きメモリは、単一の空きセグメントを含み、1ビットのみが、ルートビットマップ1、第2段階ビットマップ2および第3段階ビットマップ3のそれぞれにおいてセットされる。
第3段階ビットマップ3は、空きメモリセグメントのアドレスを示すポインタからなるテーブルに関連づけられる。このポインタテーブルは、第3段階ビットマップに従ってアップデートされる。
空きメモリセグメントが割り当てられるべきであり、かつそのセグメントが要求されたメモリより大きい場合、そのセグメントは、要求されたサイズに従って、2つのサブセグメントに分割される。空きサブセグメントが割り当てられるべきであるが、大きすぎる場合、サブセグメントは、再度分割することができ、以下同様である。
アルゴリズムの応答時間は、ビットマップ走査動作にのみ依存する。ルートビットマップ3は、一度の動作で、各レベルにおける空きセグメントの利用可能性を判定することを可能にする。
メモリ割当ておよび解放動作は両方とも、空きまたは割当て済みセグメントの数にも、要求されたメモリのサイズにも依存しないので、決定論的であり対称的である。両方の動作とも、最大時間を超えず、完全に予測可能である。
図6を参照すると、本発明の実施形態で用いられるデータ構造が記述されている。図6は、ルートビットマップ1、7つのレベルそれぞれにおける第2および第3段階ビットマップ2、3、ならびに各レベルの第3段階ビットマップ3に関連づけられたポインタテーブル15を示す。
メモリ16は、空きおよび割当て済みメモリセグメントからなる。メモリセグメントは、第1および第2の二重連結リスト17、18を用いてリンクされる。第1の二重連結リスト17は、メモリのすべてのセグメントを、状態(空き、割当て済み)に関わらずリンクする。第2の二重連結リスト18は、同じサイズの空きメモリセグメントをリンクする。
第1の二重連結リスト17において、セグメントの順序は、その物理メモリアドレスに一致する。第2の二重連結リスト18は、同じサイズの空きセグメントをそれぞれがリンクするいくつかのリストを含む。こうしたリストはそれぞれ、LIFO(後入れ先出し)リストとして編成される。
第1の二重連結リスト17は、(上述したように)空きセグメントが分割され、または(後述するように)空きセグメントがマージされる度にアップデートされる。第2の二重連結リストは、メモリセグメントが解放され、または割り当てられる度に、かつ、空きセグメントが分割され、または空きセグメントがマージされる際にもアップデートされる。セグメントが解放されると、新たな空きセグメントが、空きセグメントのサイズに対応するLIFOリストに追加される。空きセグメントは、割り当てられると、そのサイズに対応するLIFOリストから削除される。空きセグメントは、2つのサブセグメントに分割されると、そのLIFOリストから削除され、新たな空きサブセグメントが、そのサイズに従って、別のLIFOリストに追加される。空きセグメントは、マージされると、それぞれのLIFOリストから削除され、マージされた新たな空きセグメントが、そのサイズに従って別のLIFOリストに追加される。いずれのケースでも、ビットマップは、それに従ってアップデートされる。
図6で、第2の二重連結リスト18は、レベル0、1、6にそれぞれ関連づけられた3つのリスト19、20、21を含む。
上述したように、メモリセグメントは、解放されると、より大きい1つの空きセグメントを形成するために、隣接空きセグメントとマージされる。基底にあるアルゴリズムを、図7に示す。セグメントが解放されると、隣接セグメントの状態が判定される。隣接セグメントが両方とも空いている場合、3つすべてのセグメントがマージされる。隣接セグメントの1つだけが空いている場合、2つの空きセグメントがマージされる。隣接セグメントがどちらも空いていない場合、マージ動作は実施されない。その結果、セグメントの1つを解放する際にマージが行われるので、隣には空きセグメントがない。
隣接セグメントの状態は、第1の二重連結リストを使って判定される。第1の二重連結リスト17の構造を、図8に示す。各メモリセグメントは、セグメントの状態(空き、割当て済み)およびセグメントのサイズ、ならびに前のセグメントをポイントするポインタについての情報を含むヘッダ25を有する。具体的には、セグメントの状態は、ポインタの最も低位の有効ビットによって示される。後続セグメントへのポインタは、セグメントサイズからアドレスを判定することができるので、必要ない。
図9は、第1および第2の二重連結リスト17、18を含むデータ構造を示す。具体的には、図9は、第1の二重連結リストがすべてのセグメントをリンクし、第2の二重連結リスト18が、同じサイズの空きセグメントのみをリンクすることを示す。したがって、空きセグメントのヘッダ25は、同じサイズの次および前の空きセグメントへの追加ポインタを含む。所与の任意のサイズのただ1つの空きセグメントがある場合、こうしたポインタは、ループを形成し、そのただ1つのセグメントのヘッダ25をポイントする。
ヘッダ25は、割当て済みセグメント用には8バイト、空きセグメント用には12バイトからなる。後者のケースにおいて、追加されているバイトは、同じサイズの他の空きセグメントについての情報を含み、そうすることによって、上述したように、第2の二重連結リスト18を形成する。
最良適合するメモリセグメントの割当てについての上記説明では、ヘッダ25を形成するのにさらに必要とされるメモリは、簡単にするために無視されていることに留意されたい。
テーブル2は、各レベルごとのグラニュルサイズが、テーブル1に従って選択された場合の、相異なるメモリプールサイズに対する、ビットマップおよび本メモリ割当てアルゴリズムにおいて用いられるポインタテーブルによって消費されるメモリを示す。
さらに、256バイトからなる2つのテーブルが、それぞれ最下位から、および最上位ビットから始まる最初のセットビットを判定するための計算を実施するのに必要とされる。したがって、追加の512バイトが必要とされる。さらに、二重連結リスト17、18は、割当て済みセグメントごとに8バイトを、または空きセグメントごとに12バイトを消費する。
テーブル3に示すように、セグメントを割り当てる3つの命令パスがある。
・SCBM(第3段階ビットマップの現在の32ビットワードを走査する):この場合、第3段階ビットマップ3の現在の32ビットワード中に、空きセグメントが見つかる(図5と比較)。
・SUBM(ビットマップの上位レベルを走査する):この場合、第3段階ビットマップ3の現在の32ビットワード中に空きセグメントはなく、現在の第2段階ビットマップ2が、空きセグメントを見つけるために走査される(図5も参照)。
・SRBM(ルートビットマップを走査する):この場合、第3段階ビットマップ3の現在の32ビットワード中にも、現在の第2段階ビットマップ2の中にも空きセグメントはない。空きセグメントは、ルートビットマップ1を走査することによって見つかる。
・SCBM(第3段階ビットマップの現在の32ビットワードを走査する):この場合、第3段階ビットマップ3の現在の32ビットワード中に、空きセグメントが見つかる(図5と比較)。
・SUBM(ビットマップの上位レベルを走査する):この場合、第3段階ビットマップ3の現在の32ビットワード中に空きセグメントはなく、現在の第2段階ビットマップ2が、空きセグメントを見つけるために走査される(図5も参照)。
・SRBM(ルートビットマップを走査する):この場合、第3段階ビットマップ3の現在の32ビットワード中にも、現在の第2段階ビットマップ2の中にも空きセグメントはない。空きセグメントは、ルートビットマップ1を走査することによって見つかる。
セグメントを割当て解除する(解放する)3つの命令パスもある。
・隣接セグメント両方が割り当てられる間に、セグメントを解放する。マージ動作は実施されない。したがって、最も速いパスである。
・隣接セグメントが1つ空いている間に、セグメントを解放する。マージ動作が1回実施される。
・隣接両方のセグメントが空いている間に、セグメントを解放する。マージ動作が2回実施される。したがって、最も遅いパスである。
・隣接セグメント両方が割り当てられる間に、セグメントを解放する。マージ動作は実施されない。したがって、最も速いパスである。
・隣接セグメントが1つ空いている間に、セグメントを解放する。マージ動作が1回実施される。
・隣接両方のセグメントが空いている間に、セグメントを解放する。マージ動作が2回実施される。したがって、最も遅いパスである。
テーブル3の各応答時間は、1000回の動作の平均値である。最悪のケースは、それぞれの最良の(すなわち、セグメントを割り当てる際に完全一致し、セグメントを解放する際にマージを行わない)ケースより約2〜3倍遅い。しかし、全体的なメモリが1Gバイトを超えない場合、空きまたは割当て済みセグメントの数にも要求されたメモリのサイズにも関わらず、応答時間は、33MHzのi486プロセッサでは17,000nsを、300MHzのPentiumプロセッサでは1,144nsを、300MHzのPowerPCプロセッサでは600nsを超えることはない。したがって、本アルゴリズムは、決定論的であり予測可能である。
本発明は、上述した例示的な実施形態に限定されないことに留意されたい。様々な修正形態を、特許請求の範囲から確定される保護範囲内で行い得ることが当業者には明らかであろう。
Claims (47)
- データメモリのメモリブロックの割当てを求める要求を処理する方法であり、前記データメモリのセグメントが、これらのセグメントのサイズに従って異なるレベルに割り当てられる、前記方法であって、
(a)メモリブロックの割当てを求める要求を受け取るステップと、
(b)前記要求されたメモリブロックと同じサイズの、またはそれより大きいセグメントを含む、前記レベルのうち最低のものを判定するステップと、
(c)ステップ(b)で判定された前記レベルにおいて、前記要求されたメモリブロックと同じ、またはそれより大きいサイズの空きセグメントの利用可能性を判定するステップと、
(d)ステップ(c)での前記判定に応じて、空きセグメントを割り当てるステップと
を含む方法。 - (e)前記要求されたメモリブロックと同じ、またはそれより大きいサイズの空きセグメントが、ステップ(c)で見つからない場合、次に高いレベルに対して、ステップ(c)および(d)を繰り返すステップと、
(f)空きセグメントが割り当てられ、または次のレベルがなくなるまで、ステップ(e)を繰り返すステップと
をさらに含む、請求項1に記載の方法。 - 各レベルが、2の累乗に相当する異なるグラニュルサイズに関連づけられ、あるレベルに割り当てられるメモリセグメントの前記サイズが、前記それぞれのレベルの前記グラニュルサイズに関係している、請求項1または2に記載の方法。
- あるレベルに関連づけられた前記グラニュルサイズが、そのレベルに割り当てられるメモリセグメントの間の前記サイズの差を定義する、請求項3に記載の方法。
- ステップ(a)が、ステップ(b)から(d)を実施する前に、前記要求されたメモリブロックを、最低グラニュルサイズに丸めるステップをさらに含む、請求項4に記載の方法。
- 各レベルが、前記それぞれのレベルに割り当てられるサイズの空きメモリセグメントのメモリアドレスを示すポインタのテーブルに関連づけられる、請求項1〜5のいずれか一項に記載の方法。
- ステップ(d)が、前記割り当てられる空きセグメントへのポインタを返すステップを含む、請求項1〜6のいずれか一項に記載の方法。
- (d)が、空きセグメントが割り当てられない場合はヌルポインタを返すステップを含む、請求項1〜7のいずれか一項に記載の方法。
- ビットマップが、メモリセグメントの状態(空き、割当て済み)を示し、前記ビットマップが、ルートビットマップを備え、前記ルートビットマップの各ビットが、前記レベルの関連づけられた1つが少なくとも1つの空きセグメントを含むかどうかを示し、ステップ(b)が、前記ルートビットマップから、前記最下位レベルが、前記要求されたメモリブロックと同じ、またはそれより大きいサイズのセグメントを含むかどうか判定するステップをさらに含む、請求項1〜8のいずれか一項に記載の方法。
- ステップ(a)が、前記要求されたメモリブロックの前記サイズの示すバイナリデータセットを受け取るステップを含み、前記バイナリデータセットの各ビットが、前記レベルの1つに関連づけられたルックアップテーブルのエントリに関連づけられ、ステップ(b)が、前記バイナリデータセットの最上位セットビットを判定するステップと、最上位セットビットに関連づけられた前記ルックアップテーブルの前記エントリから、前記要求されたメモリブロックと同じ、またはそれより大きいサイズのセグメントを含む前記レベルのうち最低のものを判定するステップとを含む、請求項1〜9のいずれか一項に記載の方法。
- 1組の所定のマスクの各マスクが、前記レベルの1つに関連づけられ、ステップ(e)が、ステップ(b)で判定された前記最下位レベルに関連づけられた前記マスクおよび前記バイナリデータセットに対する論理演算を実施するステップをさらに含み、前記演算の結果が、前記要求されたメモリブロックと同じ、またはそれより大きいサイズのセグメントの状態を示す前記ビットマップのビットへの索引である、請求項9または10に記載の方法。
- 前記ビットマップが、複数の第2および第3段階ビットマップを備え、前記ルートビットマップの各ビットが、前記第2段階ビットマップの関連づけられた1つの、前記ビットの状態を示し、前記第2段階ビットマップの各ビットが、前記第3段階ビットマップの1つの、関連づけられた所定の数のビットの状態を示し、前記第3段階ビットマップの各ビットが、関連づけられたセグメントが空いているかどうかを示し、前記演算結果が、前記第2段階ビットマップの1ビット、および前記第2段階ビットマップの前記1ビットに関連づけられた前記第3段階ビットマップのビットの前記所定の数の1ビットへの索引であり、前記第3段階ビットマップの前記1ビットが、前記要求されたメモリブロックと同じ、またはそれより大きいサイズのセグメントの状態を示す、請求項11に記載の方法。
- ステップ(c)が、空きセグメントが見つからない場合、空きセグメントが見つかるまで、または前記第3段階ビットマップの前記所定の数のビットのより上位のビットがなくなるまで、前記第3段階ビットマップの前記所定の数のビットの次の上位ビットの前記判定を繰り返すステップをさらに含む、請求項12に記載の方法。
- ステップ(c)が、空きセグメントが見つからない場合、空きセグメントが見つかるまで、または前記1つの第2段階ビットマップのより上位のビットがなくなるまで、前記第2段階ビットマップの次の上位セットビットに関連づけられた前記第3段階ビットマップの前記所定の数のビットに対して、前記判定を繰り返すステップをさらに含む、請求項13に記載の方法。
- ステップ(c)が、空きセグメントが見つからない場合、空きセグメントが見つかるまで、または前記ルートビットマップのより上位のビットがなくなるまで、前記ルートビットマップの次の上位セットビットに関連づけられた前記第2段階ビットマップに対して、前記判定を繰り返すステップをさらに含む、請求項14に記載の方法。
- 前記第3段階ビットマップの各ビットが、空きメモリセグメントのメモリアドレスを示すポインタのテーブル中のエントリに関連づけられる、請求項12または15に記載の方法。
- データメモリを管理する方法であって、
前記データメモリのいくつかのレベルを定義するステップと、
各レベル向けに異なるグラニュルサイズを定義するステップと、
各レベル向けに、メモリセグメントの異なる複数のサイズの異なる範囲を定義するステップと
を含み、各メモリセグメントのサイズが、前記それぞれのレベルの前記グラニュルサイズに関係し、メモリブロックの割当てを求める要求が、前記要求されたメモリブロックと同じサイズの、またはそれより大きいセグメントを含むレベルを判定すること、およびそのレベルにある、前記要求されたメモリブロックと同じ、またはそれより大きいサイズの空きセグメントを割り当てることによって処理可能である方法。 - 前記グラニュルサイズが、各レベルでのメモリセグメントの間の前記サイズの差を定義する、請求項17に記載の方法。
- 各セグメントの状態(空き、割当て済み)およびレベルが少なくとも1つの空きセグメントを含むかどうかを示すビットマップを生成するステップをさらに含む、請求項17または18に記載の方法。
- 前記ビットマップが、ルートビットマップを備え、各レベルが、前記セグメントに関連づけられた前記ルートビットマップ、複数の第2および第3段階ビットマップの1ビットに関連づけられ、前記ルートビットマップの各ビットが、前記第2段階ビットマップの関連づけられた1つの、前記ビットの状態を示し、前記第2段階ビットマップの各ビットが、前記第3段階ビットマップの1つの、関連づけられた所定の数のビットの状態を示す、請求項19に記載の方法。
- セグメントが割り当てられるとき、前記ビットマップをアップデートするステップ
をさらに含む、請求項19または20に記載の方法。 - セグメントが解放されるとき、前記ビットマップをアップデートするステップ
をさらに含む、請求項19〜21のいずれか一項に記載の方法。 - 前記それぞれのレベルに関連づけられたサイズの空きメモリセグメントのメモリアドレスを示す、各レベル向けのポインタのテーブルを生成するステップをさらに含む、請求項17〜22のいずれか一項に記載の方法。
- 前記第3段階ビットマップの各ビットが、前記ポインタテーブル中のエントリに関連づけられた、請求項19〜22のいずれか一項に従属する、請求項23に記載の方法。
- ルックアップテーブルを生成するステップ
をさらに含み、前記ルックアップテーブルの各エントリが、前記要求されたメモリブロックの前記サイズを示し、前記レベルの1つを示すバイナリデータセットのビットに関連づけられた、請求項17〜24のいずれか一項に記載の方法。 - 1組のマスクを生成するステップ
をさらに含み、マスクの前記組がそれぞれ、前記レベルの1つに関連づけられ、バイナリデータセットの論理演算が、前記要求されたメモリブロックの前記サイズを示し、前記要求されたメモリブロックと同じサイズの、またはそれより大きいセグメントを含むレベルに関連づけられた前記マスクが、そのレベルでの、前記要求されたメモリブロックと同じ、またはそれより大きいサイズのセグメントへの索引を生じる、請求項17〜25のいずれか一項に記載の方法。 - メモリ割当て要求に応答した割当て用の、異なるサイズのメモリセグメントを備えるデータメモリを管理する方法であって、
サイズおよび状況(空き、割当て済み)に関わらず、連続したメモリセグメントからなる第1の二重連結リストを作成するステップと、
同じサイズの空きメモリセグメントからなる第2の二重連結リストを作成するステップと
を含む方法。 - 前記第1の二重連結リスト中のメモリセグメントが、関連づけられたメモリアドレスの順序で構成される、請求項27に記載の方法。
- メモリセグメントを解放する際、
前記第1の二重連結リストを使って、解放されるべき前記メモリセグメントに隣接するメモリセグメントの状態を判定するステップと、
解放されるべき前記メモリセグメントを、隣接する空きメモリセグメントとマージするステップと、
それに従って、前記第1および第2の二重連結リストをアップデートするステップと
をさらに含む、請求項27または28に記載の方法。 - 第2の各二重連結リストがLIFO(後入れ先出し)リストである、請求項27〜29のいずれか一項に記載の方法。
- 要求されてメモリセグメントが割り当てられる際、前記第2の二重連結リストをアップデートするステップを含む、請求項27〜30のいずれか一項に記載の方法。
- 要求されて、割当て用に判定されたセグメントが、要求されたメモリブロックより大きい場合、
前記要求を満たす程十分に大きい、前記判定されたセグメントの部分を割り当てるステップと、
残っている部分を、新たな空きメモリセグメントとして提供するステップと、
それに従って、前記第1および第2の二重連結リストをアップデートするステップと
をさらに含む、請求項27〜31のいずれか一項に記載の方法。 - 各セグメントが、ヘッダに関連づけられることによって、前記第1の二重連結リストを形成し、各ヘッダが、前記関連づけられたセグメントの前記サイズを示す情報、前記関連づけられたセグメントの状態(空き、割当て済み)を示す情報、および前のセグメントの前記メモリアドレスを示すポインタを含む、請求項27〜32のいずれか一項に記載の方法。
- 所与のサイズの各空きセグメントに関連づけられた前記ヘッダが、同じサイズの前および/または後続空きセグメントの利用可能性に応じて、かつ前記LIFOリスト中での同じサイズの空きセグメントの順序に従って、同じサイズの前および/または後続空きセグメントの前記メモリアドレスを示すポインタをさらに含む、請求項30または33に記載の方法。
- データメモリを管理する方法であって、
前記データメモリの空きセグメントを、そのサイズに従って異なるレベルに割り当てるステップと、
異なる段階を備えるビットマップを提供するステップと
を含み、ある段階の前記ビットが、前記レベルにある空きセグメントの利用可能性を示し、別の段階の前記ビットが、空きセグメントの状態および/またはサイズおよび/または場所を示す方法。 - ある段階の前記ビットが、空きセグメントの前記メモリアドレスを示すポインタに関連づけられる、請求項35に記載の方法。
- 前記ビットマップを、メモリセグメントの割当てまたは解放を反映するようにアップデートするステップ
をさらに含む、請求項35または36に記載の方法。 - 前記データメモリのセグメントの解放および割当てを含む、データメモリを管理する方法であって、
メモリセグメントを解放するとき、解放される前記メモリセグメントに隣接するメモリセグメントの状態を判定するステップと、
解放される前記メモリセグメントを、隣接する空きメモリセグメントとマージするステップと
を含む方法。 - 請求項17〜26、請求項27〜34、請求項35〜37および請求項38のいずれか一項に記載の方法を含む、データメモリを管理する方法。
- 請求項1〜39のいずれか一項に記載の方法を実施するように適合された、コンピュータ用のオペレーティングシステム。
- 前記オペレーティングシステムがリアルタイムのオペレーティングシステムである、請求項40に記載のオペレーティングシステム。
- 請求項1〜39のいずれか一項に記載の方法をタスクレベルで実施するように適合された、請求項40または41に記載のオペレーティングシステム。
- 請求項1〜39のいずれか一項に記載の方法を割込みレベルで実施するように適合された、請求項40〜42のいずれか一項に記載のオペレーティングシステム。
- コンピュータ上で作動されると、請求項1〜39のいずれか一項に記載の方法を実施するように適合されたコンピュータプログラム。
- コンピュータによって実行されると、請求項1〜39のいずれか一項に記載の方法を実施する、1組の命令を格納している記憶媒体。
- 請求項1〜39のいずれか一項に記載の方法を実施するようにプログラミングされたコンピュータシステム。
- 請求項1〜39のいずれか一項に記載の方法を実施するように構成されたプロセッサ。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP04290405A EP1619584A1 (en) | 2004-02-13 | 2004-02-13 | Memory allocation |
PCT/EP2005/001480 WO2005081113A2 (en) | 2004-02-13 | 2005-02-14 | Memory allocation |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007523412A true JP2007523412A (ja) | 2007-08-16 |
Family
ID=34878325
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006552570A Pending JP2007523412A (ja) | 2004-02-13 | 2005-02-14 | メモリ割当て |
Country Status (7)
Country | Link |
---|---|
US (1) | US20070156997A1 (ja) |
EP (1) | EP1619584A1 (ja) |
JP (1) | JP2007523412A (ja) |
KR (1) | KR20070015521A (ja) |
CN (1) | CN1950802A (ja) |
CA (1) | CA2556083A1 (ja) |
WO (1) | WO2005081113A2 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008217134A (ja) * | 2007-02-28 | 2008-09-18 | Univ Waseda | メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム |
JP2010529545A (ja) * | 2007-06-05 | 2010-08-26 | インターナショナル・ビジネス・マシーンズ・コーポレーション | メモリ割り当ての機構 |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7546588B2 (en) * | 2004-09-09 | 2009-06-09 | International Business Machines Corporation | Self-optimizable code with code path selection and efficient memory allocation |
GB2444746A (en) * | 2006-12-15 | 2008-06-18 | Symbian Software Ltd | Allocating memory sectors for a data block by finding a contiguous area which starts with a sector with unused memory at least at much as the overlap |
KR101275698B1 (ko) * | 2008-11-28 | 2013-06-17 | 상하이 신하오 (브레이브칩스) 마이크로 일렉트로닉스 코. 엘티디. | 데이터 처리 방법 및 장치 |
JP5420972B2 (ja) * | 2009-05-25 | 2014-02-19 | 株式会社東芝 | メモリ管理装置 |
US9104517B2 (en) | 2010-01-27 | 2015-08-11 | Code Systems Corporation | System for downloading and executing a virtual application |
US9229748B2 (en) | 2010-01-29 | 2016-01-05 | Code Systems Corporation | Method and system for improving startup performance and interoperability of a virtual application |
US8763009B2 (en) | 2010-04-17 | 2014-06-24 | Code Systems Corporation | Method of hosting a first application in a second application |
US9218135B2 (en) | 2010-06-16 | 2015-12-22 | Microsoft Technology Licensing, Llc | Hierarchical allocation for file system storage device |
US8782106B2 (en) * | 2010-07-02 | 2014-07-15 | Code Systems Corporation | Method and system for managing execution of virtual applications |
US8806158B2 (en) | 2010-09-22 | 2014-08-12 | International Business Machines Corporation | Intelligent computer memory management |
CN102096722B (zh) * | 2011-03-21 | 2013-03-27 | 华为数字技术(成都)有限公司 | 文件存储方法和装置 |
US8671261B2 (en) * | 2011-04-14 | 2014-03-11 | Microsoft Corporation | Lightweight random memory allocation |
US8683169B2 (en) | 2011-05-05 | 2014-03-25 | International Business Machines Corporation | Selecting an auxiliary storage medium for writing data of real storage pages |
US8793444B2 (en) | 2011-05-05 | 2014-07-29 | International Business Machines Corporation | Managing large page memory pools |
US8799611B2 (en) | 2011-05-05 | 2014-08-05 | International Business Machines Corporation | Managing allocation of memory pages |
US8656133B2 (en) * | 2011-05-05 | 2014-02-18 | International Business Machines Corporation | Managing storage extents and the obtaining of storage blocks within the extents |
CN102186216B (zh) * | 2011-05-09 | 2014-03-05 | 北京傲天动联技术股份有限公司 | 在无线网络中提升站点漫游速度的方法 |
CN102253897B (zh) * | 2011-07-26 | 2013-09-11 | 大唐移动通信设备有限公司 | 一种内存池管理方法及装置 |
CN102567522B (zh) * | 2011-12-28 | 2014-07-30 | 北京握奇数据系统有限公司 | 一种智能卡文件系统的管理方法及设备 |
US9009392B2 (en) | 2012-04-25 | 2015-04-14 | International Business Machines Corporation | Leveraging a hybrid infrastructure for dynamic memory allocation and persistent file storage |
US10817202B2 (en) * | 2012-05-29 | 2020-10-27 | International Business Machines Corporation | Application-controlled sub-LUN level data migration |
US10831728B2 (en) * | 2012-05-29 | 2020-11-10 | International Business Machines Corporation | Application-controlled sub-LUN level data migration |
US10831727B2 (en) * | 2012-05-29 | 2020-11-10 | International Business Machines Corporation | Application-controlled sub-LUN level data migration |
FR3004611B1 (fr) * | 2013-04-16 | 2015-05-15 | Morpho | Procede de gestion des ressources memoire d'un dispositif de securite, tel qu'une carte a puce, et dispositif de securite mettant en œuvre ledit procede. |
US9195406B2 (en) * | 2013-06-28 | 2015-11-24 | Micron Technology, Inc. | Operation management in a memory device |
CN103488685B (zh) * | 2013-09-02 | 2017-02-01 | 上海网达软件股份有限公司 | 一种基于分布式存储系统的碎片文件存储方法 |
US9760288B2 (en) * | 2015-02-18 | 2017-09-12 | International Business Machines Corporation | Determining causes of external fragmentation of memory |
US9898197B1 (en) * | 2015-03-26 | 2018-02-20 | EMC IP Holding Company LLC | Lock-free memory management |
CN107636610B (zh) * | 2016-03-31 | 2021-01-26 | 慧与发展有限责任合伙企业 | 用于数据分配的方法和处理装置以及机器可读介质 |
US9965382B2 (en) * | 2016-04-04 | 2018-05-08 | Omni Ai, Inc. | Data composite for efficient memory transfer in a behavioral recognition system |
US10628296B1 (en) | 2016-04-04 | 2020-04-21 | Omni Ai, Inc. | Data composite for efficient memory transfer in a behavorial recognition system |
US10073723B2 (en) * | 2016-06-08 | 2018-09-11 | Oracle International Corporation | Dynamic range-based messaging |
JP2018032256A (ja) * | 2016-08-25 | 2018-03-01 | 東芝メモリ株式会社 | メモリシステムおよびプロセッサシステム |
US10108359B2 (en) * | 2016-10-20 | 2018-10-23 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Method and system for efficient cache buffering in a system having parity arms to enable hardware acceleration |
US10162531B2 (en) | 2017-01-21 | 2018-12-25 | International Business Machines Corporation | Physical allocation unit optimization |
CN110633141A (zh) * | 2019-06-25 | 2019-12-31 | 北京无限光场科技有限公司 | 一种应用程序的内存管理方法、装置、终端设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0392941A (ja) * | 1989-09-06 | 1991-04-18 | Hitachi Ltd | 領域管理方式 |
JPH05108462A (ja) * | 1991-10-21 | 1993-04-30 | Hokuriku Nippon Denki Software Kk | 表形式エデイタにおける動的メモリの中間制御方式 |
US5784699A (en) * | 1996-05-24 | 1998-07-21 | Oracle Corporation | Dynamic memory allocation in a computer using a bit map index |
JP2001236249A (ja) * | 2000-02-24 | 2001-08-31 | Nec Corp | メモリ管理装置およびメモリ管理方法 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3183719B2 (ja) * | 1992-08-26 | 2001-07-09 | 三菱電機株式会社 | アレイ型記録装置 |
US5490274A (en) * | 1993-06-30 | 1996-02-06 | Microsoft Corporation | Modified buddy system for managing disk space |
US5802599A (en) * | 1994-02-08 | 1998-09-01 | International Business Machines Corporation | System and method for allocating storage in a fragmented storage space |
US7146479B2 (en) * | 2001-07-18 | 2006-12-05 | City U Research Limited | Method and apparatus of storage allocation/de-allocation in object-oriented programming environment |
US6182089B1 (en) * | 1997-09-23 | 2001-01-30 | Silicon Graphics, Inc. | Method, system and computer program product for dynamically allocating large memory pages of different sizes |
US6175900B1 (en) * | 1998-02-09 | 2001-01-16 | Microsoft Corporation | Hierarchical bitmap-based memory manager |
US6412053B2 (en) * | 1998-08-26 | 2002-06-25 | Compaq Computer Corporation | System method and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system |
AUPP638698A0 (en) * | 1998-10-06 | 1998-10-29 | Canon Kabushiki Kaisha | Efficient memory allocator utilising a dual free-list structure |
US6324631B1 (en) * | 1999-06-17 | 2001-11-27 | International Business Machines Corporation | Method and system for detecting and coalescing free areas during garbage collection |
US6510505B1 (en) * | 2001-05-09 | 2003-01-21 | International Business Machines Corporation | System and method for allocating storage space using bit-parallel search of bitmap |
KR100474357B1 (ko) * | 2001-12-26 | 2005-03-08 | 한국전자통신연구원 | 다단계 분할을 이용한 기억소자 할당방법 |
US6845427B1 (en) * | 2002-10-25 | 2005-01-18 | Western Digital Technologies, Inc. | Disk drive allocating cache segments by mapping bits of a command size into corresponding segment pools |
-
2004
- 2004-02-13 EP EP04290405A patent/EP1619584A1/en not_active Withdrawn
-
2005
- 2005-02-14 CA CA002556083A patent/CA2556083A1/en not_active Abandoned
- 2005-02-14 WO PCT/EP2005/001480 patent/WO2005081113A2/en active Application Filing
- 2005-02-14 CN CNA2005800111893A patent/CN1950802A/zh active Pending
- 2005-02-14 US US10/589,239 patent/US20070156997A1/en not_active Abandoned
- 2005-02-14 KR KR1020067018792A patent/KR20070015521A/ko not_active Application Discontinuation
- 2005-02-14 JP JP2006552570A patent/JP2007523412A/ja active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0392941A (ja) * | 1989-09-06 | 1991-04-18 | Hitachi Ltd | 領域管理方式 |
JPH05108462A (ja) * | 1991-10-21 | 1993-04-30 | Hokuriku Nippon Denki Software Kk | 表形式エデイタにおける動的メモリの中間制御方式 |
US5784699A (en) * | 1996-05-24 | 1998-07-21 | Oracle Corporation | Dynamic memory allocation in a computer using a bit map index |
JP2001236249A (ja) * | 2000-02-24 | 2001-08-31 | Nec Corp | メモリ管理装置およびメモリ管理方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008217134A (ja) * | 2007-02-28 | 2008-09-18 | Univ Waseda | メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム |
JP2010529545A (ja) * | 2007-06-05 | 2010-08-26 | インターナショナル・ビジネス・マシーンズ・コーポレーション | メモリ割り当ての機構 |
Also Published As
Publication number | Publication date |
---|---|
WO2005081113A3 (en) | 2005-12-08 |
WO2005081113A8 (en) | 2007-03-29 |
EP1619584A1 (en) | 2006-01-25 |
US20070156997A1 (en) | 2007-07-05 |
CA2556083A1 (en) | 2005-09-01 |
WO2005081113A2 (en) | 2005-09-01 |
KR20070015521A (ko) | 2007-02-05 |
CN1950802A (zh) | 2007-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2007523412A (ja) | メモリ割当て | |
US12045515B2 (en) | Memory system and control method | |
KR101367450B1 (ko) | 멀티 스레드 어플리케이션을 위한 해시 테이블의 동시 리해싱의 수행 | |
US6757802B2 (en) | Method for memory heap and buddy system management for service aware networks | |
JP5222381B2 (ja) | 使用可能なメモリ資源を管理するための構成および方法 | |
US8069330B2 (en) | Memory management system for reducing memory fragmentation | |
JP2858795B2 (ja) | 実記憶割り当て方法 | |
US20080148002A1 (en) | Method and Apparatus for Allocating A Dynamic Data Structure | |
JPH02300949A (ja) | メモリ制御方法 | |
US20060101086A1 (en) | Data sorting method and system | |
US10824555B2 (en) | Method and system for flash-aware heap memory management wherein responsive to a page fault, mapping a physical page (of a logical segment) that was previously reserved in response to another page fault for another page in the first logical segment | |
US11347698B2 (en) | Garbage collection for hash-based data structures | |
WO2024099448A1 (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
US6976021B2 (en) | Method, system, and computer program product for managing a re-usable resource with linked list groups | |
CN114327917A (zh) | 内存管理方法、计算设备及可读存储介质 | |
US7991976B2 (en) | Permanent pool memory management method and system | |
US6629114B2 (en) | Method, system, and computer program product for managing a re-usable resource | |
US12019629B2 (en) | Hash-based data structure | |
JP5377001B2 (ja) | メモリ管理システム、電子機器及びメモリ管理プログラム | |
US7130857B2 (en) | Method for accessing a memory unit in which sequences of notes are stored, corresponding memory unit and corresponding program | |
US20020124164A1 (en) | Method for starting computer system | |
US11288200B2 (en) | Method and system for task-based cache isolation | |
JP4176682B2 (ja) | メモリ管理方式 | |
JPH08249225A (ja) | メモリ管理装置 | |
JPH06103157A (ja) | 記憶空間管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080212 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110208 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20110906 |