エンベデッドシステムスペシャリスト 2012年 午前2 問08
問題文
デバイスドライバをアプリケーションタスクとして作成する場合の記述として、適切なものはどれか。
選択肢
ア:カーネルがデバイスに対するアクセスを統一的に管理できる。
イ:カーネル内部のインタフェースに従って作成しなくてはならない。
ウ:通常のタスクと異なり、割込み処理をそのタスク内に定義する。(正解)
エ:リクエスト処理部はシステムコールのサブルーチンとして実行される。
🔒 解説は解答すると表示されます
アプリケーションタスク型デバイスドライバ【午前2解説】
正解の理由
デバイスドライバをアプリケーションタスクとして作成する方式では、デバイスドライバはカーネルの内部ではなく、通常のタスクに近い形で動作します。このため、デバイスからの割込みを処理する仕組みを、そのデバイスドライバのタスクに関連付けて定義します。
したがって、適切なのはウです。ここでいう「そのタスク内に定義する」とは、割込み処理をデバイスドライバのタスクに対応付けて実装するという意味です。通常のタスクとは異なり、デバイスとの入出力に伴う割込みへの対応が必要になります。
解法ステップ
- 「アプリケーションタスクとして作成する」という条件に注目します。
- デバイスドライバがカーネル内部の機能ではなく、タスクとして動作する方式だと判断します。
- デバイスからの割込みを処理する仕組みが必要であることを踏まえ、割込み処理をそのタスクに関連付けるウを選びます。
選択肢別の誤答解説
- ア:カーネルがデバイスへのアクセスを統一的に管理する説明です。カーネル内にドライバを置く方式に近く、アプリケーションタスクとして作成する方式の特徴ではありません。
- イ:カーネル内部のインタフェースに従う必要があるという説明です。カーネル内部に組み込むドライバであれば当てはまりますが、アプリケーションタスクとして作成する場合の説明ではありません。
- ウ:デバイスドライバのタスクに割込み処理を関連付けて定義する説明であり、この方式に適しています。
- エ:リクエスト処理をシステムコールのサブルーチンとして実行する説明です。アプリケーションタスクとして動作する場合は、タスクとしてリクエストを受け付けて処理する形が基本であり、システムコールのサブルーチンとして実行するという説明は適切ではありません。
よくある誤解
- 「タスクなら割込み処理は不要」と考えること
デバイスからの割込みを受け取る仕組みは必要です。通常のタスクとの違いとして、割込みへの対応が問われています。 - 「アプリケーションタスク型でもカーネル内部のインタフェースが必須」と考えること
カーネル内部に組み込む方式と、タスクとして動作する方式を区別しましょう。 - 「割込み処理」と「リクエスト処理」を同じものとして扱うこと
割込み処理はデバイスからのイベントへの対応、リクエスト処理はOSやアプリケーションからの要求への対応です。
補足コラム
デバイスドライバの構成には、カーネル内部で動作する方式と、ユーザー空間などでタスクとして動作する方式があります。タスクとして動作させると、ドライバの障害がカーネル全体に及ぶ影響を抑えやすく、保守性や安全性の向上につながる場合があります。一方で、カーネルとタスクの間で要求や応答をやり取りするため、通信の仕組みが必要です。
FAQ
Q. 割込み処理とリクエスト処理は、どう違いますか?
A. 割込み処理は、デバイスからの割込みを契機に行う処理です。リクエスト処理は、アプリケーションやOSから依頼された入出力などの要求を処理することです。
A. 割込み処理は、デバイスからの割込みを契機に行う処理です。リクエスト処理は、アプリケーションやOSから依頼された入出力などの要求を処理することです。
Q. 選択肢エの「システムコールのサブルーチン」とは、なぜ不適切なのですか?
A. それは呼出し側の処理から直接呼び出されるような説明です。アプリケーションタスク型では、ドライバは独立したタスクとして要求を処理するため、タスクとしての動作と合いません。
A. それは呼出し側の処理から直接呼び出されるような説明です。アプリケーションタスク型では、ドライバは独立したタスクとして要求を処理するため、タスクとしての動作と合いません。
関連キーワード: デバイスドライバ、アプリケーションタスク、割込み処理、カーネル、システムコール

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

