この記事を読むのに必要な時間:およそ 2 分
「オンリーワンからプラスワンへ」
近年,オンリーワン企業という言葉をよく耳にします。このような企業は他社がマネできない技術を駆使することで,この不況下でも成果を上げています。
個人としても,今の厳しい雇用環境を乗り切るためには,自己の価値を高めるための特長が必要です。できれば,オンリーワンになりたいところですが,それは容易なことではありません。そこで目先を変えてプラスワンならどうでしょう。
たとえば,単にC言語のプログラムが書けるだけでなく,組込み機器の開発に詳しいとか,ハードウェアに強いとか,T-KernelやμITRONに詳しいなど,別の技術をプラスするのは比較的容易ですし,これができれば人材としての価値も向上します。
トロン技術者認定試験は,T-KernelやμITRONを用いた実践的なソフトウェア開発能力があることを認定しますので,みなさんの特長を示す客観的な尺度として役立つはずです。
タスク起動
前回はタスクの生成について説明しました。今回はタスクの起動について説明します。まずは例題に挑戦してみてください。
- 【問】以下のプログラムにおいて,処理①から処理⑤はどのような順序で実行されるか。正しいものを選択肢の中から1つ選べ。ただし、実行開始時の各タスクの状態などは次のとおりとする。
タスク | タスクID | 優先度 | タスク状態 |
taskA | tskidA | 1 | 休止状態 |
taskB | tskidB | 2 | 実行状態 |
taskC | tskidC | 3 | 休止状態 |
-
void taskA( INT stacd, VP exinf )
{
/* 処理④ */
tk_ext_tsk();
}
void taskB( INT stacd, VP exinf )
{
/* 処理① */
tk_sta_tsk( tskIdA, 0 );
/* 処理② */
tk_sta_tsk( tskIdC, 0 );
/* 処理③ */
tk_ext_tsk();
}
void taskC( INT stacd, VP exinf )
{
/* 処理⑤ */
tk_ext_tsk();
}
- [1].①→②→③→④→⑤
- [2].①→②→⑤→③→④
- [3].①→④→②→⑤→③
- [4].①→④→②→③→⑤
※ 正解は[4]です。
T-Kernelではタスクはtk_sta_tskで起動します(注1)。起動とはtk_cre_tskで生成(カーネルに登録)したタスクを実行可能な状態にすることです。生成して起動することでタスクは動作を開始します。
起動されたタスクは,あらかじめ設定された優先度に従ってカーネルが順に実行します。優先度とは,実行できるタスクが複数あった場合に,どのタスクを優先的に実行するかを示すためのパラメータであり,タスクを生成するときに指定します。T-KernelやμITRONでは,優先度は1から始まり,値が大きくなるほど優先度は低くなります。
また,あるタスクを実行中に,より優先度の高いタスクが実行できる状態になると,現在実行中のタスクの代わりに,より優先度の高いタスクが先に実行されるようにカーネルによって調整されます。
このようにCPUが実行するタスクを切り替えることをディスパッチ(dispatch)と呼びます。また,ディスパッチが発生した場合,それまで実行状態であったタスクは実行可能状態に移行します。この場合,「それまで実行状態であったタスクは,新たに実行状態へ移行したタスクにプリエンプト(preempt)された」といいます。
以上を踏まえて例題を確認します。
例題ではtaskBがより優先度の高いtaskAと,より優先度の低いtaskCを起動しています。taskAの優先度は実行中のtaskBよりも高いので,ディスパッチが発生してtaskAが実行状態になります。つまり,taskBはtaskAにプリエンプトされたことになります。また,taskBの続きの処理はtaskAが終了してから再開されます。つまり,処理の流れとしては以下のようになります。
①→tk_sta_tsk→④→tk_ext_tsk→②
一方,taskCはtaskBよりも優先度が低いので起動されても実行は後回しにされ,taskBが終了してから実行されることになります。
②→tk_sta_tsk→③→tk_ext_tsk→⑤→tk_ext_tsk
すなわち,各処理は①→④→②→③→⑤の順に実行されることになり,正解は[4]となります。これらの処理を図にすると図1のようになります。
図1 タスク優先度と実行順
![図1 タスク優先度と実行順 図1 タスク優先度と実行順]()
今回説明したようなタスクスケジューリングの方法は,プリエンプティブな優先度ベーススケジューリングと呼ばれ,T-KernelやμITRONのスケジューリング規則として採用されています。
一見複雑に見えるリアルタイムマルチタスクシステムのプログラムも実は非常にシンプルなルールに従って実行されています(注2)。
要点をおさえて理解していれば複雑なプログラムも開発できますし,トロン技術者認定試験の問題も解けるようになります。基本を正確に理解するように心がけて学習してください。
まとめ
前回の連載では冒頭で「人は多いが,人材は少ない」と書きました。組込みソフトウェア業界では,単にC言語のプログラムが書けるだけでは人材となりえません。そこにはプラスワンの技術が必要です。
トロン技術者認定試験では,みなさんの組込みソフトウェア技術者としての技術力,特にT-KernelやμITRONに関する技術力があることを示すための客観的な尺度を提供します。
次回の試験は2009年6月6日(土)に東京で実施します。ぜひみなさんにプラスワンの技術力があることを示すために役立ててください。