組み込みシステムにおける割り込み処理の重要性:Windows Embeddedセミナーレポート(1)(2/2 ページ)
Windows Embedded組み込みセミナーが仙台で開催。大阪電気通信大学の南角准教授が、割り込み処理の重要性を語った。
組み込みに必要な“割り込み処理のリアルタイム性”
そんな南角氏が大学で取り組んでいる研究テーマが「割り込み処理のリアルタイム性を向上させる研究」だ。
割り込みというのは、外部から信号を入れて、現在動いているソフトウェアとは別の動きをさせること。CPUやOSなどにもこの割り込みが使われている非常に重要な機能だ。
「2005年ころに自動車のキーレスエントリーの不具合が自動車メーカー各社で起きた。携帯電話とスマートキーを一緒にポケットに入れて自動車に乗ると、中からドアが開かなくなるというもの。原因は、キーレスエントリーのECU(Electronic Control Unit)向け電波に携帯電話の電波が割り込んでしまったために起こったもの。この不正な外部割り込みにより、キーレスエントリー側の割り込みスタックがオーバーフローしてしまった。このように割り込みの開発は非常に重要」(南角氏)。
経済産業省が調査した組み込みソフトウェア産業実態調査報告書によると、組み込みシステムのターゲットOSは何種類使用しているかの問いに対し、「使用していない」が31%もいるという結果が出た。「これは件数ベースなので、OSを使用しない組み込み製品は安価なものが多いだろうから、数量ベースになるともっと比率は高まるだろう」(南角氏)。
続いて南角氏は、三菱電機のある組み込み製品(OS使用なし)における市場流出不具合(市場に製品が流通してからの不具合)の分析をしたグラフを紹介した。
「注目したいのは、リアルタイム設計が不具合要因の4割近くを占めているという点。これも割り込み処理のリアルタイム性をもっと向上させなくてはいけないという実例。OSを使っていない組み込みシステムで並列処理を行うには、割り込みしかない。つまりこの製品においては割り込み処理の部分をしっかり作らないといけないということ」(南角氏)。
現在の割り込み処理は“一長一短”
では現状の組み込みシステムでは、この割り込みをどのように行っているのだろうか。
まず南角氏が挙げたのは「タスクによる割り込み処理の実行」という方法。リアルタイムOSを搭載してタスク、スレッドあるいはプロセスにより並列処理を実現し、割り込み処理自体の処理は最小限にして、処理本体はタスクで実行する。リアルタイムOS自体は、割り込み処理を直接制御できない。
「割り込みが来たときにその処理をタスクに任せるだけ。だが例えばPentiumだと割り込みだけで255種類ある。割り込み処理するだけにタスクを255個走らせることなど普通しないので、実際にはこの方法は使われていない。ではどうするかというと、優先度を付けたタスクを用意しておいて、割り込み処理を関数としてキューに登録する。するとそのタスクがキューのイベントを順番にやる。割り込みというのはタスクより優先度が高いので、割り込みが終わった後に優先度の高いタスクから処理していく。これの欠点は、割り込みに優先度があっても処理に反映できないということ」(南角氏)。
別のやり方として南角氏は、優先度の低い割り込み処理がほかの優先度の高い割り込み処理の要求を処理するという方式も紹介した。
「割り込みを登録するまでは一緒だが、それを処理するのはタスクではなくて割り込み処理がする。ただし優先度の一番低い割り込み処理。この方式は、Windowsのデバイスドライバで採用されているもの。ただこれも、前述した方法と同様に割り込みの優先度を処理に反映できない」(南角氏)。
単純にハードウェアの割り込みを利用した場合ではどうだろうか。
「非割り込み環境をメインループでぐるぐる回しておいて、そこに割り込みが発生するとそれを処理する。CPUの場合は割り込みの優先度と割り込みの禁止許可の2種類があって、ハードウェアの割り込みは基本、全割り込みを禁止にした状態で入ってくる。そのために、割り込み処理中に別の優先度の高い割り込みが入ってきたとしてもそれを受け付けない。最初の割り込み処理が終わってから次の割り込み処理に移る」(南角氏)。
CPUの性能が十分で、割り込み処理が複雑でない場合は、こういった簡単な処理がバグも少なくていいが、これでは性能が間に合わない場合、フラグ方式というのがある。
「自動車のECUなどはこのフラグ方式を採用している。割り込みは、単にある処理が必要かどうかというフラグを立てるだけ。メインループでそのフラグを見て、その処理を行うかをフラグで判断する。割り込み処理に伴う割り込み禁止はフラグのON/OFFをするわずかな時間のみでいいため、時間が少なくて済む。だがこれも問題があり、割り込みの優先度が反映されないのと、処理の種類が増えるに従って、メインループも大きくなってしまうため処理周期が長くなってしまうので結局間に合わないということになる」(南角氏)。
現在、最も広く使われている割り込み方式が「多重割り込み」だ。
「CPUの外部割り込みに優先度がある場合はそれを利用し、外部割り込みに優先度がない場合(RISC系CPUなど)は外部に専用の回路を設けるなどの方法で割り込みに優先度を付加。優先度の低い割り込み処理中に、優先度が高い割り込みが発生した場合は、実行中の割り込みを一時停止させ、優先度の高い割り込みを実行し、それが終了したときに一時停止させていた割り込み処理を再開させる。これは広く使われている方式だが、排他制御に問題がある」(南角氏)。
このように、割り込み処理にはさまざまあり、それぞれ一長一短あるが、南角氏が現在研究しているのは、割り込み処理にセマフォ(並列動作間で同期を取ったり割り込み処理の制御を行う機構)の考えを取り入れた「REMONセマフォ」だ。
「セマフォの要素を取り入れることで、メインループと優先度の低い割り込みの排他制御をしている最中も、優先度の高い割り込みを処理することができる」(南角氏)。
南角氏が率いる大阪電気通信大学 組み込みリアルタイムシステム研究室は昨年の春、Windows Embedded CE 6.0をPower Architectureテクノロジベースのフリースケール・セミコンダクタの通信プロセッサ「PowerQUICC II Pro」上に移植するという取り組みを、マイクロソフトやフリースケール・セミコンダクタ・ジャパンらとともに進めている(昨年3月30日のマイクロソフトの発表)。
現在はこの一環として、Windows Embedded CE 6.0の下に割り込みを制御するスケジューラ(REMONセマフォ)を入れることで、CEに割り込み制御の機能を付加するという取り組みを行っているという。
そのほかの講演
マイクロソフト OEM統括本部 OEMエンベデッド本部 シニアマーケティングマネージャの松岡 正人氏からは、Windows Embeddedの概要と技術ロードマップの説明、そして組み込み開発者コミュニティ「エンベデッドフォーラム」の紹介が行われた
関連キーワード
組み込み | モデルベース開発 | Windows Embedded 関連 | 組み込みシステム | Windows Embedded | 組み込みソフトウェア | 組み込み開発 | 組み込みOS 関連 | 組み込みOS
Copyright © ITmedia, Inc. All Rights Reserved.