オープンソースの組込みシステム用プロトコルスタック

 （第回  アワード応募書類 特徴の説明書）

阿部 司

吉村 斎

稲川 清

苫小牧工業高等専門学校 情報工学科
いる  は，ソースコード及びドキュメント等に  ライセンスを明記することで，幅広く，誰でも自由に利用・変更・配布が可能な，制約の少ないライセンス形態となっている．第三の理由は，
 の開発では，人的リソースに限り，まったくゼロからの開発が困難であったためである．
組込みシステムには，メモリ容量，重量，サイズ及び消費電力等の厳しいリソース制約がある．この中で，  ではメモリ容量の制約，特にのメモリ容量の制約への対応を最重点課題としている．また， としてはリアルタイム （以降）を利用することから，リアルタイム性の制約もある．一方，  のベースとした は，動的割当て構造体とリスト構造を積極的に使用しているが，メモリ容量やリアルタイム性の制約か
 では，動的割当て構造
ら，組込みシステム用体とリスト構造を使用すべきではない．このため，
 では動的割当て構造体とリスト構造を使用していなように， の  プロトコルスタックに変更を加えている．
 は，μ  
対応する組込みシステム用
! 仕様のスタンダードプロファイル  である．
具体的には，高い実行性能と小さい使用量から   プロジェクトで開発され，オープンソースのフリーソフトウェアとして配布されている " を実装のターゲットとしている．また，応用プログラムとのインタフェースとなる  には，
    # を実装している．本仕様
