1 VIRTUALIZZAZIONE Docente: Marco Sechi Modulo 1 Docente: Marco Sechi Modulo 1 Il linguaggio assembly è il linguaggio del microprocessore. Un programma è costituito da istruzioni assembly che vengono interpretate ed eseguite dal microprocessore. Un programma che è stato progettato per essere eseguito su un determinato hardware (è scritto nell’assembly di quel processore!) non può girare su un hardware diverso. Per eseguire un applicativo su diverse piattaforme è necessario produrne diverse versioni, ciascuna specifica per il processore che deve essere supportato. Questo comporta costi elevati, non solo per via dello sviluppo multiplo ma anche nella gestione degli aggiornamenti: ogni modifica deve essere replicata e testata su tutte le piattaforme supportate! La scrittura dei programmi direttamente in assembly appartiene alle prime metodologie di sviluppo ed ora è poco diffusa. Oggi l’assembly è utilizzato quando è necessario ottenere applicazioni estremamente veloci oppure nella programmazione dei microcontrollori (PIC) dove il sistema operativo è quasi inesistente o limitato a poche funzionalità di base. 2 Docente: Marco Sechi Modulo 1 Sviluppare in assembly è molto complicato poiché tale linguaggio risulta “umanamente” poco comprensibile. Inoltre la sua estrema atomicità (ad esempio per svolgere una semplice somma sono necessarie numerose istruzioni assembly!) comporta la stesura di lunghe sequenze di istruzioni anche quando si vuole creare un semplice programma. Queste difficoltà hanno portato alla creazione di linguaggi ad alto livello, che contrariamente all’assembly, risultano umanamente più comprensibili e compatti (ad esempio per svolgere un’operazione complessa come l’ordinamento di una sequenza di numeri basta richiamare una singola istruzione: sort). I linguaggi ad alto livello sono incomprensibili per il microprocessore per cui è necessario utilizzare un programma (detto compilatore) che traduca le istruzioni ad alto livello in assembly (linguaggio a basso livello). Il sistema operativo gioca un ruolo importante nello sviluppo delle applicazioni. Oltre a fornire l’interfaccia utente/macchina, fornisce una serie di funzionalità che devono essere presenti nella maggior parte delle applicazioni come ad esempio: l’uso della stampante, del video, del mouse etc. Tali funzioni, chiamate API (DLL in windows), possono essere inserite nelle applicazioni (tramite delle librerie) senza che sia necessario riscriverle ogni 3 volta. Questo permette di semplificare ulteriormente lo sviluppo delle applicazioni. Docente: Marco Sechi Modulo 1 Le API svolgono un ulteriore funzione: filtrano gli accessi alle risorse hardware. Più il sistema operativo nasconde alle applicazioni il livello hardware (impedendo qualsiasi accesso diretto all’hardware) maggiore è il livello di sicurezza ottenuto. Le API controllano l’uso delle risorse hardware imponendo delle regole che garantiscano un elevato livello di sicurezza e stabilità del sistema. Ad esempio un keylogger (dispositivo per registrare tutta l’attività di input dell’utente) sarà invisibile al sistema operativo quando comunica direttamente con il livello hardware. Per bypassare le protezioni del sistema operativo un’applicazione spia deve necessariamente avviarsi prima del boot del sistema operativo e modificarne le procedure di sicurezza. 4 Docente: Marco Sechi Modulo 1 Le applicazioni che utilizzano le API di un sistema operativo restano comunque scritte in linguaggio assembly. Le chiamate alle API rendono le applicazioni incompatibili con sistemi operativi differenti anche quando l’hardware utilizzato è lo stesso. Ad esempio i sistemi operativi MAC OS e Windows girano sullo stesso hardware Intel ma le loro applicazioni risultano incompatibili: un Word per MAC non gira su Windows e viceversa. RIASSUMENDO: Sviluppare un applicativo per diverse piattaforme implica costi elevati. La 5 virtualizzazione software e quella hardware permettono di aggirare questo problema. “Virtualizzando” è possibile scrivere un’applicazione solo una volta ed eseguirla poi su tutti i sistemi operativi richiesti. Docente: Marco Sechi Modulo 1 VIRTUALIZZAZIONE HARDWARE Nella virtualizzazione hardware particolari software emulano le componenti fisiche di un computer creando di fatto un pc virtuale (Virtual Machine) all’interno del pc fisico (Host PC). Il pc virtuale si comporta a tutti gli effetti come un normale PC sul qual possiamo far girare un sistema operativo diverso da quello installato sulla macchina fisica. Esempi di Virtualizzatori Hardware sono: QEmu, Virtual Box, Microsoft Virtual PC, Parallel Desktop (Mac) e VMWare (i primi 2 sono freeware). 6 Docente: Marco Sechi Modulo 1 Il software di virtualizzazione presenta nel suo pannello di gestione le macchine virtuali disponibili che possono essere avviate quando necessario. 7 Docente: Marco Sechi Modulo 1 La Virtualizzazione Hardware riproduce tutte le componenti fisiche di un computer: ram, cpu, disco fisso, etc. Il virtualizzatore salva in un file, sul sistema HOST il contenuto del disco virtuale utilizzato dalla Virtual Machine. VANTAGGI VIRTUALIZZAZIONE HARDWARE Posso utilizzare la virtual machine come sistema di test per provare nuovi software (la cui provenienza potrebbe destare sospetti!) oppure per visitare siti web ritenuti a rischio. Se la macchina virtuale si infesta di virus oppure si rovina mi basta sostituire il file abbinato al disco fisso del sistema corrotto con una copia integra (che mi ero messo da parte durante la configurazione iniziale della virtual machine) ed ottengo immediatamente una macchina perfettamente funzionate. Applicazioni costruite per particolari sistemi operativi (anche obsoleti!) possono essere eseguite su altri sistemi operativi senza dover apportare modifiche al software originale. 8 La Virtualizzazione Hardware è il punto di partenza per il Terminal Server SVANTAGGI VIRTUALIZZAZIONE HARDWARE Richiede macchine potenti Docente: Marco Sechi Modulo 1 VIRTUALIZZAZIONE SOFTWARE L’obiettivo della virtualizzazione software è quello di fornire un linguaggio di sviluppo (programmazione) universale che sia indipendente dal sistema operativo utilizzato. Lo strato software che consente la virtualizzazione software è detto framework. Con la virtualizzazione software l’applicazione viene scritta una sola volta e viene eseguita su tutti i sistemi operativi che supportano tale framework. Programmi di virtualizzazione software sono Java e Flash. Anche i Browser (con JavaScript, CSS e HTML) sono dei virtualizzatori software. 9