一つのI²Cバスに接続された二つのセンサがある。
それぞれのセンサ値を読み込む二つのタスクで排他的に制御したい。
利用するリアルタイムOSの機能として,適切なものはどれか。
正答2
解説
正解は2です。
一つのI²C(Inter-Integrated Circuit)バスでは、同時に一つの通信しか行えません。
二つのタスクが同時にバスを使わないよう、一方が使っている間はもう一方を待たせる排他制御が必要です。
【選択肢別解説】
1:× キューは、タスク間でデータやメッセージを順番に受け渡すための機能です。
資源の同時使用を防ぐ排他制御の機能ではありません。
2:○ セマフォは、資源を使ってよいかどうかを表す変数で、獲得と解放の操作によって資源の同時使用を防ぎます。
バスを使う前にセマフォを獲得し、使い終わったら解放すれば、二つのタスクを排他的に制御できます。
3:× マルチスレッドは、一つのプログラムの中で複数の処理の流れを並行して実行する仕組みです。
並行実行を実現するものであり、排他制御の機能ではありません。
4:× ラウンドロビンは、一定時間ごとに実行するタスクを順番に切り替えるスケジューリング方式です。
CPUの割当て方の話であり、バスの排他制御には使えません。
【ポイント】
共有資源の排他制御にはセマフォやミューテックスを、タスク間のデータ受け渡しにはメッセージキューやメールボックスを使います。
リアルタイムOSの機能は、何のための機能かで区別しましょう。