Android: Introduzione ed architettura - SisInfLab

Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Il sistema operativo
Android
Introduzione ed Architettura
Letture consigliate:
• Il sistema operativo Android
http://www-ictserv.poliba.it/piscitelli/doc/lucidiSO_ElTlc_270/IL%20SISTEMA%20OPERATIVO%20ANDROID.pdf
A.A. 2016-2017
1
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Introduzione
• Cos’è un sistema operativo
• È un’unità organizzativa all’interno di un computer
• L’interfaccia tra le applicazioni e l’hardware
• La sua funzione primaria è quella di amministrare le risorse
operative disponibili
• Cos’è un dispositivo mobile
• È un calcolatore munito di caratteristiche similari a quelli di un
computer ma caratterizzato da dimensioni più ridotte e dall’essere
portatile e leggero
• Tali caratteristiche fisiche distintive ne consentono l'utilizzo in
mobilità
• La dotazione hardware disponibile (GPS, accellerometro,
magnetometro, giroscopio) unita all’assenza di vincoli geografici
supporta lo sviluppo di applicazioni specifiche (navigatore,
augmented-reality AR)
A.A. 2016-2017
2
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Caratteristiche di un dispositivo
mobile
• Limitate risorse computazionali
• Processori più potenti richiedono maggiori capacità di
alimentazione e dissipazione di calore
• Built-in storage ridotto
• Possibilità di espansione mediante memoria esterna
• Gestione dell’energia
• Vita della batteria, il salvataggio dei dati è un problema in caso
di perdita di energia
• Compattezza e dimensioni ridotte dello schermo
• Non molto spazio per UI e per l’applicazione stessa
• Il riutilizzo di componenti comuni è fondamentale
• Affidabilità
• Le funzionalità di telefonia hanno sempre la priorità più alta
A.A. 2016-2017
3
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Caratteristiche dei sistemi
operativi mobili (1)
• Portabilità: essere trasportabile da un luogo ad un altro e/o adoperare
il sistema operativo su qualsiasi smartphone senza preoccuparsi del
brand e modello
• Affidabilità: il sistema deve essere in grado di offrire le funzioni richieste
nelle condizioni fissate per uno periodo di tempo stabilito
• Connettività: possibilità di connettere due sistemi attraverso tecnologie
wireless, bluetooth o infrarossi
• Diversità del prodotto: i fattori chiave che rendono il prodotto
unico (strategia di marketing)
• Sistema Aperto: collezione di software, hardware e componenti che
interagiscono mediante interfacce ben definite e disponibili
pubblicamente → Possibilità di espandere il sistema per qualsiasi scopo
A.A. 2016-2017
4
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Caratteristiche dei sistemi
operativi mobili (2)
•
Dimensione del kernel: il kernel è primo componente che viene
caricato e rimane nella memoria del sistema operativo, influenzandone
le capacità → rilevante importanza
•
Standard: adozione di moderni standard riguardanti il linguaggio di
programmazione, la connettività, lo scambio di informazioni e la rete
•
Sicurezza: le caratteristiche che il sistema operativo deve possedere al
fine di essere sicuro in qualsiasi situazione
A.A. 2016-2017
5
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Introduzione ad Android
• Android è un sistema operativo open source per dispositivi mobili
• Stack software comprendente
• Un sistema operativo Linux-Based (gestione memoria, dispositivi e
processi)
• Un middleware con librerie per la telefonia, video, grafica,
programmazione UI e numerosi altri aspetti del dispositivo
• Un insieme di applicazioni basilari
• La piattaforma Android mostra caratteristiche di un framework
desktop full-featured
• Google rende tale framework disponibile agli sviluppatori Java
attraverso l’SDK Android (Software Development Kit) che comprende:
•
gli strumenti di sviluppo
•
un emulatore del dispositivo
•
un sistema di aggiornamenti dell’SDK
•
la documentazione
•
i tutorial di base per acquisire familiarità con il sistema
A.A. 2016-2017
6
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
•
Perché open?
E' open perchè:
•
Utilizza tecnologie open (linux kernel)
•
Le librerie e le API utilizzate per realizzare Android sono le stesse che
possiamo usare per le nostre applicazioni
•
Il kernel linux è rilasciato sotto GNU General Public Licence (GPL)
•
La piattaforma Android è rilasciata sotto Open Source Apache Software
Licence 2.0 (ASL)
•
Agli utenti è consentito usare il software per ogni scopo, distribuirlo,
modificarlo e distribuire versioni modificate del software
•
Le modifiche al kernel producono un “worked derived”, in fase di distribuzione
è necessario rilasciare il codice sorgente con tutte le modifiche apportate
utilizzando la stessa licenza GPL
•
Tutto il resto può essere rilasciato con la licenza che si vuole (quindi NON
necessariamente secondo i termini della stessa licenza o come software
libero)
A.A. 2016-2017
7
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Cenni storici
• 2003: Andy Rubin, Rich Miner, Nick Sears e Chris White fondano la
Android Inc.
• 2005: Android Inc. viene acquisito da Google
• 2007: Viene fondata la Open Handset Alliance, consorzio
comprendente 84 (2015) membri tra cui produttori di hardware, di
software e compagnie di telecomunicazione (oltre a Google stessa),
con lo scopo di realizzare congiuntamente tutto il necessario per la
diffusione del sistema → standard aperti in ambito mobile
• 2007: viene rilasciato con licenza Apache una prima versione Android
Beta SDK
• 2008: Android 1.0 (eseguibile su un unico dispositivo, HTC G1 )
• 2009: Android 1.5 Cupcake (prima vera versione supportata da
dispositivi ad ampia diffusione commerciale)
• …
A.A. 2016-2017
8
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
•
Caratteristiche Innovative
Alcune delle caratteristiche innovative del sistema Android sono:
•
L’utilizzo di un kernel Linux
•
Sistema aperto (trasparenza, accessibilità, codice open source);
•
Basato sui componenti → Le applicazioni possono così interagire
tra loro e favorire il riuso di componenti
•
L’utilizzo del linguaggio di programmazione Java per lo sviluppo di
applicazioni
•
Nessun limite al tipo di applicazioni sviluppabili
•
Sviluppo semplice ed immediato
A.A. 2016-2017
9
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Architettura del S.O.
Java
C/C++
Kernel
A.A. 2016-2017
10
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
•
Linux Kernel (1)
Android adopera un kernel Linux modificato, utilizzato nella versione
•
2.6 (Android < 4.0)
•
3.x (versione di Android dalla 4.0 alla 4.2)
•
SELinux (Android ≥ 4.3)
per la gestione della sicurezza, memoria, processi, rete e dispositivi.
•
Il kernel fornisce un livello di astrazione tra l’hardware ed il resto dello stack software
•
Power Management: modulo per la gestione energetica costruito al di sopra di quello
standard utilizzato in sistemi linux, con politiche di gestione molto restrittive:
•
•
La CPU non dovrebbe consumare energia se nessuna applicazione o servizio la richiede
•
I vari componenti richiedono risorse alla CPU mediante i cosiddetti wake locks. Se non ci sono
wake locks attivi Android mette in pausa il processore
Binder (IPC) Driver: driver basato su OpenBinder che permette la comunicazione tra
processi (IPC) con un costo computazionale minore e quindi un più basso consumo di
batteria
A.A. 2016-2017
11
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Linux Kernel (2)
• Low Memory Killer: basato su feedback provenienti dalle applicazioni utente,
tale modulo è in grado di terminare i processi in modo da liberare spazio nella
memoria centrale per soddisfare le richieste di altri processi
• Offre una maggiore flessibilità rispetto all’Out Of Memory (OOM) killer
presente nel kernel standard.
•
Android ION Memory Allocator: (>= Android 4,0) è il driver (unificato)
utilizzato per fornire regioni di memoria fisica contigue a librerie utente e altro
hardware (<= Android 4,0: PMEM, Tegra, CMEM)
•
Android Alarm: un driver che fornisce timer che possono risvegliare il
dispositivo da uno stato di pausa ed un timer monotono che si avvia quando il
dispositivo è attivo → un’applicazione può essere eseguita ad un tempo
prefissato anche se il dispositivo è in sleep mode
•
M-System: per memory card e altri dispositivi di memorizzazione flash
•
Altri driver convenzionali
•
Bluetooth
•
Display
•
Keypad, audio, etc…
A.A. 2016-2017
12
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
•
•
Runtime - Overview
È un componente vitale nello stack Android ed è costituito da due parti fondamentali:
•
La macchina virtuale Dalvik → in futuro sarà integrata/sostituita da ART
•
Le core libraries
La VM Dalvik è stata sviluppata da Dan Bornstein ed è caratterizzata da tre principali
obiettivi progettuali:
•
Gira su dispositivi con memoria (RAM) ridotta e processori meno performanti
•
Non si avvale di alcuno spazio swap
•
Gira su dispositivi con potenza (energia) limitata
•
Ogni applicazione su Android ha un proprio processo, una propria zona dati e la
corrispondente istanza di Dalvik Virtual Machine
•
La Dalvik VM è stata ottimizzata in modo che uno stesso dispositivo embedded sia in
grado di eseguirne più istanze in modo efficiente
A.A. 2016-2017
13
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Runtime - Dalvik VM
• L’utilizzo di una VM rende le applicazioni Android indipendenti dalla piattaforma
sottostante (sistema operativo e hardware)
•
La Dalvik VM esegue un bytecode incompatibile con
quello della Java VM e che viene detto Dalvik
Executable (.dex), ottimizzato per avere una
occupazione di memoria minima
•
Il ciclo di sviluppo (più comune e suggerito dagli
svillupatori di Andoid stesso) prevede che una
applicazione venga dapprima sviluppata in Java, e
successivamente un tool (dx) converte i file .class,
ottenuti dalla normale compilazione java, in file
ottimizzati .dex
→ la versione Java di riferimento è J2SE, NON
J2ME
•
La Dalvik VM è register-based (mentre la Java VM è
stack-based)
→ riduzione del numero di istruzioni e accessi in
memoria
A.A. 2016-2017
14
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Runtime - Dalvik vs ART
•
Dalvik è basata sull’approccio Just-in-time (JIT): in fase di esecuzione l’app viene
compilata solo in parte in codice macchina nativo (tali segmenti prendono il nome di
«traces»), il resto del bytecode viene eseguito previa traduzione (interpretazione) in
real-time
•
E’ stata introdotta una nuova virtual machine Android RunTime (ART)
•
•
Sperimentale in Android 4.4 Kit Kat, si affianca alla Dalvik e deve essere abilitata manualmente
•
A partire da Android 5.0 Lollipop è l’unica VM
ART è basata su tecnologia Ahead-of-time (AOT): l’app viene interamente compilata in
codice macchina nativo durante l’installazione sul device e non durante l’esecuzione
utilizzando il dex2oat tool
→ Il codice compilato dell’applicazione è direttamente eseguibile
•
Ciò riduce notevolmente i tempi di esecuzione rispetto ad un compilatore JIT (JustIn-Time) come quello integrato in Dalvik
→ di conseguenza c’è anche un corrispondente risparmio energetico
•
•
Aumenta, invece, il consumo di spazio sulla memoria del dispositivo e il tempo di
installazione della app
Salvo eccezioni, è garantita la compatibilità delle applicazioni (il dex compilato è anche
l’input per la ART)
A.A. 2016-2017
15
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Runtime – Core Libraries
• Le Core Libraries forniscono molte delle funzionalità delle analoghe librerie
disponibili per il linguaggio di programmazione Java necessarie per lo
sviluppo di applicazioni
•
Funzionalità di I/O
•
Collezioni
•
Accesso ai file
•
…
• Android Standard Development Kit (SDK) è il contenitore di tutti gli
strumenti fondamentali per lo sviluppo di applicazioni Android in Java
• Supporta la maggior parte della Java Platform, Standard Edition (SE)
ad eccezione dell’AWT (Abstract Window Toolkit) e Swing
• Al loro posto è reso disponibile un proprio e moderno framework per la
realizzazione di interfacce grafiche utente (UI)
A.A. 2016-2017
16
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Librerie Native (1)
• Tale livello contiene le librerie che forniscono la maggior parte delle funzionalità
messe a disposizione da Android → core del sistema.
• Sono implementate in C/C++.
• Le capabilities di queste librerie sono esposte agli sviluppatori attraverso
l'Application Framework.
• BioniC: è un’implementazione della standard C library, derivata da BSD e
ottimizzata per l’esecuzione su dispositivi portatili Linux-based.
•
Dimensioni molto inferiori alla GNU C Library (glibc) → ~200 kB vs ~ 400 kB.
•
Ottimizzazione per processori low-clock.
•
Implementazione basata su thread molto piccola e veloce del sistema POSIX
(Pthread).
A.A. 2016-2017
17
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Librerie Native (2)
• SQLite: un potente e leggero DBMS relazionale disponibile per tutte le applicazioni,
per la memorizzazione di qualsiasi tipo di dato strutturato.
•
Zero-configuration → non è un processo standalone, viene quindi linkato come libreria C
•
Il database consiste di un unico file il cui formato interno è indipendente dalla
piattaforma → backup e trasferimento semplificato.
•
L’applicazione può accedere a SQLite attraverso semplici e convenzionali chiamate a
funzioni → no client-server.
• Surface Manager: modulo che gestisce le View, cioè i componenti di un'interfaccia
grafica → Ciascuna applicazione è associata ad un processo e disegna quindi la
propria interfaccia in tempi diversi. Il SM coordina le diverse superfici che le
applicazioni vogliono visualizzare sul display.
•
Le superfici da visualizzare sono passate come buffer attraverso chiamate del
componente Binder (IPC). In questo modo non si avranno finestre che si accavallano in
modo scoordinato sul display.
•
Gestisce l'accesso al sottosistema di visualizzazione su schermo e compone livelli di
grafica 2D e 3D provenienti dalle varie applicazioni consentendone la visualizzazione
contemporanea.
•
Adopera gli acceleratori grafici hardware 3D e 2D.
A.A. 2016-2017
18
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Librerie Native (3)
• Le due librerie SGL e OPENGL/ES gestiscono rispettivamente la grafica 2D la
prima e la grafica 3D la seconda. Sono specializzate per dispositivi mobili e
permettono di accedere alle funzionalità degli (se disponibili) acceleratori
grafici hardware.
• Il Media Framework si basa sulla libreria open source OpenCore di PacketVideo
(uno dei membri fondatori dell’OHA).
•
OpenCore offre una struttura universale per applicazioni multimediali mobili.
•
Gestisce i diversi CODEC per i vari formati di acquisizione e riproduzione audio e
video (MPEG4, MP3, AAC, AMR, JPG, PNG e H.264).
• FreeType è uno strumento, scritto in C, adoperato per rasterizzare i caratteri in
bitmap e fornire supporto per altre operazioni legate ai font (rendering).
• Il LibWebCore (WebKit) è browser-engine open source basato su WebKit (un
framework utilizzato anche dai browser Safari e Chrome).
•
Può essere integrato in qualunque applicazione → sia Android browser che web
view integrata.
•
Rendering delle pagine in full-view (desktop).
•
Supporta le moderne tecnologie web: CSS, JavaScript, DOM, AJAX.
A.A. 2016-2017
19
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Application Framework (1)
1
• Tale livello comprende una serie di gestori
→ toolkit di uso generale, insieme di API Java che sfruttano le librerie in
C/C++ definite nello strato inferiore, per dare origine a operazioni ben precise,
richiamate attraverso lo strato Applications.
• Pieno accesso alle stesse API del framework che vengono utilizzate dalle
applicazioni di base.
• Gli sviluppatori possono concentrarsi nella risoluzione di problemi non ancora
affrontati, avendo sempre a propria disposizione il lavoro già svolto da altri
→ riuso e sostituzione dei componenti, «All applications are equals.».
• Content Providers: permettono alle applicazioni di accedere ai dati di altre
applicazioni (es. la rubrica) o di mettere in condivisione i loro stessi dati.
• View System: gestisce l'insieme degli elementi grafici utilizzati nella costruzione
dell'interfaccia verso l'utente (bottoni, griglie, text boxes).
A.A. 2016-2017
20
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Application Framework (2)
•
Resource Manager: garantisce l’accesso a risorse che non rappresentano codice
(stringhe, grafici, immagini, file di layout e configurazione)
•
Notification Manager: permette a tutte le applicazioni di gestire alert personalizzati
verso l’utente sotto forma di vari eventi (icona nella barra di notifica, accensione
LED, suoni o vibrazioni)
•
Activity Manager: le Activity sono entità associate ad una schermata
dell'applicazione. Gestisce il ciclo di vita delle activity e fornisce un meccanismo
elementare per la navigazione tra le varie schermate.
•
Telephony Manager: gestisce l’interazione con le funzionalità caratteristiche di un
telefono (avviare una telefonata, controllarne lo stato, SMS).
•
Location Manager: consente alle Location Based Application (LBA) di utilizzare API
per accedere a funzioni legate alla location, tra cui le operazioni di
georeferenziazione (e attivare eventi date delle precondizioni)
•
Window Manager: permette di gestire le finestre delle diverse applicazioni, gestite
da processi diversi, sullo schermo del dispositivo. Astrazione con API Java, dei servizi
nativi del Surface Manager.
•
Package Manager: gestisce i processi di installazione e rimozione delle applicazioni
dal sistema.
A.A. 2016-2017
21
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Applications
• Lo strato finale con cui l’utente interagisce con il sistema.
• Android corredato di un insieme di applicazioni di base: client per email,
programmi per l’invio di SMS, calendario, mappe, browser, contatti, etc…
• Ogni applicazione è scritta (generalmente) in Java.
• L’applicazione compilata è impachettata attraverso il tool aapt in un
package Android .apk.
• Come i formati .jad e .jar in J2ME, i file .apk sono distribuiti ed
installati su dispositivi Android.
• Ogni applicazione è un singolo processo Linux, ha la propria istanza di VM
ed ha assegnato un unico Linux user ID.
• Una caratteristica chiave di Android è che:
• Ogni applicazione può pubblicare le sue capabilities e le altre possono
farne uso.
• Le applicazioni Android non hanno un singolo entry point.
A.A. 2016-2017
22
Fondamenti di
Sistemi Operativi
DEI - Politecnico di Bari
Android vs Linux
A.A. 2016-2017
23