組込み・ファームウェア

プリエンプティブなRTOSで、優先度の低いタスクの実行中に、優先度の高いタスクが待っていたデータを受け取って実行できる状態になった。一般にどうなるか。

  1. A低いタスクが自分から終わるまで、高いタスクは待つ
  2. B両方のタスクが止まり、マイコンが再起動する
  3. C低いタスクを途中で止めて、すぐに高いタスクに切り替える
答えと解説を見る

正解:C. 低いタスクを途中で止めて、すぐに高いタスクに切り替える

プリエンプティブなRTOSでは、割り込みなどをきっかけに優先度の高いタスクが実行できる状態になると、カーネルが実行中の低いタスクの状態を保存して止め、高いタスクに切り替えます。高いタスクが終わるか待ち状態になると、低いタスクが続きから再開します。そのため、高い優先度の処理の応答の時間を短く予測しやすくできます。

  • A. それは協調的(ノンプリエンプティブ)な切り替えです。
  • B. 再起動はしません。
  • C. 正しい。これがプリエンプション(横取り)です。
この分野を解く 分野ページへ

組込み・ファームウェアのほかの問題

  1. RTOSで起こる優先度逆転の説明として正しいものはどれか。
  2. 優先度逆転を防ぐために使われる「優先度継承」の考え方として正しいものはどれか。
  3. RTOSで、センサを読むタスクから表示するタスクへデータを渡すのに、キュー(メッセージキュー)を使う利点として正しいものはどれか。
  4. ハードリアルタイムとソフトリアルタイムの違いとして正しいものはどれか。
  5. ウォッチドッグタイマをリセットする(キックする)処理を、1 msごとのタイマ割り込みハンドラの中で無条件に行うのが良くない理由として正しいものはどれか。