2017年05月30日

「Androidを支える技術U」を読んで その4

 今回で最後になります。

 第一巻、二巻を通じて、素人の私でもAndroidの凄さ、素晴らしさが少しは理解できたかと思います。

 このような素晴らしい書籍を発行された著者に改めて感謝いたしますm(__)m

4.管理者がいなくても動き続けるシステム

 私が最初に触ったAndroidの端末はサムスンのGalaxy Sでした。この端末は、よくハングして、ひとりでに再起動する不安定な端末でした。ですが、著作を読むと、この再起動は、どうしようもなくなった時に停止することなく再起動するようになっていた訳で、それはそれでよくできたシステムだったのかしれないなと、今は思います。

 最後は、そんなシステムを、著作に従って、電源投入の開始時点から見ていきます。

 まず、以前書きましたが、Androidは一般に言われているようにセキュリティが甘いシステムではありません。著作によれば、Android のブートローダーは通常、端末メーカーのみが知る秘密鍵で署名されているシステムイメージだけをロードします。署名されていないシステムイメージはロードをしません。このようにしてシステムイメージに悪意のあるファイルをこっそり追加したりするのを防いでいます。こうしてルートパーティションやRAMディスクなどは署名されたものと同じであることが保証され、後から変なウイルスなどがこっそり入り込むことができなくなっています。ハードウェアとソフトウェアが独立している PC などでは実現しづらい仕組みだそうです。

 次に、今までに見てきたように、Androidは、勝手にプロセスをkillしていきます。そのため、重要なシステムがkillされることもあるかと思いますが、それでも最近の端末はハングすることなく、ずっと電源を入れたままでも、安定して動いてくれています。

 著書を読んでみると、その背景が理解できます。いや、理解できたつもりかも(^_^;)

 再起動が自動で行われることで、万―OOMKiller(Out Of Memory Killer)などである程度重要なサービスがkillされてしまっても、自動的に再起動されてシステム全体としてはメンテナンスフリーで安定して動き続けます。

 さらに詳細な説明があります。私の頭では半分も理解できませんでしたが、雰囲気で見てください(^_^;)

 異常終了すると通信用のソケットが残ってしまって再帰動時にソケットの作成に失敗してうまく起動しなくなるというのは、出来の悪いデーモンにはありがちなことです。 Android では init が正しく後処理をしてくれるのでそういった心配は必要ありません。各サービスがどのようなソケットを作っているかという情報がすべてinit.rc に記述されているため、あるプロセスが異常終了したときもそのプロセスが持っていたソケットをinitプロセスが正確に把握しているため、正しく後処理を行います。サービスは、oneshotの指定がない限り、異常終了した場合などでも自動的に再起動されます。この機能を実現するためには、そのサービスが使用しているソケットや、そのサービスが再起動する時に一緒に再起動をしなくてはならないサービスの情報などが必要となります。 それぞれのデーモンが自分勝手にソケットなどを管理していると、そのうちの1つがうまく再起動に対応していないだけで全体としてモジュール郡の再起動ができないシステムとなってしまいます。 Android では再起動の時などに問題になりがちなソケットの管理をinitが行うことでこうした出来の悪いサービスができる可能性を減らしているわけです。

 なんか、凄いという気持ちになってくるでしょう?

 結果として、このようにして管理者のいない携帯電話というシステムを家電的に使うことができるわけです。

 …ということで、最近のAndroid端末は、昔に比べると安定してきたなぁとしみじみ思いました。


posted by 【なかま】 at 10:44 | Comment(0) | android
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: