KUMICO

COLUMN

組込システムにおける、リアルタイムOSのスケジューラー

今回の連載コラムでは、組込(くみこみ)システムでのリアルタイム性を実現するのに欠かせない機能の一つである「リアルタイムOSにおけるスケジューラ」に関して、汎用OSのスケジューラとの違いを挙げながら、組み込み開発入門者にも分かりやすく基礎から説明を行っていきます。

スケジューラとは

シングルコア(最も単純な構成のプロセッサパッケージ)のCPUは同時に1つの処理(命令)しか実行できませんが、シングルコアの時代からコンピュータはCPUをタイムシェアリングする事で疑似的な並列処理をする事ができています。これはOS内のスケジューラが、ソフトウェア内の各処理に1回数ms~数十msという短い間隔でCPUコアを使わせる事で、秒単位で見た時に複数の処理を並行動作させた様に見せているからです。

例えるならば、1つの道具を共有してみんなで共同作業している様子に似ています。
1本のドライバーを共有して、3人の作業者がそれぞれ1つずつテーブルを組み立てている様子を想像してみましょう。各作業者がドライバーを独り占めせずに必要な時だけ借りる事で、それぞれの瞬間においてドライバーを使用している作業者は1人しかいませんが、1日の成果としてみると3人ともドライバーを使用してテーブルの組み立てに成功します。

この例において、1人1人のテーブルを組み立てるという作業がタスクと呼ばれる処理の単位、1本しかない共有されているドライバーがCPU、そしてドライバーをいつ誰が使うかを決めるのが、スケジューラになります。又、ある作業者から他の作業者にドライバーの受け渡しをする様に、あるタスクから他のタスクへ処理の実行権を移す動作の事をディスパッチといい、ディスパッチによってタスクが実行権を失う事をプリエンプションといいます。
OSのスケジューラが、CPUの処理リソースをどのタスクに割り当てるのかを決定する為の方法は複数あり、それをスケジューリングアルゴリズムといいます。

スケジューリングアルゴリズムの種類

組込OSにおけるスケジューリングアルゴリズムについて、いくつか基本的なものだけ挙げておきたいと思います。

FIFO方式

「First In First Out」の略で、先に来たやつから片付けるという、簡単に行ってしまえば早い者勝ちのルールです。
先ほどのドライバーの例では、「ドライバー貸して」と先に言った人から、使っていくことになります。既にドライバーを使っている人がいる場合は順番待ちとなり、前に使っている人の作業が終わり次第、貸して貰えます。
FIFOでは、1人が長時間ドライバーを占有すると、他の人はずっと待たされる事になります。

ラウンドロビン方式

これは、1回あたりに使っていい時間を決めて、その時間が来たら次に使いたい人に譲りましょうというルールです。ドライバーを使う時間は1回5分までという時間単位(クォンタム)を決めて、5分が来たら次の人にドライバーを渡します。
ラウンドロビンでは、クォンタムを短くすれば短くするほど、1回にドライバーを待つ時間は減りますが、その分ドライバーの受け渡しというオーバーヘッドが増えます。
例えば、ドライバーの受け渡しに1回あたり10秒かかるとして、クォンタムを30秒にすると、30秒の作業⇒10秒の受け渡し⇒30秒の作業⇒10秒の受け渡しと繰り返されるので、全体の処理時間の1/4はドライバーの受け渡しというオーバーヘッドで消費される事になります。

優先度方式

これは作業者の中で、誰がドライバーを優先的に使うかを決めて、より優先度の高い作業者に常に譲るというルールです。
低優先度の作業者が使用中に、高優先度の作業者がドライバーを要求したら、その時点ですぐに高優先度の作業者にドライバーを譲ります。優先度の高い作業者は、ほとんど待たされることなくドライバーを使用する事が出来ます。
逆に優先度の低い作業者は、優先度の高い作業者が長時間ドライバーを占有すると待ち続ける事になります。リアルタイムOSでは、並列に行う処理の塊の事をタスク、その優先度の事をタスクプライオリティといいます。

リアルタイムOSのスケジューラ

汎用コンピュータで利用されるOSと、組み込みシステムで利用されるリアルタイムOS(Windows Embeddedなど)は、そのシステムの利用目的や特徴の違いから、スケジューラのポリシーも大きく異なっています。

汎用OS(GPOS)

