塩田紳二のPDAレポート

【WinHEC 2006編】
メモリ/プロセス管理が進化した
「Windows CE 6.0」


 WinHECは、MicrosoftのOSを搭載するハードウェアに関するカンファレンスで、Windows CEもその対象となる。ただ、Windows CEには、別途組み込み向けのカンファレンスがあるため、WinHECでのセッションはそれほど多くない。

 今回は、現在のWindows CE 5.0の後継となるCE 6.0についてのセッションなどがあったので、そのレポートをしたい。

 本題に入る前に簡単におさらいしておこう。Windows CEとは、Microsoftの組み込み機器向けのOSで、これを使ってPDAやスマートフォン向けに構成したのがWindows Mobileである。現在のバージョンは、Windows CE 5.0とWindows Mobile 5.0となる。

 Windows CE 6.0は、この5月8日にβテストを行なうことが発表されている。出荷されるのは2007年ぐらいになると思われる。

 さて、このWindows CE 6.0は、カーネル部分に大きな改造が加えられ、現行のCE 5.0とは大きく異なる構造を持つようになった。これは、組み込み機器も年々、プロセッサ性能やメモリ容量などが向上し、より性能が求められるためである。特にPDAやスマートフォンでは、インターネットアクセスやメディア再生など、PC並の処理をこなす必要が出てきた。

●メモリとプロセス管理

 Windows CE 5.0でも、仮想記憶は行なわれている。ただし、Windowsのように外部記憶を使って仮想メモリ領域を拡大しているわけではない。どちらかというとカーネルがメモリやプロセス管理を簡単にするためのものだ。仮想メモリ空間は、カーネルメモリ空間とユーザーメモリ空間に分かれている。ユーザーメモリ空間は1つしかなく、これをすべてのプロセスで共有する。

 各プロセスには32MBの領域が与えられる。これをスロットと呼ぶ。スロットはアプリケーション用に32個(システム全体では34個)用意されているので、同時実行が可能なプロセス数は、最大で32に制限されていた。ただし、システム側で画面描画(GWES:Graphics Windowing Event Subsystem)やファイルシステムドライバなど4つが予約されているため、実際に走行可能なプロセス数としては28個となっている。

 実行するプロセスは、仮想メモリ空間先頭にあるスロット0に再割り当てされ、実行がおこなわれる。このようにすることで、実行時にはすべてのプロセスが0番地からメモリがある状態となる。

 また、システム側のDLL用にスロット1が予約されており、ここにROM内のDLLを割り当てて実行プロセスから呼び出せるようにしてある。

 Windows Mobile 5.0では、ファイルはすべてフラッシュメモリ側に置かれ、RAMはすべて実行用に使われるようになっている。64MBのRAMをシステム側も含めて使う。このため、データはファイル領域に置き、必要なもののみをRAMに読み込んで使うといった構造になる。なお、データベースファイルを扱うAPIが用意されているため、処理対象となるデータをレコードとして扱えば、メモリ読みこみなどの処理は自動で行なわれる。

 ユーザーメモリ空間の後半は、すべてのプロセスで共有する領域である。割り当てが可能ならば、ここにRAMを割り当てて利用することもできるが、他のプロセスが利用している領域を間違って書き換えてしまう可能性がある。

 CE 6.0も同じく、カーネル、ユーザーメモリ空間を持つが、各プロセスに対して最大2GBのユーザーメモリ空間(仮想メモリ空間)を割り当て、同時実行が可能なプロセス数を32,000までに向上させた。ただし、プロセスごとの仮想メモリ空間は、メモリマップドファイル用にも使われる。メモリマップドファイルとは、仮想メモリ機構を使って、ファイルをアクセスする仕組みである。アプリケーションからは、仮想メモリ内にファイルが読み込まれたかのように見える。実際にそのメモリをアクセスすると、OS側がファイルシステムから該当の部分を読み書きする。

 今回の改良により、アプリケーション(プロセス)のメモリに対する自由度が高くなった。また、プロセスごとにメモリ空間が完全に分離されているため、間違って、他のプロセスが使っている領域を書き換えてしまうことはない。

