• 検索結果がありません。

CPSを用いた実行方式におけるスタックごみ集めの実時間化手法

N/A
N/A
Protected

Academic year: 2021

シェア "CPSを用いた実行方式におけるスタックごみ集めの実時間化手法"

Copied!
2
0
0

読み込み中.... (全文を見る)

全文

(1)

CPS を用いた実行方式におけるスタックごみ集めの実時間化手法

石中

小宮常康

‡ 豊橋技術科学大学大学院情報工学専攻† 電気通信大学大学院情報システム学研究科

1 はじめに

Scheme 言語から C 言語へコンパイルする Scheme 処理系において,スタックのごみ集めを 行うことで末尾再帰の最適化を実現する方法が ある.本稿では,このスタックのごみ集めを実 時間化する手法を提案する. ごみ集めの処理中はプログラムの実行が中断 されるため,一括方式のごみ集めではプログラ ムのレスポンス性能が低下する.実時間ごみ集 めは,ごみ集めの処理を細分化し少しずつ実行 することで,これを解決するものである.しか し,この細分化されたごみ集め処理が頻繁に実 行されてしまうと,細分化の意味がなくなり, 実時間性が失われてしまうため,細分化された ごみ集めの処理同士の間隔を保証する必要があ る.

2 CPS を用いた実行方式

CPS(Continuation Passing Style)はコンパ イラの中間言語としてよく用いられる表現形式 である.CPS における関数呼び出しでは,その 時点における残りの計算を表す「継続」を引数 として明示的に渡す.そして,関数からのリタ ーンの代わりにこの継続を明示的に呼び出すこ とでプログラムの続きを実行する. Baker による CPS を用いた実行方式1) は,ス タックのごみ集めを行うことで末尾再帰の最適 化 を 行 う 方 式 の 一 つ で あ り , ソ ー ス 言 語 を Scheme 言語,ターゲット言語を CPS 表現の C 言語とし,CPS 表現のプログラムをそのまま実 行する.また環境は C 言語の配列等で管理し, 継続は C 言語の関数と環境によって実現する. 以降,この継続を継続クロージャと呼ぶ.ただ し,継続クロージャは 1 つのオブジェクトとし て表現されているわけではない(関数呼び出し の際にコード部分と環境部分をそれぞれ引数と して渡せば済む).CPS を用いた実行方式では リターンを継続クロージャの呼び出しで実現し ているため,スタックは伸び続け,いずれオー バーフローを引き起こすが,スタックのごみ集 めを行うことでこれを回避する.また、これに よって末尾再帰の最適化が実現される. 我々が現在開発中の Scheme-to-C コンパイラ は,この実行方式をベースとしている.スタッ クとヒープ両方のごみ集めを行なうが,ヒープ ごみ集めは湯淺らのリターンバリア付きスナッ プショットごみ集めアルゴリズム2, 3) により実時 間化されている.そこで,このヒープの実時間 ごみ集めと同等の実時間性を持つスタックの実 時間ごみ集めの手法を開発した.

3 スタックの実時間ごみ集め

Scheme-to-C コンパイラのスタックのごみ集 めは,コピー方式のごみ集めを用いている.コ ピー方式のごみ集めは同じ大きさの二つの領域, Tospace と Fromspace を交互に使用する.今ま で使用していた Fromspace が一杯になると,ご み集めは使用中のオブジェクトだけを Tospace にコピーする.一般的なコピー方式のごみ集め は処理を一括して行うため,ごみ集め処理中は プログラムの実行が停止する. 提案する実時間ごみ集めは,このコピー方式 のごみ集めの処理を細分化し,プログラムの実 行により関数が呼び出されるたびに少しずつフ レーム単位でコピーする.Scheme-to-C コンパ イラのスタックのごみ集めでコピーされるのは C 言語の配列で管理される環境だけであり,こ の環境配列は単方向リスト構造をしている. 図 1 に示すように,ごみ集め中は環境配列が Tospace と Fromspace の両方に存在する.プロ グラムの実行により継続クロージャが呼び出さ れると,Fromspace に置かれた環境を参照する ことがあるため,環境配列のコピー漏れが生じ る恐れがある.そこでTospace と Fromspace の 環境配列の境界にリターンバリア 3) を設ける. リターンバリアは,継続クロージャの呼び出し によって Fromspace へ置かれた環境を参照する ことを防ぐ.もし,そのような参照をしようと した際は,参照先をコピーしてバリアを下位に 移動する.

Real-time Stack Garbage Collection Scheme for CPS Execution Model

† Takashi ISHINAKA. Graduate School of Information and Computer Sciences, Toyohashi University of Technology ‡ Tsuneyasu KOMIYA. Graduate School of Information Systems, University of Electro-Communications

1-213

3L-1

(2)

図1 環境配列の構造とリターンバリア リターンバリアの実装は,CPS を用いた実行 方式の利点を生かして行える.Tospace から直 接指されている Fromspace の環境配列(1つし かない)を環境として持つ継続クロージャのコ ード部分(関数へのポインタ)を上記で述べた 処理を行う関数ポインタへ置き換えることで実 装可能である.継続クロージャのコード部分を 置き換え可能にするために,関数呼び出しの際 にコード部分と環境部分をそれぞれ引数として 渡すことはせずに,コード部分を環境配列の中 へ埋め込んでいる.