・できるだけ全体の処理速度(スループット)を向上させる。
・特定の処理が長時間できなくならない様に、各プロセスにできるだけ公平にCPUの実行権を割り当てる。
(プロセスとは、汎用OSにおける並列に行う処理の単位です。ここではリアルタイムOSのタスクと同じ意味だと考えて頂いて問題ありません。)

リアルタイムOS(RTOS)

・特定の外部イベントが発生した際に、対応するリアルタイム性が求められる処理をできるだけ高速に呼び出せる様に制御する。
・リアルタイム性が求められる処理が他の処理に邪魔されない様にする。
・最悪、応答時間が見積れる様に、各タスクへのCPUの実行権の割当予測が出来る様にする。

PCなどに採用されている汎用OSでは、ラウンドロビン方式でスケジューリングしていたり、優先度方式でスケジューリングしていたとしても長時間動作できていないスレッドについては自動で優先度を高く調整する動的優先度という仕組みを持っていたりします。

組込ソフトウェア開発で活用されるリアルタイムOSでは、高優先度のタスクが低優先度のタスクに邪魔される事は避けなければならない為、固定の決められた優先度で常に動作し、低優先度のタスクが動作中に高優先度のタスクを動かさなければならなくなった場合は、速やかにプリエンプション出来る必要があります。

また、プリエンティブできない(途中で他の処理を行ってしまうとデータ破損やシステムロックを引き起こす可能性のある)クリティカルセクションと呼ばれる処理区間が長いと、外部からのイベントを受け取ってからの、高優先度タスクの処理開始までの時間が延びるため、システムの応答性が落ちます。

組込システム開発に利用されるリアルタイムOSでは、OSの処理内のクリティカルセクションが最小になる様に設計されており、タスクが組込OSのシステムコール(OSの機能を利用する為の関数)を呼び出している場合でも、クリティカルセクションとなっている一部分を除いてスケジューラが動作してプリエンティブ出来る様になっています。

リアルタイムOSについて、
また、その周辺知識全般についての学びの場を持とう

このように組込機器に搭載されるリアルタイムOSでは、スケジューラによる厳密なリアルタイム性の確保を第一としています。
組込開発エンジニア、組込ソフトウエアエンジニア、エンベデッドシステム(組込システム)開発者たちは、組込機器開発やシステム構築を行う際には、このリアルタイムOSにおけるスケジューラの重要性を常に意識しておかなければなりません。

さらに、スケジューラやリアルタイムOSだけでなく、エンベデットシステム全般についてももっと知りたいという方は、「組込み/エッジ コンピューティング展」「EdgeTech+」など、組込ソフト開発者・ソフトウェア技術者向けの展示会・機器展に足を運んでみるのも良いかと思います。ここでは、組込系システム開発技術やソフトウェア開発技術(sw開発技術)の最新の動向を学ぶことができます。

その他にも、モータ技術、電源、ノイズ対策などに関する展示を行う専門展なども開催されています。こういった企画展は、デジタル家電などの製造業に関わるソフトウェア開発エンジニアやソフトウェアの設計&検証を担うシステム開発会社の人間にとって、ぜひともチェックしておきたいモノのひとつです。

また、それらの組込技術展では、世界をリードする業界トップのインタビューを聞く機会にも恵まれるかもしれません。あるいは、中小企業の隠れた開発事例が紹介されているかもしれません。関連Webサイトでも、それらの記事がバックナンバーとして公開されていたりもします。学びの機会が豊富な現在の環境を、大いに活用してみてください。

「システムエンジニア必要なものとは」「システム構築とは」
「ソフトウェア開発とは」「ハードウェア開発とは」
「エンジニアの種類は」「ハードウェアエンジニアとソフトウェアエンジニアの役割は」
そもそも、「ソフトウェアとは、システムとは」
そして、「エンベデッドシステムとは」—。

学び始めると、このように「ソフトとは」「エンベデットとは」「ソフト開発とは」と、根本的なところにまで興味が及んできますね。最後は話が膨らんでしまいましたが、組込ソフトウェアの開発に関わる者として、これからも独自にそして意欲的に、学びを求めていって頂ければと思います。

個別相談も承っております。下記よりお申し込みください。

個別相談会申し込み

関連記事

OTHER COLUMN

MORE  

まこちゃんブログ

NEWS

MORE  

PARTNER

  • Intel
  • Xilinx

お探しの組み込み製品はキーワードで検索!