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 1
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) 2
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 3
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 4
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 5
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 6
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) 7
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) 8
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 9
Architettura del S.O. Java C/C++ Kernel 10
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 11
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 12
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 13
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 14
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 (Just- In-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) 15
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) 16
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). 17
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. 18
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. 19
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). 20
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. 21
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. 22
Android vs Linux 23