今回は,RTOS分野(T-Kernel,ITRONの基礎)の応用編として,第二区分から例題を2つ取り上げます。今回取り上げた例題は,どちらもT-Kernel用のプログラムを読んで解答する問題で,プリエンプティブな優先度ベース・スケジューリングと,同期・通信機能であるセマフォとイベントフラグの仕様を理解していることが要求されます。

例題1 テーマ:プリエンプティブな優先度ベース・スケジューリング

【問題】
下記のT-Kernel用のプログラムを読み,設問1~3の問いに答えよ。

ただし,システム起動時にtask3が優先度82に設定された状態で起動され,tk_dly_tsk 以外の処理時間は近似的に0msであると仮定する。

     1  LOCAL ID semid;
     2  
     3  void task1(INT stacd, VP exinf)
     4  {
     5    // Get semaphore
     6    tk_wai_sem( semid, 1, TMO_FEVR );
     7  
     8    tk_dly_tsk( 100 );
     9  
    10    tk_sig_sem( semid, 1 );
    11  
    12    // Get semaphore
    13    tk_dly_tsk( 10 );
    14    tk_wai_sem( semid, 1, TMO_FEVR );
    15  
    16    // (う)
    17  
    18    tk_exd_tsk();
    19  }
    20  
    21  
    22  void task2(INT stacd, VP exinf)
    23  {
    24    // (あ)
    25  
    26    tk_dly_tsk( 30 );
    27  
    28    tk_wai_sem( semid, 1, TMO_FEVR );
    29  
    30    // (い)
    31  
    32    tk_dly_tsk( 20 );
    33  
    34    tk_sig_sem( semid, 1 );
    35  
    36    tk_exd_tsk();
    37  }
    38  
    39  void task3(INT stacd, VP exinf)
    40  {
    41    T_CTSK  ctsk;
    42    ID      tid1, tid2;
    43    T_CSEM  csem;
    44  
    45    //  Create semaphore
    46    csem.exinf = NULL;
    47    csem.sematr = TA_TFIFO | TA_FIRST;
    48    csem.isemcnt = 1;
    49    csem.maxsem  = 1;
    50  
    51    semid = tk_cre_sem( &csem );
    52  
    53    //  Create task1.
    54    ctsk.exinf = NULL;
    55    ctsk.tskatr = TA_HLNG | TA_RNG0;
    56    ctsk.task  = task1;
    57    ctsk.itskpri = 81;
    58    ctsk.stksz = 1024;
    59  
    60    tid1 = tk_cre_tsk( &ctsk );
    61  
    62    //  Create task2.
    63    ctsk.exinf = NULL;
    64    ctsk.tskatr = TA_HLNG | TA_RNG0;
    65    ctsk.task  = task2;
    66    ctsk.itskpri = 80;
    67    ctsk.stksz = 1024;
    68  
    69    tid2 = tk_cre_tsk( &ctsk );
    70  
    71    //  Start task
    72    tk_sta_tsk( tid1, 0 );
    73    tk_dly_tsk( 10 );
    74    tk_sta_tsk( tid2, 0 );
    75  
    76    tk_exd_tsk();
    77  }
図1●T-Kernel用のプログラム

【設問1】
task3 の実行開始から(あ)の点に到達した時点までに経過する時間を選択肢の中から一つ選べ。

【選択肢】
1. 10 ms
2. 30 ms
3. 40 ms
4. 100 ms

【設問2】
task3 の実行開始から(い)の点に到達した時点までに経過する時間を選択肢の中から一つ選べ。

【選択肢】
1. 10 ms
2. 30 ms
3. 40 ms
4. 100 ms

【設問3】
task3 の実行開始から(う)の点に到達した時点までに経過する時間を選択肢の中から一つ選べ。

【選択肢】
1. 50 ms
2. 100 ms
3. 110 ms
4. 120 ms


【正解】(マウスでドラッグして文字を反転させてください)
設問1:1
設問2:4
設問3:4