JPH10111830A - 動的記憶領域管理装置 - Google Patents

動的記憶領域管理装置

Info

Publication number
JPH10111830A
JPH10111830A JP26692296A JP26692296A JPH10111830A JP H10111830 A JPH10111830 A JP H10111830A JP 26692296 A JP26692296 A JP 26692296A JP 26692296 A JP26692296 A JP 26692296A JP H10111830 A JPH10111830 A JP H10111830A
Authority
JP
Japan
Prior art keywords
area
pointer
unused
management unit
free list
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.)
Withdrawn
Application number
JP26692296A
Other languages
English (en)
Inventor
Akihiko Kato
昭彦 加藤
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP26692296A priority Critical patent/JPH10111830A/ja
Publication of JPH10111830A publication Critical patent/JPH10111830A/ja
Withdrawn legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】本発明は動的記憶管理装置に関し,応用ソフト
ウェアとは独立したガーベジ・コレクタを構成でき,ア
ルゴリズムの単純化と高速な処理を行うことできること
を目的とする。 【解決手段】領域割り当て要求に対しヒープ領域部の中
の未使用領域をリスト形式で保持する自由リスト部を探
索する自由リスト管理部と,自由リスト管理部で要求に
応じられない時駆動され,ヒープ領域部の領域を分割し
て動的領域割り当てを行う未使用領域分割統合管理部
と,未使用領域分割統合管理部により要求に応じられな
いと起動し,未使用領域を自動探索して,使用可能性の
ない領域を回収して自由リストに返すガーベジ・コレク
タ管理部とを備える。ガーベジ・コレクタ管理部により
未使用領域を回収後に,未使用領域分割統合管理部は要
求された領域を探索するよう構成する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は情報処理装置におけ
る動的記憶領域管理装置に関する。記号処理,数式処
理,複雑な型をもつプログラム言語処理系,オブジェク
ト指向言語処理系,自動論証・論証支援システム,自然
言語処理,オペレーションシステム(OS),その他の
多数のソフトウェアでは,動的な記憶領域の割り当て
や,ポインタを多数使用している。
【0002】動的な記憶装置管理にはバディー・システ
ムやガベジ・コレクタ等の技術が知られているが,より
効率の良い動的な記憶領域の割り当てを行うことが望ま
れている。
【0003】
【従来の技術】
(1) バディー法 動的な記憶領域の管理法では,記憶領域割り当てとその
解放が不規則に行われるため,割り当ての源となるヒー
プ領域に細かな領域がたまってしまい,後に大きな領域
割り当て要求が応用プログラムからあった場合に割り当
て可能な総量は十分にあっても要求に答えられなくなる
問題があった。なお,ヒープ領域とは動的記憶割り当て
の対象とする記憶領域を表し,未使用領域と使用領域と
で構成される。ヒープ領域の中の使用領域には,現実に
使用中の領域以外に,応用プログラムにより一旦使用さ
れたが,その後は実際に使用されていない領域が含まれ
ている。また,未使用領域はポインタにより順番に接続
されてリスト形式の自由リストに登録されると自由領域
となる。
【0004】大きな領域の割り当て要求の問題を改善す
る一つの方法としてバディー法が提案され, 次の文献
(1) に発表されている。 文献(1) J.L. Peterson: Buddy System, CACM,Vol.2
0,No.6,pp.421-431,June 1977 バディー法は,大きな領域をある決まった規則でバディ
ー(兄弟,相棒という意味で2つの対を意味する)と呼
ばれる2つの領域に分割し,また分割が必要でなくなっ
た時点で対を構成する2つを統合する方法である。この
方法を使用するバディー記憶管理システムは,応用プロ
グラムから領域割り当て要求が発生すると,ヒープ領域
内の大きな領域を繰り返して分割し,割り当て要求以上
で最小の大きさの領域を応用プログラムに与える。また
応用プログラムから不要になった領域の開放要求があっ
た時は,その開放された領域のバディーが未使用領域と
してヒープ領域内にある限り繰り返してバディーの統合
を行う。このようにして,ヒープ領域内でできる限り大
きな領域を確保する。
【0005】図21は従来のバディーシステムの構成を
示す。図21において,90は不使用領域を管理する自
由リスト管理部,91はバディー管理部である。応用プ
ログラムから領域割り当て要求が発生すると,自由リス
ト管理部90において,自由リストによりその要求に対
応できると割り当て成功を通知するが,自由リストによ
って要求に対応できない場合はバディー管理部91でよ
り大きい未使用領域を分割することで対応するよう試み
る。それでも対応できない時は割り当て不能になる。
【0006】バディー法は,領域の分割・統合規則によ
って複数の種類があり主なものを以下に挙げる。バイナ
リー・バディー・システム:領域の大きさが2のべき乗
の形になる方法である。領域の分割・統合が簡単な番地
計算で行えるため非常に高速である。領域の大きさが2
のべき乗に限られているため,空間的に無駄が多くでき
ることがあるが,プログラムの性質により空間効率を落
とさない場合がある。領域の先頭番地を領域の大きさに
よって協会合わせしておき,大きさが32語で,番地が
xxx…x00000である領域(xは0または1)を
16語からなるバディーに分割しようとすれば,バディ
ーである2つの領域の基板は,xxx…x00000と
xxx…x10000となることが分かる。
【0007】フィナボッチ・バディー・システム,拡張
フィナボッチ・バディー・システム:領域の大きさがフ
ィナボッチ数列の形,すなわち,領域の大きさをLn
n- 1 ,Ln-2 とした時, Ln =Ln-1 +Ln-2 という規則であるものを,フィナボッチ・バディー・シ
ステムという。この規則により,大きさLn-1 の領域
と,Ln-2 の大きさの領域からなるバディーを統合して
大きさLn の領域を作れる。例えば,Ln-1 =1Kバイ
ト,Ln-2 =2KバイトのバディーからLn-1 +Ln-2
=Ln =3Kバイトの領域が作成される。
【0008】さらに,Ln =Ln-1 +Ln-k (但し,k
<n)の形の規則であるものを, 拡張フィナボッチ・バ
ディー・システムと呼ぶ。上記のバディー・システムに
は,応用プログラムから不要になった領域を明示的に開
放することを前提にしている。しかし,この明示的な開
放が不利,または実際上不可能なソフトウェアも多数存
在し,年々その必要性が増えている。
【0009】一方,動的記憶管理において,不要になっ
た領域を,応用プログラムが明示的に開放するのではな
く,自動的に判別・回収する装置をガーベジ・コレクタ
ー装置(以下,GCと略称する場合もある)と呼ばれ
る。これは,多数の動的な記憶領域を必要とするソフト
ウェアの中で明示的な開放が不利,または実際上不可能
なものに使用される。例えば,割り当てられた多数の領
域がポインターで複雑につながれている場合などがその
例である。ところが,このガーベジ・コレクターの問題
点として,通常,応用プログラムと密接に情報交換をし
なければならない。例えば,応用プログラムがどこに領
域を指すポインタを持っているかを常に知らなければな
らない。そのため,GCは通常,それを必要とする応用
プログラムに最初から組み込みの形で作成することにな
る。しかし,ソフトウェア作成と同時にGCを組み込む
困難に加えて,更にもともと動的記憶管理はエラー発見
するのが困難なソフトウェアであるため,全体の作成効
率,信頼性を挙げるために非常な労力が必要であった。
【0010】その問題を解決するため,BOEMらが,
コンサーバティブ・ガーベジ・コレクタ(CGCと略称
される)と呼ばれるGCを提案した。これに関し,次の
文献(2),(3) が存在する。
【0011】文献(2) H-J.Boehm:Garbage Collection i
n an Uncooperative Environment,Software -Practice
and Experience,Vol.18(9),pp.807-920,Sep.1988 文献(3) 小野寺民他: 保守的ごみ集め, 情報処理,Vol.3
5,No.11,PP.1020-1026,Nov.1994 コンサーバティブ・ガーベジ・コレクタ法 このGCGの方法では,GCを応用プログラムと独立
に,且つ相互情報交換を最小限度にして作成できるた
め,上で述べたソフトウェア作成効率や信頼性の問題を
解決するのみならず,GCを仮定していないソフトウェ
アに対して最小限の変更で後からGCを組み込むことを
可能にする。これは従来のGCでは殆ど不可能であっ
た。特にC言語のように広く使用されているがGCを組
み込むことが困難である言語に対して,言語処理系を変
えることなく,ライブラリの形でGCを組み込むことが
できるという性質を持ち,応用プログラムから独立した
GCを作成する場合の有望な方法である。
【0012】GCG方式は,スタック領域やプログラム
のデータ領域,及びヒープ領域自身など,ポインタのあ
る可能性のある部分を走査し,ヒープ領域内の正当な領
域を指しているポインタのビットパターンを持つ語をポ
インタとみなすポインタ推定装置を組み込むことであ
る。そして,そのポインタ(ポインタと見なすものを含
む)を次々と追跡することによって,直接,間接に使用
中の領域すべてを洗い出す。その結果,残りの領域が未
使用領域であることを判別して回収する方式である。
【0013】この方式の重要な点は,例えば数値データ
でたまたま正当なポインタと同じビットパターンが現れ
た場合でも,ポインタとみなすことであり,これにより
安全に動作させることができる。通常,この安全弁によ
る損失は非常に小さいので,CGCによる有利さが損な
われることはない。
【0014】ファースト・フィット法 この方法は,未使用領域を長さに関わりなく一つの自由
リストに番地の順につなげておき,応用プログラムから
の領域割り当て要求が発生した時,自由リストの先頭か
らの自由領域を探索して,要求された大きさ以上である
ような最初に発見された自由領域から必要分だけ切り出
す方法である。ただし,連続した番地の自由領域は一つ
に結合してから自由リストに登録する。
【0015】
【発明が解決しようとする課題】上記コンサーバティブ
・ガーベジ・コレクタ(CGC)は,基本的にポインタ
を書き換えることができないので,複写方式等は使用で
きない(限定的なポインタを書き換えることが可能な方
式も研究されているが,全体的に行うことができな
い)。そのため,データ構造等に工夫が必要である。
【0016】上記のCGCの提案者であるBOEMは,
そのために4Kバイトの固定長領域を割り当てる領域管
理部分とその領域から可変長小領域を割り当てる領域管
理部分からなる二重構造の領域管理装置を提案してい
る。
【0017】しかし,これによりアルゴリズムが複雑に
なる。そのため例えば,BOEMのCGCでは,4Kバ
イト領域内はすべて同じ種類の小領域を置くよう設計さ
れているため,一つしか使用されない数バイト,数十バ
イト程度の小領域の要求に対しても4Kバイト分使用し
てしまうという問題がある。
【0018】また,アルゴリズムの複雑さに関する問題
は,正当なポインタを識別する際に,被参照領域の範囲
をできる限り狭めようとするために,ある番地が正当な
領域の先頭であるかどうかを細かく計算している点であ
る。また,一般に記憶領域管理装置は制御情報が破壊さ
れると破壊的な障害が起こるため,万一障害があった場
合に自己検査部が必要になるという問題があった。
【0019】更に,上記したファースト・フィット法
は,自由リストの探索時間が必要なため,領域割り当て
と回収に時間がかかるという問題があった。本発明は応
用ソフトウェアとは独立したガーベジ・コレクタを構成
でき,アルゴリズムの単純化と高速な処理が可能な動的
記憶管理装置を提供することを目的とする。
【0020】
【課題を解決するための手段】図1は本発明の第1の原
理構成図,図2は簡易型ポインタ推定装置の原理説明
図,図3は強化型ポインタ推定装置の原理説明図,図4
は本発明の第2の原理構成図である。
【0021】図1において,1はリスト形式で登録され
た未使用領域を管理する自由リスト管理部,2は従来の
バディーシステムに対応する未使用領域を予め定められ
た規則に従って分割・統合する未使用領域分割統合管理
部,3はヒープ領域の未使用領域を自動探索・回収する
ガーベジ・コレクタ(GCで表示)管理部である。
【0022】第1の原理構成では,応用ソフトウェア等
からの領域割り当て要求が発生した時に自由リスト管理
部1によりその要求に対応できない場合,未使用領域分
割統合管理部2が起動する。この未使用領域分割統合管
理部2においてその要求に対し割り当てのための分割・
統合の処理を行うが,対応することができないとGC管
理部3が起動し,使用する可能性のない領域を自動的に
探索・回収する。これにより,領域割り当て失敗の可能
性を低くすることができると共に,既存のバディーシス
テム装置では不要になった領域の明示的な開放が必須で
あったのに対し,本発明では開放が自動的に行われるの
で明示は不要になる。但し,明示的開放を禁止するもの
ではない。
【0023】また,この構成では,GC管理部3におけ
るガーベジ・コレクタの実行後,回収された領域は未使
用領域分割統合管理部2による統合を行わず(統合抑制
という),直接自由リストに返す。これにより多量領域
を統合する時間による応用プログラムの一時中断時間の
増加を抑えることができる。応用プログラムから自由リ
ストにない大きさの領域の要求があるとき,既存のバデ
ィー・システムでは大きな未使用領域を分割することで
対応するが,図1の本発明の構成では更に,統合抑制さ
れた小さい未使用領域を統合(局所統合という)するこ
とで要求に応じるよう動作する。
【0024】図2において,5aは簡易型のポインタ推
定装置であり,図1のGC管理部で使用され,応用プロ
グラムのデータ領域を走査してヒープ領域を指している
ポインタ(使用している領域のポインタ)を推定する機
能を備え,これにより記憶領域の中の使用領域を推定
し,更にその結果に基づいて未使用領域の探索や,ヒー
プ領域の検査に利用される。但し,このポインタ推定装
置を使用するには,予め特定のビットパターンを被参照
領域識別パターンとして領域の先頭の部分(制御情報フ
ィールド)に設定しておく。図2の6はポインタ・デー
タまたはポインタ・データの可能性を持つ応用プログラ
ム中の参照データ,7は参照データ6のポインタによっ
て参照される可能性のある領域の先頭を表す被参照デー
タであり,領域の先頭の直前に定められた長さの制御情
報フィールドが設けられ,被参照領域識別パターン7a
が書き込まれている。この被参照データ7の領域が消滅
した場合,例えば活動を停止し,他の別領域の中間部分
として再利用される場合等ではその領域識別パターンは
削除される。
【0025】簡易型のポインタ推定装置5aは,参照デ
ータ6内のビットパターンをポインタとみなした時,そ
の参照先である被参照データ7の直前のある定まった位
置に被参照領域識別パターン7aが存在していることを
検査する。この状態をチェックすることにより簡易型の
ポインタ推定装置5aは参照データ6が領域の先頭を示
すポインタであり且つ被参照データ7がその参照される
領域の先頭であるという2つのことを同時に推定する。
なお,ここでいうポインタという用語には,大きな領域
の先頭でない内部へのポインタを含まない。なお,従来
のコンサーバティブ・GCに組み込まれているポインタ
推定装置は,番地計算や表管理等によって被参照領域で
あることが確定しているものとして,参照データ6のみ
を検査しているが,本発明では両方を同時に検査する。
【0026】図3において,5bは強化型のポインタ推
定装置であり,6,7は上記図2の同じ符号と同様であ
り説明を省略する。この強化型のポインタ推定装置5b
も上記図2と同様の目的に使用され,同様の原理で動作
するが,簡易型のポインタ推定装置5aの誤認識をでき
るだけ防ぐためより強力な検査を行う。すなわち,被参
照領域の直前部分を被参照領域識別パターンと長さ情報
を含む制御情報フィールドであるとみなし,領域の長さ
からその領域の直後の位置を計算し,そこがヒープ領域
の直後の部分であるか,または次の領域の制御情報部と
して被参照領域識別パターンがあるかどうかを検査する
ことにより正当な被参照領域であると推定する。図3の
例では,領域の直後が次の領域の制御情報である場合を
示す。
【0027】次に本発明の第2の原理構成を示す図4に
おいて,8はファーストフィット法により自由リスト管
理部,3は上記図1の3と同じGC管理部である。この
第2の原理では上記従来例の一つとして挙げたファース
トフィット法は,ガーベジ・コレクタ(GC)を仮定し
ない動的記憶管理方式として使用されるが,本発明によ
るポインタ推定装置によりGCとを結合することが可能
となる。上記第1の原理構成に比べて領域割り当てと回
収に時間がかかるが,簡素な構成となり,GCの時間に
あまり影響を与えない。図4の場合も,ファーストフィ
ット法による自由リスト管理部8で領域割り当て要求を
受け取ると自由リストからの割り当てを試みて,失敗す
るとGC管理部3を起動する。
【0028】
【発明の実施の形態】図5は実施例1の構成図である。
この実施例1は上記図1に示す本発明の第1の原理構成
に対応する。
【0029】図5において,1〜3は上記図1の同一符
号に対応し,1は自由リストを管理する自由リスト管理
部,2はバディー管理部(図1の未使用領域分割統合管
理部2に対応),3はGC管理部であり,4はヒープ領
域部である。バディー管理部2の中の20はバディー分
割部,21はバディー統合部,22はバディー局所統合
部である。また,GC管理部3において,30はポイン
タ推定装置,31は自己検査部,32はGC部である。
GC部32の中の320は未使用領域探索部(またはマ
ーク部という),321は未使用領域回収部(または掃
き出し部という),322は領域の各単位領域に対応し
て1ビットが設けられ,使用時にマーク(“1”にす
る)されるマークビット・テーブルである。
【0030】バディー管理部2とGC管理部3を統合す
るために,バディー管理部2のバディー局所統合部2
2,GC管理部3のポインタ推定装置30,自己検査部
31,未使用領域探索部320,未使用領域回収部32
1,及びヒープ領域部4が変更または追加された部分で
ある。
【0031】この実施例では,システムが提供する可能
な領域の大きさが式(1) のようになっているものとす
る。但し,領域の大きさの規則は,ある自然数定数k
(0<k<n)とはじめのk個の領域の大きさが式(2)
と定められていて,式(3) になっているものとする。す
なわち,上記従来の技術で説明した拡張フィナボッチシ
ステムとする。なお,この説明ではkをバディレベルと
呼ぶ。
【0032】L1 <L2 <…<LN (1) L1 <L2 <…<Lk (2) Ln =Ln-k +Ln-1 (k<n) (3) このシステムでは,大きさLn (k<n)の領域は,大
きさLn-k とLn-1 の2つの領域,すなわちバディーに
分割され,また逆操作により統合される。他の種類のバ
ディーシステムでも本発明は適用可能である。また,L
の添え字は,大きさの種類を表す番号であって,これを
サイズ・インデックスと呼び,nは最大のサイズ・イン
デックスである。
【0033】上記図5に示す実施例1を構成する各部に
ついて以下に説明する。 自由リスト 図6は自由リストの構造を示す。この自由リストは,図
5の自由リスト管理部1により管理される。
【0034】図6において,100は自由リスト(使用
していない領域のリスト)の根を表し,数字1,2,3
…で表し,101はサイズ・インデックス(上記のLの
添え字)毎にそれに対応するサイズの自由領域を二重ポ
インタでリンクしている。各領域について制御情報フィ
ールド101に加えて,利用者使用分の先頭2語10
2,103をポインタとして利用するので,領域のサイ
ズは最低3語必要であり,図の例ではサイズ・インデッ
クス1の領域がその最低の3語の場合を示す。先頭2語
の中の最初の語102は,次に接続する領域の制御情報
フィールドのポインタ,次の語103は,元の領域の制
御情報フィールドのポインタである。この構造により,
ポインタの付け換えが可能となる。バディー分割の時の
制御のためには,各サイズ・インデックスnに対するL
nを表す配列を更に用意しておく。
【0035】図7はサイズ・インデックスとサイズ対応
の例(1語=4バイトの例)を示し,A.はフィボナッ
チ数列の例で,B.は拡張フィボナッチ数列の例であ
る。それぞれLのサイズ・インデックスの領域の大きさ
は上記した関係を備えていることが分かる。
【0036】ヒープ領域 図8はヒープ領域の構成を示す。ヒープ領域は,複数の
領域に分割されており,その中で応用プログラムに使用
されていない自由領域は自由リスト管理部で管理されて
いる。各領域の先頭のA,D,M,S,R,Oの部分は
領域制御情報が格納された制御情報フィールドである。
その後の部分は応用プログラムが使用する利用者領域で
ある。
【0037】制御情報は次の(1) 〜(6) で構成される。 (1) 割り当て情報ビットA:この領域が応用プログラム
に現在割り当てられている(=1)か,未使用であるか
(=0)を表すビットである。
【0038】(2) 方向ビットD:対を成す2つのバディ
ーの左側(番地の小さい方)であるか(=0),右側
(番地の大きい方)であるか(=1)であるかを示すビ
ットである。
【0039】(3) メモリ・ビットM:親領域の方向ビッ
ト(当該領域の親のバディーが右側か左側か),または
メモリ・ビットを記憶するビットである。すなわち,当
該領域が或る親領域を分割した時の左バディーだった場
合,親領域の方向ビットの内容を記憶し,右バディーで
あった場合は親領域のメモリ・ビットを記憶する。この
Mは,領域を分割すると親領域の制御情報が左バディー
の制御情報に重ね書き込まれ,消されてしまうため,将
来の統合のために方向情報を記憶するものであり,この
仕組みは後述する図9に示す。
【0040】(4) サイズ・インデックスS:これは領域
の大きさをサイズ・インデックスの形で示す。 (5) 被参照識別パターンR:領域先頭を表す予め決めら
れたビットパターンを設定する。
【0041】(6) その他の制御情報O:上記した以外の
制御情報が必要な時にO(オプション)フィールドを設
定して使用する。有効なものとして,この領域にポイン
タを含む可能性があるかないかを示すビットを設定し
て,応用プログラムに指定させる方法がある。もし,こ
の領域にポインタが存在しないことが予め分かっていれ
ば,ガーベジ・コレクタが起動した時,この領域からの
ポインタ追跡を停止することで実行効率を上げることが
できる。他に統計情報が必要な時にこのフィールドを使
用することができる。
【0042】バディー管理部 図9はバディー管理部の領域分割・統合の機能説明図で
ある。図9において,は親領域(または統合領域),
,は親領域を分割した2つのバディー領域を表し,
は左バディー,は右バディーである。各領域の制御
情報A,D,M,S,R,Oの意味は図8について記述
したとうりである。
【0043】バディー管理部(図5の2)は,バディー
分割部20,バディー統合部21及びバディー局所統合
部22とからなり,バディー分割部20は自由リストの
中から,領域を取り外し,バディーに分割する。分割は
親領域の制御情報から,左右バディー,の制御情
報を求め,左バディーの制御情報は親領域の制御情報位
置に重ね書きし,更に右バディーの先頭位置に右バディ
ーの制御情報を図に示すように書き込めばよい。この分
割は,必要があれば更に繰り返して行うことができる。
分割された領域は,自由リストに返すか,または応用プ
ログラムへ渡す。
【0044】バディー統合部(図5の21)は,自由リ
ストの中から指定された領域のバディーが自由領域にあ
るかどうかを検査する。あれば,それらを自由リストか
ら外し,バディーを統合して大きな領域にする。
【0045】統合方法は,左右バディー(例えば,図9
の,)の制御情報から親の制御情報を求め,左バデ
ィーの制御情報位置に親バディーの制御情報を書き込
み,右バディーの制御情報を消去することで行う。この
時,少なくとも被領域識別パターンを削除する。これを
更に繰り返し,最終統合領域は自由リストへ返す。
【0046】この実施例ではGCはバディー統合を行わ
ずに領域を自由リストに回収するので,そのため更にバ
ディー局所統合部(図5の22)を備えている。このバ
ディー局所統合部は,統合抑制されていた未使用領域を
一部統合することで要求された大きさの領域を構成する
ことを試みる。
【0047】バディー局所統合部は複数の方式がある
が,その例を以下に説明する。 (1) GCが起動した場合,回収にあたってバディー統合
を抑制するようGCへ指示する。
【0048】(2) 応用プログラムからの領域割り当て要
求があって,その大きさに対応する自由リストが空であ
った場合は,バディー分割部に制御を移す前に,要求さ
れた大きさより小さい領域の自由リストを走査し,可能
な限り統合を試み,その結果要求を満たす領域が生成で
きたらそこで成功とする。
【0049】(3) GCが起動したにもかかわらず,要求
された大きさの領域が確保できなかった場合は,(2) と
同様に小さい領域から統合を試みる。局所統合のために
は,局所統合用の自由リストエントリーのための配列を
用意する。これは,局所統合が成功した中間結果の領域
を蓄えておき,まだ局所統合が試みられていない領域と
区別しておくためである。局所統合が終了した時,この
リストに置いてある領域は,当初の目的に使われなかっ
たものの局所統合の副産物として統合された領域であ
り,後に使用できるよう通常の自由領域・リストに移さ
れる。
【0050】他の局所統合の方式として,次の例が考え
られる。 (a) GCが起動される場合,全ての場合に統合抑制を行
うのでなく,適当な大きさ以下の領域が要求された場合
のみ統合抑制を行う。
【0051】(b) 自由リストが空の場合,上記の(2) の
代わりに,バディー分割をまず行い,それが失敗した場
合に局所統合を行う。 (c) 局所統合でなく,可能な限り全てのバディー統合を
行う。
【0052】(d) 局所統合のタイミングを応用プログラ
ムから指示できるようにする。 ポインタ推定装置 ポインタ推定装置(図5の30)は,応用プログラムか
ら何の情報も得ずにポインタをたぐるため等多目的に使
用され,図2,図3にそれぞれ原理構成を示す簡易型と
強化型がある。両方とも同じ目的に使用するので,この
実施例1ではどちらを使用してもよい。
【0053】ポインタ推定装置の機能の説明 参照領域(応用プログラム内)の参照データにより参照
された被参照領域の制御フィールドに被参照領域識別パ
ターンが設定されていると,ポインタ遭遇が起きたと称
する。なお,中に組み込むポインタ推定装置用の被参照
領域識別パターンを決定して,各ヒープ領域の先頭の制
御情報フィールドに設定しておかなければならない。こ
のパターンは通常発生しないであろうパターンを随意に
選ぶことができるが,できるだけ乱数によって生成する
か,典型的な応用プログラムに対してビット・パターン
出現頻度を測定するプログラムを別に用意し,予めデー
タとして出現頻度の少ないパターンを調べることにより
決定する。
【0054】ポインタ遭遇が起こった場合は,以下のA
1,A2の両方の事態が起こったことが,後述するわず
かな誤認識の可能性を除いて推定できる。但し,参照デ
ータ6,被参照データ7は上記図2,図3に示す各デー
タを意味する。
【0055】条件A A1 参照データ6の内容がポインタである。 A2 被参照データ7は正当な被参照領域の先頭であ
る。
【0056】逆にポインタ遭遇に失敗した場合,すなわ
ち参照データ6をポインタと見なした時,その参照先の
直前に被参照領域識別パターンがなかった場合は,以下
の条件B1,B2のどちらか片方または両方が起こった
ことが確実に分かる。
【0057】条件B B1 参照データ6がポインタ・データとして不当であ
った。これには以下の2つの場合が考えられる。
【0058】B11 参照データ6がそもそもポインタ
・データでなかった。 B12 参照データ6はポインタ・データであるがその
値が正当でなかった。
【0059】B2 被参照領域識別パターンが何らかの
異常な事態によって破壊されていた。ただし詳細には,
参照データ6のビットパターンがNULLポインタの形
をしている場合は,何も参照してないが正当なポインタ
とみなす。更にポインタ推定装置は検査において,参照
データ6をポインタと見なした場合,その値がOSによ
ってアクセスが禁止されている番地であると,被参照デ
ータを参照せずにポインタとして不当とする(但し,ヒ
ープ領域内線の番地を指しているようなポインタだけを
扱うので,この場合は自動的に除外される)。また,O
Sや機械のアーキテクチャによってはより多くのチェッ
クを予め行うことができる。例えば,ポインタは必ず4
バイト境界の語に位置していることが決まっているな
ら,これをチェックして不当とする。ポインタ遭遇が起
こっているにも係わらず,参照データ6が正当なポイン
タであるとする推定が誤っている場合があり得る。これ
は以下の条件Cの2つの条件C1,C2が同時に起こっ
た場合である。
【0060】条件C C1 参照データ6はポインタとして不当(ポインタで
ないか,ポインタであるがその値が不当)であるが,あ
たかも正当なポインタであるかのようなビットパターン
が出現している。
【0061】C2 参照データ6をポインタとして見な
した時の参照先,すなわち被参照データ7の直前にたま
たま被参照領域識別パターンと同じビットパターンが表
れている。これは以下の2つの場合のどちらかである。
【0062】C21 被参照データ7は正当な被参照領
域である。すなわち,参照データ6は不当(例えは,単
なる数値データ)であったにも係わらず,ビット・パタ
ーンとして正当な参照先を指している。
【0063】C22 被参照データは正当な被参照領域
の先頭ではないにも係わらず,直前に被参照領域識別パ
ターンと同じビット・パターンがたまたま生じている。
同時に2つの条件C1,C2が起こる可能性は低いの
で,誤認識が起こる頻度は実用上問題ないほどに抑える
ことができる。この誤認識は,以下の方法で無害化され
る。
【0064】無害化1 被参照領域識別パターン・フィ
ールドをできるだけ大きくとる。 無害化2 被参照領域識別パターンが,他の記憶領域で
できるだけ出現しないものを選ぶ。
【0065】無害化3 もし誤認識が起こった場合にも
安全に動作するよう全体設計を行う。 無害化1はあまり大きなパターンを設定すると空間効率
が非常に悪くなるので制限されるが,無害化3を必ず行
うことが必要とされ,実施例1でも後述するように行っ
ている。
【0066】既存のコンサーバティブ・GCに組み込ま
れているポインタ推定装置は,被参照データが領域の先
頭であることを別処理の番地計算や表管理等で確定して
いるが,本発明のポインタ推定装置は同時に両方(番地
計算と表管理)を行うので,誤動作の確立はわずかに高
くなる(条件C1とC22の組み合わせの可能性が生じ
るため)が,時間効率が高く,参照,被参照の両方を同
時に検査するために種々の目的に応用可能である。
【0067】また,実施例1の領域管理装置では,時間
をかければ領域の先頭であるべき番地が全て洗い出せる
ので,後述するGCによる回収率が極端に悪くなる等の
異常状態において利用者からの指示により領域先頭位置
以外に被参照領域識別パターンが現れているかどうかを
自己検査できる(図5の自己検査部31で実行)。これ
により,被参照領域に対する誤認識(上記のC22の条
件による)が起こり得る場所を特定できる。また,ある
べき被参照領域識別パターンが破壊された状態(上記の
B2の場合),すなわち制御情報フィールドが破壊され
る障害も自己検査可能である。
【0068】また,環境によっては特殊な場合に誤認識
が起こりやすいことがあるので,それを除外するように
構成する。例えば,被参照領域識別パターンを書き込む
という記憶管理装置自身のプログラムコード,または定
数領域には,この被参照領域パターンが存在しているの
で,ポインタ推定の際にはその場合を取り除く必要があ
る。但し,実施例1では検査領域の対象がヒープ領域に
限られるので,自動的に除かれている。
【0069】ポインタ推定装置は,種々の状況を検査で
き,以下にその状況を示す。但し,以下で「推定」と呼
ぶのは上記の条件Cによる誤認識の可能性を除いて正し
いという意味を持つ。
【0070】(1) 参照データ,被参照データ共に何の情
報も知られていない場合。 ポインタ遭遇が起こった場合は,上記条件Aの両方が起
こったことが推定される。ポインタ遭遇に失敗した場合
は条件Bの少なくとも一つが起こったことが確定する。
【0071】(2) 正当な領域の被参照領域識別パターン
が破壊されるような異常事態(上記B2)が発生してい
ないと仮定できる場合。 ポインタ遭遇が起こった場合は,条件A1が推定され
る。ポインタ遭遇に失敗した場合は条件B11またはB
12のどちらかが起こったことが分かる。
【0072】(3) 参照データがポインタ・データである
ことが知られている場合。 ポインタ遭遇が起こった場合はA1であることが推定さ
れる。ポインタ遭遇に失敗した場合は,B12またはB
2が起こったことが分かる。もし,被参照領域識別パタ
ーンが破壊されるような異常事態(B2)が起こってい
ないと仮定できると,ポインタの値が不当であった(B
11)と結論できる。
【0073】(4) 参照データがポインタ・データであっ
て,その値も正当なものであることが分かっている場
合。 この場合はポインタ遭遇は起こるべきである。もしポイ
ンタ遭遇に失敗すると,被参照データに異常が発生した
(B2)ことが確実である。
【0074】ポインタ推定装置は以上の性質を持つた
め,多目的に利用可能である。実際,この実施例1で
は,後述するGC部の未使用領域回収部(図5の32
1)において,前回のGC時に制御領域の破壊に関する
検査が行われるので上記(2) の前提を仮定することがで
き,後述するGC部の未使用領域探索部(図5の32
0)において正当なポインタと推定されるものを使って
使用中と推定される領域を全て洗い出す。また,自己検
査部(図5の31)では利用者や応用プログラムからの
指示により上の状況に対応する種々の検査を行って異常
が生じた場合に警告を発生する。
【0075】簡易型のポインタ推定装置 図10は簡易型のポインタ推定装置の処理フローであ
り,上記図2に示す原理構成のポインタ推定装置5aに
対応し,上記に説明した各条件が考慮され,高速処理が
可能となっている。最初に入力として,参照領域(応用
プログラム内の参照データ)の内容をあたかもポインタ
とみなした値(Ptrで表す)が供給されると,図2の
ポインタ推定装置5aにおける参照データ6から参照デ
ータ識別を行う機構である参照領域検証部において,ポ
インタPtrがNULLか識別し(図10のS1),N
ULLの場合は失敗としてポインタ遭遇に成功しないと
いう出力を発生するが,該当しないとPtrの下位2ビ
ットが0か判別する(同S2)。この場合,ポインタが
常に4バイト境界(4バイト単位で区切られる)に設定
されるアーキテクチャーであることを前提とする。該当
しないと失敗となるが,該当すると,Ptrはヒープ領
域内を参照するか判別する(同S3)。
【0076】ヒープ領域内を参照しないと失敗である
が,参照している場合は次に被参照領域検証部(図2の
ポインタ推定装置5aにおける被参照データ識別を行う
機構である被参照領域検証部による動作が開始される。
ここで,Cの値として(Ptr−制御領域のサイズ)と
なる位置のメモリ内容を設定し,PとしてCを制御領域
とみなした場合の被参照領域識別パターン・フィールド
の値を設定する(図10のS4)。すなわち,被参照領
域のPtrの先頭の制御領域の位置に格納されたパター
ンをPに設定する。次にこのPの内容が被参照領域識別
パターン(予め定められたビットパターン)と一致する
か判別し(同S5),一致しないと失敗であるが,一致
するとポインタ遭遇に成功したとして出力する。
【0077】強化型のポインタ推定装置 強化型のポインタ推定装置は,上記図3の5bに対応
し,簡易型と同じ目的で使用するが,上記のC22の条
件により誤認識を防ぐためヒープ領域の構造を使って強
力な検査を行う。
【0078】従って,通常は簡易型のポインタ推定装置
を用い,上記C22による障害の可能性がある場合に強
化型に切替えて使用する。または,ポインタ推定と同時
にC22による障害が起こっているかどうかを検査する
ために使用することもできる。
【0079】強化型のポインタ推定装置は,ポインタ遭
遇の検査において,簡易型の検査に加えて,被参照デー
タの直後の部分を制御フィールドであるとみなし,そこ
から領域の長さ情報を得て,領域の直後の位置を算出す
る。もしその位置がヒープ領域の直後の位置か,または
次の領域の被参照領域識別パターンが存在する場合に初
めて遭遇が起こったと判断する。もし,被参照データの
直前が制御情報として有りえないビットパターンであっ
た場合にはポインタ遭遇は失敗とする。長さ情報は,図
5〜図7に説明したサイズ・インデックスである。ヒー
プ領域の最後の領域に対する場合,分割の手間を避ける
ためにヒープ領域の最後の位置に番兵としてダミーの被
参照領域識別パターンを置くことが望ましい。この場
合,簡易型のポインタ推定装置においてこのダミーのサ
イズ・インデックスを0とすることによりダミーを識別
し,ダミーがポインタ推定の誤認識の原因にならないよ
うにする。
【0080】この検査は,各領域の先頭には被参照領
域識別パターンと長さ情報を含む制御情報があり,領
域は連続して存在する,という2つの条件を前提として
いたため,より特殊な場合のみしか使用できないが,そ
の分強い検査が可能である。条件はバディー・システ
ムでは自動的に成り立つ。
【0081】図11は強化型のポインタ推定装置の処理
フローであり,上記に説明した機能を実現するものであ
る。最初に上記図10の簡易型のポインタ推定装置のS
1〜S3と同様の処理を参照領域検証部において実行す
る。これに続いて,被参照領域検証部において,Cの値
として(Ptr−制御領域のサイズ)となる位置のメモ
リ内容を設定し,PとしてCを制御領域とみなした場合
の被参照領域識別パターン・フィールドの値を設定し,
更にSとして上記Cを制御領域と見做した場合のサイズ
・インデックス内容を設定する(図11のS4)。続い
てPの内容が被参照領域識別パターンと一致するか判別
し(図11のS5),一致しているとSの値が最大のサ
イズ・インデックス以下で且つ1以上かを判別する(同
S6)。該当しない場合は失敗となるが,該当するとN
EXTとしてCの番地にSに対応するサイズを加えた番
地を設定する(同S7)。
【0082】次にNEXTがヒープ領域最後の直後の位
置と一致するか,それより前,または後を判別し(同S
8),一致すると成功の出力を発生する。NEXTの方
が大きい場合は失敗して,同時にC22状態遭遇の警告
を発生する。NEXTの方が小さい場合(ヒープ領域最
後の直後の位置より前の場合),C’としてNEXT番
地の内容を設定し,P’としてC’を制御領域とみなし
た場合の被参照領域識別パターン・フィールドの値を設
定する(同S9)。続いて,P’のデータが被参照領域
識別パターンと一致するか判別し(同S10),一致す
れば成功とし,一致しないと失敗として同時にC22状
態遭遇の警告を発生する。
【0083】ガーベジ・コレクタ(GC)部 ガーベジ・コレクタ(GC)部(図5の32)は,応用
プログラムからの領域割り当て要求が,バディー管理部
(図5の2)によって応じることができなかった場合,
本発明の動的記憶領域管理装置はGC部を起動して,未
使用領域回収を試みる。この実施例のGC部はCGC
(コンサーバティブGC)の方式を用いる。
【0084】GCはマークビット・テーブル322(図
5)を使用し,まず未使用領域探索部320が動作し,
次に未使用領域回収部321が動く。GC(未使用領域
の回収)が終了した時は,マークビット・テーブル32
2をクリアしておく。未使用領域探索部320では通常
簡易型のポインタ推定装置を使用するが,GCに失敗し
た場合には,強化型ポインタ推定装置に切替えてGCの
再起動を試みる。
【0085】図12はマークビット・テーブル(図5の
322)の説明図である。これは,応用プログラムによ
って使用中の領域に印をつけるためのビットテーブルで
あり,ヒープ領域内のマーク単位となる大きさの最小単
位に対し番地計算により対応する1ビットを使用する。
領域の制御領域の語に対応するマークビットのみ意味が
ある。GCが起動されない時はこのテーブルは使用せ
ず,ゼロクリアされている。このマークビット・テーブ
ルは,安全に動作させるため,全ての領域の外に置き,
領域内の制御情報には含めない。
【0086】未使用領域探索部(マーク部) 未使用領域探索部(図5の320)は,応用プログラム
からヒープ領域へ直接,間接に参照している領域を全て
洗い出し,図12に示すマークビット・テーブルの対応
するマークビットを1にセットする部分である。まず,
応用プログラムが領域要求をした時点での実行スタック
内と,応用プログラムのデータ領域を走査し,ポインタ
推定装置によってヒープ領域の正当な領域を指している
ポインタがあったら,その指している領域に対応するマ
ークビットを1にセットする。また,ヒープ領域内のポ
インタにより間接的に参照している領域も同じ様にポイ
ンタ推定装置により全てマークする。
【0087】図13はマークビット・テーブルへのマー
キングの概念図である。上記未使用領域探索部について
説明したように,ヒープ領域40には多数の異なる長さ
の領域41a〜41fが設けられ,実行スタック42ま
たはデータ領域43からヒープ領域のポインタを指示す
ると,ポインタ遭遇のリンクが届いたことに相当し,そ
の場合には該当する領域に対応するマークビット・テー
ブルのビットがマークされる(図13中では「*」の符
号で表す)。図13の例では領域41a,41dはリン
クが届いているのでマークされ,領域41b,41cは
マークされた領域のデータのポインタ遭遇のリンクが届
いており,間接的に指示されているのでマークされる。
41e,41fはポインタ遭遇のリンクが届いていない
ためマークされない。
【0088】この探索は,通常知られている木探索アル
ゴリズムを利用すれば良い。また,計算機によってはポ
インタがレジスタのみに存在しメモリに存在しない場合
があるが,同様の原理で対応することができる。また,
領域制御領域にさらに制御情報があり,領域内にポイン
タが存在しないことが分かれば,それ以上そこを探索し
ないことにより効率を上げることができる。
【0089】この未使用領域探索部の探索が終了した
時,マークビット・テーブルには,使用中の全ての領域
にマークが付くことになる。従って,マークがついてい
ない領域は回収が可能である。この探索において,ポイ
ンタの誤認識があった場合は,次の,どちらかに該
当する。
【0090】実際には未使用であるにも係わらず,使
用中のマークがついてしまう。 たまたま領域の内部に被参照領域識別パターンが現
れ,その位置に対するマークビットがセットされる。
【0091】上記のの場合は,次の処理では無視さ
れ,の場合には回収し損ないの領域ができるのみであ
り,使用中の領域が間違って回収されてしまうという致
命的な間違いにはならない。従って,信頼性のある動作
が行われる。
【0092】未使用領域回収部(掃き出し部) この未使用領域探索部(図5の321)は,ヒープ領域
の領域を全て走査し,使用中のマークがついていない全
ての領域を回収する。ここでは,誤認識の可能性のある
被参照領域識別パターンのみを検査するだけではなく,
領域制御情報であることが確実なものを走査する。その
ために,番地が一番小さい領域から始めて,領域制御情
報のサイズ・インデックスを利用して,次の領域の位置
を次々に割り出しながらヒープ領域の最後まで制御情報
位置をジャンプし続ける。
【0093】マークビットが0(マーク状態ではない)
である領域であって,まだ自由リストに統合されていな
いものが見つかる毎に,その領域を自由領域リストへ登
録する。この実施例1では,GC時にはバディー統合を
行わないので,未使用領域は単に自由リストに直接登録
するが,もしGC時にバディー統合を行う場合には,掃
き出し動作とバディー統合動作による情報の衝突が起こ
らないような設定が必要である。GC時にバディー統合
を行わないのは,統合による時間がかかるため,GCに
よる応用プログラムの実行の一時中断時間が大きくなり
すぎるからである(バッチ的利用法ではこの限りではな
い)。また,バディー統合抑制を行うと,巨大領域割り
当てに失敗する可能性が高くなるが,他方,領域の大き
さに関して少種類の且つ多数使用する応用プログラムで
は分割・統合なしで再利用できる領域が多くなるため統
合抑制を行う方が速度は速くなる。
【0094】図14はガーベジ・コレクタの処理フロー
である。上記に説明した未使用領域探索部(マーク部)
と未使用領域回収部(掃き出し部)の両方の処理が連続
して行われる。
【0095】最初に,マーク部において,メモリロード
された全体プログラムのデータ領域の位置と,実行スタ
ックの現在使用中の範囲を調べる(図14のS1)。な
お,実際にはデータ領域はプログラムがロードされた後
に一度調べればよい。この装置の大域変数に領域制御フ
ィールドの直後を指すポインタがなければ問題ないが,
安全のため大域変数の部分をできるだけデータ領域から
外して扱う。
【0096】次に上記したポインタ推定装置を使い,デ
ータ領域と実行スタックからポインタ遭遇が起こる全て
のヒープ内領域を間接的なポインタ遭遇が起こる領域も
含めて全てマークする(同S2)。次に掃き出し部によ
る処理が開始され,ヒープ領域の先頭領域をBとして設
定し(図14のS3),Bの位置がヒープ領域最後の直
後の位置か判別し(同S4),最後の位置より前であれ
ば,そのBの位置はマークされてなく且つ自由リスト上
にもない(図8の割り当て情報ビットAが1)か判別す
る(同S5)。該当しない場合は,後述するステップS
7へ移行し,該当する場合はBを統合は抑制して自由リ
ストへ登録する(同S6)。続いて,Bのサイズ・イン
デックスから次の領域の位置を割り出し,Bを割り出し
た次の領域とし(同S7),上記ステップS4へ戻って
同様の処理を繰り返し,Bの位置がヒープ領域最後の直
後の位置と一致することが分かると(同S4),マーク
ビット・テーブルをクリアし,LastLCとしてk−
1を設定する(同S8)。このLastLCは,以前の
局所統合が完了した最大のサイズ・インデックスを表
し,kはバディレベルを表す。
【0097】この設定により,ガーベジ・コレクタ終了
後の最初の局所統合はサイズ・インデックスkから始ま
ることになる。 自己検査部 被参照領域識別パターンは,GCのポインタ推定だけで
なく,例えは応用プログラムの暴走等によって,動的記
憶管理装置自身に異常が生じた場合の自己検査にも使用
される。このような種類の異常は,早期に発見しないと
重大な障害になることが多いため,検査することは重要
である。この自己検査部は,デバグ時等に利用者が指定
して起動する。
【0098】自己検査部では,以下のように動作する。 (1) GC部の未使用領域回収部で領域を走査する毎に,
その制御情報一部に被参照領域識別パターンがあるかど
うかを検査する。もし,ある領域の制御情報に被参照領
域識別パターンがなければ,そこの制御情報が破壊され
ているか,またはそれ以前の制御情報内のサイズ・イン
デックスが破壊されているかの何れか,または両方であ
ることが分かる。この場合は,制御情報破壊という重大
なエラーが発生したことになるので警告を発して実行を
中断する。
【0099】(2) もし,GCによる回収率が極端に悪い
場合,応用プログラムの指示または利用者の指示により
ヒープ領域を走査して,領域先頭以外の場所で被参照領
域識別パターンが現れていないかどうか確認する。この
場合も警告を発生する。
【0100】(3) 応用プログラムから,領域の先頭を指
すポインタ位置の情報が得られるなら,それをポインタ
推定装置に与えて実行し,指す先がヒープ領域であるに
も係わらず,被参照領域識別パターンがないことが分か
った場合,応用プログラムに警告を発生する。応用プロ
グラムはこれにより実行を中断することになる。
【0101】図15は実施例1の構成による領域割り当
てと開放(回収)の処理フローである。入力として,応
用プログラムから要求する大きさsバイトが与えられ,
出力として要求に応じられる領域を発生するものとす
る。
【0102】最初に,要求されたsに対し,(s+制御
情報フィールドサイズ)≦blocksize (n) となる最小の
サイズ・インデックスnを求める(図15のS1)。こ
こで,blocksize (n)はサイズ・インデックスnに対
する領域の大きさ(バイト)を表す。次に求められた最
小のサイズ・インデックスnに対する自由領域(自由リ
スト)があるか判別し(同S2),非空(有る)の場合
は自由リストから領域を取り出し(同S3),その領域
を応用プログラムに返し,成功したものとして終了す
る。空(無い)の場合は,nよりサイズの小さなサイズ
・インデックスの領域を統合してサイズ・インデックス
nの領域を構成するために局所統合を試みる(同S
4)。この局所統合の処理内容は後述する(図16)。
【0103】次にこの局所統合に成功したか判別し(図
15のS5),成功するとそれを応用プログラムへ渡し
て終了する。局所統合部に失敗した場合は,バディー分
割によりnより大きなサイズ・インデックスの領域を分
割し,サイズ・インデックスnの領域獲得を試行する
(同S6)。このバディー分割による領域獲得の処理フ
ローは後述する(図17)。続いてバディー分割による
領域獲得に成功したか判別し(図15のS7),成功し
ない場合はGCを起動する(同S8)。GCの処理は図
14を用いて既述した通りである。
【0104】GCの動作により回収された結果は自由リ
ストへ戻され,その後でサイズ・インデックスnに対応
する自由リストが有るか判別する(図15のS9),有
る(非空である)場合,自由リストから領域を取り出し
(同S10),応用プログラムへ渡す(成功)。無い
(空)場合は,GCで回収された自由リストを含めてサ
イズ・インデックスnを目標に局所統合を試みる(同S
11)。この局所統合は上記ステップS4と同様であ
る。この後,統合によりnの領域が有るか判別して(同
S12),有る場合は成功,無い場合は失敗を表す出力
を発生する。
【0105】図16は局所統合の処理フローである。こ
の処理は上記図15のステップS4及びS11で実行さ
れる。この処理フローは,入力として目標サイズ・イン
デックスnが供給され,出力として成功した場合にサイ
ズ・インデックスnの領域を発生する。この処理では,
外部変数として,前回の局所統合を行った最大サイズ・
インデックス(初期値はヒープ全体のサイズ・インデッ
クス)を表すLastLCを使用する。
【0106】開始すると,n(目標サイズ・インデック
ス)がLastLC+1より大きいか,以下かを判別し(図
16のS1),以下の場合は失敗であり,大きい場合
は,Lとしてサイズ・インデックスLastLC+1の自由
領域を設定する(同S2)。次にLの各自由領域をサイ
ズ・インデックスがnとなるまで可能な限り統合を試行
する(同S3)。次に目的の領域が得られたか判別し
(図16のS4),得られた場合は得られた領域を応用
プログラムへ戻し,目的の大きさにならない各統合結果
は副作用として自由リストへ戻す(同S5)。目的の領
域が得られない場合は,LastLC+1を新たなLastLC
としてステップS1に戻り,同様の処理を繰り返す。
【0107】上記図16の処理において,領域の制御フ
ィールドとして,GCで回収された直後で統合抑制され
たままであるか否かを示すビットを,Oフィールド(上
記図8参照)内に設定することによりきめ細かい統合の
処理を行うことができる。
【0108】また,LastLCは,以下のようにしてシス
テム全体で制御する。 (1) 初期値として, ヒープ領域全体のサイズ・インデッ
クスをセットし,(2) GCを起動した直後はk−1にセ
ットする。
【0109】(3) 更に,上記のように領域の制御フィー
ルドに統合抑制を表すビットをOフィールドに設定して
いる場合,統合抑制されたままの領域を分割してLastL
Cより小さな領域にした場合は,その結果のサイズ・イ
ンデックスをLastLCにセットする。
【0110】図17はバディー分割による領域獲得の処
理フローであり,この処理は上記図15のステップS6
において実行され,上記図5のバディー分割部20に対
応する。
【0111】この処理フローは,入力として欲しい領域
の大きさのサイズ・インデックスnが供給され,出力と
してサイズ・インデックスnの領域を発生する。開始す
ると,max(n,k)より大きく自由リストが空でない最小の
サイズ・インデックスをmとする(図17のS1)。次
にサイズ・インデックスmが存在するか判別する(同S
2)。存在しない場合は失敗とし,存在する場合は,サ
イズ・インデックスmの領域Pを自由リストから一つ取
り出す(同S3)。次に領域Pを上記図9に説明した方
法で適宜左バディー,右バディーに分割しサイズ・イン
デックスmの領域を得る(同S4)。こうして得られた
領域を応用プログラムへ渡し,残りの分割結果は自由リ
ストへ戻す(同S5)。
【0112】次に上記図4に示す本発明の第2の原理に
対応する実施例2について説明する。図18は実施例2
の構成図である。図中,8aはファーストフィット式自
由領域管理部,80は自由リスト部,81は領域割当
部,82は領域回収部であり,GC管理部3aとその内
部構成(30〜32)は上記実施例1の同じ符号の各部
と同じ名称であり説明を省略する。4aはヒープ領域部
であり,上記実施例1のヒープ領域部4とデータ構成が
異なる。
【0113】図19に実施例2の領域の構成を示す。領
域(図18の4)の先頭には,制御情報フィールドに各
種の制御情報が設定され,その後に利用者領域が設けら
れている。
【0114】制御情報は次の(1) 〜(4) で構成される。 (1) Aビット:実施例1の領域の制御情報のAと同じ
(図8参照)で,この領域が応用プログラムに現在割り
当てられて使用中(=1)か,未使用であるか(=0)
を表すビットである。
【0115】(2) Sフィールド:領域の長さを適当な単
位で表した値である。簡単のため,ここでは,制御情報
フィールド全体の大きさを1単位とする。バディー・シ
ステムと異なり,領域の大きさは自由なので,サイズ・
インデックスでなく大きさそのものを入れる。
【0116】(3) Rフィールド:実施例1の領域の制御
情報と同じ(図8参照)で,被参照領域識別パターンで
ある。 (4) Oフィールド:他の制御情報が必要な時にここに追
加する。
【0117】図20は実施例2の自由リスト(図18の
自由リスト部80の内部)の構造である。自由リストに
は領域の制御情報(controlで表示)の他に,次
にリンクする領域を示すポインタ(nextで表示)及
び直前の自由領域を指すポインタ(predで表示)を
設定する。上記実施例1の場合と異なり,一つの自由リ
ストに全ての自由領域をリンクするが,番地の順番通り
にリンクすることが必要である。更に,GCのためのマ
ークビット・テーブルを領域の外の適当な場所に,領域
の1単位の大きさ当たり1ビットとして設定する。
【0118】領域割当部 図18のファーストフィット式自由領域管理部8aの領
域割当部81は,応用プログラムからの領域割り当て要
求が供給されると,ファーストフィット法では,自由リ
ストの先頭から,要求された大きさ以上の本体を持つ自
由領域を探索し,最初に見つかった自由領域から必要な
分を切り出す。
【0119】領域回収部 図18のファーストフィット式自由領域管理部8aの領
域回収部82は,応用プログラムから領域が開放された
場合,自由リストの番地の順番により定まる位置へそれ
を回収する。但し,回収の際,前後の自由領域と回収さ
れるべき領域がそれぞれ連続している場合は,可能な限
り一つの領域になるよう結合する。結合する際は,実施
例1のバディー統合部(図5の21)と同様に先頭を除
いて制御情報フィールドはゼロ・クリアする。
【0120】GC管理部 図18のGC管理部3aは,上記実施例1のGC管理部
3と同様にポインタ推定装置を使ってコンサーバティブ
・ガーベジ・コレクタ(CGC)が組み込まれている。
但し,統合抑制はファーストフィット方式では不利益が
大きいので行なわない。ファーストフィットのCGC装
置は応用プログラムから割り当て要求が起こった場合に
以下のように動作する。
【0121】自由リストを探索して要求された大きさ
以上を持つ自由領域を探す。もしあれば,そこから必要
分だけ切り取り,応用プログラムへ与えてアルゴリズム
を終了する。もし見つからなければ,次のへ進む。
【0122】ガーベジ・コレクタを起動する。ガーベ
ジ・コレクタの処理は上記実施例1の内容(図14参
照)と同様である。 ガーベジ・コレクタの処理に続いて,もう一度,自由
リストを探索して要求された大きさ以上を持つ自由領域
を探す。もしあれば,そこから必要分だけ切り取り,応
用プログラムへ与えて処理を終了する。
【0123】ガーベジ・コレクタ(GC部)のマーク部
(未使用領域探索部) 図18のマーク部320は,実行スタック,応用プログ
ラムのデータ部,レジスタ(計算機のアーキテクチャに
依存),を根として走査し,そこからヒープ領域内の領
域先頭を直接・間接に指しているポインタをポインタ推
定装置で推定し,その参照先の領域に対するマークビッ
トを1にする。
【0124】ガーベジ・コレクタ(GC部)の掃き出し
部(未使用領域回収部) 図18の掃き出し部321は,ヒープ領域の先頭から全
ての領域を走査し,上記マーク部における手続きの結
果,マークビットが0のまま,且つ自由リストにない領
域を自由リストへ回収する。各領域の長さ情報を使用す
れば,次の領域の位置が分かるので,全ての領域の走査
は可能である。
【0125】上記の回収が終了すると,ガーベジ・コレ
クタ(GC部)のマークビット・テーブル322をクリ
アする。上記の掃き出し部において,回収されるべき領
域は,番地の小さいものから順に回収されるので,自由
リストの回収位置を効率良く探すことができる。すなわ
ち,ある領域の自由リストにおける回収位置は,直前に
回収された領域の位置から探索するだけでよい。
【0126】次に実施例3について説明する。この実施
例3は統合抑制を行うバディー・システム装置であり,
その構成は図示省略するが,以下に説明する。ガーベジ
・コレクタを結合しない通常のバディー・システムに,
上記実施例1の統合抑制,局所統合部を付加する。実施
例1では,ガーベジ・コレクタが起動することによる一
時停止時間を抑えるための統合抑制を行なったが,もし
応用プログラムが少ない種類の大きさの領域を多量に使
用するものであれば,ガーベジ・コレクタと関係なく統
合抑制を行う意味がある。すなわち,回収した領域と同
じ大きさの領域が将来また割り当て要求される公算が高
ければ,統合分割をしないでおいた方が効率が高くなる
からである。このような応用プログラムは,例えば,C
++言語等の対象指向言語で同じ大きさの記憶を使用す
る対象を多数使用する場合等が挙げられる。C++では
通常対象(クラス)開放は明示的に行うのでガーベジ・
コレクタ無しの動的記憶領域管理でもよい。
【0127】但し,統合抑制をすると,巨大領域割り当
てに失敗する可能性は上がる。すなわち,統合抑制をす
るか否かによる利害得失は,応用プログラムの性格によ
るので,応用プログラムの方からパラメータその他の方
法を使って指定できるようにする。統合抑制を行うバデ
ィー領域管理部は,以下のような基本方式で動けばよ
い。
【0128】(1) 応用プログラムから領域が開放された
時は,統合を行わずに(統合抑制を示すビットNCを使
用する),自由リストに置く。 (2) 応用プログラムから領域割り当て要求があると,通
常のバディー分割により要求を満たすことを試みるが,
それが失敗した場合は局所統合を行なう。
【0129】
【発明の効果】本発明によれば,既存のバディー・シス
テムと言われる動的記憶管理装置ではできなかった,自
動回収が可能となり,さらに既存のコンサーバティブ・
ガーベジ・コレクタより簡素な処理により,且つ自己検
証が可能になるため,動的記憶領域管理の性能を向上さ
せると共に応用分野の広がりを図ることができる。
【図面の簡単な説明】
【図1】本発明の第1の原理構成図である。
【図2】簡易型ポインタ推定装置の原理説明図である。
【図3】強化型ポインタ推定装置の原理説明図である。
【図4】本発明の第2の原理構成図である。
【図5】実施例1の構成図である。
【図6】自由リストの構造を示す図である。
【図7】サイズ・インデックスとサイズ対応の例を示す
図である。
【図8】ヒープ領域の構成を示す図である。
【図9】バディー管理部の領域分割・統合の機能説明図
である。
【図10】簡易型のポインタ推定装置の処理フローを示
す図である。
【図11】強化型のポインタ推定装置の処理フローを示
す図である。
【図12】マークビット・テーブルの説明図である。
【図13】マークビット・テーブルへのマーキングの概
念図である。
【図14】ガーベジ・コレクタの処理フローを示す図で
ある。
【図15】実施例1の構成による領域割り当てと開放
(回収)の処理フローを示す図である。
【図16】局所統合の処理フローを示す図である。
【図17】バディー分割による領域獲得の処理フローを
示す図である。
【図18】実施例2の構成図である。
【図19】実施例2の領域の構成を示す図である。
【図20】実施例2の自由リストの構造を示す図であ
る。
【図21】従来のバディーシステムの構成を示す図であ
る。
【符号の説明】
1 自由リスト管理部 2 未使用領域分割統合管理部 3 ガーベジ・コレクタ(GC)管理部

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】 領域割り当て要求に対しヒープ領域部の
    中の未使用領域をリスト形式で保持する自由リスト部を
    探索する自由リスト管理部と,前記自由リスト管理部で
    前記要求に応じられない時駆動され,ヒープ領域部の領
    域を分割して動的領域割り当てを行う未使用領域分割統
    合管理部と,前記未使用領域分割統合管理部により前記
    要求に応じられないと起動し,未使用領域を自動探索し
    て,使用可能性のない領域を回収して自由リストに返す
    ガーベジ・コレクタ管理部とを備え,前記ガーベジ・コ
    レクタ管理部により未使用領域を回収後に,前記未使用
    領域分割統合管理部は要求された領域を探索することを
    特徴とする動的記憶領域管理装置。
  2. 【請求項2】 請求項1において,前記ガーベジ・コレ
    クタ管理部は,使用可能性のない領域を回収すると統合
    を行わずに自由リストに戻し,前記未使用領域分割統合
    管理部は前記回収された小領域について統合を行って要
    求された領域を探索することを特徴とする動的記憶領域
    管理装置。
  3. 【請求項3】 請求項1または2において,前記ヒープ
    領域内の各領域の先頭に一定長の決められた被参照領域
    識別パターンを含む制御情報フィールドを設け,前記ガ
    ーベジ・コレクタ管理部に対し使用領域を識別するため
    のポインタ推定装置を付加し,前記ポインタ推定装置
    は,ポインタを表す可能性のある参照データを用いて,
    対応する被参照データの領域の先頭部分を前記制御情報
    フィールドと見なして前記被参照領域識別パターンの存
    在を検出することにより前記参照データをポインタとし
    て推定することを特徴とする動的記憶領域管理装置。
  4. 【請求項4】 請求項1または2において,前記ヒープ
    領域内の各領域の先頭に一定長の決められた被参照領域
    識別パターンと領域の長さ情報を含む制御情報フィール
    ドを設け,前記ガーベジ・コレクタ管理部に使用領域を
    識別するためのポインタ推定装置を付加し,前記ポイン
    タ推定装置は,ポインタを表す可能性のある参照データ
    を用いて,対応する被参照データの領域の先頭部分を前
    記制御情報フィールドとみなして前記被参照領域識別パ
    ターンの存在を検出すると共にその中の長さ情報に該当
    する情報を用いて,その領域の直後であるか,後続する
    領域の先頭の制御情報フィールドであるかを検出するこ
    とにより前記参照データをポインタとして推定すること
    を特徴とする動的記憶領域管理装置。
  5. 【請求項5】 請求項3または4において,前記ガーベ
    ジ・コレクタ管理部内に,未使用領域探索部と,一定単
    位の領域に対応して使用か未使用を表すビットを格納す
    るビットマークテーブルと,未使用領域回収部とを備
    え,前記未使用領域探索部は,前記ポインタ推定装置に
    より使用中であることを推定した結果により前記ビット
    マークテーブルの対応位置をマークし,前記未使用領域
    回収部は,前記ビットマークテーブルを参照してマーク
    されていないビットに対応する領域を回収することを特
    徴とする動的記憶領域管理装置。
  6. 【請求項6】 領域割り当て要求に対しヒープ領域部の
    中の未使用領域を自由リストに番地の順に接続され,領
    域割り当て要求に対し要求された大きさ以上の自由領域
    から必要分だけ切り出すファーストフィット方式による
    自由リスト管理部と,前記自由リスト管理部により前記
    要求に応じられないと起動し,未使用領域を自動探索し
    て,使用可能性のない領域を回収して自由リストに返す
    ガーベジ・コレクタ管理部とを備え,前記ガーベジ・コ
    レクタ管理部に対しヒープ領域部から使用中の領域を推
    定するポインタ推定装置を付加し,前記ガーベジ・コレ
    クタ管理部により未使用領域を回収後に,前記自由リス
    ト管理部は要求された領域を探索することを特徴とする
    動的記憶領域管理装置。
  7. 【請求項7】 請求項6において,前記ヒープ領域内の
    各領域の先頭に一定長の決められた被参照領域識別パタ
    ーンを含む制御情報フィールドを設け,前記ポインタ推
    定装置は,ポインタを表す可能性のある参照データを用
    いて,対応する被参照データの領域の先頭部分を前記制
    御情報フィールドと見なして前記被参照領域識別パター
    ンの存在を検出することにより前記参照データをポイン
    タとして推定する使用領域を識別することを特徴とする
    動的記憶領域管理装置。
  8. 【請求項8】 請求項6において,前記ヒープ領域内の
    各領域の先頭に一定長の決められた被参照領域識別パタ
    ーンと領域の長さ情報を含む制御情報フィールドを設
    け,前記ガーベジ・コレクタ管理部に使用領域を識別す
    るためのポインタ推定装置を付加し,前記ポインタ推定
    装置は,ポインタを表す可能性のある参照データを用い
    て,対応する被参照データの領域の先頭部分を前記制御
    情報フィールドとみなして前記被参照領域識別パターン
    の存在を検出すると共にその中の長さ情報に該当する情
    報を用いて,その領域の直後であるか,後続する領域の
    先頭の制御情報フィールドであるかを検出することによ
    り前記参照データをポインタとして推定することを特徴
    とする動的記憶領域管理装置。
JP26692296A 1996-10-08 1996-10-08 動的記憶領域管理装置 Withdrawn JPH10111830A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP26692296A JPH10111830A (ja) 1996-10-08 1996-10-08 動的記憶領域管理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP26692296A JPH10111830A (ja) 1996-10-08 1996-10-08 動的記憶領域管理装置

Publications (1)

Publication Number Publication Date
JPH10111830A true JPH10111830A (ja) 1998-04-28

Family

ID=17437549

Family Applications (1)

Application Number Title Priority Date Filing Date
JP26692296A Withdrawn JPH10111830A (ja) 1996-10-08 1996-10-08 動的記憶領域管理装置

Country Status (1)

Country Link
JP (1) JPH10111830A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5304401A (en) * 1990-11-14 1994-04-19 Nippon Steel Corporation Method of producing organic composite-plated steel sheet
KR20030094658A (ko) * 2002-06-07 2003-12-18 이승룡 자동화된 동적 메모리 관리 기반의 시스템 환경에서어플리케이션이 직접 동적 메모리를 관리하는 방법
US6766336B2 (en) 2000-01-28 2004-07-20 Matsushita Electric Industrial Co., Ltd Garbage collection apparatus and a garbage collection method
CN110908790A (zh) * 2018-09-14 2020-03-24 旺宏电子股份有限公司 存储器存储装置及其操作方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5304401A (en) * 1990-11-14 1994-04-19 Nippon Steel Corporation Method of producing organic composite-plated steel sheet
US6766336B2 (en) 2000-01-28 2004-07-20 Matsushita Electric Industrial Co., Ltd Garbage collection apparatus and a garbage collection method
KR20030094658A (ko) * 2002-06-07 2003-12-18 이승룡 자동화된 동적 메모리 관리 기반의 시스템 환경에서어플리케이션이 직접 동적 메모리를 관리하는 방법
CN110908790A (zh) * 2018-09-14 2020-03-24 旺宏电子股份有限公司 存储器存储装置及其操作方法
CN110908790B (zh) * 2018-09-14 2022-02-22 旺宏电子股份有限公司 存储器存储装置及其操作方法

Similar Documents

Publication Publication Date Title
US7827375B2 (en) Defensive heap memory management
US7181585B2 (en) Defensive heap memory management
EP1811381B1 (en) Software operation modeling and monitoring device and method
JP2557180B2 (ja) ソフトウェア例外条件に対する選択的データ捕獲方法
US8255666B2 (en) Storage system for a storage pool and virtual volumes
US6629108B2 (en) Method for insuring data integrity for mirrored independently accessible memory devices
US7302613B2 (en) System and method for capturing kernel-resident information
AU711846B2 (en) Methods and apparatus for performing heap management and protecting data structure integrity in non-volatile memory
JP2001504970A (ja) 局所メモリを再利用するデータ処理装置
US20100131803A1 (en) Computation of stack usage in embedded computing systems
US8176286B2 (en) Memory recycling in computer systems
US7660961B2 (en) Concurrent evacuation of the young generation
JPH10111830A (ja) 動的記憶領域管理装置
CN109992476A (zh) 一种日志的分析方法、服务器及存储介质
US10031840B2 (en) Method of ascertaining primary cause of memory consumption in program, and computer system and computer program for the same
US20220035695A1 (en) Computer unit, computer system and event management method
US8019956B1 (en) System and method for concurrently storing and accessing data in a tree-like data structure
CN109992475A (zh) 一种日志的处理方法、服务器及存储介质
CN116185902B (zh) 一种表切分方法、系统、电子设备及可读介质
CN117873403B (zh) office文档IO中tmp文件还原方法及其系统
CN115374444B (zh) 基于虚拟主机行为分析的病毒检测方法和装置
JPH10320263A (ja) Gcアタッチメント装置及びプログラム記憶媒体
CN117009118A (zh) 一种内存处理方法、装置、设备、介质及程序产品
JP2003323337A (ja) 孤立したオブジェクトを見積もるプログラム,および前記プログラムを利用したガーベッジコレクションプログラム
JP6069719B2 (ja) ソフトウェアデバッグ方法、情報処理装置およびプログラム

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20040106