低レベル実行環境向けの 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.
© Copyright 2024 Paperzz