図7  マルチコアCPUの主な利用形態<BR>CPUコアに特定のOSとタスクを割り当てる「AMP」,個々のCPUが対等の条件でメモリーを共有する「SMP」が一般的。AMPはCPUやメモリーをOS間で共有しないため,既存のマルチCPUシステムの移植性が高い。ただ片方のCPUコアが空いている場合に,動的に任意のタスクを割り当てることはできない。一方SMPはタスクが動的にいずれかのCPUコアに割り当てられるため,あるタスクにCPUコアを二つ割り当てて並列処理できるなどの柔軟性がある。半面,スレッドの実行順の制御などプログラムの検証・改変が必要になる。そこで一つのOSがあるタスクを特定のCPUコアに割り当てて実行することで,AMPの持つ移植性とSMPの持つ柔軟性を併せ持つ「BMP」の実装が始まっている。
図7 マルチコアCPUの主な利用形態<BR>CPUコアに特定のOSとタスクを割り当てる「AMP」,個々のCPUが対等の条件でメモリーを共有する「SMP」が一般的。AMPはCPUやメモリーをOS間で共有しないため,既存のマルチCPUシステムの移植性が高い。ただ片方のCPUコアが空いている場合に,動的に任意のタスクを割り当てることはできない。一方SMPはタスクが動的にいずれかのCPUコアに割り当てられるため,あるタスクにCPUコアを二つ割り当てて並列処理できるなどの柔軟性がある。半面,スレッドの実行順の制御などプログラムの検証・改変が必要になる。そこで一つのOSがあるタスクを特定のCPUコアに割り当てて実行することで,AMPの持つ移植性とSMPの持つ柔軟性を併せ持つ「BMP」の実装が始まっている。
[画像のクリックで拡大表示]
マルチコアCPU対応
並列処理でタスク応答速度を向上

 CPUのマルチコア化が進む中で,組み込みOSはマルチコアCPUを生かす工夫を盛り込まなくてはならない。その手法は大きく三つある。(1)CPUコアに特定のOSとタスクを割り当てる「AMP(Asymmetric Multiprocessing)」,(2)個々のCPUが対等の条件でメモリーを共有する「SMP(Symmetric Multi-processing)」,(3)AMPの持つ移植性とSMPの持つ柔軟性を併せ持つ「BMP(Bound Multiprocessing)」だ(図7[拡大表示])。

 (1)のAMPはCPUやメモリーをOS間で共有しない。別々のコンピュータが連携して動作するイメージだ。組み込み機器の多くは,マイコンを複数使う。「ヘテロジニアスなマルチプロセシングが普通」(ウインドリバー マーケティング本部の若山朱美シニアプロダクトマーケティングマネージャー)である。この複数のマイコンがマルチコアCPUに置き換わる。このため,既存のマルチCPUのプログラムを移植する手間が少ない。

 「タスクの処理内容とCPUへの割り当てが明確であるため,動作保証しやすい」(名古屋大学大学院情報科学研究科情報システム学専攻の高田広章教授)。半面,AMPは片方のCPUコアが空いているからといって,別領域で動くOSのタスクを割り当てることはできない。

 (2)のSMPは,文字通りCPUコアの役割が対等となる。OSがタスクを動的にいずれかのCPUコアに割り当てる。あるタスクを二つのCPUコアで並列処理できるなどの柔軟性がある。

 問題は複数のタスクを複数のCPUコアで処理することによるリアルタイム性能の予測の難しさ。具体的には,OSがCPUコアに動的にタスクを割り当てるため,タスクの実行順の制御などプログラムの検証・改変が必要になる。AMPのように,既存のマルチCPUのプログラムをほぼそのまま移植することはできない。

 そこで一つのOSがあるタスクを特定のCPUコアに割り当てて実行することで,AMPの持つ移植性とSMPの持つ柔軟性を併せ持つようにしたのが(3)のBMP。タスクとCPUコアのひも付けを開発者が指定できる。製品としては,カナダQNX Software Systems社が2006年第1四半期にBMP対応OSを出荷する予定だ。

 例えば,マルチコアCPUでの動作を意図しない既存タスクは,特定のCPUコアに固定的に割り当てて実行する。マルチコアCPUでの並列動作を意図して新たにプログラミングしたタスクは,動的にCPUコアを割り当てるよう設定する。過去のプログラム資産を生かしつつ,マルチコアCPUを前提としたプログラムを混在させられる。こうすればマルチコアCPUへの移行コストの低減と,並列処理の恩恵を同時に受けられる。

 CPUコアのキャッシュのヒット率を高められるのもBMPの特徴だ。あるタスクを実行すると,そのタスクに関連する命令やデータがCPUコアのキャッシュに蓄えられる。このため,タスクを実行するCPUコアが決まっている方がキャッシュのヒット率は上がる。SMPでは,キャッシュの内容は常に同じでなければならない。このキャッシュの同期がオーバーヘッドとなる。


同じOSでも実装が千差万別


図 アプリケーション開発者向けに必須ライブラリを定義
組み込みOSはOSの機能を取捨選択して必要なメモリー容量を減らせる。このためアプリケーションの互換性が必ずしも保証されない。そこで必須ライブラリを定義して,アプリケーションの互換性を維持するプラットフォームとする。例えば米Microsoft社は,Windows CEをベースとした「Windows Mobile」をPDA向けのプラットフォームとして提供している。[画像のクリックで拡大表示]

 同じ組み込みOSを搭載するシステムであっても,システム・サービスは千差万別。OSが備えるシステム・サービスのうち,そのすべてを実装するわけではない。組み込みシステムは,CPUやメモリーといったリソースが限られている。開発期間の短い機器であれば,検証の作業もなるべく減らしたい。そこでOSを構成するプログラム群から,不要な部分は削除してから組み込むことでプログラム全体のサイズ(フットプリント)を最小限に抑えている。一般にフットプリントが小さいほど,CPUやメモリー,検証の負担を削減できる。

 例えばVxWorksは「次のバージョンでは,オブジェクト単位ではなくソースコードの関数レベルで取捨選択する機能を追加する」(ウインドリバー営業技術本部の高山剛シニアエンジニア)ほどだ。

 問題はアプリケーションの互換性が必ずしも保証されないこと([拡大表示])。組み込みシステムの中には,サードパーティがアプリケーションを提供する場合がある。例えばPDAでは,ユーザーがインストールして利用するアプリケーションが数多く存在する。システム・サービスの実装に差があると,個々の実装をいちいち意識してアプリケーションを開発する必要が出てくる。OSのシステム・サービスが用意するAPIが必ずしも使えないとなると,アプリケーション側で該当する機能を用意しなくてはならない。

 そこで組み込みOSの実装に当たって組み込みを「必須」とするライブラリを定義することで,アプリケーションの互換性を維持する。例えば米Microsoft社のWindows CEの場合。Windows CEをベースにしたPDAや携帯電話機向けプラットフォームとして,「Windows Mobile」を提供している。「Windows CEはカスタマイズが可能だったため,同じWindows CE搭載機でもメーカーによって中身は異なっていた。Windows Mobileであれば,メーカー間で共通の環境を保てる」(マイクロソフト エンベデッドソリューション営業本部の永田哲テクノロジースペシャリスト)。Windows MobileのSDKを利用して開発したアプリケーションであれば,Windows Mobileを搭載するどのPDAでも互換性が保たれる。