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

センサノード用アプリケーション開発環境の設計と実装

N/A
N/A
Protected

Academic year: 2021

シェア "センサノード用アプリケーション開発環境の設計と実装"

Copied!
7
0
0

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

全文

(1)2004−OS−96 (14) 2004/6/18. 社団法人 情報処理学会 研究報告 IPSJ SIG Technical Report. センサノード用アプリケーション開発環境の設計と実装    須之内 雄司 中西 健一 高汐 一紀 徳田 英幸   慶應義塾大学 環境情報学部 慶應義塾大学大学院 政策メディア研究科 ユビキタスコンピューティング環境ではセンサやアクチュエータを持ち,無線でネットワークにつながるセ ンサノードが我々の生活環境に偏在するようになる.センサノード用アプリケーションの多くは,ポーリングや 割り込みやタスク・イベントなどのモデルに従って開発されているが,これらのモデルでアプリケーションを開 発するには,開発者にハードウェアと密接した知識が要求される.本論文では,小型のセンサノードで動作する 及びプリエンプティブマルチスレッドの設計と実装を行う.本システムの利用により, 軽量なブロッキング ハードウェアに関する知識を有していない開発者でもセンサノード上のアプリケーションを開発できるように なる..  .        !#"$ "$%'&(#*)+ !#"$

(2). , .-$ #"$ 0/1-2*3!" 456%7"$3985  :"$3<;=">? . @BADC EFHG.I4JG.KMLON +PQ#R IOS P S4IONTFHLON 4PVUXW A RZY7[ E]\^S P SF_L+NTJ  LOEa` Qb AZcdEe\+J P G.fgS M :hjilknmDoqpsrOtvu_wyx*z#{}|~tlx€MTx#p‚ivo7ƒx„u tl|~†i‡p~{ˆtxd‰€ŠT{}t†‹x€{}zl |~Œ{qpsr Ž:|‚il„mji‡p‘„k‚’Dt#to7tvu”“ „{•iMivxDŽ:t‡zT|~xDivxDkTl‰*ЁT{}t†‹x€{}zl |~Œ{qpsr a–—#˜™ˆš‡—™œ›s —#žŸ‚  !¡#—›s™œ–¢4£‚–v¤v™œ¥s –# !£‚–‡›sž‚¦”ž£~–#ž ¥§–#v¨l£‚ž©ª™q«œ«]¡„£¥s¤­¬Tž™q¤­£‚«¯®°£~±l™œž²›§™q–°­—¥§«œ™œ¤³£‚ž‚´>µM¬T–‡®¶¬ ¡l· ¡#¿ «œ™œŸ¸¬n›s™q –#ž:¹} ¥ž£‚–ž ¥!–v¨£‚ž:¬T¥s£§˜*¬ ž£‚¨  –  !v¨l£‚«œž:ž—Ÿº ¬ ž:¡„­«œ«œ™q–¢¦_™q–‡›s£~¥¥s—¡›sž‚¦H¬ –#¨4›»¬ ž¼V¬ –#¨£‚¤³£‚–‡›½ !v¨£‚«¾´ ¡¡#«œ™œŸ¸¬T›s™œ –O¨l£‚¤³£‚«œ ¡„£~¥sžy©ªº§—l›s™œ«q™œÀ‚£›sº#£~ž£½ !£~›sºv¨žy¬T¥s£¥s£¸š‡—#™¯¥s£¸¨›s˜„£¹¾¬T !™q«œ™q¬T¥Á©ª™œ›sº†º#¬T¥»¨v©”¬T¥s£:¬T¥sŸ»º#™¯›s£‚Ÿ~›s—l¥s£­´ –›sº™œž_¡*¬T¡„£~¥¸¦³©_£Á¡¥s ¡„­ž£Ã¬e«q™œ¢ ºv›· ©_£‚™œ¢­º‡›”˜#«œ‡Ÿ»¼v™q–¢­$¬ –#¨¡¥s£‚£‚ !¡l›s™œ¤³£ª :—#«¯›s™¯›sº¥s£‚¬­¨:«œ™œ˜¥»¬n¥®¹•T¥”ž£‚–#žT¥”–#v¨l£‚ž‚Ä ¬ ¡¡#«œ™œŸ¸¬T›s™œ –j´dÅÁž™œ–¢›sº™œž_«œ™œ˜¥»¬T¥®‡¦‡¬ ¡#¡«œ™qŸ‚¬T›s™œ­–§¨£‚¤­£‚«œ­¡„£~¥sž‚¦‡©ªº½¬n¥s£‚–jÄ ›H¹¾¬  !™œ«œ™q¬T¥Z©ª™¯›sºº*¬n¥»¨l©Z¬T¥s£Ã¬T¥sŸ»º#™¯›s£‚Ÿ~›s—l¥s£­¦vŸ¸¬ – ¨£~¤³£‚«œ­¡¬ ¡#¡«œ™qŸ‚¬T›s™œ­–ž‚´ Î Æ はじめに 行い, 章で問題に対する解決のアプローチを説明 する.Ñ 章では本ライブラリの設計を説明し, Ò 章 ユビキタスコンピューティング環境ではセンサ で実装と評価について述べる.Ó 章で関連研究を挙 やアクチュエータを持ち,無線でネットワークにつ げ,本ライブラリとの性質面での比較を行う.Ô 章 ながるノードが我々の生活環境に偏在するように “{•kTi†“Vtvp#ÇqÈTÉ ‘*†iv|p»Ê²ƒ²p~Œ­Ç Ë­É で本研究をまとめ,今後の研究課題について述べる. なる.ここ数年で や や ÌÍ Ç ÎvÉ などの小型センサノードが研究用に開発され Õ 既存のプログラミングモデルの考察 “ƒÖÁ×½ËM“tlp#Ç Ñ É てきた.アプリケーション開発者はセンサノードに 本稿では,センサノードを, の “  Ø Ù Á Ö y Ú ‹ Š!Û のメモリ アプリケーションを書き込むことで,センサノード ような Ñ の処理能力の と Ñ È­ËlÜlŠ!Û のプログラム領域を持ち,電池又は電源 をネットワークで連携させ,利用者の好みや周囲の と. 状況に応じたサービスを提供できる. センサノードの開発により,ユビキタスコンピ ューティング環境を実現するためのハードウェア プラットフォームは揃ってきたが,ソフトウェアプ ラットフォームはまだ発展途上である.センサノー ドは,メモリサイズやプログラムサイズや電力な どのリソースが限られているため,開発者はハー ドウェアに密接したプログラミングモデルでアプ リケーションを開発している.そのため,開発者が センサノード用のアプリケーションを開発するに は,割り込みやスケジューリングや電力消費といっ たハードウェアに関する深い知識が必要となる.開 発者がより効率的にアプリケーション開発を行うに は,ハードウェアに関する深い知識無しで開発でき るプログラミングモデルが必要である. 本稿は開発者がセンサノード用アプリケーション を容易に開発できる軽量なライブラリを提案する. 本ライブラリはブロッキング とプリエンプティ ブマルチスレッドの利用により,ハードウェアに関 する深い知識を持たない開発者でも容易にアプリ ケーション開発できる環境を実現する. 以降, 章で既存プログラミングモデルの考察を. で駆動するハードウェアであると想定する. このようなセンサノードで動作する,入出力を行 うアプリケーションには,ポーリングや割り込みや イベントとタスクなどのモデルがある.以下でそれ ぞれのモデルの特徴と問題点を述べる.. ÝdÞàß. ポーリングによる入出力 ポーリングは最も単純なモデルで,アプリケー ションはデバイスが入出力可能かをループで監視 し,入出力可能な時点で入出力を行う.この手法は のソフトウェアライブラリなどで用いら れている.ポーリングによるデバイスの入出力シー ケンスを図 に示す.このモデルでは,デバイスが 入出力できない間もスリープせずに監視し続けるた め,電力消費が大きくなってしまう.よって,ポー リングは電池で駆動するセンサノードでの利用には 向いていない.. ‘*†il|»pÊƒ²p‚Œ. Ë. ƒÏlÐ. È. ÝdޕÝ. 割り込みによる入出力 デバイスからの割り込みを利用するアプリケー ションは,割り込みハンドラで処理を行う.割り込 みによるデバイスからの入出力シーケンスを図 に 示す.アプリケーションは割り込みが発生するまで. È. Ë. −97−.

