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