連載
» 2007年09月14日 00時00分 公開

Symbian OS開発の勘所(8):クライアントサーバという究極の設計思想 (1/4)

Symbian OSの第3の特徴はクライアントサーバ・フレームワークだ。「セマフォ&共有メモリ」ではなぜダメなのか?

[大久保 潤 管理工学研究所,@IT MONOist]

 第2回で取り上げたように、Symbian OSは「マイクロカーネルOS」と呼ばれる形式のOSです。従ってファイルシステム、UI、ネットワーク、メッセージング、テレフォニー、挙げていくときりがないのですが、これら機能の提供主体はカーネルとは分離した形で提供、実行されています。この機能の提供主体をサーバと呼び、利用者側のプログラム(クライアント)はサーバと通信を行い、要求を依頼することで、処理を進めていきます。Symbian OSではこの形態を「クライアントサーバ」と呼びます。

 と、大上段に構えると「何しろファイルを1つ開くだけでサーバとの通信をやらなければならぬとは、Symbian OSとはなんと難しいのであろうか。剣呑、剣呑」のような誤解を持たれかねません。しかし事実はその反対です。Symbian OSではクライアントサーバという機構を基盤として、利用者に対し便利な機能を、性能を保ったまま提供することを可能にしています。


 今回はSymbian OSが採用したクライアントサーバというデザインが、

  1. 利用者の観点からはごく当たり前に見え
  2. 提供者の観点から見ると柔軟性がある

ことを、どのように実現しているかを解説していきます。

サーバはどこだ

 まずシステム全体の中で、どこにサーバがいるのかを明らかにしましょう。

サーバはどこにいるか 図1 サーバはどこにいるか

 マイクロカーネルの定義は以下のようなものでした。

OSが提供する各種機能の中で、必要最小限のものをカーネルとして抱え、そのほかはユーザーレベルに配置する。これにより全体の設計が簡素化でき、結果的に性能も向上するという考え方


 ですからファイルサーバも、ウィンドウサーバ(キー入力やポインタをプログラムに分配し画面への描画を行う、GUIの基礎となるサーバです)もカーネル側には含まれていません(注1)。

※注1:
Symbian OSもV7までは、カーネルの機能をサーバとして呼び出すカーネルサーバコールというものがあり、プロセス、スレッドの生成やセマフォ、ミューテックスの操作はこれを通じて行っていました。しかしV8.1bでリアルタイムカーネルEKA2に代わって以降、ユーザーからのカーネル呼び出し(execコール)がプリエンプション可能になりました。その結果カーネルサーバコールで呼び出しをシリアライズする必要がなくなり、カーネルAPIのほとんどがexecコールベースに置き換えられています。
というこの説明は、以前のSymbian OSの内部構造を知る人へのサポートだけではなく、後述する「機能を提供する主体に求められるもの」という節への伏線でもあります。資源へのアクセスをシリアライズする必要があるのであれば、サーバというのは筋の良いアイデアなのです。もっと良いのはシリアライズ不要な構造なのですが、それが可能か否かは提供する機能の粒度に依存します。


       1|2|3|4 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.