Cours architecture du système Android , tutoriel & guide de travaux pratiques en pdf.
Linux Kernel
Android est basé sur un kernel linux 2.6 mais ce n’est pas linux. Il ne possède pas de système de fenêtrage natif (X window system), la glibc n’est pas supporté, Android utilise une libc personnalisée appelé Bionic libc.
Enfin Android utilise un kernel avec différents patches pour la gestion de l’alimentation, le partage mémoire, etc. permettant une meilleurs gestion de ces caractéristiques pour les appareils mobiles.
Android n’est pas linux mais il est basé sur un kernel linux.
Pourquoi sur un kernel linux ?
Le kernel linux a un système de gestion mémoire et de processus reconnu pour sa stabilité et ses performances. Le model de sécurité utilisé par linux, basé sur un système de permission, connu pour être robuste et performant. Il n’a pas changé depuis les années 70 Le kernel linux fournit un système de driver permettant une abstraction avec le matériel. Il permet également le partage de librairies entre différent processus, le chargement et le déchargement de modules à chaud. le kernel linux est entièrement open source et il y a une communauté de développeurs qui l’améliorèrent et rajoute des drivers.C’est pour les points cités ci-dessus que l’équipe en charge du noyau a décidé d’utiliser un kernel linux.
Modifications apportées au noyaux Le kernel Android a été patchés avec différents patchs :
Alarme
Ce patch fournit un certain nombre de timeurs permettant par exemple de « réveiller l’appareil quand il est en veille »
Ashmem
Android shared memory
Ce patch permet aux applications de partager la mémoire. Cette gestion est faite au niveau kernel du fait que le partage mémoire est très utilisé dans la plateforme Android car la mémoire dans les appareils mobiles est limitée par rapport à des PC.
Le partage mémoire est essentiellement utilisé par le Binder (lien).
Binder – Android IPC
La communication interprocessus (IPC) peut entrainer des trous de sécurité, c’est pour cela qu’Android à son propre IPC, le Binder et que la communication interprocessus n’est pas laissé aux développeurs d’application. De plus, avoir un système IPC centralisé permet une maintenance plus facile et une correction des problèmes de sécurités générales.
Dans Android chaque application est lancée dans un processus différent. Ces différents processus ont besoin de communiquer ensemble, de partager des données. Cet IPC est possible avec le Binder.
Il permet à plusieurs processus de partager des données, de communiquer entre eux en utilisant le partage mémoire (ashmem driver). Cette technique permet des performances accrue par rapports à de la recopie en mémoire des données, ou de la sérialisation.
Les problèmes de concurrence, lorsque plusieurs processus essaye d’accéder en même temps à une « même zone mémoire » (au même objet java) sont gérés par le Binder. Tous les appels sont synchronisés entre les processus.