組み込み技術者のための資格試験,傾向と対策(6) ―― トロン技術者認定試験
解答・解説のページ(その1)
※μITRONの場合は()内のサービスコールを呼び出すものとして解答せよ.
選択肢
1.tk_dly_tsk(dly_tsk)の呼び出しにより待ち状態になったタスクにおいて指定した時間が経過した場合,戻値としてE_TMOUTが返る.
2.tk_dly_tsk(dly_tsk)の呼び出しにより待ち状態になったタスクを対象としてtk_rsm_tsk(rsm_tsk)を呼び出した場合,タスクの待ち状態は解除される.
3.tk_dly_tsk(dly_tsk)の呼び出しにより待ち状態になったタスクを対象としてtk_wup_tsk(wup_tsk)を呼び出した場合,起床要求が1加算されるが,待ち状態は解除されない.
4.tk_dly_tsk(dly_tsk)の呼び出しにより待ち状態になったタスクを対象としてtk_rel_wai(rel_wai)を呼び出した場合,タスクは強制待ち状態に移行する.
(第10回 トロン技術者認定試験 問5より引用)
正解 3
解説
1.E_TMOUT(タイムアウト・エラー)は,ポーリングやタイムアウト指定付きのシステム・コールを発生した場合の,指定時間超過のエラーです.正常に指定した時間が経過した場合は,E_TMOUTではありません.この場合,サービスは正常に処理されましたので,戻値としてE_OKが返ります.よって誤りです.詳しくは,参考文献(2)のP.20 資源の獲得の項とP.22 サービスコール返却値の項(http://www.cqpub.co.jp/hanbai/books/33/33351/33351_2syo.pdf)を参照してください.
2.tk_rsm_tsk(rsm_tsk)は,待ち状態からのタスクの再開のシステム・コールではなく,強制待ち状態からのタスクの再開のシステム・コールです.よって誤りです.
一般的な待ち状態のタスクを再開するには,起床要求であるk_wup_tsk(wup_tsk)を使用します.しかし,tk_dly_tsk(dly_tsk)で待ち状態に入っている場合,k_wup_tsk(wup_tsk)を呼び出してもタスクの待ち状態は解除されず,起床要求がキューイングされて,1加算されるだけで,タスクの待ち状態は解除されません.
3.上記の2で解説したように,tk_rsm_tsk(rsm_tsk)で待ち状態に入っている場合,起床要求がキューイングされて,1加算されるだけで,タスクの待ち状態は解除されません.よって正解です.tk_dly_tsk(dly_tsk)の呼び出しにより待ち状態になったタスクを対象としてtk_wup_tsk(wup_tsk)を呼び出した場合,起床要求が1加算されるが,待ち状態は解除されません.
4.k_rel_wai(rel_wai)は,tk_dly_tsk(dly_tsk)の呼び出しにより待ちになった状態を強制解除するシステム・コールです.tk_dly_tsk(dly_tsk)による待ち状態をk_rel_wai(rel_wai)により強制解除した場合,戻値としてE_RLWAIが返ります.よって誤りです.詳しくは,参考文献(3)を参照してください.