エンベデッドシステムスペシャリスト 2020年 午前2 問07
問題文
リアルタイムOSにおけるコンテキストの使用方法に関する記述のうち、適切なものはどれか。
選択肢
ア:アプリケーションタスクを、アプリケーションタスク共有のコンテキストで実行させる。
イ:アプリケーションタスクを、カーネルのコンテキストで実行させる。
ウ:カーネルを、アプリケーションタスクのコンテキストで実行させる。
エ:割込み処理を、割込み処理ごとのコンテキストで実行させる。(正解)
🔒 解説は解答すると表示されます
リアルタイムOSの実行コンテキスト【午前2解説】
正解の理由
リアルタイムOSでは、処理の実行状況を切り替えるために、タスクごとのコンテキストや割込み処理用のコンテキストを使い分けます。
割込み処理は、実行中のアプリケーションタスクとは別の処理として扱われます。そのため、割込み処理をタスクのコンテキストから分離し、割込み処理用のコンテキストで実行するというエが適切です。
解法ステップ
-
コンテキストの単位を確認します。
コンテキストとは、処理を中断して再開するときに必要となる実行状態です。レジスタの値やプログラムカウンタなどが含まれます。 -
タスクと割込みを分けて考えます。
タスクはそれぞれのコンテキストを持ちます。一方、割込み処理は実行中のタスクとは別の割込みコンテキストで処理されます。 -
共有や混同を避けている選択肢を選びます。
割込み処理用のコンテキストを使うエが適切です。
選択肢別の誤答解説
-
ア:誤りです。
アプリケーションタスクは、それぞれ独立した実行状態を持ちます。複数のタスクが同じコンテキストを共有すると、タスクごとの状態を保存・復元できません。 -
イ:誤りです。
アプリケーションタスクは、カーネルのコンテキストではなく、そのタスク自身のコンテキストで実行されます。タスクがシステムコールを呼び出すとカーネルの処理が行われますが、タスクの実行状態とカーネルの処理を同一視することはできません。 -
ウ:誤りです。
カーネル処理は、特定のアプリケーションタスクのコンテキストだけで実行されるわけではありません。たとえば、割込みを契機とする処理は割込みコンテキストで行われます。 -
エ:適切です。
割込み処理は、アプリケーションタスクの実行状態とは区別された、割込み処理用のコンテキストで実行されます。
よくある誤解
-
タスクのコンテキストは共有できると思い込む
タスクを切り替えた後に元の処理を再開できるよう、各タスクの実行状態を個別に保存します。 -
カーネル処理は常に同じコンテキストで動くと思い込む
システムコールに伴う処理と、割込みを契機とする処理では、実行のきっかけやコンテキストが異なります。 -
割込み処理を、割り込まれたタスクの処理の一部と考える
割込み処理はタスクの処理とは区別されます。割込みから戻ると、必要に応じて中断していたタスクが再開されます。
補足コラム
タスクの切替えでは、OSが切替え前のタスクのコンテキストを保存し、再開するタスクのコンテキストを復元します。これにより、各タスクは一時中断した位置から処理を続けられます。
割込み処理は、応答性が重要なリアルタイムOSで特に大切です。割込み処理を短く保ち、時間のかかる処理を後続のタスクに任せる設計もよく用いられます。
FAQ
Q. コンテキストには何が含まれますか?
A. 処理を中断して再開するために必要な実行状態です。代表例は、レジスタの値やプログラムカウンタです。
A. 処理を中断して再開するために必要な実行状態です。代表例は、レジスタの値やプログラムカウンタです。
Q. 割込み処理が終わると、必ず元のタスクに戻りますか?
A. 必ずとは限りません。割込み処理後にスケジューラが動作し、より優先度の高いタスクへ切り替える場合があります。
A. 必ずとは限りません。割込み処理後にスケジューラが動作し、より優先度の高いタスクへ切り替える場合があります。
Q. システムコールの処理は、割込み処理と同じですか?
A. 同じではありません。システムコールはタスクからの要求を受けたカーネル処理であり、ハードウェア割込みを契機とする処理とは区別されます。
A. 同じではありません。システムコールはタスクからの要求を受けたカーネル処理であり、ハードウェア割込みを契機とする処理とは区別されます。
関連キーワード: コンテキスト、タスク切替え、割込み処理、システムコール、リアルタイムOS

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