CE 5.0(左)と6.0の仮想メモリ空間。どちらも4GBのメモリ空間を2つに分け、上位をカーネル。下位をユーザーメモリ空間としている。CE 5.0ではユーザーメモリ空間は1つしかないが、CE 6.0では、プロセスごとに独立している。このため、より多くのプロセスを走らせることが可能になった

●カーネル構造の改良

 CE 5.0までは、システム側が提供するさまざまな機能はカーネルとは別のサービスモジュールで提供されていた。これは、実行するプロセスをスロットに格納しこれを切り替えて実行させるためにプログラムモジュールとして分離している必要があったからだ。

 いわゆるAPI呼び出しは、いったんカーネルで受け付けられたあと、必要なプロセス(DLL)のロードや割り当てを行なったのちに実行し、結果をカーネル経由で呼び出しプロセスへ戻す。こうした構造になっているため、API呼び出しには、オーバーヘッドが存在した。これを解消するためにAPIを実現するサービスモジュールは、カーネルメモリ空間に置かれるようになった。ファイルシステムやグラフィックス、ネットワークなどのサービスは、すべてカーネル空間側に置かれるようになったために、CE 5.0にあったオーバーヘッドが解消されている。

 実際、Windows Mobileを使うと、無線LANなど接続速度は遅くないネットワークであっても、それほど速度が出ない。たとえ接続をIEEE 802.11bから11gにしてもメールやWebの読みこみ速度はほとんど変わらない。これは、サービス呼び出しやメモリ切り替えなどのオーバーヘッドが大きく影響しているためだと考えられる。

 ただし、従来のCE用ドライバは、ユーザーメモリ空間で動くユーザーモードドライバであるため、互換性を持たせるため、ユーザーモードドライバもサポートされている。また、それほど速度を必要としないAPIを提供するサービスとサービスマネージャもユーザーメモリ空間に残されたままだ。これも互換性を維持するためだと考えられる。

 Microsoftの資料によれば、CE 6.0は、現在のCE 5.0と同じプロセッサ、同じハードウェアで動作できるという。

 今回のWindows CEの強化は、Windows Mobileにとってはかなり影響がありそうだ。特にWebアクセスなどのネットワークの実行効率が改善する。Microsoftは、従来との互換性を重要な目標と言っているが、メモリやカーネル構造の変化による多少の影響は避けられないだろう。

CE 5.0と6.0のAPI(サービス)呼び出し。CE 5.0では、アプリケーションからのAPIコールは、カーネルで受け付けられ、必要なモジュールへの呼び出しが行われる。これに対して、CE 6.0では頻度の高い主要なAPI呼び出し(グラフィックスやファイルシステムなど)は、カーネル内部で処理される。それ以外のAPI呼び出しは、5.0と同じ
CE 5.0と6.0のカーネル構造の変化。CE 5.0では青色の部分がカーネルモードでそれ以外は、ユーザーメモリ空間で実行されている。これに対して、CE 6.0では、GWESやデバイスなどの処理がカーネル空間内で実行される。ただし、他のシステムサービスや後からインストールしたサービスモジュールなどはユーザーメモリ空間で実行される

□WinHEC 2006のホームページ(英文)
http://www.microsoft.com/whdc/winhec/
□関連記事
【2005年12月21日】【塩田】ウィルコム「W-ZERO3」ファーストインプレッション
http://pc.watch.impress.co.jp/docs/2005/1221/pda46.htm
【2005年8月23日】携帯機器向けの最新OS「Windows Mobile 5.0 日本語版」(ケータイ)
http://k-tai.impress.co.jp/cda/article/news_toppage/25326.html

バックナンバー

(2006年5月27日)

[Text by 塩田紳二]


【PC Watchホームページ】


PC Watch編集部 pc-watch-info@impress.co.jp ご質問に対して、個別にご回答はいたしません

Copyright (c) 2006 Impress Corporation, an Impress Group company. All rights reserved.