- - PR -
今回はカーネル回りを中心に、Symbian OSの基本的な仕掛けについて解説します。
ほかのOSで専らアプリケーション側の開発を行っていた方からすると、この部分は割とどうでもよいところとして扱われがちです。理由はいろいろ考えられますが、ここしばらくアプリケーション側から見たカーネルのモデル(以下プログラミングモデル)があまり変わらなかったことが影響しているように思われます。
32bitアドレッシング可能で、プロセスごとに保護されたメモリ空間。プリエンプティブ、特にラウンドロビンによりタイムスライスが均等に配分される実行モデル。要するに、メモリのことを気にせず済み、かつ他プロセスのことを考えずに自プロセスのことだけに専念すれば済むプログラミングモデルが確立し一般化したために、わざわざこの辺りのことに興味を持つ人が減ったのではないかと考えています。
ただし第1回にも書いたとおり、あるアーキテクチャの妥当性というものは、リソースや環境制約次第です。Symbian OSは、
- 省メモリ
- 省電力
- リアルタイム支援
- マイクロカーネルの採用
といった理由により、カーネルの構造が一般のOSと異なっています。それらがプログラミングモデルにどのような影響を与えるのか。このような視点からSymbian OSの特徴を浮き彫りにしていこうというのが今回のもくろみです。
Symbian OSの構造
Symbian OSの構造を図1に示します。よく見かける構造図に見えますが、やはり独特な部分が見え隠れしています。アプリケーションに近い側から順番に眺めていきましょう。
![]() |
| 図1 Symbian OSの構造 |
クライアント/サーバ
マイクロカーネルの定義をまとめると、
OSが提供する各種機能の中で、必要最小限のものをカーネルとして抱え、そのほかはユーザーレベルに配置する。これにより全体の設計が簡素化でき、結果的に性能も向上するという考え方 |
となると思います。80年代の終わりから90年代の初めにかけて、マイクロカーネルは大変にもてはやされました。しかし思ったほど性能が出ないということで、すべての機能を抱え込むモノリシックカーネルに逆戻りする動きが続いていました。例えば、Windows NT系のバージョンアップごとの構造変化はまさにこれです。しかし、プロセス間通信の効率を向上させることにより性能低下を回避できることが分かり、近年また流行する兆しを見せつつあります。Symbian OSは、このマイクロカーネル・ルネサンスの流れに位置付けられるOSです。
図1において、スクリーン管理とイベント管理の機能を提供する「ウィンドウサーバ」、ファイルデバイスを管理しファイルシステムへのアクセスサービスを提供する「ファイルサーバ」など、OSが提供する中核機能がユーザーサイドに配置されています。ここに着目してください。Symbian OSでは、従来カーネルに抱え込まれていた多くの機能がユーザープロセスとして実現されているのです。
![]() |
| 図2 Symbian OSのクライアント/サーバアーキテクチャ |
マイクロカーネルアーキテクチャに基づくSymbian OSでは、プログラムがファイルを使用しようとした場合、図2のようにスレッド間通信を発生させてファイルサーバに処理を要求します。このモデルを「クライアント/サーバアーキテクチャ」と呼んでいます。
Symbian OSで「クライアント/サーバ」といった場合、一般論のクライアント/サーバではなく、ユーザースレッドから特定のサーバへの処理要求のためのスレッド間通信を指すので注意してください。なお、具体的なAPIなどについては連載第6回で詳細に解説する予定です。
ユーザーライブラリ
続いて図1を眺めていくと、「EUSER」(ユーザーライブラリ)という要素が明記されているところが目を引きます。EUSERには配列、リスト、バッファ、数値計算、クリーンアップ(連載第4回で詳述予定)などの基本的な機能が収められています。また、EUSERはカーネル機能の呼び出しをハンドリングする部分でもあります。Symbian OSは、C++ベースのクラスライブラリでAPIを定義していますが、EUSERも例外ではありません。すべての機能がクラスを通じて提供されているので、プログラミングが容易になるだけではなく、呼び出し側のコードの質がそろいやすいという利点も得られます。
Symbian OSでは、以下のいずれかの方法でOSが提供する機能の呼び出しを実現しています。
- ユーザーライブラリコール
ユーザー空間内で共通コードを実行する。コンテキストスイッチも権限切り替えも引き起こさない。
- Execコール
スレッドの実行権限をスーパーバイザーモードに切り替えることにより、カーネル側のコードを実行する。その際、スタックもカレントスレッドのスーパーバイザースタックに切り替えられている。
EUSERが提供している機能は、その内容に応じてユーザーライブラリコールあるいはExecコールとして実行されることになります。
カーネル
Symbian OSのカーネルはマイクロカーネルなので、プロセスやユーザーモードのスレッドの管理、スレッド間通信、ライブラリのロードなど、限定された範囲を責務としています。カーネル内にはカーネルサーバ、タイマなど5つのスレッドが動作しています。
興味深いことに、Symbian OSのカーネルはその内部に「ナノカーネル」というレイヤを抱えています。これはスレッドのスケジュールと同期に特化したサービスを提供するものです。カーネルはナノカーネルによって提供されるシンプルなスレッドとサービスを土台として、階層的に構成されているのです。
メモリモデル
図1にわざわざ「メモリモデル」という要素が記載されているのには意味があります。Symbian OSは、移植先の多様な環境に合わせてメモリモデルを選択可能にしています。
|
製品に使われるmoving、multipulいずれのメモリモデルも、プロセスごとに仮想アドレス空間を用意します。MMUのデザインが異なっていても同じプログラミングモデルを提供しているのです。この辺りは非常にSymbian OSらしい部分だと思います。
関連記事 設計/開発技法
- 特集:Javaは組み込みに“不向き”は本当か?
- 連載:BREWアプリケーション開発入門(全10回)
- 連載:イチから作って丸ごと学ぶ! H8マイコン道(全12回)
- 連載:−ザ・組み込み−ソフトウェアのハードウェア化(連載中)
- 連載:組み込みLinux開発入門(全3回)
- 連載:T-Engineプログラミング入門(全4回)
- 連載:Symbian OS開発の勘所(全10回)
- 連載:Symbian OSアプリ開発の手引き(連載中)
- 連載:解説! ロボット開発環境Robotics Studio(全4回)
- 連載:Robotics Studio活用術 はじめて作るサービス(全5回)
- 連載:生産性向上への道 Eclipseで行うC/C++開発(全4回)
組み込み開発フォーラム 新着記事
- フルスクラッチの“Hello World”を動かしてみよう(2011/3/31)
- FlexRayプロトコルの概要(その2)(2011/3/29)
- JASA、東北地域に拠点を置く会員企業を支援(2011/3/25)
- NEC、震災の影響を受けた4拠点の生産再開を発表(2011/3/23)
- 内部ブロック図の基礎と共通要素(2011/3/22)
- インテル、被災地におけるITインフラの復旧を支援(2011/3/22)
- Facts on AUTOSAR/AUTOSAR導入の現実(2011/3/18)
- 計測器・震災被害ホットラインを開設、テクトロニクス(2011/3/18)
- ZMP、地震の揺れを多角的に計測するアプリ無償配布(2011/3/16)
- メンター、3Dテレビ・マルチメディア検証プラットフォーム(2011/3/16)
- 【番外編】タチの良い計測値、悪い計測値とは?(2011/3/15)
- tarファイルシステムをAndroidに組み込む!!(2011/3/10)
















