- - PR -
メモリ管理、非同期フレームワーク、クライアントサーバ、これらのコンセプトが
により統合されている。これがSymbian OSの特徴であるということを、これまでの連載で説明してきました。
連載も進み、外堀も埋まってきたということで、いよいよSymbian OSの3大ポイント(図1)の2番目にして多くの誤解の源泉、非同期フレームワークの解説を行いたいと思います。誤解とは穏やかならざる表現ですが、この連載を行うきっかけになったのが、まさにこの誤解の多さでした。
![]() |
| 図1 Symbian OSの3大ポイント |
ご存じのとおりC++では(Cでも同じですが)、並行処理に対する規定がありません。この部分に関しては、それぞれの実行環境ごとに異なったライブラリが用意されます。つまりC++/Cで書かれているからといって、並行処理に関してはポータビリティがないのです。常識? そう、まさに常識に属する話だと思うのですが、なぜか多くのソフトウェアエンジニアはほかのOSへの引っ越しに際して、それまでの環境と同じ並行処理モデルが通用するはずだ、という根拠のない期待を持つようです(注1)。それはSymbian OSへの引っ越しにおいても例外ではないようで、第1回に記した「アレがないシンドローム」のかなりの部分を、この並行処理に関する誤解が占めるようです。
つまり今回のゴールは、各環境から引っ越してきた人がSymbian OSの並行処理に対して抱く誤解を解くことにあります。以下、順を追って進めていきましょう。
| 注1:POSIXは「Portable Operating System Interface」なンだからすべてのOSはPOSIXに従っておけばよいのではないか、というナイーブな意見があります。しかしPOSIXは決して透明無色なインターフェイスではありません。その出自から明らかなように、UNIXに固有な機構を前提とする仕様となっています。例えばシグナルなどがそうです。さらに出来の悪いことに、非同期のイベントを集約して待つための仕掛けを持っていません。この点については後編で詳しく述べます。 |
ブロッキング再考
マルチタスク環境におけるシステムの応答性を考えるとき、ブロッキングのことを避けて通ることはできません。
![]() |
| 図2 同期型APIのシーケンス図 |
図2にあるように、せっかく複数の実行コンテクスト(注2)を用いてシステムを構成したとしても、要求が完了するまで待つ設計では意味がありません。ブロッキング期間には外部からのイベントを受け取ることができないため、システムの応答性を確保できなくなってしまいます。
| 注2:スレッドでもタスクでもお好きな用語でイメージしてもらって構いません。 |
例えばPOPサーバに対して新着メールを取りに行く、という処理を図2中の[サービスプロバイダ1]に委譲したとします。最初のブロッキング区間には、
- コネクション確立(場合によっては回線接続が)
- POPサーバとの認証処理
- 実際のメールデータの取得処理
など、一切合切が含まれることになります。その期間[クライアント]はどのようなイベントに対しても反応することができません。ブロッキング区間にメール一覧を送信者のアドレス順に並べ替えようとしたとすると、いったいどんなプログラム構成にすればよいのでしょう。ブロッキング区間は操作が一切止まることにしますか?
しかしそれでは避けられない話があります。例えばメールの受信中断はどうやって指示をしたらよいのでしょうか。よくある長時間ブロッキング対策は、以下のようなものでしょう(筆者もWindowsでプログラムを書いているときには、こんなことをやったような……)。
- 中断のキーシーケンスをホットキーとして登録しておき、発生した時点で[サービスプロバイダ1]のしかるべき関数を呼び出すというシグナルモデル
これはUI(ユーザーインターフェイス)にかなりの制限が付きます。 - キャンセルのダイアログを別の実行コンテクストで表示させておき、そこに対して中断指示が発生しなかったか[サービスプロバイダ1]がチェックしに行くというポーリングモデル
この場合[サービスプロバイダ1]がUIを持つ(少なくとも知る)という構造上のひずみが発生します。
どちらの方法も同期APIを基本としてとらえたうえで、キャンセルを例外的に処理しようとするため、システム構成に制約や問題が発生しています。
関連記事 設計/開発技法
- 特集: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)
















