エンベデッドシステムスペシャリスト 2012年 午前2 問07
問題文
FIFOで処理されるメールボックスに関する操作で、タスクが待ち状態に遷移するものはどれか。
選択肢
ア:受信待ちをしているタスクが存在するメールボックスに対して受信要求をしたとき(正解)
イ:受信待ちをしているタスクが存在するメールボックスに対して送信要求をしたとき
ウ:メッセージが存在するメールボックスに対して受信要求をしたとき
エ:メッセージが存在するメールボックスに対して送信要求をしたとき
🔒 解説は解答すると表示されます
メールボックスの待ち状態【午前2解説】
正解の理由
メールボックスからメッセージを受信しようとしたとき、受信できるメッセージがなければ、受信要求を出したタスクはメッセージが届くまで待ち状態になります。
すでに受信待ちのタスクがあるメールボックスに、さらに受信要求を出す場合、新しい受信要求も待ち行列に加わります。このため、タスクが待ち状態に遷移するのはアです。FIFOなので、待ち行列では先に待っていたタスクから順に処理されます。
解法ステップ
- 受信要求では、メールボックスにメッセージがあるかを確認します。
- メッセージがあれば受信できますが、なければ受信要求を出したタスクは待ち状態になります。
- 送信要求では、受信待ちのタスクがいれば、メッセージを渡してそのタスクを待ち状態から復帰させます。
- 各選択肢について、受信時にメッセージがあるか、送信によって待ちタスクが解消されるかを確認します。
選択肢別の誤答解説
- ア:受信待ちのタスクがいる状況で、さらに受信要求を出します。受信できるメッセージがないため、要求を出したタスクも待ち状態になります。
- イ:送信要求によって、待っている受信タスクにメッセージを渡せます。受信待ちタスクを新たに待ち状態にする操作ではありません。
- ウ:メールボックスにメッセージがあるため、受信要求を出したタスクはメッセージを受け取れます。待ち状態にはなりません。
- エ:メールボックスにメッセージがあることだけでは、メールボックスが満杯だとはいえません。通常の設問条件では、送信要求を出したタスクが待ち状態になるとは判断しません。
よくある誤解
- 受信要求を出せば、いつでも待ち状態になる
メッセージがすでにあれば、その場で受信できます。待ち状態になるのは、受信したいのにメッセージがない場合です。 - FIFOだから、送信タスクも必ず待つ
FIFOは待ち行列の処理順序を表します。タスクが待つかどうかは、送受信できる条件がそろっているかで決まります。 - メッセージが存在すれば、メールボックスは満杯である
メッセージが一つ以上あることと、容量が満杯であることは別です。
補足コラム
メールボックスは、タスク間でメッセージを受け渡すための仕組みです。受信側が先に受信要求を出して待っている場合、送信されたメッセージをそのタスクへ直接渡す方式もあります。この場合、受信側はメッセージ到着を待ち続ける必要がなくなり、待ち状態から復帰します。
FAQ
FIFOとは何の順序ですか?
First In, First Outの略で、「先に入ったものを先に処理する」という順序です。メールボックスでは、メッセージや待ちタスクを先着順で扱うことを指します。
First In, First Outの略で、「先に入ったものを先に処理する」という順序です。メールボックスでは、メッセージや待ちタスクを先着順で扱うことを指します。
待ち状態になったタスクは、いつ実行可能になりますか?
受信待ちのタスクは、メールボックスにメッセージが届き、受信できる状態になると待ち状態から復帰します。
受信待ちのタスクは、メールボックスにメッセージが届き、受信できる状態になると待ち状態から復帰します。
関連キーワード: メールボックス、FIFO、タスク状態、受信待ち、メッセージ通信

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

