KUMICO

COLUMN

組み込み制御に関わる「割り込み処理」とは

組み込みリアルタイムOSの中でも特徴的で、組込みの分野では切っても切れない関係にある割り込み処理。割込み自体はCPUの機能であり、OSの機能そのものではないのですが、組み込み機器のリアルタイム性に大きく関係しています。ここでは組み込みOSにおける割込について、分かりやすく具体的に解説していきたいと思います。

割り込み処理とは

割り込み(インタラプト)とは、ソフトウェア(software)の処理フローとは非同期で発生するイベントを制御する仕組みで、CPUの外部からの信号で発生するハードウェア割り込み(外部割込)と、ソフトウェア内部のトリガで発生するソフトウェア割り込みの2種が存在します。正確に言えば、ソフトの異常(ゼロ除算などCPUが計算不可能な処理行うなど)を検知して同期で発生する、例外と呼ばれる処理も割込みの一種です。しかし、ここでは組み込みOS(embedded operating system)のリアルタイム性における、ハードウェアの割り込みを中心に説明させて頂きます。

小難しい表現をしてしまいましたが、組み込みOS(エンベデッドos)のリアルタイム性におけるハードウェア割り込みを簡単に表現してみます。割り込みとは「組込みコンピュータのボタンが押された」「物が動いてセンサが反応した」など、外部からのイベントを検知するための機能のことです。Windowsなどのパソコン(PC)・家電・自動車・電子機器・モバイル機器・音響機器・情報通信機器など制御系のデジタル機械などで、当たり前のように使用されています。

外部イベントを拾う方法として、ポーリングと割り込みという2つの代表的な検知方法があります。この2つについて、CPUを「仕事の依頼をする上司」に、外部デバイスを「仕事の依頼を受ける部下」に例えて、外部デバイスのイベントである「部下の仕事の完了」がどのように扱われるかを比較してみましょう。

ポーリングとは、定期的にチェックする仕組みです。上司は毎朝など決まった時間に仕事が終わっているか、部下の状態をチェックしに行きます。この仕組みの良い所は、部下側に報告する為の仕組みが特に不要なことです。部下は単純にタスクを行えば良いだけで、上司が仕事を終わっているかを勝手に確認しにきてくれます。逆に悪い所としては、実際にタスクが終わったタイミングから少し遅れてそれに気が付くという点です。部下が13時に業務を終えたとしても、翌日の朝になるまで上司は仕事が完了している事に気が付きません。特別な急ぎがないような、定常的な作業報告などに向いています。

割り込みとは、そのイベントが発生した瞬間に通知を受ける仕組みです。部下は業務が終わった瞬間に、上司に口頭で報告しに行きます。この仕組みの場合は、部下がタスクを終えた瞬間に上司はそれを知る事が出来るかわりに、自分の仕事中にいつ話しかけられるか分かりません。上司は部下に話しかけられた瞬間、今まで行っていた業務をどこまでやったかが分かるようにメモ書きして保留した後、部下の口頭報告を聞くことに一度専念する必要があります。部下の報告を聞いて、それに応じた次の作業指示を行った後に、先ほどのメモを見て自分の業務の続きに戻ります。よって、割り込みは急ぎの作業に対する報告や緊急時の連絡などに向いています。

この例だけを見ると、組み込み制御において割り込みの方が便利(社会人として当然)の様に見えますが、ポーリングを選択した方が良い場合も多数あります。例えば、10人の部下にそれぞれ仕事をお願いしている状態を想定してみましょう。1回の報告で上司の業務は10分止まるものとします。これを全て、組み込み制御における割り込みで仕事の完了報告を受ける事にします。すると最悪のケースで、同時に10人が仕事の完了報告をしに来た場合には、上司の仕事は最大で100分止まります。つまり上司自身が行う業務は、最悪のケースを想定して、1時間40分を余計に見積る必要があります。単純に実施したら2時間で終わる仕事が、最悪3時間40分かかるということになります。

複数のタスクがある中で、どのタスクをいつまでに行う必要があるのかを整理した上で、ポーリングか割り込みかを検討する事が重要です。「年間行事予定表の作成など今月中に終われば良い」など急ぎではないモノについては、上司の重要な業務を止めてまで報告せず、空いている時にチェックして貰えば良いかもしれません。しかし、「今日中に提出しなければならない見積書が間に合わない」といった問題報告については、急いで上司に報告して判断を仰いだ方が良いでしょう。

組込みOSにおける割り込み処理

割り込み処理がどの様なモノかというイメージを掴んでもらったところで、話を上司の例から組み込みシステム(エンベデットシステム)のリアルタイムシステム(real time systems)の話に戻しましょう。組み込み制御が行われている最中に、組み込みOSなどに割り込みが発生した時の動きは、上記の例の上司と基本は同じです。CPUの割り込み用端子にトリガとなる電気信号(割り込みイベント)が入ると、現在実行している組み込み制御の作業(タスク)状態を保存して一時停止し、割り込みハンドラと呼ばれるその割り込み制御に対応した処理を開始します。そして、割り込みハンドラの作業が終了した後に、保存しておいたタスクの状態を復元して元の組み込み制御のタスク作業に戻ります。

