エンベデッドシステムスペシャリスト 2015年 午前2 問09
問題文
多重割込みを処理するリアルタイムOSの割込みハンドラの説明として、適切なものはどれか。
選択肢
ア:処理の中断を極力避けるために、先頭で一時的に割込みを可能にした後は割込み禁止状態で処理を行う。
イ:先頭でタイマを設定し、一定期間は割込み禁止状態にして処理を行う。
ウ:タスクで行う処理を少なくするために、割込みに起因する多くの処理は割込み可能状態にしたまま、割込みハンドラの中で行う。
エ:割込み禁止状態での処理を極力減らして、割込み可能状態で動作する。(正解)
🔒 解説は解答すると表示されます
多重割込みのハンドラ設計【午前2解説】
正解の理由
多重割込みでは、ある割込みの処理中に、より優先度の高い割込みを受け付けられるようにする必要があります。そのため、割込み禁止状態で処理する区間をできるだけ短くし、基本的には割込み可能状態で動作させます。
この方針に合っているのはエです。割込み禁止状態が長いと、その間に発生した高優先度の割込みへの応答が遅れてしまいます。
解法ステップ
- 「多重割込み」が、割込み処理中にも別の割込みを受け付ける仕組みだと確認します。
- 割込みを受け付けない状態が長いほど、他の割込みへの応答が遅れると考えます。
- 割込み禁止区間を極力減らし、割込み可能状態で動作する選択肢を選びます。
選択肢別の誤答解説
- ア:処理の途中から割込み禁止状態にしているため、その後は別の割込みを受け付けにくくなります。割込み禁止区間を極力短くする方針に反します。
- イ:一定期間を割込み禁止状態にすると、その期間中に発生した割込みへの応答が遅れます。タイマを設定しても、多重割込みへの対応にはなりません。
- ウ:割込みに起因する多くの処理をハンドラ内で行うと、ハンドラの処理時間が長くなるおそれがあります。通常はハンドラでは必要最小限の処理を行い、時間のかかる処理はタスク側に委ねます。
- エ:割込み禁止状態での処理を極力減らし、割込み可能状態で動作するため、多重割込みに適した考え方です。
よくある誤解
-
割込みハンドラは、処理中ずっと割込み禁止にするものだと思う
共有データの更新など、競合を防ぐ必要がある短い区間では割込みを禁止することがあります。しかし、ハンドラ全体を長時間禁止状態にするのは適切ではありません。 -
割込みハンドラですべての処理を完了させるべきだと思う
ハンドラが長く動作すると、ほかの割込みへの応答が遅れます。時間のかかる処理はタスクに任せるのが基本です。 -
割込み可能状態にすると、処理の整合性を保てないと思う
共有データなどを扱う必要がある場合は、必要な範囲だけを保護します。保護区間を短くすることで、整合性と応答性を両立できます。
補足コラム
割込みハンドラでは、割込み要因の確認や状態の保存など、すぐに必要な処理を行います。その後、必要に応じてタスクに処理を依頼します。こうすることで、ハンドラの実行時間を抑え、優先度の高い割込みにも迅速に対応しやすくなります。
FAQ
Q. 割込み禁止状態にするのは、どのような場合ですか?
A. 割込みによって途中で中断されると困る短い処理を行う場合です。たとえば、共有データを一貫した状態で更新する必要がある区間などです。
A. 割込みによって途中で中断されると困る短い処理を行う場合です。たとえば、共有データを一貫した状態で更新する必要がある区間などです。
Q. 割込み可能状態で動作すると、割込みが重なって処理が複雑になりませんか?
A. 割込みの優先度や、どの割込みを受け付けるかを適切に管理します。多重割込みでは、優先度の高い割込みを処理中に受け付けられることが重要です。
A. 割込みの優先度や、どの割込みを受け付けるかを適切に管理します。多重割込みでは、優先度の高い割込みを処理中に受け付けられることが重要です。
関連キーワード: 多重割込み、割込みハンドラ、割込み禁止状態、割込み優先度、リアルタイムOS

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

