next up previous contents index
Next: collect_garbage() Up: GCのアルゴリズム Previous: GCのアルゴリズム

klic_gc

このklic_gc()中では、heap拡張などを含む、GCについての全体制御を行っている。

1.
make_heap_largerが真かどうか検査する(初期的には偽)。

2.
(上記の処理でfatal errorにならなかった場合)flip_space()にて、 xxx_space_top, xxx_space_size をold/newについてswapする。

3.
copied_susp を0に初期化する。これは「永久中断の検出」のために 用いる、GCにより発見された中断ゴールの数を意味する。

4.
collect_garbageを呼びだす。この関数は現在実行中のゴールスタック (qp)、および、他の優先度のゴールスタック、さらにGCフックされた 他のデータ構造をGCルートとしてコピーを行う。

5.
コピーをした結果、空領域が「近々に必要なヒープサイズ (this_more_space) を考慮して不足しそうな場合(heapsize中、 maxaxtiveratioで指定される比率を上まわるかどうか検査し、 必要に応じてmake_heap_largerをONにする。

6.
コピーをした結果、「近々に必要なヒープサイズよりも空領域が 少ない」ということがわかれば、lastgc_dangerous をONにし、 もう一度GCを行う。



Sekita Daigo
1998-05-18