は，（社）トロン協会の $%&&&  技術委員会により策定され，
 専門委員会により''( 年 # 月に認定された．仕様では，組込みシステムのプロトコルスタックに求められる以下に示す性質が挙げられており，  も対応している．

 の概要
インターネットは，常時接続の普及などにより，生活の中で必要不可欠な媒体である．  ½ は，組込みシステムをインターネットに接続するために必要な  プロトコルスタックである．組込みシステムにはメモリ容量，重量，サイズ及び消費電力等の厳しいリソース制約があり  ，特に厳しのメモリいメモリ容量に関して，  は必要量が約   バイト，  のメモリ必要量が約  バイトと少ないメモリ容量で実装している．
また，組込みシステムのリアルタイム  におけるリアルタイム性の制約も考慮して設計している．
 の開発の当初の目的は，研究・教育における利用であったが，   プロジェクト 及び，経済産業省東北経済産業局の委託による「組込みシステム・オープンプラットフォームの構築とその実用化開発」プロジェクトへの参加により，広く産業界における利用も，現在の開発目的としている．このため，幅広く誰でも自由に利用・変更・配布できるように，オープンソースの形態で開発し配布している．オープンソースの組込みシステム用
 プロトコルスタックとしては， や
 を応用した例があるが，当初から組込みシス   を実装しテムを対象とし，た例はない．

 の特徴

 は，  の  プロトコルスタックをベースに開発を行った．その第一の理由は， のベースとなった   の プロトコルスタックに実装されている各種アルゴリズムは，長年のインターネットにおけるプロトコル開発の成果が反映され，枯れたソフトウェアとなっており，事実上，他のシステムの見本となっていることである．第二の理由は， の当初の開発目的である研究・教育における利用において，誰でも自由に利用・変更・配布できるようにするためである． ライセンスで配布されて¯ 最小のコピー回数¯ 動的メモリ管理の排除¯ 非同期インタフェース¯  毎のエラーの詳細化
組込みシステムに使用されているプロセッサの規模にも幅があり，メモリ容量が数  バイトの (ビット  から，汎用プロセッサ並みの仮想記憶システムを備えた  ビットや  ビットのプロ½ 名前の由来は，  の略称である

に，インターネットのを組合わせている．

セッサまで存在している．また，あまりにリソース制約の厳しいプロセッサに，  プロトコルスタックを実装することは現実的ではない．このため，  では，以下に示す規模の組込みシステ
ムを対象としている．

われわれは，
年 9 月より，研究・教育に使用する目的で組込みシステム用の  プロトコルスタックの研究を開始した．当初は， の プロトコルスタックを使用し，  としてソケットインタフェースを実装していた．しかし，メモリ必要量と  で多用されている動的割当て構造体とリスト構造等の問題から，を  として組込みシステムに実装することは困難であった．同様に，ソケットインタフェースに関しても，多様なネットワークインタフェースに対応するため，  だけ必要な場合は，オーバーヘッドが大きく，  が対象とする規模の組込みシステムに実装することは困難であった  ．
このため，  年  月より，組込みシステム用
 として   プロジェクトの "
カーネル，  の  として  
 を 採用し，実装タ ーゲットプロセッサには,( , シリーズの ,( (，ネットワークインタフェースはシリアルインタフェースを利用した  として，改めて  の研究・開発を開始し，  年  月には，簡易 444 サーバを動作させることができた 9 ．また，同年 9 月には，    仕様に規定されているノンブロッキングコール機能を除いた基本機能の実装を完了した ( ．
  年 ( 月からは，「組込みシステム・オープンプラットフォームの構築とその実用化開発」プロジェクトに参加するとともに，実装ターゲット
プロセッサには ,( , シリーズの ,( (及び ,( '，ネットワークインタフェースは 互換のイーサネットインタフェースとし   仕様に規定されているて，基本機能の全ての実装を開始した．その実装が完了した   年  月に，  リリース ! の一般への公開を開始しており，  年  月末までに，約# のサイトにダウンロードされている．また，複数の企業が採用予定であり，「組込みシステム・オープンプラットフォームの構築とその実用化開発」プ
ロジェクトにおいても， 企業， 公設試で を採用しており，その波及効果が期待されている．

)* メモリ容量は，  が ( バイト，が バイト程度で，メモリ管理ユニットなし．
)*  の各ヘッダは， ビット単位で処理すると効率が良いため， 言語の + が  ビットで，レジスタと  も  ビットが望ましい．
組込みシステム用のプロセッサの現状では， 
メモリ容量には比較的余裕があるが，メモリ容量はあまり余裕がなく，メモリ容量の制約への対応が重要である．これらを考慮して， では，対象とした組込みシステムの規模に合わせて通信機能を，次のように設定している．

)*  のオプションは  のみ実装する．
)*  での転送，データグラムの分割・再構成，及びオプションは実装しない．

)* ネットワークでの配置は，単一リンクの終端ノードを想定している．

)* データリンク・物理層は，単一のネットワークインタフェースのみ実装する．

開発の経緯動作環境と使用したツール

研究・開発の初期より現在まで，実装ターゲットに関して，プロセッサには，ルネサステクノロジ製,( , シリーズの ,( (，,( ( 及び,( ' を使用している．,( , シリーズは，
 ビット  であるが，レジスタと  が ビットである．内蔵  容量に余裕はあるが，内は ,( ( 及び ,( ' でも  バ蔵を増設している．
イトと小容量のため，外部実装ターゲットのネットワークインタフェースを以下に示す．

¯ 内部ループバック¯ シリアルインタフェースを利用した ¯ 互換のイーサネット

これ以外にも「組込みシステム・オープンプラットフォームの構築とその実用化開発」プロジェクトにおいて，プロセッサとしてルネサステクノロジ製
,，  製 -./01．イーサネットイン
タフェースとしてはワイ・デー・ケー製 -./01
用  の  23  へも実装されている．
 自体の開発に関して，われわれの開発環  上で動作する -785
境では，4&.56 と，クロス開発用ツールである 3  コンパイラと 3 バイナリツール等を使用しているが，"カーネルと同じ開発環境であり， 等の開発環境で開発を行うことも可能である．

 の実装  のネットワーク階層構成
ネットワークインタフェースとしてイーサネットを組み込んだ場合の  のネットワーク階層構
成を図  に示す．  は，機種依存性をできる
 に対だけ排除し，多様な組込みシステム用
 カーネル内応するため，組込みシステム用
 カーネルと応用プ部に組込むのではなく，ログラムの中間のミドルウェアとして位置付けてお カーネルが提供する各り，  内でも，種サービスを利用して動作してる．以下に，各ネッ

応用層   トランスポート層

物理層





〜ヘッダ

 



ネットワーク層
データリンク層応用プログラム図  ネットワークバッファ構造体（ ）

イーサネット制御
  制御ハードウェア カーネル)*図  ネットワーク階層構成

 では，静的経路表から決定したノードに データグラムを配送するのに必要な 
アドレス解決のための 要求の送信， 応答の受信，及び アドレス情報のキャッシュを実装している．また，他のノードから アドレス解決の  要求の受信と，のそれに対する 応答の送信も実装している 代理応答機能は実装していない．
が，)9* イーサネット制御は， に依存しないイーサネットの制御で，イーサネット出力タスクとイーサネット入力タスクで構成している．
 で要求されるリアルタイム性を損なわないために，セマフォにより  制御との同期を取り，実際の入出力はイーサネット出力タスクとイーサネット入力タスクが行うよう実装している．
)(*  制御は， に依存するイーサネットの制御で，現在の  の実装においては，実互換  を使用
装ターゲットとして した．リアルタイム性への対応を考慮し，入出力割込みに要する時間を短縮するため，セマフォによりイーサネット制御と同期を取るだけで割り込みを終了する．

トワーク階層の概要を示す．

)*     において，機能レベルでは基本機能を実装しており，組込みシステム特有のノンブロッキングコール，省コピー ，及びコールバック関数も実装している．
)*  では，性能向上目的の拡張機能は未実装である．しかし，以下の  の基本制御アルゴリズムは実装している．
¯ 遅延確認応答¯ 再送制御¯ 輻輳回避¯ 高速再転送と高速リカバリ
 のオプションは，最大セグメントサイズ（ ）オプションのみ実装している．現在の では， データグラムの分割・再構成機能は未実装であるが，  では  オプションにより， データグラムの分割を防ぐことができる．また，  の再送制御と組込みシステム特有のノンブロッキングコールの処理のため，応用プログラムとは独立に動作する
 出力タスクを実装している．
)*  は，基本的なプロトコル処理は単純であるが，組込みシステム特有のノンブロッキングコール処理のため，応用プログラムとは独立に動作する  出力タスクを実装している．
)*  では，ネットワークでの配置は終端ノードのため， データグラムの転送機能は実装していない． データグラムの分割・再構成機
能は実装する予定であるが，現在は未実装である．  に関しては  オプションにより分割は回避可能であり， に関しても，#
オクテット以上のデータグラムを送信する応用プログラムは稀である．したがって， デー
タグラムの分割・再構成機能が未実装でも問題は少ない．また，経路選択に関して， からイーサネットへの出力の前に，配送すべきノードの  アドレスを決定しなければならない．
 では，エントリがターゲットノードの アドレス，サブネットマスク及びルータから構成される単純な静的経路表を検索するように簡素化している．
)#*   では，単一リンクの終端ノードに必要と考えられる   エコー機能，配送エラーの受信と報告機能のみ実装している．

 ネットワークバッファ（） に実装されているプロトコルスタック

では，プロトコルスタック内における各層間のデータの受け渡しに使用されるメモリブロックは，$%:と呼ばれる固定的なメモリブロックによるリスト構造で実装している．この $%: は，プロトコルスタック内での処理中に動的メモリ操作が行われる等の問題がある．それに対し，  では，  仕様で求められている動的メモリ管理の排除を行うため，図  に示すように，固定長メモリプールから割り当てる + %: を用いてメモリブロックを実装している．
図  で，%: にはネットワークインタフェースのヘッダとペイロードが入る．%: のサイズの種類は
(，#，#，;  及び物理ネットワーク層の にヘッダを加えた長さである．%: のサイズの種類と各種類の個数は，応用プログラムの構成やネットワーク負荷によりコンパイル時に決定するよう工夫を加えた．
ネットワークインタフェースとしてイーサネットを組込んだ場合，イーサネットインタフェース入力では， 制御  の受信バッファに記憶されているフレーム長から + %: を割当てる．イーサ
ネットインタフェースへの出力では，  出力で， 通信端点から算出したサイズの + %: を割当てる．入出力いずれも，割当て前にデータサイズ表    のメモリ必要量機能

バイト
バイト

表    のメモリ必要量の固定分機能


計
バイト
バイト
バイト

計
バイト



 !"" #$% %"&

!

" #$

" #"' &'' ('#$ "$&



#

' ('#

' (#



&

 '&'

 ''





&

 '&'

 ''&(!#(!#

&(!#(!#

#&

 !'

 '('



&

 !'

 !'
 $(

  共通機能

汎用通信機能イーサネット  管理
小計
応用プログラム
 カーネル合計&

 $( $(  共通機能

 "'

 ""

! '( '&! '&"$ $'"汎用通信機能小計
イーサネット  管理合計

! $'

$#

!("&% '#&'$ !(#$' "!#! '&'' #'

" &"' !#'!& (#!' #'&( ""& ##

&( '%'

表 ! )*+機能は確定しているため，これ以降，+ %: の動的メモリ操作は行わない．
  のメモリ必要量表  は，ネ ットワークインタフェースとして
 互換のイーサネットを組込み，応用プログ
ラムとして  エコーサーバと  エコーサー
バを実装した時の  のメモリ必要量であり，応用プログラムと " カーネルを含めて，対象とする規模の組込みシステムのメモリ容量の制約を満たしていることがわかる．この中で，  が関係するネットワーク階層のトランスポート層から+ %: 管理までのメモリ必要量は，が ';バイト，  が #;9 バイトである．
メモリ必要量には，以下に示すように，  内部のタスク用のスタックと，応用プログラムの構成やネットワーク負荷に依存する変動分が含まれていメモリ必要量の変動分は，ターゲッる．この容量に適合するようトの組込みシステムのに調整し，削減することが可能である．

& $(

#&

 ""

 ''"

"' (' %'&%

! '&"

! $&&

&

$#

(#!'&'$ !(#'$ (#のメモリ必要量の固定分

計

バイト

バイト

バイト



! '%

!% %"#'! '("$!#

$ %#

$ (!



#'"

' %'

$ $#

! "&'

" %''! ('"  共通機能

汎用通信機能合計'""# ("&( #" $"

' !$'

$ ""

 !#"!( '%"!" "## "#'

!( #('% $!#の  個のタスクを実装しており，スタックの; ( バイトを除いたメモリ必要量の固定分は ' バイトである．
)#* + %: 管理のメモリ必要量中 ;#  バ
イトは，固定メモリプールに割り当てた + %:であり，メモリ必要量の固定分は  バイトである．+ %: の割り当て量は，応用プログラムの構成やネットワーク負荷により調整する必要があるが，表  では全種類を  個ずつ割り当てている．

)* ， 及び汎用通信機能には独立したタ

表  は，  が関係するネットワーク階層のトランスポート層から + %: 管理までのメモリ必メモリ必要量の要量の固定分を表しており，固定分は  バイトである．
   とのメモリ必要量の比較
 との比較対象として，  から汎用通信機能までに関して， リリース !( 
プロトコルスタックのメモリ必要量の固定分の調査を行った．対象とした機能は，  と同等の基本機能であるトランスポート層の ，及び  ，ネットワーク層の  と，及び 共通機能と汎用通信機能である．調査方法は，  で実装ターゲットとした ,( ,用の 8-- コンパイラ用いて，  プロトコルスタックに関係するソースコードをコンパイルし，メモリ割り当てを解析した．
結果を表  に示す．この表と表  に示す のメモリ必要量の小計までの固定分を比較すると， の ;( バイトのメモリ必要量スクを実装しており，スタック領域として各;  バイトのを割り当てている．
)* ソケットインタフェースのソケット，プロトコ
ル制御ブロック，及び  制御ブロックに対   仕応する制御構造体が 様により規定されており，その数は，応用プログラムの構成により異なる．この例では， と  のメモリ必要量に，この制御構，  通造体である  受付口（ バイト），及び  通信端点信端点（ バイト× ）（ バイト）が含まれている．
)*  のメモリ必要量は，全て
キ
メモリ必要量の固定分ャッシュであり，
 キャッシュは  エンは バイトである．
トリ当り  バイトで，コンパイル時に個数を変更可能である．この例では， エントリ分を割り当てている．
)* イーサネットには，出力タスクと入力タスク

スト構造を排除し，メモリ必要量の増加を抑えた< 用の  の実装を行っており，< に対して，全体のメモリ必要量の増加率は約 #=，特に，制約の厳しいのメモリ必要量の増加率は約 =で実装することができている．必要とされる機能はほぼ完成しているので，今後は品質の向上を図り，これまでと同様に，幅広く，誰でも自由に利用・変更・配布できるように，オープンソースの形態で配布する予定である．
 の研究・開発は，次に示す各機関
謝辞からの支援を頂いた．この場を借りて，各関係機関の皆様に感謝する．

表 ' )*+の  制御用構造体
構造体
サイズ
バイト
ファイル記述子
"ソケット#&"" 制御ブロックプロトコル制御ブロック
%#
合計
'(

に対して，  のメモリ必要量は ( バイトとなった． に対して約 # のメモリ必要量となり，制約がより厳しいのメモリ容量に十分対応できる結果が得られた．同様に，  メモリ必要量に関しても，の 9;9 バイトの  メモリ必要量に対して，
 は ;9 バイトであり，約  の メモリ必要量となった．
   との  制御用構造体の比較
 の  では，表  に示す構造体によりコネクションの状態を管理している．各階層での独立性と汎用性を目的として，ポインタが多用されており，  のみの単一のネットワークシステムには不要な項目も多い．
 で対応する  制御用構造体は， 受付口と  通信端点である．最適化することにより，これらのメモリ必要量は， コネクション当り  受付口が  バイト，  通信端点が バイトの合計  バイトで， の合計 9
バイトの約  となっている．

¯ 財団法人道央産業技術振興機構様，テーマ「組込み型制御システム用  プロトコルスタックの開発」¯ 株式会社 ドコモ北海道苫小牧支店様¯ 経済産業省東北経済産業局様 （委託先管理法人> 財団法人みやぎ産業振興機構様），テーマ「組込みシステム・オープンプラットフォームの構築とその実用化開発」

参考文献

 高田広章> 組込みシステム開発技術の現状と展
望; 情報処理学会論文誌; ?./! ; @@! ' A'() *!
  " プロジェクトホームページ>
  !
  プロジェクトホームページ>
   !
 坂村健（監修）; 高田広章（編）>   !
仕様 ! ! ; トロン協会 ) *!
# 高田広章（編）>     仕様
! ! ; トロン協会 )''(*!
 阿部司; 吉村斎; 久保洋> 組込みシステム用
 プロトコルスタックの実装と評価;
情報処理学会論文誌; ?./! ; @@! #(A#') *!
9 阿部司> 群知能機械組込み用基本通信ソフト
ウェア;   年度精密工学会春季大会論文集;@!  ) *!
( 阿部司> 組込みシステム用ネットワークインタフェースに関する研究; 4  第  回組込

今後の計画
今後のインターネットでは，実験段階を終え，普及段階に入ろうとしている  バージョン （以下<）への対応が不可欠であるが，< のアドレスは  バージョン （以下 <）の  倍の (ビットと大幅に拡大したほか，アドレスの自動設定機能などのため，メモリ必要量への影響が大きい．
組込みシステムの < への対応に関しては，, プロジェクト ' において，非  系ディジタル機器への適用に向けた < 最小要求仕様の検討  が行われ，< 最小ホスト仕様が規定されている．現在われわれは，この < 最小ホスト仕様をターゲットとし，「組込みシステム・オープンプラットフォームの構築とその実用化開発」プロジェ
 に適
クトのテーマとして，組込みシステムと合するよう < 用  の実装を行っている．
実装方法に関して， プロジェクト  による < ソフトウェアは，フィールドで十分に検証されており，< 用  の実装のベースとしても最適である．しかし， を実装ターゲットとしているため，動的割当て構造体とリスト構造を積極的に使用しており，組込みシステムを対象とする  に，そのまま適用することは困難である．このため，われわれは，動的割当て構造体とリ'

みシステム技術に関するサマーワークショッ
プ予稿集; @@! 99A( ) *!
, プロジェクトホームページ>

  !

岡部宣夫; 石山政浩; 井上淳; 筬島雅之; 坂根昌一; 左治木次郎; 野口敬; 宮田宏> 非  系
ディジタル機器への適用に向けた < 最小要
求仕様の検討; 情報処理; ?./! ; @@! ' A'#) *!
   プロジェクトホームページ>
!
#