(3) 処理は行わず,代わりに処理用のタスクをキューに 追加する.キューに追加されたタスクは,メインス レッドにより順次実行されていく.タスクがキュー をス に入っていない場合,メインスレッドは リープさせ,電力消費を抑える.イベントとタスク による入出力シーケンスを図 に表す.このモデル では,キューに加えられたタスクは で処理さ れていくため,時間のかかるタスクがすでにキュー にあると,その後の時間のかからないタスクが待た される.また,タスクの処理よりタスクの追加が多 いと,キューが一杯になってしまう可能性がある. これらの問題を解決するには,処理に時間がかかる タスクを分割し,個々のタスクが適度なタイミング で完了する必要がある.その概要を図 に表す.. ⺒䉂ㄟ䉂น⢻䈎䋿. ÖÁÚy‹. ⺒䉂ㄟ䉂น⢻䈎䋿 ⺒䉂ㄟ䉂น⢻䈎䋿. Ñ. ⺒䉂ㄟ䉂น⢻䈎䋿 น⢻ ⺒䉂ㄟ䉂 ಣℂ. 䊂䊋䉟䉴. ⺒䉂ㄟ䉂น⢻䈎䋿 ⺒䉂ㄟ䉂น⢻䈎䋿 ⺒䉂ㄟ䉂น⢻䈎䋿. Ò. ⺒䉂ㄟ䉂น⢻䈎䋿. 図. Èlá. hHƒshZÐ. 䉟䊔䊮䊃⊒↢ ポーリングによる入出力. ÖÁÚy‹. をスリープさせられるので,電力消費を必要 最小限に抑えられる.このモデルでは,割り込みハ ンドラが長時間割り込みを禁止すると,他の割り 込みを受けつけられない.割り込みハンドラ内での 割り込みを許可すると,再帰的な割り込みの発生に より,スタックオーバーフローする危険性がある. よって,開発者は割り込みハンドラの処理にかかる 時間を考慮して開発する必要がある.. ታⴕਛ䉺䉴䉪 ᣂⷙ䉺䉴䉪. 図. ÎDá. 䉺䉴䉪䉨䊠䊷 イベントとタスク. ഀ䉍ㄟ䉂. ഀ䉍ㄟ䉂. 䊂䊋䉟䉴 ഀ䉍ㄟ䉂. ഀ䉍ㄟ䉂. 図. ˀá. 割り込みによる入出力. ÝdÞ}â. タスクとイベントによる入出力 タスクとイベントのモデルでは,アプリケーショ ンのメインスレッドが,キューに入っているタスク を で処理する.タスクはイベントや他のタス クにより追加される.このモデルは や のソフトウェアライブラリ などで採用されて いる.イベントとタスクの構成を図 に示す.イベ ンとはハードウェア割り込みなどにより発生する処 理で,メインスレッドに割り込める.イベントは割 り込みを長時間禁止しないよう,即座に制御を返す 必要がある.そのため,イベントでは時間のかかる. h_ƒsh_Ð. Ì Í. ÇÓ É. Î. 図. Ñá. イベントとタスクによる入出力. ã {ˆx*rDБäÇ Ò É. 䉺䉴䉪1-1. 䉨䊠䊷. 䉺䉴䉪1-2. 図. Ë. −98−. Òá. 䉺䉴䉪2-1. 分割されたタスク.

(4) ƒÏlÐ. Ýdވå. 既存のプログラミングモデルの問題点 前節までに挙げたプログラミングモデルでアプリ ケーションを開発するには,ハードウェアに関する 知識が開発者に要求される.開発の際に注意が必要 となる点を以下にまとめる. 電力の利用効率 電池で駆動するセンサノードにとって,電力は 重要なリソースである.処理するデータがない 時は,アプリケーションは に無駄な処理を させてはならない. 割り込み センサや通信の入出力に対する応答が長時間遅 れてはならない.割り込みを長時間禁止しない ように,割り込みハンドラで時間がかかる処理 をしてはならない. スケジューリング 時間のかからない処理はすぐ終わらなくてはな らない.そのために,時間のかかる処理は分割 し,時間のかからない処理の妨げになってはな らない.. Ô. 䉴䊧䉾䊄2. 目的とアプローチ. 䉴䊧䉾䊄1. 本研究の目的は,ハードウェアに関する知識のな い開発者が,容易にセンサノード用アプリケーショ ンを開発できる環境の構築である.割り込みやスケ ジューリングや電力消費は開発者にとって複雑であ り,隠蔽しなくてはならない. 本稿では,これらの知識無しでアプリケーション が開発できる 言語用ライブラリを提案する.本 とプリエンプティ ライブラリはブロッキング ブマルチスレッドを利用する.ライブラリが電力の 利用効率や割り込みやスケジューリングに対する考 慮を担うことで,開発者はアプリケーションの機能 の開発に専念できる.. Ö. ⺒䉂ㄟ䉂 䊂䊷䉺䈏䈭䈇䈱䈪䊑䊨䉾䉪 䈚䈩䉴䊧䉾䊄2䈏ታⴕ ഀ䉍ㄟ䉂 ഀ䉍ㄟ䉂䈎䉌ᓳᏫ. 䊑䊨䉾䉨䊮䉫 I/O. ⺒䉂ㄟ䉂. í. 䊂䊷䉺䈏䈭䈇䈱䈪 䊑䊨䉾䉪䈜䉎 ഀ䉍ㄟ䉂. ⺒䉂ㄟ䉂. ブロッキング. 䊂䊷䉺䈏䈜䈪䈮䊋䉾䊐䉜䈮 䈅䉎䈢䉄䊑䊨䉾䉪䈚䈭䈇. çàè¸é. スレッドによる並行処理. Ü. Ò. ƒÏÐ åHÞàß. ഀ䉍ㄟ䉂. 䊂䊷䉺. 設計. Ôá. 本章では本ライブラリの設計について述べる.本 ライブラリは図 に示すような つのモジュール から構成される.アプリケーションはスレッドモ ジュール,ミューテクスモジュール,ブロッキング モジュールを通じて本ライブラリを利用する.. 䊂䊷䉺䈏䈐䈢䈱䈪 ౣ㐿䈜䉎. 䊂䊷䉺. ê ëXì. ታⴕน⢻ᤨ㑆 ⚳ੌ. 䊂䊷䉺. 図. á 図Ó. 䊑䊨䉾䉨䊮䉫 I/O. ታⴕน⢻ᤨ㑆 ⚳ੌ. ƒÏÐ. 䉴䊧䉾䊄. ƒÏlÐ. Ó. ÖÁÚy‹. æ. ÖÁÚË. キング では,入出力ができない時は,ポー リングせずに割り込みを待つ.その間は を スリープさせられるので,電力の利用効率が向 上する.また,割り込みハンドラでは入出力以 外の処理を行わないため,割り込みが長時間禁 を利用 止されることはない.ブロッキング した入出力のシーケンスを図 に示す. プリエンプティブマルチスレッド 本ライブラリはプリエンプティブマルチスレッ ドにより,プログラムの並行性を実現する.前 章で挙げたモデルでは,時間がかかる処理を行 うと,割り込み禁止の期間が長くなってしまう 問題や,他の時間がかからない処理が待たされ る問題があった.本ライブラリでは,スレッドを 決められた時間ごとにプリエンプトし,別のス レッドに実行権限を与える.図 にそのシーケ ンスを示す.時間のかかる処理は一定期間ごと にプリエンプトされるため,時間のかからない 処理が時間のかかる処理によって妨げられない.. スレッド スレッドはプログラムの実行単位であり,それぞ れが独自のレジスタの値とスタックを持つ.本ラ イブラリでは,処理を行うスレッドを切り替えるこ とで並行性を実現している.実行するスレッドは, ミューテクスやブロッキング によって切り替え られる他,一定時間ごとにスケジューラによって切 り替えられる.スレッドモジュールは,スレッド固 有の情報を保存するためのスレッド情報構造体を持 ち,スレッド生成関数とスレッド停止関数とスレッ ド再開関数を提供する.. ƒÏlÐ. による待ちうけ. ƒÏlÐ. ブロッキング 本ライブラリはブロッキング により,電力の 節約と短い割り込み禁止期間を実現する.ブロッ. Î. −99−.

(5) スレッド停止関数・スレッド再開関数 スレッドには実行可能状態と停止状態の二つの 状態がある.他のモジュールはスレッド停止関 数とスレッド再開関数を通じてスレッドの状態 を変更する.スレッド停止関数は現在実行中の スレッドを実行可能状態から停止状態に変更し, スケジューラモジュールのスレッド切り替え関 数を呼び出す.スレッド再開関数は指定された スレッドを停止状態から実行可能状態に変更す る.実行可能状態になったスレッドは,後にス レッド切り替えにより実行される.. 䉝䊒䊥䉬䊷䉲䊢䊮 䉴䊧䉾䊄䈱↢ᚑ. 䊨䉾䉪䊶䉝䊮䊨䉾䉪. ⺒䉂ᦠ䈐. 䊑䊨䉾䉨䊮䉫I/O. 䊚䊠䊷䊁䉪䉴 ㅊട䊶⸃ᶖ. ㅊട䊶⸃ᶖ. 䉴䊧䉾䊄䉨䊠䊷. åHޕÝ. スケジューラ スケジューラモジュールは実行するスレッドの 管理を行う.スケジューラはスレッド切り替え関数 を提供する.スレッド切り替え関数はスレッドモ ジュールのスレッド停止関数とタイマ割り込みから 呼び出される.スレッド切り替え関数はスレッド固 有情報の保存,実行スレッドの選択,スレッド固有 情報のロードの 段階で構成される.スレッド切 り替えにはレジスタを直接扱う必要があるため,ス レッド切り替え関数は一部アセンブリで記述しなく てはならない.. ஗ᱛ䊶ౣ㐿. 䉴䊧䉾䊄 䉮䊮䊁䉨䉴䊃䉴䉟䉾䉼. 䊒䊥䉣䊮䊒䉲䊢䊮. Î. 䉴䉬䉳䊠䊷䊤 ഀ䉍ㄟ䉂. ഀ䉍ㄟ䉂. 䉺䉟䊙䊷. 図. ܀á. ⺒䉂ᦠ䈐. 䊂䊋䉟䉴. モジュールの構成. スレッド固有情報の保存 最初に,スレッド切り替え関数は実行していた スレッド固有の情報を保存する.スレッド固有 の情報は,汎用レジスタ,スタックレジスタ,ス テータスレジスタ,プログラムカウンタである. スレッド切り替え関数は,汎用レジスタとスタッ クレジスタの値をスレッド情報構造体に保存し, する. ステータスレジスタの値をスタックに  プログラムカウンタはスレッド切り替え関数の 呼び出し時にスタック上に  される. 実行スレッドの選択 次に,スレッド切り替え関数は実行するスレッド を選択する.センサノードの限られたメモリサ イズとプログラムサイズで動作させるため,ス ケジューリングアルゴリズムはシンプルなラウ ンドロビンを採用した.スレッド切り替え関数 はスレッド情報構造体の循環リストを辿り,実 行可能状態のスレッドを探す.全てのスレッド が停止状態の場合, をスリープさせ,割り 込みによってどれかのスレッドが実行可能にな るまで待つ. スレッド固有情報のロード 最後に,スレッド切り替え関数は次に実行する スレッド固有の情報を にロードする.スケ ジューラはスレッド情報構造体から,汎用レジ スタとスタックポインタの値を にロード し,ステータスレジスタをスタックから   す る.プログラムカウンタの値はスタック上にあ り,スレッド切り替え関数から抜ける際に自動 的にロードされる.. スレッド生成関数 スレッド生成関数はアプリケーションからスレッ ドモジュールにアクセスできる唯一のインター フェースである.スレッド生成関数のプロトタ イプ宣言を図 に示す.スレッド生成関数の引 数にはエントリポイントとなる関数のアドレス, その関数に対する引数,そしてスレッドに割り 当てるスタックのアドレスを渡す.新しく作成す るスレッドのスタック領域をアプリケーション が指定することで,最低限のメモリ領域を割り 当てることができる.本ライブラリはメモリサ イズの節約のため,スレッドの数をコンパイル 時に決定し,実行時はそれ以上のスレッドは作 成できない.スレッド生成関数はスレッド情報 構造体を初期化し,実行中スレッドのリストに 加える.実行中スレッドのリストはスレッド情 報構造体の循環リストで管理される.. mjŒ»’. mDŒ’. . ï. î. ñ€ò スレッド生成関数 òlñ ó³ôDõlö÷ó³ö€ø*õù€ølú#ô„ö€ø*õû”ü ñ€ò エントリポイント òñ ý€þjÿ‡û ü ò ø „ù*ö €þjÿ „ ù äüTó³ô€õlö 

(6) ñ€ò エントリポイントへの引数 òñ ó³ôDõö ø „ù#ö Dþjÿ „ù€õö  ñ€ò スレッドのスタック領域 òñ ò  ù€õDó   ó³ôDõö  á 図î. ð. ÖÁÚy‹. ÖÁÚy‹. ÖÁÚË. åHÞ}â. . スレッドキュー スレッドキューモジュールはスレッドの停止と再 開を で行う.ミューテクスやブロッキング はスレッドキューを利用して,リソースへの アクセスを で行う.スレッドキューには,ブ. ƒÏÐ. スレッド生成関数. Ñ. t. −100−. h_ƒsh_Ð. hHƒshZÐ.

(7) ロックしたスレッドを保持するスレッドリストがあ り,キュー初期化関数とキュー追加関数とキュー解  に示す. 消関数により操作される.構成を図. È. 䉝䊒䊥䉬䊷䉲䊢䊮 䊨䉾䉪 䊨䉾䉪㑐ᢙ. 䊑䊨䉾䉨䊮䉫I/O䊶䊚䊠䊷䊁䉪䉴 ᓙᯏ. 䉨䊠䊷⸃ᶖ 㑐ᢙ. ㅊട. 䉴䊧䉾䊄䈱஗ᱛ. 䉝䊮䊨䉾䉪㑐ᢙ. ㅊട 㒠䉐䈜. ౣ㐿. 䉨䊠䊷ㅊട 㑐ᢙ. 䉝䊮䊨䉾䉪. ┙䈩䉎. ⸃ᶖ. 䊨䉾䉪䊐䊤䉫. ⸃ᶖ. 䉴䊧䉾䊄䊥䉴䊃. 䉴䊧䉾䊄䉨䊠䊷. 䉴䊧䉾䊄䈱ౣ㐿. 図. ÈlÈlá. ミューテクスモジュールの構成. 䉴䊧䉾䊄. 図. È€á. スレッドキューモジュールの構成. キュー初期化関数 キュー初期化関数はスレッドリストを初期化す る.キュー追加関数とキュー解消関数を呼ぶ前 にこの関数を呼ばなくてはならない. キュー追加関数 キュー追加関数は実行中のスレッドをキューで 待たせる.実行中のスレッドをスレッドリスト の末尾に追加し,スレッド停止関数を呼び出し, スレッドをブロックする. キュー解消関数 キュー解消関数はキューで待っているスレッド を再開させる.スレッドリストの先頭にあるス レッドを取り除き,スレッド再開関数を呼び出 し,スレッドを再開させる.. åHÞ. ƒÏlÐ ê­ëjì. ‹½‘„× ‹:‘„× ã ã. ƒ ÏlÐ ƒÏÐ. åHވå. ミューテクス ミューテクスはスレッドの排他処理を行う.開 発者はアプリケーション内のクリティカルセクショ ンをミューテクスで守り,スレッドセーフなアプリ ケーションを開発できる.アプリケーションは割り 込みを禁止することでアトミックな処理を行えるが, クリティカルセクション内の処理が長いと割り込み 禁止の期間も長くなってしまう.ミューテクスは短 い割り込み禁止期間でスレッド間の排他処理を実現 する.ミューテクスはロック状態を保持するロック フラグとスレッドキューを持ち,アプリケーション はミューテクス初期化関数とミューテクスロック関 数とミューテクスアンロック関数を通じてミューテ クスを操作する.ミューテクスモジュールの構成を 図 に示す. ミューテクス初期化関数 ミューテクス初期化関数はミューテクスを初期 化する.スレッドキューを初期化し,ロックフラ グをロックされた状態かアンロックされた状態 に初期化する.アプリケーションはミューテク スロック関数とミューテクスアンロック関数を 呼ぶ前にこの関数でミューテクスを初期化しな くてはならない.. ミューテクスロック関数 ミューテクスロック関数は割り込みを禁止し,ロ ックフラグをチェックする.ロックされていない 場合はロックフラグを立て,割り込みを許可し, 関数から抜ける.すでにロックされている場合 はスレッドキューのキュー追加関数を呼び出し, スレッドをブロックさせる.ブロックしたスレッ ドはミューテクスアンロック関数により再開さ れ,ロックフラグを立て,関数を抜ける. ミューテクスアンロック関数 ミューテクスアンロック関数はロックフラグを 降ろす.スレッドキューにスレッドが入っている 場合はキュー解消関数でブロックしているスレッ ドを再開させる.  ブロッキング ブロッキング モジュールはデバイスに対す  る入出力の機構を提供する.本稿では,  の ブロッキング を例に説明をする. のブ ロッキング モジュールには入力用モジュール と出力用モジュールがある.  入力用モジュール 入力用のブロッキング モジュールは,リン グバッファとスレッドキューを持ち,入力初期化関 数とデータ取得関数とデータ保存関数を通じて操作 される.構成を図 に示す. 入力初期化関数 入力初期化関数はリングバッファとスレッドキ  ューを初期化し, の受信完了割り込みを 許可する.アプリケーションはデータ取得関数 を呼び出す前にこの関数を呼び出さなくてはな らない. データ取得関数 アプリケーションはデータ取得関数を通じてシ リアルのデータを取得する.データ取得関数は データ保存関数によってリングバッファに保存 されたデータを読み取る.リングバッファにデー タがない場合,スレッドキューのキュー追加関 数を呼び出し,スレッドをブロックさせる.ブ ロックしたスレッドはデータ保存関数によって 再開される.. åHÞ dÞàß. ƒÏlÐ. È­Ë. ÈlÈ. ‹½‘€× ã. Ò. −101−.

(8) ‹½‘€×. データ保存関数  データ保存関数は のデータ受信完了割 り込みで呼び出され,シリアルからのデータを 読み取り,リングバッファに格納する.スレッド キューにスレッドが入っている場合,キュー解消 関数でブロックしているスレッドを再開させる.. ã. 䉝䊒䊥䉬䊷䉲䊢䊮 ᦠ䈐ㄟ䉂. 䊂䊷䉺಴ജ㑐ᢙ 䉨䊠䊷䈪ᓙ䈧. 䉝䊒䊥䉬䊷䉲䊢䊮. 䉴䊧䉾䊄䉨䊠䊷 䊂䊷䉺䈱಴ജ. ⺒䉂ㄟ䉂. 䉨䊠䊷䈱⸃ᶖ ಴ജน⢻ ㅢ⍮㑐ᢙ. 䊂䊷䉺ขᓧ㑐ᢙ 䊂䊷䉺䈱ขᓧ. 䉨䊠䊷䈪ᓙ䈧. 䊥䊮䉫䊋䉾䊐䉜. ഀ䉍ㄟ䉂. 䉴䊧䉾䊄䉨䊠䊷. 䊂䊷䉺䈱଻ሽ. 䊂䊋䉟䉴. 䉨䊠䊷䈱⸃ᶖ. 図. È ÎDá. 出力用ブロッキング. 䊂䊷䉺଻ሽ㑐ᢙ ⺒䉂ㄟ䉂. ഀ䉍ㄟ䉂. 図. 入力用ブロッキング. åHÞdޕÝ. çàè¸é. の構成. 量的評価として本ライブラリの基本性能を調べ,定 性的評価としてその他のプログラミングモデルとの 比較を行った.  基本性能 最適化なしでコンパイルした本ライブラリのコー   ドサイズは約 バイトである.スレッド つと  の とミューテクス つを使うプログ  % バイトのメモリを使用する アプリケー ラムは ションが使用する領域とスレッドのスタック領域を ( 含まない .各モジュールが必要なメモリサイズを 表 に示す.スレッドの切り替えは全スレッドが実  行可能であれば クロックで完了する. +! " は のプログラム領域と のメモリ領域を持つため,ほとんどの領域をアプリ ケーションが利用できる.. 䊂䊋䉟䉴. ȭˀá. çàè¸é. dÞàß. ˀ‰ ‹:‘„× 㠃ÏlÐ Ô È Ô. の構成. ƒÏÐ. 出力用モジュール 出力用のブロッキング モジュールはスレッ ドキューを持ち,出力初期化関数とデータ出力関数 と出力可能通知関数を通じて操作される.構成を図 に示す.. È. È Î. ‹½‘#Ê. × ã M   iDÈ­ËlÜ. 出力初期化関数 出力初期化関数はスレッドキューを初期化し,  の送信完了割り込みを許可する.アプリケー ションはデータ出力関数を呼び出す前にこの関 数を呼び出さなくてはならない. データ出力関数 アプリケーションはデータ出力関数を通じてデー  タを書き込む.データ出力関数は が出 力可能な場合,データをデバイスに出力する.出 力可能でない場合は,スレッドキューのキュー追 加関数を呼び出し,スレッドをブロックさせる. ブロックされたスレッドは出力可能通知関数に  より再開され, にデータを出力する. 出力可能通知関数  出力可能通知関数は からの送信完了割 り込みで呼び出され,データ出力関数によってブ ロックされているスレッドを再開させる.スレッ ドキューにスレッドが入っている場合は,キュー 解消関数でブロックしているスレッドを再開さ せる.. × ã. È­ËlÜlŠ!Û. モジュール. 表. ƒÏÐ. Èlá. Ñ Š!Û. ÎÔ Ô BÑ Ë È Î È. サイズ , バイト スレッド数 . 0/ スレッド数 . 1/ スレッド数 . /. モジュールの必要メモリサイズ. dޕÝ. ‹½‘„× 㠋½‘€× ã. . その他のプログラミングモデルとの比較 本節では,本ライブラリとその他のプログラミン グモデルをスケジューリングと電力消費の面で比較 する.まとめを表 に示す. ポーリング ポーリングを用いたアプリケーションでは,メ インスレッドがデバイスをループで監視するた め,スケジューリングを考慮する必要はない.し かし,入出力できなくても常に が動作する ため電力消費の面では非効率的である.本ライ ブラリはデータが入出力可能になるまで他のス をスリープさせ レッドに実行権限を渡すか るため,電力の利用効率は高い.. Ë. ÖÁÚy‹. 実装と評価. “ƒÖÁ׽˓tlp Á× pMTo × ã M i€È³ËvÜ yÇ Ô É {}xD×z*| ài³z*|»Ê k k TÇ Ü­É Î Î ¯Ë. 本稿では,本ライブラリを で使用 ! #" 社の 用に実装し, されている &% '! ( *) *) $ の でコンパイルした.定. ËÓ. スレッド・スケジューラ ブロッキング ミューテクス. ‹½‘„× ã. Ë. È. Ó. ÖÁÚË. −102−.

(9) 2 2. 2 2. 手法. 2 2. 特徴. 22. ÖÁÚy‹. スケジューリング. 電力消費. ○ × △ ○. × ○ ○ ○. ポーリング 割り込み イベントとタスク 本ライブラリ. 表. ˄á. ない時に している. J. まとめと今後の課題. ÖÁÚy‹. 既存のセンサノード用のプログラミングモデル は のアーキテクチャに密接しているため,開 発者にはスケジューリングや割り込みや電力消費な どの専門知識が要求される.この問題を解決するた めに本研究ではブロッキング とスレッドを採 用した.開発者はブロッキング の利用により, 電力の節約と短い割り込み禁止期間を実現し,プリ エンプティブマルチスレッドの利用により,プログ ラムの並行性を実現した. の実装はシリア 一方,現在のブロッキング ルのみ対応するが,より多くのセンサ等のデバイス への対応が望まれる.また,マルチスレッド化によ るオーバーヘッドを最小限に抑えるために,スレッ ド切り替えにかかる時間をより短くするための工夫 やメモリを節約する工夫が必要である.. ƒÏlÐ ƒÏÐ. 各手法の特徴の比較. 割り込み 割り込みを用いたアプリケーションでは,割り 込みが発生するまで をスリープさせられ るため,電力の利用効率は高い.しかし,割り 込みハンドラで長時間割り込みを禁止してはな らないため,スケジューリングを考慮しなくて はならない.本ライブラリでは割り込みハンド ラの処理はデータの格納やブロックしているス レッドの再開だけなので,長時間割り込みを禁 止することはない. イベントとタスク イベントとタスクを用いたアプリケーションで は,イベントでデータを読み取り,データの処理 はタスクに行わせるため,割り込みハンドラの 処理にかかる時間は短い.また,タスクがキュー がスリープするため電力消費の にない時は 面でも優れている.しかし,時間のかかるタス クによって,タスクの実行の遅延やキューが一 杯になる可能性がある.本ライブラリではスレッ ドはプリエンプトされるため,処理にどれだけ 時間がかかるかを考慮せずにアプリケーション を開発できる.. ÖÁÚy‹. ƒÏÐ. 参考文献 LjÈnɆ᪓{•kTiM“tlp ). #’ p»p á¯ÏÏ&KLKLKM) NBOjtKM) kntgÏvÚª|~t„„mDk¸p‚Œ‚Ï |~t„ „mDk¸p‚Œ€np~il{ˆo•Œ) iŒ  NQP­Œ»{•SR:Î*)  Ç Ë³É“{•k‚’Div o:ÛÁ {T!oa‰ t#O€{}iŒUG7{ˆMMT|­‰½×7)]Š0)Ö)LV7) ivxjW  t O€{}xDŒtlxd‰#XÚ ã )ˆáZ‘*†iv|p»Ê²ƒ²p~ŒZÊZÖÃtMBm€x€{•kTivp{}tlx ivxj‘* xDŒ{ˆ*x ! 㠁 k‚’€xDtlo} t !lru t|”Y‹ O€{•knt  wyx#z*{}|tx„Ê MTx#p~Œ ) Ç Î‡É 猿渡 俊介 川原 圭博 南 正輝 森川 博之 青山 á 友紀 篠田 庄司永原 崇範 ユビキタス環境に 向けたセンサネットワークアプリケーション構 ÌÍ (‹ʲkT*m Oj ) 築支援のための開発用モジュール ‰ ‰ の設計と実装 [ƒ Z½ Ë  #˳ÊsË Ñ ÎD#‰ Z:‘€電子情報通信学会技術研究報告 Ë #˳ÊsË \%a Ë  # Î (E) Ô Ç Ñ É†áª“ƒÖÁ×:˧“Vtvp# ) ’#p»p á¯Ï&Ï KLKLKM) NBOjt KM) kntgÏvÚª|~t„„mDk¸p‚Œ‚Ï |~t„ „mDk¸p‚Œ€np~il{ˆo•Œ ) iŒ NQP­Œ»{•S R *Ë )  Ç Ò ÉØ{}o}oaM‰ ]S)ˆ‰!‘*ÙT KÁkTÙTr <7 ^‰ _)ˆ‰ $ Ô t#tj‰:7× )ˆ‰!Ø^tlo}o}il| ‰! ‘ )}‰ ÖÃm€o}oˆ | _‰ V`)^w )^ivxD?Úy{}Œ»p | ‰!0 Š )½ ‘ )]Q)}á ‘*r„Œ»pT ×|‚k‚’€{ˆp­k¸pmD|a  V^{}|­k¸p~{ˆtxDŒu tlb | Zn[p KÁtl=| <l­ ‘*Tx€Ê Œtl|‚ŒT_‰ cdfehgikjml=e+jonBdfpqsr nt tQudEjvwudyxzdfu={dfp|`|Wik}{ ) &Î „7È  ~ p}{ nQp+{lw^p} €1‚tQlwd=pjoik}{7rSƒ&Ejmlw|`l‰ Q î Ñ %a Ë  ##(E) Ç Ó É 川原 圭博 南 正輝 森川 博之 青山 友紀鹿島 拓 á Ì!Í に 也 センサネットワーク開発用モジュール おけるソフトウェアデザイン及びプロトタイプ ‰ 情報処理学会マルチメ アプリケーションの実装 ‰ ‰ V^ƒÖeÐ:“°ÐË  Î ディア 分散 協調とモバイル( ) ‰ * )j Î  Ò „*#Î l\ Ü %ÂË  #Î (w) Ç Ô É†シンポジウム áª× ã M+ !#i€È­Ël Ü " ) ’#p»p  á¯Ï&Ï KLKLKM) i‡p~ †o ) knt+χ„r*xXÏ  |t„„mjk¸p~Œ¸Ï |~t„„mDk¸p kTil|~‡ ) ilŒ P il|»p {•S RË DÈ ) Ç Ü‡É† á $ {}xDi³z*| )Z’#p»p  á¯Ï &Ï Ke {}xDi³z*| ) Œtlm€|‚knî Tu tl=| !l  ) x€Tp¸Ï ) Ç î ÉBŽi³rl‰ V`)}ˆ‰ "d z*{}Œ ‰yXÚ )ZivxD$zltlxÛÁ ’€|~Txd ‰ _)ˆá 㠒€ x€­Œ‚‰ Ö "Hiv*x !mDi !lá× Øtoˆ{•Œsp~{}k× Q |t#ilk‚’p~Š t Z^npÊ KÁtl=| <l Owª`  Oj­€„ 4‘*r„Œ»pT†Œ ). ÖÁÚË. 3. 関連研究. 本節では関連研究を述べ,定性的な評価を行う. 4 57698 : 1; =< は で開発されたワイヤレス センサネットワーク向けの である.開発者は という 言語に似た独自の言語でコンポー ネントを記述し,コンポーネントを組み合わせるこ とで 用ライブラリやアプリケーションを 構築できる. はイベントとタスクを用いた アーキテクチャで構成されている. では開発者が を憶え,スケジューリ ングを考慮する必要がある.本ライブラリは でリンク可能なライブラリを提供し,プリエンプ ティブマルチスレッドによりこれらの問題を解決し ている. 4 ;

(10) >@?BA&C+D ECF " HG は 大学, , 大学, ,I で共同開発されたセンサノードである. のソフトウェアライブラリはセンサや無線通信を操 作するための関数を提供する. のソフトウェアライブラリはデバイス の入出力をポーリングで行うため,電力を多く消費 してしまう.本ライブラリは実行可能なスレッドが. Þàß. {ã x*rDБ ì ‹ Ö5ÛÁT| *oˆ r ˆ Б x€­Œ‚Ö:Ç î É Ö ã {}x*r€Ð‘ {}x#rDБ ã x€­Œ‚Ö ã {ˆx*rDБ. をスリープさせることで電力を節約. ŽÖeÖ. •Þ Ý ‘*†iv|p»Ê²ƒ²p~Œ ~ê HivxDk ilŒ»p | w Ø Xm€|~{•k‚’ Š!il|oˆÊ Œ|m€’D ƒx#p ~| ik¸p{}zl½ƒxDŒ»p{ˆpm„p~ ã ½ãeã wyoˆ­k¸p~|tx„Ê {•kTŒ ‘*†iv|p»Ê²{qp‚Œ ‘*†iv|p»Ê²ƒ²p~Œ. Ô. −103−.

(11)

参照

関連したドキュメント

スライダは、Microchip アプリケーション ライブラリ で入手できる mTouch のフレームワークとライブラリ を使って実装できます。 また

主として、自己の居住の用に供する住宅の建築の用に供する目的で行う開発行為以外の開

J-STAGEの運営はJSTと発行機関である学協会等

実習と共に教材教具論のような実践的分野の重要性は高い。教材開発という実践的な形で、教員養

充電器内のAC系統部と高電圧部を共通設計,車両とのイ

Altera Nios II フォルダを展開し、Existing Nios II software build tools project or folder into workspace を選択します(図 2–9 を参 照)。.

ALPS 処理水の海洋放出に 必要な設備等の設計及び運 用は、関係者の方々のご意 見等を伺いつつ、政府方針

運航当時、 GPSはなく、 青函連絡船には、 レーダーを利用した独自開発の位置測定装置 が装備されていた。 しかし、