低レベル実行環境向けの P2P 連携機構の動的構成 1 はじめに 2 連携

低レベル実行環境向けの P2P 連携機構の動的構成
岩崎陽平(名古屋大学大学院 情報科学研究科)
,河口信夫(名古屋大学 情報連携基盤センター)
1
近年,MOTE[1],nRF24E1[2]など,無線通信
機能を搭載した低コストな端末が開発されつつ
あり,センサ・家電・文房具などの様々な小型機
器がネットワークに参加することが期待される.
我々は,別途制御ノードを介さない軽量なプロト
コルで,これらの機器間を直接通信させて連携を
行う,ピアツーピア型フレームワークの実現を目
指している.しかし,一般にピアツーピア型フレ
ームワークは,連携動作に関するプログラムコー
ドがノード単位で分散し,その開発や保守は容易
ではない.
Maté[3]は,センサノードに VM を搭載するこ
とにより,無線経由でプログラムコードを動的に
書き換えることができるが,VM 自体のオーバー
ヘッドがあり,またノード間を直接連携させる状
況を想定しておらずソフトウェア開発は依然ノ
ード単位である.広義のアスペクト指向[4]言語で
ある MixJuice[5]は,クラス間の連携処理(コラ
ボレーション)を抽出しモジュール化して扱える
が,単一マシンでの実行を想定したものである.
本稿ではワンチップマイコンなどの低レベル
実行環境をターゲットとした,ピアツーピア連携
機構の動的構成手法を提案する.複数のノードに
横断する連携機能を抽出し,「連携ドライバ」と
いう単一のソフトウェアモジュールとして扱う
ことにより,連携機能の容易な開発・導入が可能
となる.連携構成が変わる度に,各機器のプログ
ラムコードを再コンパイルするため,静的な最適
化を用いたコンパクトなコードを生成でき,低レ
ベルな実行環境に適する.
2
ノードN1用コード
はじめに
連携ドライバ処理系
本手法では,図 1 に示すように,複数のノード
に横断する連携機能を抽出し,「連携ドライバ」
というモジュールで扱う.この連携ドライバは,
後述する連携ドライバ記述言語により記述され
る.
本手法のシステム構成を図 2 に示す.実際に連
携動作を行う低機能で低コストなシンプルノー
ド(無線通信機能を持つ 8bit マイコン程度を想
定)と,連携の設定やソフトウェアのビルドを行
うための高機能なスーパーノード(PC,PDA,
携帯電話などを想定)が存在する.スーパーノー
ドは設定時のみ必要であり,実際の動作時には必
要ない.スーパーノード上では連携ドライバ処理
系が動作し,連携設定(ユーザが希望する連携構
成)に基づき,連携ドライバのソフトウェアを統
合して自動分散化(ノードごとに分割&プロトコ
ル生成)し,各ノード用のプログラムコードを生
成する.これらは各ノードのメモリイメージへと
ノードN2用コード
abc
def
連携動作Aに関するコード
ghi
jkl
連携動作Bに関するコード
mno
pqr
抽出
連携ドライバ B
ghijkl
ノード本来の機能
⇒デバイスドライバ
図 1. 複数ノードに横断する連携コードの抽出
N1の実行状態
123
ソースコード
連携ドライバ
N2の実行状態
456
A
遠
隔
メ
abcdef
連携ドライバ
B
ghijkl
デバイスドライバ
連携ドライバ
処理系
C
mno
デバイスドライバ
モ
リ
読
D
pqr
ノードごとの
メモリイメージ
を生成
メモリマップ
み
出
し
ノード N1
連携設定
A(N1,N2), B(N1,N2),
C(N1), D(N2)
N1用
メモリイメージ
abc,ghi,mno,
123
遠
隔
モ
メ
き
書
リ
込
み
ノード N2
ピアツーピア
連携
N2用
メモリイメージ
def,jkl,pqr,
456
図 2. 連携ドライバ処理系
変換され,ネットワーク経由で動的にインストー
ルされる.ビルド時に生成されたメモリーマップ
などに基づき,更新対象ノードの現在のメモリを
読み出してプログラムコード(メモリイメージ)
に反映させることにより,ノードの状態を保持し
たまま動的にソフトウェアの更新を行うことも
出来る.
本手法を用いることにより従来ノードごとに
別々に開発していたソフトウェアを,連携動作単
位で開発することができ,連携機能の容易な開発
が可能となる.また遠隔のノードのプログラムコ
ードの更新を,一箇所で集中的に行えるため,機
器間の連携動作の容易な構成・導入が可能となる.
3
連携ドライバ記述言語
連携ドライバを記述するためのプログラミン
グ言語の設計を進めている.現在構想中の記述例
を図 3 に示す.これは光センサと温度センサを持
つセンサノード(sensorNode)の状態を,LCD
ノード(lcdNode)上の液晶パネルに表示させる
連携ドライバの例である.@interface フェーズで
は,連携ドライバが想定するノード構成,および
ノードごとに要求・提供する機能のインタフェー
スを定義する.@at(node)フェーズでは,ノード
ごとにイベント処理やデータ構造を記述する.
本言語ではアスペクト指向[4]における Advice
driver SensorToLCD {
@interface:
node sensorNode {
use CdsThermoSensor sensor;
use IntervalTimer timer;
}
node lcdNode {
use LCD lcd;
}
図 4. シンプルノードのプロトタイプ
@at(sensorNode):
after void timer.onTimer1000() {
byte cds=sensor.GetCds();
byte thm=sensor.GetThermo();
@fork(lcdNode) {
lcd.SetPos(0,0);
lcd.WriteString("cds:");
lcd.WriteHex(cds);
lcd.WriteString("thm:");
lcd.WriteHex(thm);
}
}
}
図 3. 連携ドライバ記述例(構想中)
の適用に類似した形でイベント処理の記述を行
う.例えば,タイマコンポーネント(IntervalTimer インタフェース)が持つ onTimer1000()メ
ソッドの後(after)に,図 3 の timer.onTimer1000()
で示す Advice を追加することにより,1000ms
ごとに定期的に実行される処理を記述できる.
図 3 の@fork(lcdNode)ブロックの部分では,
lcdNode 上の液晶パネル(LCD インタフェース)に,
sensorNode 上で読み出したセンサ状態(cds,thm)
を表示している.@fork(lcdNode)ブロック内で参
照している変数を解析することにより,
sensorNode と lcdNode 間の通信プロトコルの生
成が自動で行われる.
このように,本言語を用いれば,複数のノード
をまたがった連携動作のソフトウェアを,単一ノ
ードと同じような動作記述に簡単なアノテーシ
ョンを付加するだけで,容易に記述できる.また,
連携ドライバのインスタンス化や Advice の適用
は全て静的に行われるため,nesC[6]と同様に,
静的な最適化を用いたコンパクトなコードを生
成でき,低レベルな実行環境に適する.
4
プロトタイプシステム
本手法に基づくプロトタイプシステムの実装
を進めている.まずは,無線通信機能を内蔵した
ワンチップマイコンである nRF24E1[2]を実行環
境の一つとして想定し,マイコン上のメモリ内容
を無線経由で読み書きできるコアプロトコルの
実装を行った.これを利用し,マイコン上のプロ
グラムコードを,無線経由で動的に書き換えるこ
とが出来る.また,図 4 に示すように,本システ
ムを搭載したシンプルノードの例として,センサ
ノード(光センサ,温度センサ),スピーカノー
ド,液晶パネルノードを製作した.
5
まとめ
本稿では低レベル実行環境をターゲットとし
た,ピアツーピア連携機構の動的構成手法を提案
した.本手法では,ソフトウェアをノード単位で
はなく,複数ノード間をまたがった連携機能単位
で管理でき,連携動作の開発・保守が容易である.
今後は,連携ドライバ記述言語の仕様を決定し,
言語処理系および連携ドライバ処理系の実装を
進める.
参考文献
[1] J. Hill et al, “System Architecture Direc
tions for Networked Sensors,” Architectu
ral Support for Programming Languages
and Operating Systems (ASPLOS IX),
pp. 93-104, 2000.
[2] Nordic Semiconductor, “nRF24E1 2.4GH
z Radio Transceiver with Microcontrolle
r,” http://www.nvlsi.no/
[3] P. Levis and D. Culler, “Maté: A Tiny
Virtual Machine for Sensor Networks,”
Architectural Support for Programming
Languages and Operating Systems (ASP
LOS X), 2002.
[4] G. Kiczales et al, “An Overview of Aspe
ctJ,” Lecture Notes in Computer Science
Vol.2072, pp.327-355, 2001.
[5] 一杉 裕志 , 田中 哲, “差分 ベースモジ ュー
ル:クラス独立なモジュール機構,” 産業技術
総合研究所テクニカルリポート AIST01-J0
0002-1, 2001.
[6] David Gay et al. “The nesC Language:
A Holistic Approach to Networked Embe
dded Systems,” Proceedings of Program
ming Language Design and Implementat
ion (PLDI), 2003.