組み込みOS適材適所 《Windows Embedded CE編》(1) ―― まず,μITRONとWindows Embedded CEの違いを理解する

中田 佳孝

tag: 組み込み

技術解説 2009年9月 2日

2.ITRONとCEの違い

 ITRONもCEも,どちらも主にC言語プログラミングによるシステム開発になります.もちろんITRON上で動作していたソフトウェアを,そのままCEで動かすことはできません.

 システムを移行するにあたり,ITRONとCEでどのような違いがあるかを把握しておく必要があります.OSの差異を理解することで,移行の際にITRONの資産をどう流用できるか,どの機能はスクラッチから開発する必要があるか,などを判断できます.

●CEの対応CPUは32ビットのみ

 製品としての違いを表1にまとめました.ITRONが対応しているCPUは,供給元によって異なりますが,8ビットや16ビットといった低スペックのCPUをサポートしていることが多いようです.それに対してCEは,先にも述べましたが32ビットCPUのうち,x86,ARM,MIPS,SH-4の各CPUに対応しています.

表1 ITRONとCEの概要

 

●概念や振る舞いが微妙に異なる

 ITRONとCEのシステム構造を図1a,bに示します.比較しやすいよう,カーネルの中身はブラック・ボックスとしています.それぞれの違いをソフトウェアの概念や,構造に沿って説明します.


(a)ITRONの基本システム構造

 


(b)CEの基本システム構造
図 1 ITRONとCEのシステム構造

 

1) 実行コンテキストとスケジューリング方式
 OSが管理する実行処理単位(実行コンテキスト)の違いを表2にまとめました.ITRONでは「タスク」という単位で実行されます.これは,CEでは「スレッド」に相当します.ITRONのカーネルはタスク単位で,CEのカーネルはスレッド単位で,処理を実行しています.

表2 ITRONとCEの実行処理単位

 


 ITRONもCEも,複数のコンテキストを実行させることができます.といっても,処理するCPUは基本的に一つしかありません.カーネルが,コンテキストのCPU使用時間や使用するタイミングを管理することで,複数のコンテキストを処理しています.このようなOSを「プリエンプティブ・マルチタスクOS」と言います.

 どちらのOSでも,実行コンテキストには必ず優先度が設定されます.カーネルは,この優先度に基づいてCPUを使用するコンテキストを決めています(これを「スケジューリング」と呼ぶ).具体的には,優先度の高いコンテキストの実行中は,それより低い優先度のコンテキストは実行されません.


図 2 優先度順のスケジューリング方式

 

 ITRONとCEで明確に異なる点は,優先度が同じコンテキストが存在したときの動作です.ITRONでは,コンテキスト実行中に自分と同じ優先度のコンテキストが起動しても,自分が休止状態にならない限り,CPUを使用し続けます.それに対してCEでは,「ラウンドロビン」という方式を採用しています.この方式では,同じ優先度のスレッドが複数ある場合,カーネルが設定された時間単位(ThreadQuantumと呼ぶ)でCPUを使用させます.


図 3 ラウンドロビン方式

※ 本記事の公開当初,図2と図3が入れ替わっていました.現在は修正されています.お詫びして訂正いたします. 

2) 同期処理
 複数の実行コンテキストが存在するときに,ほかのコンテキストの処理の完了を待つ処理を「同期処理」といいます.ITRON,CEともに,以下のような一般的な同期処理機能を提供しています.

  • イベント・フラグ
  • セマフォ
  • ミューテックス

 なお,ITRONでよく使用されるメールボックス機能はCEには存在しません.CEで同じ機能を実現したい場合,イベント・フラグや動的メモリ領域確保の機能を使用して自身で実装する必要があります.

3) プロセスの概念
 CEでは,一つのプログラム(アプリケーション)がプロセスという単位で管理されます(図1の右側).パソコン向けWindowsのNotepadやWord,Excelなどをイメージしていただいたら分かりやすいかと思います.プロセス内には一つ以上のスレッドが存在します.メモリ空間はプロセスごとに区切られ,基本的にほかのプロセスのメモリ空間にアクセスすることはできません.これは,システムの堅牢(けんろう)性を高めることにつながっています.


図4 CEのプロセスとメモリ空間

 

 ITRONではプロセスという概念がありません.OSもミドルウェアも自分で作成したソフトウェアも,すべてまとめて一つのプログラムとして動作します.ですから,ほかのタスクやOSのグローバル変数に自由にアクセスすることが可能です.柔軟にシステムを設計・構築できる反面,システム的には堅牢とは言えません.開発者はこのことに留意して開発する必要があります.

4) デバイス・ドライバ(ハードウェア・アクセス処理,割り込み処理)
 CEでは,カーネル,およびカーネルにリンクされるデバイス・ドライバからのみ,ハードウェアにアクセスできます.CEのデバイス・ドライバは,明確にインターフェースが決められています.また,ディスプレイやオーディオ,シリアルといった基本的なデバイスでは,開発者がハードウェアに特化した部分のみコーディングするだけで済むように,あらかじめ構造化されています.

 それに対してITRONでは,ドライバに関する明確な規定はありません.どのタスクからでもデバイス(ハードウェア)にアクセスすることが可能です.ただしITRONでも,デバイス・ドライバの構造を規定し,流用性を高めるためのガイドラインは用意されています.詳しくは,TRON協会の「TRON関連資料」のページに置いてある「組み込みシステムにおけるPDIC機能ガイドライン」を参照してください.

 また,CEでは割り込み処理もカーネル,およびデバイス・ドライバで処理します.

●ハードウェア・アクセスが絡む処理については作業が必要

 以上の比較から,実行コンテキストや同期処理といった概念は,(APIの違いはもちろんあるが)ITRONとCEでは大きな差異はありません.ITRONのシステムで,ハードウェア・アクセスが絡まないタスクであれば,比較的容易に移植できることが想像できます.逆にハードウェア・アクセスが関係する処理については,CEではデバイス・ドライバという形で実装する必要があります.

 次回は,上記の差異を踏まえて,ITRON上で実現されたシステムをCEに移行する手順を,実機を使用して解説します.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日