高いリアルタイム性を求められる組み込みシステム(エンベデッドシステム)の組み込みOSでは、割り込み処理が必須であるといっても過言ではありません。けれども、単純に組み込みOSに割り込み制御を使用すれば、組み込みOSのリアルタイム性が向上するとは限りません。組み込みOSに割り込みを使用する際には、「割り込み処理によって、他のリアルタイム性を求められている処理が遅延する事がある」「割り込み処理にも遅延が発生する事がある」という点に気を付ける必要があります。以降、それぞれの場合について簡単に説明しておきたいと思います。

割り込み処理による他タスクの遅延について

組み込み制御の最中に割り込みが来ると、現在作業中のタスクは一時停止されますが、この時タスクのプライオリティ(優先度)は関係ありません。どんなに高い優先度のタスクを行っていても、割り込みハンドラと呼ばれる割り込みイベントに対応した制御・管理が優先して実行されます。よって、割り込みハンドラの中に長時間かかる作業を実装してしまうと、他の高優先度タスクの時間制約(デッドライン)を守れなく恐れがあるので、注意が必要です。通常は、割り込みハンドラの中には必要最低限の制御イベントの受け付け作業のみ実装し、制御イベントに対応した作業は別のタスクにさせたりします。先ほどの上司の例に当てはめれば、部下が報告に来た際にその場で次の作業について長時間話し合った結果、上司自身の仕事が予定通り終わらなくなってしまった、という状況に似ています。報告が来た際に次の作業の方向性だけ決めて、詳細は別途話し合いの場を用意する事でこの問題は回避できます。

汎用OSでは、ソフトウェア開発者・システム開発者・組込み技術者・システムエンジニア(SE)(※場合によって異なると思います)が、システム開発(system development)・組込み開発・組込ソフトの開発・組込みシステム開発・システム構築・機械設計・情報システム構築・機械開発などで、制御ルーチンを割り込みハンドラ内で直接動作させず、専用のスレッド側で制御させるプログラム(pg)を取り入れている場合もあります。つまり、itの技術者・エンジニアが、割り込みハンドラの処理を最小化させるように、システム設計・ソフト開発・機械開発・機械の設計・業務システム設計を行っているという事です。しかし、組み込みリアルタイムOSでは、組み込み制御に求められるリアルタイム性に応じて割り込みハンドラ内で即座に応答制御するのか、タスク側で応答制御させるのか、などを決められるようにシステムの開発が行われています。よって、it技術者・itエンジニア・機械系エンジニア・情報エンジニア・業務システム設計の技術者・ソフトウェア開発者は、製品の組み込み制御に合わせて割り込みハンドラ内の処理を実装していくのです。

割り込みの遅延について

ソフトウェアの処理の中には、不可分操作と呼ばれる1つのタスクとして纏めてやってしまわないといけない作業があります。この不可分操作の実現の為に、「割り込みの禁止」機能を使用する場合があります。例えば、自動販売機で「お金を入れる」「ボタンを押す」「商品を受け取る」「お釣りを受け取る」という作業は、不可分操作として考える事が出来ます。Aさんがお金を入れた後、割り込みでBさんが自動販売機を使ったら、Aさんのお金がBさんの所に行ってしまいます。 Aさんが「お金を入れる」作業を行ってから「お釣りを受け取る」作業を行うまでの間、割り込みを禁止するべきです。組み込みOSで割り込みが禁止されている間は、受け付けられた割り込み制御のイベントは保留され、割り込み禁止が解除された後で処理されます。よって、ソフトウェアで割り込みを禁止している所があれば、最大で割り込みを禁止している区間の処理時間分、割り込みハンドラの処理開始が遅れる可能性があります。よって、ソフトウェアで「割り込み禁止」をする箇所は全て、組み込み制御における割り込み処理の遅延を、許容できる時間内に収める必要があります。

組込系エンジニアとして働こう

設計エンジニアとして新卒で就職を考えている方、組み込みOSなど設計の仕事を経験したことのある方、どちらにしてもマイナビエージェントなど転職情報サイト・求人転職サイトの求人システムを使って、日本や世界のメーカーや株式会社などの企業情報を集める必要があります。技術系転職サイト・求人サイトのサービスで、能力(スキル)・キャリア・資格・年収・月給などオープンな求人情報を得ることができます。システム開発の流れ、ソフトウェア開発の流れが分からない未経験者でも、エンジニアの転職を目指すのであれば、アルバイトとして開発の仕事が見つかるかもしれません。いずれにしても、組み込みOS・組み込み制御など組み込みシステムの未経験者であるなら、「エンベデッドシステムとは」「機械エンジニアとは」「ソフト開発とは」といった質問には即答できる必要がありますし、半導体・linux・C言語・組込み技術など基本的な知識を身に着ける必要があります。

個別相談も承っております。下記よりお申し込みください。

個別相談会申し込み

関連記事

OTHER COLUMN

MORE  

まこちゃんブログ

NEWS

MORE  

PARTNER

  • Intel
  • Xilinx

お探しの組み込み製品はキーワードで検索!