-2-
OSは何をするか

 CPUは走り出したら止まれない.OSを使わない場合は,一つのシーケンシャルなプログラムが走り続ける.そのプログラムの処理が終了し,何もやることがない場合には,自分自身に分岐する無条件分岐などの,何もしない無限ループを実行する.つまり,走りながら止まるという,禅問答的なことになる(図4).busy waitとかspin lockと呼ばれる待ち方である.

〔図4〕走りながら止まる

 タスクの概念と“待つ状態”を作り出すのはOSである.すべてのタスクが待ち状態のときは,OSだけが動いてCPUの相手をしている.この場合も基本的には無限ループである.無限ループに入ってしまうとソフトウェアだけでは脱出できないので,割り込みを使用して,時間の経過や外部からの入力を検出して無限ループから抜けてくる.この無限ループはアイドルループなどと呼ばれる.

 電池で動く機器を作る場合にはパワーセーブ機能が必要だが,パワーセーブを実現する一つの方法は,このRTOS内のアイドルループを利用することである.アイドルループがある時間続くと,RTOSがCPUをパワーセーブモードやスリープモードへ移行させる.この状態になれば,システムクロックが止まって本当にCPUも止まった状態になる.この状態では,OSも含めたソフトウェアのすべてが停止する.復帰するにはハードウェア的なメカニズムが必要になる.

 タスクを複数作ることを可能にし,それらをどのような順序で動かすかを決めるのもOSである.RTOSでは,タスクに優先度を割り当て,その優先度順にタスクを動かす,比較的単純なスケジューラを使用している.同一優先度の場合は,起動要求の早いものから順に起動する.高優先度のタスクが実行可能になれば,低優先度のタスクが実行中であってもプリエンプトされる.


1 main()の前,printfの向こう側

2 OSは何をするか
 2-1 タスク
 2-2 タスクコントロールブロック(TCB)
 2-3 可変長メモリプール


12月号特集トップページへ戻る


Copyright 2001 藤倉俊幸