応用情報技術者 2009年 春期 午前2 問23
問題文
ウォッチドッグタイマの機能はどれか。
選択肢
ア:あらかじめ設定された一定時間内にタイマがクリアされなかった場合、システム異常とみなしてシステムに通知する。(正解)
イ:システム異常を検出した場合、タイマで設定された時間だけ待ってシステムに通知する。
ウ:システム異常を検出した場合、マスカブル割込みでシステムに通知する。
エ:システムが一定時間異常であった場合、上位の管理プログラムに通知する。
🔒 解説は解答すると表示されます
ウォッチドッグタイマの監視機能【午前2解説】
正解の理由
ウォッチドッグタイマはハードウェア/ファームウェアで動作する監視機構で、実行中のソフトウェアが定期的に「キック(feed/reload)」を行わないとタイムアウトし、システム復旧のための処理(典型的にはリセット)を行います。選択肢の中では、定期的なクリア(キック)が行われなかった場合に異常と判断して処理を行う点を正しく表しているアが該当します。
ただし実機では、基本動作としてはタイムアウトによるリセットが主目的である一方、機種や設定により「タイムアウト前に割込みを発生させる」「タイムアウト時にまず割込みを出してからリセットする」といったモードを備える製品もあります。したがって「常に割込みを出さない」と断定するのは誤りで、WDTの基本概念は「所定時間内のキック有無で正常/異常を判定する点」である、という説明が適切です。
解法ステップ
- 選択肢それぞれが「ウォッチドッグの動作原理」を正確に表しているか確認する(能動的に異常を検出するか、受動的にキックの不在を検出するか)。
- 「通知」と「リセット(復旧)」の違いを意識する。ウォッチドッグは通常ハードリセットやシステム復旧が目的で、単に上位に通知するだけではない。
- 機種例外(割込みモードやウィンドウ機能)の存在を念頭に置き、選択肢が一般的な定義とかけ離れていないかを判断する。
選択肢別の誤答解説
- ア: 正しい。ウォッチドッグはソフトウェアが定期的に行う「キック(feed/reload)」が行われない場合にタイムアウトして異常と判断し、通常はリセットなどの復旧手段を実行します。表示の「タイマがクリアされなかった場合」はキックが行われなかったことを指す語い換えです。
- イ: 誤り。文面は「異常を検出した場合にタイマで設定された時間だけ待って通知する」と解釈されますが、ウォッチドッグ自体は自律的に異常を検出してから遅延通知する装置ではなく、むしろ「所定時間内に外部からのキックがない」ことをもって異常と判定します。タイマーがただ待機してから通知する、という表現は本質を捉えていません。
- ウ: 誤り。ウォッチドッグの主目的はリセットやシステム復旧であり、常に「マスカブル割込み(maskable interrupt)」で通知するとは限りません。実際には割込みを出せる機能を持つものもありますが、選択肢は「マスカブル割込みで通知する」と断定しており一般的定義と合致しません。また割込みの種類(マスカブル/ノンマスク)も機種依存です。
- エ: 誤り。ウォッチドッグは単体で「上位の管理プログラムへ通知する」ための仕組みではなく、主にハードウェアレベルでのタイムアウト検出によるリセットや、割込み→リセットという復旧動作を行います。上位管理プログラムへの通知はソフトウェア側の仕組みが別途必要であり、WDT自体の本質ではありません。
よくある誤解
- ウォッチドッグは必ず割込みを生成しない:誤り。多くはタイムアウトでリセットを行いますが、割込みを出してからリセットするモードや、割込みだけを出す実装もあります。実装差を意識すること。
- 「クリア」と「リセット」を混同する:用語注意。WDTにおける「クリア」は一般にソフトからのキック(feed/reload)を指し、システムリセットとは別概念です。
- ソフトウェアのヘルスチェックと同一視する:ウォッチドッグはハードウェア監視であり、ヘルスチェック処理(ログ送信や通知)は別レイヤの実装です。
補足コラム
- 用語整理:キック(kick)、フィード(feed)、リロード(reload)などはソフトウェアからタイマを再設定してタイムアウトを防ぐ操作を表す一般的な呼称です。問題文の「タイマがクリアされる」はこれらの意味で使われています。
- モード例:
- リセットモード:タイムアウトで即リセット(最も一般的)。
- 割込み先行モード:まず割込みを発行し、割込みハンドラで復旧処理が不十分なら最終的にリセット。
- ウィンドウウォッチドッグ:キックを許容する時間窓があり、早すぎるキックも異常と判定する。
- 実装例(疑似Cコード):
// 100msごとにウォッチドッグをキックする例(疑似)
void main_loop(void) {
while (1) {
do_periodic_tasks();
watchdog_feed(); // キック(feed / reload)
sleep_ms(100);
}
}
- 組込み設計では、WDTは単純だが有効な最後の防御手段。定期的なキックを確実に行うこと、ウィンドウ機能や割込みモードの影響を設計で考慮することが重要です。
FAQ
Q: ウォッチドッグは必ずプロセッサをリセットしますか?
A: 多くはリセットを行いますが、機能によっては割込みで通知してからリセットする設定や、割込みのみを出す実装もあります。仕様を確認してください。
A: 多くはリセットを行いますが、機能によっては割込みで通知してからリセットする設定や、割込みのみを出す実装もあります。仕様を確認してください。
Q: 「キック」を忘れるとどうなりますか?
A: 設定に従ってタイムアウトが発生し、通常はシステムリセット等の復旧動作が行われます。デバッグ中に意図せずリセットされることがあるため開発時は注意が必要です。
A: 設定に従ってタイムアウトが発生し、通常はシステムリセット等の復旧動作が行われます。デバッグ中に意図せずリセットされることがあるため開発時は注意が必要です。
Q: ソフトウェアで異常を検出したらウォッチドッグに通知できますか?
A: 直接的な「通知」機能はなく、ソフトが正常なら定期的にキックすることでウォッチドッグに正常を示します。ソフト側の異常検出後は意図的にキックを止める、あるいは明示的にリセットを呼ぶなどの手段を取ります。
A: 直接的な「通知」機能はなく、ソフトが正常なら定期的にキックすることでウォッチドッグに正常を示します。ソフト側の異常検出後は意図的にキックを止める、あるいは明示的にリセットを呼ぶなどの手段を取ります。
関連キーワード: ウォッチドッグタイマ、キック、feed、reload、リセット、割込み、ウィンドウウォッチドッグ、ハードウェア監視、組込みシステム、監視タイマ

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

