next up previous contents index
Next: 共有ヒープのガーベジコレクション Up: 処理系の構成 Previous: 共有変数の具体化

共有ヒープへのコピーの遅延

他のプロセスに参照されるストリームを生成する場合、最初に生成側と 参照側との間に変数(S)を共有する。生成側はストリーム要素 X1 を生成し、 最初に [X1|L1] を局所ヒープに生成し、そして変数 S(ジェネリックオブジェクトSHVAR )に単一化する。

SHVAR のユニファイ・メソッドは局所ヒープ上のリストを共有メモリにコピーする。 そして変数(S)にリスト・ポインタを書き込む。このような操作が1要素を具体化する 毎に繰り返される。

連続した共有メモリ変数の生成およびその具体化は大きなオーバヘッドを伴う。特に スループット優先のプログラムの場合には、この頻度が大きい。

この問題を回避するために、具体化遅延(ジェネレータフック)という技法を用いる。 ジェネレータフックはフックしていない共有メモリ変数を局所ヒープのデータ構 造で具体化するときに、その時点での具体化は行わずに共有メモリ変数にジェネレ ータフック情報を記録する。 あるゴールがその変数の読み出し要求をしたときに、そのオブジェクトはその変数を 具体化しているノードに対して具体化要求をだす この方式は要求時点で全てもしくはほとんどのデータ構造が局所ヒープ上で具体 化されていることを期待している。このような場合には生成側は共有メモリ変数 を一度だけジェネレータフックにし、データを一気に共有メモリへコピーするこ とになる。 変数具体化時にフックしているゴールがあった場合には、ジェネレータフック にしないで、具体化して待ち合わせているゴールを起こす。 要約すると、具体値を待つものがいた場合は、局所データはコピーされ、そうで ない場合は、遅延してコピーする。前者はデータ駆動またはスループット優先プ ログラムであり、後者は要求駆動またはレスポンス指向のプログラムである。



Sekita Daigo
1998-05-18