修論タイトル:「Schemeにおける動的ソフトウェア更新機構の設計と実装」 (2010年度 修士論文)

氏名:荻山 温夫

概要:

動的ソフトウェア更新(DSU)機構は、実行中のソフトウェアを新しいバージョンに 更新することを可能にする.ソフトウェアの更新によっては, データを生成する関数(コンストラクタ)の変更を行う場合がある. この場合,DSU機構は古いコンストラクタの生成したデータ(旧データ)を 新しいバージョンのソフトウェアが扱えるようにする必要がある. 一般的なDSU機構は旧データを新しいバージョンで扱うデータ (新データ)に置換する. この置換を行う主な方式は,関数などの定義を更新した 直後にデータの置換を一括で行う方式と,定義を更新した後, ソフトウェアによって旧データの内部が参照される際に置換を行う 遅延的な方式である.一括でデータの置換を行う場合, ソフトウェアの動作が長時間停止することがある. この停止時間は,リアルタイム性が要求される ソフトウェアに不都合である. 遅延的な方式でデータの置換を行う場合は,データの内部を 参照する関数(アクセサ)にデータの置換処理が追加され, ソフトウェアの実行に余分な時間(オーバヘッド)がかかる.

これまでに 提案されたDSU機構の多くはCやJava のような静的型付け言語で記述されたソフトウェアを対象と している.しかし今日では,PerlやPHPのような 動的型付け言語で記述されたソフトウェアが増えている. 今後,動的型付け言語で記述されたソフトウェアのための DSU機構への要求が高まると考えられる.

本研究では,動的型付け言語である Schemeで記述されたソフトウェアを 対象としたDSU機構を設計し,Scheme言語処理系TUTSchemeに 実装した.またデータの置換処理を一定数のデータごとに 分けて行う方式を提案し,この方式をDSU機構に実装した. 提案方式では,置換を行うべき全ての旧データ(更新対象データ)を 置換するため,ごみ集めの実行中に更新対象データを見つける処理を追加した. この処理で見つけられた更新対象データは,関数の呼び出し処理時に 置換される.新しいバージョンのソフトウェアが, 置換されていない更新対象データを参照しないよう, 関数の更新を行う際に,データの置換を行う処理をアクセサに追加する. 更新対象データの置換がすべて完了した際に, アクセサに追加された処理を外し, アクセサに追加された処理によるオーバヘッドを低減する.

実装したソフトウェア更新機構および提案方式の有効性を 検証するため,以下の実験を行った. まず,DSUの機能を追加していないTUTSchemeと本研究で機能を追加した TUTSchemeでSchemeプログラムの実行速度を比較する実験を行った. この結果から,DSUの機能の追加によるオーバヘッドが小さいことを確認した. また,ソフトウェアの更新時に一度に置き換えを行うデータの数を 変更し,データの置き換えを一定数ずつ行う実験を行った.この結果, 提案方式ではデータの置き換えによるソフトウェアの停止時間を 縮減できることを確認した.


[修論pdf][研究室内部向け情報]