第1章「同時に動く」ことによる効率化と設計の難しさ

並列処理の基本となるマルチタスク・プログラミングの基礎
五十嵐 仁

複数のタスクが同時に動作するマルチタスク OS は，複数の作業を同時に処理したり，リアルタイム性の要求される処理が容易に行えるなどのメリットがある．そのため，組み込み向け OS といえばマルチタスク OS といえるほど普及している．しかし，マルチタスク OS はシングル・タスク OS よりさまざまな要素を考慮しなければならない．資源の排他制御，優先順位，タスクの分割 ―― これらの事項を把握して適切に設計する必要がある．そこで
本稿では，並列コンピューティングの基本であるマルチタスク・プログラミングについて学んでいく． （編集部）

組み込みシステムの世界においても，マルチコア・プロセッサ対応の波が押し寄せてきています．その中でも，負1．マルチタスク・プログラミングとは荷分散型の SMP（Symmetric Multiprocessing ；対称型マルチプロセッシング）に注目が集まり，SMP に対応したCPU や OS が続々と登場しています．
しかし，単純にシングル・コア環境で開発してきたソフトウェアを SMP 環境で動作させれば，性能が上がるわけではありません．それどころか正常に動作しない可能性すらあるのです（右掲のコラム 1 を参照）．

かつてのパソコン OS はシングル・タスクでした．同時に一つの処理しか行えず，複数の処理を行いたい場合は，一つの処理が終了したあとで，次の処理に取り掛かるしかありませんでした．
これに対してマルチタスクとは，1 台のコンピュータ・システム（処理装置）で，同時に複数の処理（タスク）を並マルチコア・プロセッサ環境では，複数の処理が完全に行して実行する機能のことです．例えば，1 台のパソコン並列に実行されます．そのため，ソフトウェアを正常に動で CD の音楽を聴きながら，Web サイトを閲覧して，ワー作させるには，適切な排他・同期制御を行う必要がありま

プロ・ソフトウェアでレポートを書くことができます（図す．と言っても，マルチコア対応のために，新しい特別な1）．このたとえでは，音楽再生ソフトウェアと Web ブラ技術が必要となるわけではありません．基本となるのはウザ，ワープロ・ソフトウェアを同時に実行させているの「マルチタスク・プログラミング」です．

で，マルチタスク環境を利用して実現していることになり

そこで，本稿ではマルチタスク・プログラミングの基礎について説明していきます．

ます．
近年の OS では，パソコン用だけでなく，組み込み用のOS でもマルチタスクが標準となっています．複数の処理を同時に行いたいという要求が高まっているためです．
それでは次に，マルチタスク・プログラミングがどのような原理で複数の処理を同時に実行しているかについて説明します．

● マルチタスクを実現する方法
一番簡単にマルチタスクを実現する方法は，「タスクの数だけプロセッサを用意する」ことです．マルチタスクを実現したいコンピュータ・システムに，同時に実行するタスクの最大数以上のプロセッサ（コア）が搭載されていれ
図 1 パソコンの環境では，マルチタスク・プログラミングは当たり前

46

ば，空いているプロセッサに実行するタスクを割り振るだ

News Flash ――○○○○●○○○○●○○○○●○○○○●○○○○●KEYWORD―― マルチタスク，スケジューリング，プリエンプティブ，リアルタイム性，イベント・ドリブン，排他制御，○○○○●○○○○●○○○○●○○○○●○○○○●○○○○●○○○○●○○○○●○○○○●○○○○●○○○○●○○○○●○
タスク間通信○○○●○○○○●○○○○●○○○○●○○○○●○○○○●○○○○●○○○○●○○○○●○○○○●○○○○●○○○○●

Nov. 2007

第1章 並列処理の基本となるマルチタスク・プログラミングの基礎

C O L U M N 1
なぜシングル・コア・プロセッサのプログラムが SMP 環境で動作しないのか
シングル・コア環境で，やみくもに同期・排他制御の処理タスクが存在しなければ，タスク B がコア 2 で実行されてしを実装した場合，逆に OS の処理がオーバヘッドになり，性まいます．この場合，タスク A とタスク B の実行のタイミン能が低下する可能性があります．このような理由から，シングを同期させれば，問題は解決します．例えば，タスク B はグル・コア環境では同時に処理が実行されるタスクは必ず一起動直後に起床待ちに遷移し，タスク A はタスク B が使用すつということを生かして，タスクの操作やオブジェクトを使る結果の処理が終了した時点でタスク B を起床します．これわず，タスクの優先度に基づく実装を行っているのではないだけで，正常に動作させることができます．

でしょうか．

1
2
3

このように，シングル・コア環境のプログラムは，そのま

例えば，図 A のようにタスク A の結果を使用してタスク Bまでは SMP 環境で動作しません．しかし，ほとんどのケーが処理を実行するような場合，シングル・コアでは，単純にスでは，マルチタスク・プログラミングの基礎的な知識をタスク A の優先度をタスク B より高くすることによって，タ持っていれば，SMP 環境へ対応できます．マルチコア・プロ

スク A が終了する前にタスク B が実行されないようにできま

セッサへの対応の最初の一歩は，マルチタスク・プログラミす．一方マルチコアでは，タスク A がコア 1 で実行されていングを見直すことだと思います．

4
5

るときにコア 2 が空いていると，タスク B より高い優先度のCPUコア1個

6優先度が高いタスクの割り込み

タスクA
タスクB

優先度が低いタスクへのスイッチ

タスクC
単純にマルチコアに移植するとCPUコア2個

CPUコア1 優先度が低いタスクへのスイッチ

タスクA
タスクB

想定していない順序でタスクが実行されてしまう場合がある

CPUコア0

タスクC

CPUコア1
マルチコア向けの修正が必要

図A
シングル・コア・プロセッサのプログラ
ムが SMP 環境で動作しない理由

けで，マルチタスク・プログラミングを実現することが可能です（図

CPUコア
2個

CPUコア1 優先度が低いタスクへのスイッチ

タスクA
タスクB

CPUコア1

マルチプロセッサ（マルチコア・プロセッサ）
タスクA実行中プロセッサ（コア）が複数あれば，実行順を気にする必要がない

2）．とは言っても，一般的なパソ
コンや組み込みシステムでは，経済性，消費電力，物理サイズの制逐次実行させたい場合は，同期処理が必要

CPUコア0

タスクC

タスクB実行中

タスクC実行中

約から，そのようなケースはほとんどありません．

タスクD実行中プロセッサが一つの場合は，処理時間を割り当てるスケジューリングが重要となる

そのため，マルチタスク・プロ
グラミングでは，複数のタスクをシングル・プロセッサ高速に切り替えながら実行するこ
タスクA実行中 タスクB実行中 タスクC実行中 タスクD実行中 タスクA実行中とにより，見かけ上，同時に動いているように見せています．具体Nov. 2007

図 2 プロセッサがたくさんあれば，マルチタスクは容易に実現できる

New Products ――ソフィアシステムズ，ARM と Xtensa のマルチコアに対応した JTAG ICE を発売
ソフィアシステムズは，ARM コアと Tensilica 社の Xtensa コアを集積したマルチコア・プロセッサに対応する JTAG ICE「EJDebug2 Xtensa + ARM」を発売した．ARM コア同士，Xtensa 同士のマルチコア構成でも利用可能．

47