4 細分化されたごみ集め処理の間隔

細分化されたスタックのごみ集め処理は,タ ーゲット言語であるCPS 表現の C 言語の全ての 関数の先頭で行えばよい.しかし,これらの関 数は小さく,頻繁に呼び出しを行うため,細分 化されたごみ集めの処理同士の間隔は非常に狭 くなる.このため,ある時間に注目するとごみ 集めばかり行っていることになり,実時間性が 失われてしまう. そこで本手法では,プログラムの制御フロー 解析と関数ごとのスタックの消費量の見積りを 行い,一定量のスタックの消費ごとに細分化さ れたごみ集め処理を行うコードを挿入すること で,処理の間隔を調整した.また,小さなルー プや制御の合流点など,コードを挿入する間隔 が調整不可能な場合でも,実行される細分化さ れたごみ集め処理の間隔が保証できるように, 田中らのPunctual Polling4) におけるポーリング 間 隔 の 動 的 な チ ェ ッ ク 手 法 を 導 入 し た . Punctual Polling は実行した命令数を動的にチ ェックすることで任意のポーリングの間隔を保 証する.この命令数をスタック消費量に置き換 え,前回の細分化されたごみ集め処理からのス タック消費量を動的にチェックすることで,処 理同士の間隔を保証した. このようにスタックのごみ集めの間隔を保証 できたが,一方でヒープのごみ集めはヒープが 消費されるタイミングで実行されるため,スタ ックとヒープの細分化されたごみ集め処理が図2 のような状態になり,実時間性が損なわれる可 能性がある.そこで本手法では図 3 のようにス タックのごみ集め中は,スタックのごみ集めの タイミングでヒープのごみ集めも行うようにし, ヒープが消費されるタイミングではごみ集め処 理を行わないものとした. 図2 ヒープのごみ集めによる実時間性の喪失 図3 スタックのごみ集め中の処理間隔の保証

5 まとめ

本稿では,CPS を用いた実行方式をベースと した処理系における,スタックのごみ集めの実 時間化手法の提案を行った.

参考文献

1) H. Baker: CONS Should Not CONS Its Argu- ments, Part II: Cheney on the M.T.A., ACM Sigplan

Notices, Vol.30, No.9, pp.17-20 (1995).

2) T. Yuasa: Real-time garbage collection on general-purpose machines, The Journal of Systems and

Software, Vol.11, No.3, pp. 181-198 (1990).

3) 湯淺太一, 中川雄一郎, 小宮常康, 八杉昌宏: リター ン・バリア, 情報処理学会論文誌:プログラミング, Vol.41, No.SIG 9 (PRO 8), pp87-99 (2000). 4) 田中義純, 田浦健次朗, 米沢明憲: 定期的なポーリン グを保証するアルゴリズム, 並列処理シンポジウム JSPP2001, pp.229-236, (2001). 現在の環境 リター ン バリ ア env[] ・ ・ env[] env[] env[] env[] ・ ・

env[]={pointer to next env, continuation, vals} Tospace

t

この間隔は保証できない ヒープのごみ集め

t

スタックとヒープのごみ集めの間隔を保証 スタックのごみ集め スタックのごみ集め ヒープのごみ集め Fromspace

1-214

情報処理学会第69回全国大会

図 1  環境配列の構造とリターンバリア  リターンバリアの実装は,CPS を用いた実行 方式の利点を生かして行える.Tospace から直 接指されている Fromspace の環境配列(1つし かない)を環境として持つ継続クロージャのコ ード部分(関数へのポインタ)を上記で述べた 処理を行う関数ポインタへ置き換えることで実 装可能である.継続クロージャのコード部分を 置き換え可能にするために,関数呼び出しの際 にコード部分と環境部分をそれぞれ引数として 渡すことはせずに,コード部分を環境配列の中 へ埋め

参照

関連したドキュメント

*2 Kanazawa University, Institute of Science and Engineering, Faculty of Geosciences and civil Engineering, Associate Professor. *3 Kanazawa University, Graduate School of

Several other generalizations of compositions have appeared in the literature in the form of weighted compositions [6, 7], locally restricted compositions [3, 4] and compositions

† Institute of Computer Science, Czech Academy of Sciences, Prague, and School of Business Administration, Anglo-American University, Prague, Czech

French case system has a case called tonic in addition to nominative, accusative and dative, and all French nominal SFs appear in tonic forms, regardless of what case their

The purpose of the Graduate School of Humanities program in Japanese Humanities is to help students acquire expertise in the field of humanities, including sufficient

Amount of Remuneration, etc. The Company does not pay to Directors who concurrently serve as Executive Officer the remuneration paid to Directors. Therefore, “Number of Persons”

Associate Professor, Graduate School of Marine Science and Technology, Tokyo University of Marine Science and Technology (Ocean Newsletter No. Designation of the Takashima Kozaki