インサイドAndroid

 本連載の第1回として,Androidとは何なのかを理解しよう。以下では,Androidを構成するソフトウエア群の中身をのぞいてみる。

 Androidは5つのスタックで構成される。(1)Linuxカーネル,(2)標準的なライブラリ,(3)AndroidRuntime(アプリケーションを実行するための実行環境),(4)アプリケーション・フレームワーク,(5)アプリケーション,である(図2)。

[画像のクリックで拡大表示]
 これらのスタックごとに見ていこう。

Linuxカーネル

 AndroidはOSとしてLinuxカーネルを採用している。Linuxカーネルは,メモリーやプロセスの管理,ファイル・システム,セキュリティといった基本機能に加え,各種ドライバを提供する。いずれも通常のLinuxディストリビューションと同様,不可欠な機能である。

 Androidのアプリケーションは必ず,AndroidRuntimeやフレームワーク層を介して動作する。そのため,アプリケーションの開発時にカーネルを意識することはない。

 OHAは,Androidの開発に当たってカーネルに独自ドライバを数種追加している。それらの中でAndroidの特徴を表すドライバには次のようなものがある。

●LowMemoryKiller

 このドライバは,メモリーが不足した時に,不要なプロセスを自動的に停止する。LowMemoryKillerを加えたのは,次のような事情がある。

 Androidの各アプリケーションは,システム上の1プロセスとして起動される。通常のLinuxディストリビューションであれば,ソフトウエアの終了はプロセスの停止を意味する。しかし,Androidの場合はユーザーがアプリケーションを終了しても,プロセス自体はすぐには停止しない。

 その理由は,一般的なPCとは違い,携帯端末では消費電力が問題になるからだ。プロセスの生成は一般的な処理に比べて,CPUをはじめとするコンピュータ・リソースの消費量が非常に大きい。ユーザーがアプリケーションを切り替えるたびに,プロセスの終了と生成を繰り返していては,バッテリの持続時間が短くなってしまう。

 そのため,使われなくなったアプリケーションのプロセスも,すぐに終了せず,待機状態にしておく。もし,待機しているアプリケーションの起動が要求されたら,待機中のプロセスを利用し,プロセス生成のコストを低減するのである。

 この際,単に多くのプロセスを起動させていては,メモリーそのものが不足する問題が発生する。そこで,メモリーの不足したタイミングで,使われなくなったアプリケーションのプロセスをLowMemoryKillerが終了させる。これにより,メモリーを解放してシステム全体の負荷バランスを保っている。