Die Architektur von Android

Seite 2: Kernig

Inhaltsverzeichnis

Unter Android läuft jede Anwendung als eigener Prozess, jedoch können die Programme Teile anderer Anwendungen nutzen. Folglich kommunizieren Prozesse intensiv miteinander. Diese Interprozesskommunikation (IPC) bringt normalerweise ein aufwendiges Marshalling und Unmarshalling mit sich – die auszutauschenden Daten müssen zwischen ihrer internen Repräsentation und einem zur Übermittlung geeigneten Format hin- und hergewandelt werden. Das verbraucht nicht nur Speicher, da dazu exzessiv Objekte erzeugt werden müssen, sondern belastet auch die CPU.

Um das zu vermeiden, implementiert Android über einen speziellen Treiber namens Binder eine besonders ressourcenschonende Form der Interprozesskommunikation, die den Datenaustausch zwischen Prozessen mittels Shared Memory realisiert: Programme tauschen per IPC lediglich Referenzen auf Objekte aus, die im Shared Memory abgelegt sind.

Der Systemaufbau von Android oberhalb des Kernels unterscheidet sich deutlich von Linux-Versionen für Desktop-Systeme oder Server.

Auch für dessen Verwaltung unter Berücksichtigung von Zugriffsberechtigungen enthält Android mit Ashmem einen eigenen Treiber, der Schlüssel zum Zugriff auf geteilte Speicherbereiche vergibt. Alle Prozesse, die den Schlüssel kennen, können Daten über diesen Speicherbereich austauschen und den Schlüssel anschließend verwerfen. Gibt es auf einen Speicherbereich keine Referenz mehr, sind also alle Schlüssel verworfen, gibt ihn der Kernel frei. Wird der Gerätespeicher knapp, kann der Low Memory Killer, ein Bestandteil von Ashmem, auch Speicherbereiche freigeben, auf die es noch Referenzen gibt.

Wie bei modernen Betriebssystemen üblich, arbeitet Android mit einer virtuellen Speicherverwaltung: Der physikalische Speicher wird nicht direkt alloziert, sondern über Tabellen auf virtuelle Speicheradressen abgebildet. Allerdings verwendet Android keinen Swap Space, der normalerweise mit in den virtuellen Speicherbereich eingeht und ihn vergrößert – das System muss mit dem zur Verfügung stehenden Gerätespeicher auskommen. Android-Geräte können daher komplett auf externe Speichermedien wie SD-Karte oder Festplatte verzichten.

Zu den Vorteilen eines virtuellen Speichermanagements gehört, dass über die virtuellen Adressen ein zusammenhängender Speicherbereich zur Verfügung steht, der sich physikalisch über viele verstreute Speicherseiten verteilen kann. Ein weiterer Vorteil ist, dass sich virtuelle Speicherbereiche effizient von mehreren Prozessen nutzen lassen, da jeder Prozess nur die Startadresse und die Größe des Speichers kennen muss, nicht jede einzelne Speicherseite.

Zwei weitere Android-spezifische Kernelmodule, der Kernel-Debugger und der Logger, ermöglichen das Debuggen von Android-Anwendungen sowie die Ausgabe von Logging-Information aus Programmen und deren Auslesen mit dem Kommando logcat.