JPH06250918A - メモリ管理装置 - Google Patents

メモリ管理装置

Info

Publication number
JPH06250918A
JPH06250918A JP5036647A JP3664793A JPH06250918A JP H06250918 A JPH06250918 A JP H06250918A JP 5036647 A JP5036647 A JP 5036647A JP 3664793 A JP3664793 A JP 3664793A JP H06250918 A JPH06250918 A JP H06250918A
Authority
JP
Japan
Prior art keywords
chunk
size
memory
data
lac
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
Application number
JP5036647A
Other languages
English (en)
Inventor
Toshiya Iwasaki
敏也 岩崎
Kazuhiro Kawagome
和宏 河込
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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP5036647A priority Critical patent/JPH06250918A/ja
Publication of JPH06250918A publication Critical patent/JPH06250918A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

(57)【要約】 【目的】本発明は、データタームの判定の高速化、及び
ヒープ使用効率の向上を可能とする。 【構成】メモリ空間中にヒープ領域を有するコンピュー
タにおいて、メモリ管理装置は、ヒープ領域における使
用領域を時間の経過と共に流動的に管理するものであっ
て、データを格納するための複数のチャンク40−1〜
40−3,…と、メモリブロックに格納するデータのサ
イズに基づいて、同じデータサイズによって連結を行な
っているチャンクを管理するためのLAC20−1〜2
0−3,…と、メモリブロックの先頭アドレスの順序を
管理するためのSORT−LAC30−1〜30−3,
…とを、時間の経過に沿って必要に応じて動的に構成す
ることにより、メモリを効率的に管理することを特徴と
する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、コンピュータメモリの
ヒープ領域における使用領域を自動管理するメモリ管理
装置に関する。
【0002】
【従来の技術】コンピュータメモリの自動管理について
は、従来より色々な技法が開発されている。近年では、
特にC言語等に適した「控え目なガーベージコレクショ
ン(conservative garbage collection )」(Garbage
Collection in an Uncooperative Environment by HANS
-JUERGEN BOEHM and MARL WEISER ,1986)と呼ばれる技
法が広く用いられてきている。
【0003】この「控え目なガーベージコレクション」
の設計方針は次のようになっている。(1)タグ付きポ
インタの使用を避けるため、ガーベージコレクタが管理
しているオブジェクトの先頭に対応するアドレスを決定
できなければならない。この決定を下すテストでは、ア
クセス可能なオブジェクト以外には何もマークしないと
いうことが保証できるものでなければならない。
【0004】(2)アロケータの構成については、標準
的なアロケーションの方法は、大きなメモリチャンク
(chunk )を用いる。通常、チャンクのサイズは4Kの
倍数に取り、4Kバイトごとの境界から始まるようにし
たメモリブロックである。ガーベージコレクションによ
って十分な自由領域を回収できなかった場合は、自動的
にOS(オペレーティングシステム)が付加的なチャン
クを与える。
【0005】(3)アロケータでは、OSによって得ら
れたメモリが連続的でないと仮定している。ガーベージ
コレクタが別のアロケータによって管理されているオブ
ジェクトからの参照を考慮する必要がない限り、そのメ
モリはその他のアロケータと共に同時に存在できる。
【0006】(4)サイズのより小さいオブジェクトは
そのサイズに応じて分割される自由リストに割り当てら
れる。通常の場合は、小さなオブジェクトの割り当て
は、自由リストの中から一番初めに見付かった適当な要
素に割り当てられる(firsr-fit法)。自由リストが見
当たらない時は、ロウレベルのアロケータから4Kのチ
ャンクを取り出して、適当なサイズに分割して一様に分
け与える。同じチャンク内にあるオブジェクトは同じ構
造をしているということではなく、同じチャンク内のオ
ブジェクトはみな同じサイズであるというだけである。
【0007】チャンクと呼ばれるメモリブロックの構造
は、図8に示す(Chunk C)ように、サイズ、ポイン
タ、マークビット、及びデータオブジェクトの領域が確
保されて構成されている。
【0008】(A)サイズは、チャンク内でのオブジェ
クト一つのサイズを示している。サイズの大きいオブジ
ェクトの場合、そのサイズは、チャンク内に収まること
のできるただ一つのオブジェクトのサイズまでとする。
【0009】(B)ポインタは、チャンクのリスト(Li
st of allocated chunk )の中でのチャンクCのエント
リを示す。リスト内のエントリは単にチャンクCに戻る
ポインタである。これを用意することにより、管理して
いるオブジェクトであるかどうかを決定することができ
る。
【0010】(C)マークビットは、チャンクの中のデ
ータオブジェクトに対応するものである。これを用意す
ることにより、参照されるオブジェクトであるかどうか
を決定することができる。このような構成とすることに
より、あるポインタが次に挙げるアドレスに対応してい
るかどうかを決定することができる。
【0011】(a)そのアドレスが、最も低いヒープア
ドレスよりも下であるか、または最も高いヒープアドレ
スよりも上であれば、そのはあるオブジェクトに対応し
ていない。
【0012】(b)そのアドレスがあるオブジェクトに
対応するのであれば、そのアドレスからリストに並んで
いるあるチャンクのアドレスを引いた値がチャンクのサ
イズに収まっている。このようにして、チャンクのアド
レスを得ることができる。
【0013】(c)チャンクのヘッダから予想されるオ
ブジェクトのオフセットは、チャンクのヘッダで与えら
れるオブジェクトサイズの倍数であること、また、その
オブジェクトがそのチャンクを越えて広げられないこと
を確認する必要がある。
【0014】アクセス可能なオブジェクトに対しては、
そのオブジェクトの「先頭」にアクセスしているポイン
タがあるということを仮定している。オブジェクトの
「内部」へのポインタは常に無効として扱われている。
オブジェクトの内部へのポインタが許されるようにアル
ゴリズムを作り変えることも可能である。
【0015】誤って、フリーリストをマークしてしまう
ことを避けるために、付加的なマークビット(フリービ
ット)を用意して、フリーリストにあるオブジェクトが
偶然にマークされないようにする。
【0016】
【発明が解決しようとする課題】このような従来の技法
には次のような問題(P1)〜(P3)があった。
【0017】(P1)データターム(静的データ、実行
スタック、レジスタの内部、ヒープ領域に存在する4バ
イト単位のデータの値)が、ここで管理しているオブジ
ェクトを指しているかどうかを判定する時、チャンクリ
ストのエントリが無秩序に並んでいるので、線形探索が
必要となる。このため、判定するのに要する時間が大き
い。 (P2)また、アロケータに与えられたサイズに一致す
るフリーなメモリブロックを探す場合にも、同様に多く
の時間を要する。
【0018】(P3)チャンクリストの大きさが動的に
変化しないものとして扱っているので、取り扱えるメモ
リ空間の大きさが厳しく制限されるか、または考えられ
る最大限の大きさを割り当てるために、ヒープ領域の使
用効率が低下する。
【0019】本発明は前記のような点を考慮してなされ
たもので、データタームの判定の高速化、及びヒープ使
用効率の向上が可能なメモリ管理装置を提供することを
目的とする。
【0020】
【課題を解決するための手段】本発明は、メモリ空間中
にヒープ領域を有するコンピュータにおいて、前記ヒー
プ領域における使用領域を時間の経過と共に流動的に管
理するものであって、データを格納するための複数のメ
モリブロックと、前記メモリブロックに格納するデータ
のサイズに基づいて、同じデータサイズによって連結を
行なっているチャンクを管理するための第1のリスト
と、前記メモリブロックの先頭アドレスの順序を管理す
るための第2のリストと、を時間の経過に沿って必要に
応じて動的に構成することにより、メモリを効率的に管
理することを特徴とする。
【0021】
【作用】前述した問題(P1)〜(P3)に対しては、
次のような(T1)〜(T3)によって問題の解決を図
っている。
【0022】(T1)効率良くデータタームの判定を行
なうために、次のように2種類のチャンクリストを設け
る。第1のチャンクリスト(LAC)では、チャンクの
先頭アドレスを構成された順に並べ、チャンクの中に含
まれるデータオブジェクトのサイズが等しいもの同士に
リンクを張る(テーブルサイズと関連)。第2のチャン
クリスト(SORT−LAC)では、チャンクの先頭ア
ドレスをアドレスの若い順に並べる。(そのデータター
ムを含むチャンクの先頭アドレスを探す場合には、この
リストのエントリを、binary search で探す)。 (T2)データのサイズからフリーメモリブロックを見
付けるために、サイズテーブルを設ける。 (T3)ヒープ領域の空間を効率良く使用するため、複
数組のチャンクリストを使用する。チャンクリストの組
は、必要に応じてヒープ上に動的に確保する。
【0023】
【実施例】以下、図面を参照して本発明の一実施例を説
明する。図1は本実施例に係わるコンピュータシステム
の概略構成を示すブロック図である。図1に示すよう
に、コンピュータシステムは、ユーザ処理部1、メモリ
管理装置2、制御部4、メモリ6、及びレジスタ群8を
含んでいる。ユーザ処理部1は、ユーザプログラムとプ
ロセッサユニットにより実現される。また、制御部4
は、OS(オペレーティングシステム)とプロセッサユ
ニットにより実現される。メモリ6には、ヒープ領域、
スタックの他、各種データを格納するための領域が確保
される。
【0024】図2には、メモリ管理装置2によってメモ
リ6中のヒープ領域管理のために扱われるサイズテーブ
ル(size table)10、第1のチャンクリスト(LA
C)20−1〜20−3,…、第2のチャンクリスト
(SORT−LAC)30−1〜30−3,…、及びチ
ャンク(chunk )40−1〜40−3,…を示してい
る。
【0025】サイズテーブル10は、1つ設けられ、管
理されているデータオブジェクトのサイズと、LAC2
0−1〜20−3,…のエントリへのポインタを一つの
組としたものをエントリとして構成される。
【0026】従来のように、アロケータを通して受け入
れられるオブジェクトサイズの全てに対応して、それぞ
れのチャンクを構成していたのではチャンクを有効に活
用できない。メモリ管理装置2は、受け入れられるオブ
ジェクトサイズの種類を分類し、サイズの種類に対応し
て設けられたテーブルを用いて、サイズが同一のもの同
士でリンクさせる。実際のリンクは、後述するLACの
エントリ間で行なう。これは、オブジェクトのサイズが
与えられた時、そのサイズから空き領域のあるチャンク
を探し当てるのを高速に行なうためである。
【0027】LAC20−1〜20−3,…は、チャン
ク40−1〜40−3,…へのポインタと、LAC20
−1〜20−3,…へのポインタを一つの組としたもの
をエントリとして構成される。また各LAC20−1〜
20−3,…の最後の所には、次のLACへのポインタ
を加えて構成される。SORT−LAC30−1〜30
−3,…は、チャンク40−1〜40−3,…へのポイ
ンタをエントリとして構成される。
【0028】2種類のチャンクリスト(LAC20−1
〜20−3,…、SORT−LAC30−1〜30−
3,…)は、メモリ管理装置2によって、必要に応じて
動的にヒープ領域に構成される。本願発明では、ヒープ
領域を初めからチャンクリストで埋めてしまうようにし
て各リストのサイズを決めるのではなく、初めはヒープ
領域内のある一定量のみをチャンクが占めるようにサイ
ズを定めておく。さらに、そのサイズ以上のチャンクが
必要となった場合に、また改めてLACとSORT−L
ACを構成し直す。このようにすることにより、必要以
上にヒープ領域を占領しないでおくことができる。
【0029】チャンク40−1〜40−3,…は、デー
タオブジェクトを管理するために必要な情報をチャンク
内の適当な部分に置き、それ以外の部分にデータオブジ
ェクトを格納するように構成される。
【0030】図3にはチャンク40−1〜40−3,…
の構造の一例を示している。チャンク(図3ではchunk
Cとする)の構成は、大きく分けてチャンクヘッダ4
0、マークビット49、フリービット50、及びデータ
オブジェクト51の領域となっている。
【0031】チャンクヘッダ40には、データオブジェ
クトのサイズ(size41)、チャンク中に詰めることが
できるデータオブジェクトの個数(#DO242)、L
ACのエントリへのポインタ(ptr to LAC43)、
データオブジェクトが始まる位置へのポインタ(ptr to
st obj 44)、マークビットが始まる位置へのポイン
タ(head to st MB45)、フリービットが始まる位
置へのポインタ(headto st FB46)、フリーオブ
ジェクトのリンクリストの初めのオブジェクトへのポイ
ンタ(head to free list 47)、及びフリーオブジェ
クトの個数(free bit counter48)が格納される。こ
のようにチャンクヘッダ40を構造体にして、そこに必
要とされる情報をチャンクを構成する時に既に詰め込ん
でしまう。
【0032】図4にはサイズテーブル10、LAC20
−1、SORT−LAC30−1、及びチャンク40−
1の関係の一例を示している。まず、サイズがsize3の
データオブジェクトを格納しようとした場合、サイズテ
ーブル10のエントリの中からエントリの第1成分のサ
イズがsize3のエントリを探す。そのエントリを探し出
すと、そのエントリの第2成分より所定のLAC20−
1のエントリにたどりつく。
【0033】すなわち、メモリ管理装置2は、LAC2
0−1の第1成分よりサイズがsize3のデータオブジェ
クトを格納する場所を有するチャンク40−1を探し当
て、サイズがsize3のデータオブジェクトを格納するよ
うに構成されている。
【0034】また、与えられたポインタがメモリ管理装
置2によって管理されるデータオブジェクトを指してい
る場合、SORT−LAC30−1のエントリを検索す
ることにより、該当するデータオブジェクトを探し当て
る。SORT−LAC30−1のエントリは、チャンク
40−1のポインタである。これらのポインタとなるエ
ントリは、構成された順番ではなく、ポインタアドレス
の若い順に上から下へ並べられている。
【0035】図5にはサイズテーブル10のそれぞれの
エントリと、LAC20−1,20−2のエントリとの
関係の一例を示している。サイズテーブル10のsize3
に対応する第2成分からLAC20−2のエントリにた
どりつく。このエントリの第2成分のポインタptr a4
は、ptr a3を含むLAC20−2のエントリを指してい
る。さらにポインタptr a3は、prt a2を含むLAC20
−1のエントリを指しており、ポインタprt a2はprt a1
を含むLAC20−1のエントリを指している。このよ
うなリンク構造における最後のポインタ(ここではprt
a1)は、零となるように構成されている。
【0036】サイズテーブル10のエントリと、このよ
うなリンク構造の関係は、サイズテーブル10のエント
リ内のただ1つのエントリのサイズ数とリンクを張られ
たLACのエントリから指し示されているチャンクの内
部に格納されているデータオブジェクトのサイズは一致
するように構成されている。
【0037】次に、本実施例の動作について、図6に示
すフローチャートを参照しながら説明する。まず、メモ
リ管理装置2は、ユーザ処理部1からのメモリ6におけ
る、例えばsize=λバイトの領域の使用要求を入力する
(ステップS1)。メモリ管理装置2は、サイズテーブ
ル10、LAC、SORT−LAC、及びチャンクが、
メモリ6のヒープ領域内に既に作成されているかを調べ
る(ステップS2)。
【0038】この結果、ヒープ領域内にまだ作成されて
いない場合には(ステップS3)、メモリ管理装置2
は、サイズテーブル10、LAC、SORT−LAC、
及びチャンクを新たに構成する。そして、データオブジ
ェクトのサイズがsize=λバイトとなるチャンクをセッ
ティングし、サイズテーブル10のエントリに、セッテ
ィングされたチャンクを指すためのポインタと、size=
λのペアを1組として登録する(ステップS5)。そし
て、データオブジェクトを格納すべき領域の先頭アドレ
スを返す(ステップS12)。
【0039】ステップS3において、サイズテーブル1
0等が既に構成されていると判別された場合には、size
=λのエントリを、サイズテーブル10の第1成分から
探す(ステップS6)。
【0040】この結果、該当するサイズを示すエントリ
がない場合には(ステップS7)、ステップS5に移
り、前述と同様にして、サイズテーブル10のエントリ
に、サイズとポインタとの組を登録する。
【0041】また、ステップS7において、サイズテー
ブル10に該当するサイズが登録されていると判別され
た場合には、オブジェクトサイズがsize=λに対応する
第2成分のポインタをもとに、LACをたどり空き領域
を有するチャンクを探す。この結果、空き領域を有する
チャンクが存在する場合には(ステップS9)、データ
オブジェクトを格納すべき領域の先頭アドレスを返す
(ステップS12)。
【0042】これに対し、空き領域を有するチャンクが
存在しない場合には(ステップS9)、ガーベージコレ
クション(GC)をメモリ6に対して掛けるか否かを判
別する(ステップS10)。
【0043】ガーベージコレクションを掛ける場合には
(ステップS11)、図7に示すフローチャートに従っ
て行なう。ここでは、領域Σにあるデータタームをポイ
ンタであるものとして、管理しているデータオブジェク
トを指しているか否かを調べる。(なお、領域Σとは、
静的データ、実行スタック、レジスタの内容、ヒープ領
域から、サイズテーブル10、LAC、SORT−LA
C、及びチャンクを除いた領域部分を示す)。
【0044】まず、領域Σから1つデータタームを取っ
てくる(ステップA1)。このデータタームとSORT
−LACのエントリを比較して、そのデータタームが指
しているデータオブジェクトを含んでいるチャンクのア
ドレスを探す(ステップA2)。該当するアドレスがな
い場合には(ステップA3)、ステップA1に戻り、他
のデータタームについて同様の処理を行なう。
【0045】ステップA2において該当するチャンクの
アドレスがあった場合には(ステップA3)、そのデー
タタームが、管理をしているデータオブジェクトの先頭
を指しているかを調べる(ステップA4)。先頭を指し
ていない場合には、ステップA1に戻り、他のデータタ
ームについて同様の処理を行なう。
【0046】ステップA4において、データタームがデ
ータオブジェクトの先頭を指していると判別した場合に
は、そのポインタが指しているデータオブジェクトにマ
ークを付ける。すなわち、ポインタが指しているデータ
オブジェクトは、参照されるものであり、今後生き延び
るデータオブジェクトであるためである。
【0047】全ての領域Σにあるデータタームについ
て、前述した処理(ステップA1〜A6)を施す。全て
について終了したら、スィープフェーズを経て(ステッ
プA8)ガーベージコレクションを終了する。ステップ
A10において、ガーベージコレクションを掛けないと
した場合には、ステップS5、S12の処理に移り、処
理を終了する。
【0048】このようにして、ヒープ領域の使用領域を
管理するために、前述したようにLAC及びSORT−
LACを構成するので、データタームがオブジェクトを
指しているか否かの判定を高速に実行することが可能と
なる。また、サイズテーブル10が設けられているの
で、フリーメモリブロックの探索についても、高速に行
なうことができる。さらに、LAC及びSORT−LA
Cは、必要に応じて動的に構成されるので、ヒープ領域
を効率良く使用することができる。
【0049】
【発明の効果】以上のように本発明によれば、データタ
ームの判定の高速化、及びヒープ使用効率の向上が可能
となるものである。
【図面の簡単な説明】
【図1】本実施例の一実施例に係わるコンピュータシス
テムの概略構成を示すブロック図。
【図2】メモリ管理装置2によってメモリ6中のヒープ
領域管理のために扱われるサイズテーブル、LAC、S
ORT−LAC、及びチャンクを示す図。
【図3】チャンクの構造の一例を示す図。
【図4】サイズテーブル、LAC、SORT−LAC、
及びチャンクの関係の一例を示す図。
【図5】サイズテーブル10のそれぞれのエントリと、
LAC20−1,20−2のエントリとの関係の一例を
示す図。
【図6】メモリ管理装置2の動作を説明するためのフロ
ーチャート。
【図7】ガーベージコレクションを掛ける場合の動作を
説明するためのフローチャート。
【図8】従来のチャンクの構造を説明するための図。
【符号の説明】
1…ユーザ処理部、2…メモリ管理装置、4…制御部、
6…メモリ、8…レジスタ群、10…サイズテーブル
(size table)、20−1〜20−3…LAC(第1の
チャンクリスト)、30−1〜30−3…SORT−L
AC(第2のチャンクリスト)、40−1〜40−3…
チャンク(chunk )。

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 メモリ空間中にヒープ領域を有するコン
    ピュータにおいて、 前記ヒープ領域における使用領域を時間の経過と共に流
    動的に管理するものであって、 データを格納するための複数のメモリブロックと、 前記メモリブロックに格納するデータのサイズに基づい
    て、同じデータサイズによって連結を行なっているチャ
    ンクを管理するための第1のリストと、 前記メモリブロックの先頭アドレスの順序を管理するた
    めの第2のリストと、 を時間の経過に沿って必要に応じて動的に構成すること
    により、メモリを効率的に管理することを特徴とするメ
    モリ管理装置。
JP5036647A 1993-02-25 1993-02-25 メモリ管理装置 Pending JPH06250918A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5036647A JPH06250918A (ja) 1993-02-25 1993-02-25 メモリ管理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5036647A JPH06250918A (ja) 1993-02-25 1993-02-25 メモリ管理装置

Publications (1)

Publication Number Publication Date
JPH06250918A true JPH06250918A (ja) 1994-09-09

Family

ID=12475649

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5036647A Pending JPH06250918A (ja) 1993-02-25 1993-02-25 メモリ管理装置

Country Status (1)

Country Link
JP (1) JPH06250918A (ja)

Similar Documents

Publication Publication Date Title
US6826583B1 (en) Local allocation buffers for parallel garbage collection
US7640544B2 (en) Work stealing queues for parallel garbage collection
US6526422B1 (en) Striding-type generation scanning for parallel garbage collection
JP2564483B2 (ja) 接続されたユ−ザのプロセツサとは独立の並列ガ−ベツジコレクシヨン機能を有するコンピユ−タ記憶装置
US6434577B1 (en) Scalable-remembered-set garbage collection
US6424977B1 (en) Train-algorithm-based garbage collector employing reduced oversized-object threshold
US6185581B1 (en) Train-algorithm-based garbage collector employing fixed-size remembered sets
JP4130481B2 (ja) ポインタ依存擬似命令置換機構を含むライトバリアシステム及び方法
US5560003A (en) System and hardware module for incremental real time garbage collection and memory management
US6434576B1 (en) Popular-object handling in a train-algorithm-based garbage collector
US6415302B1 (en) Train-algorithm-based garbage collector employing farthest-forward-car indicator
US5321834A (en) Method and system for reclaiming unreferenced computer memory space
US7092978B2 (en) Space-efficient, depth-first parallel copying collection technique making use of work—stealing on the same structures that maintain the stack of items to be scanned
US6449626B1 (en) Reduced-cost remembered-set processing in a train-algorithm-based garbage collector
US4577274A (en) Demand paging scheme for a multi-ATB shared memory processing system
US7136887B2 (en) Method and mechanism for finding references in a card in time linear in the size of the card in a garbage-collected heap
US4807120A (en) Temporal garbage collector with indirection cells
US7412580B1 (en) Concurrent incremental garbage collector with a card table summarizing modified reference locations
JP2000513850A (ja) ジェネレーション分離システム及びガーベッジコレクションのための方法
JPH10254756A (ja) リファレンスされたオブジェクトを管理するための3状態リファレンスの使用
CN103959257A (zh) 用于持久性指针管理的软件转换后备缓冲器
US6999979B2 (en) Efficient encoding of references into a collection set
US7620943B1 (en) Using class properties to segregate objects in a generation managed by the train algorithm
JPH05274152A (ja) オブジェクト管理方式
US7062518B2 (en) Efficiently supporting the existence of long trains in a generation managed by the train algorithm