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

collect_garbage()

実際にcopyを行う部分。

1.
GCを行うのが最初であれば、gcstackの実体を割りつける。

2.
allocp, ntop, heaptop をnews_space_top とする。 otopをold_space_top とする。osizeを、old_space_sizeとする。

3.
gc_hook_table に登録されている関数群を起動する。 このテーブルには、処理の際に、ゴールレコード以外に、 GCルートとなるような関数群を register_gc_hook()(runtime/alloc.c) なる関数により 予め登録されている。 現在のKLICでは以下のような名称の関数および処理が登録 されている。 

gc_asyncio_stream:
非同期I/Oを行うfile descriptorに毎にある、I/O ストリームの登録先 。

gc_timer_data:
タイマ用stream I/Oのための変数の登録先 `REFERtimer。

gc_signal_stream:
割り込み醉うの変数の登録先 ([*]ページ、第4.1.1章参照)。

gc_exp_table:
輸出表に登録されているデータ群(並列実装)。

gc_decode_stack:
メッセージデコード中のデータ群(並列実装)。

4.
優先度毎にgoal queueをコピーする(copy_one_queue()) ([*]ページ、第7.7章参照)。



Sekita Daigo
1998-05-18