1 Docente: Marco Sechi Virtualizzazione Virtualizzazione 2 Virtualizzazione Programma in codice macchina Il linguaggio macchina è il linguaggio del microprocessore. Un programma eseguibile è costituito da una sequenza di istruzioni macchina che vengono interpretate ed eseguite direttamente dal microprocessore. Un programma in linguaggio macchina si presenta come una sequenza di 0 e 1 (codifica binaria). Docente: Marco Sechi Un programma che è stato progettato per essere eseguito su un determinato processore (quindi scritto utilizzando le istruzioni macchina di quel processore!) non può girare su un elaboratore caratterizzato da una CPU differente! Virtualizzazione 3 Per eseguire lo stesso applicativo su diverse piattaforme hardware (o processori differenti!) è necessario svilupparne diverse versioni (porting), ciascuna specifica per il processore dove l'applicazione deve essere utilizzata. DIRETTAMENTE IN LINGUAGGIO MACCHINA I primi elaboratori non possedevano alcun sistema operativo ed inoltre non erano disponibili linguaggi di programmazione ad alto livello che consentissero uno sviluppo più rapido delle applicazioni. Agli albori dell'informatica quindi la modalità di sviluppo che veniva adottata consisteva nel redigere il programma direttamente in linguaggio macchina. Questo approccio è decisamente molto complesso specialmente per la difficoltà di lettura del codice binario che risulta umanamente poco incomprensibile. Sviluppatore Docente: Marco Sechi MODALITA' DI SVILUPPO DELLE APPLICAZIONI Virtualizzazione 4 UTILIZZANDO IL LINGUAGGIO ASSEMBLY In seguito si è iniziato ad utilizzare il linguaggio assembly che consentiva una più agevole scrittura dei programmi grazie alla maggior leggibilità del codice. L’assembly risulta più comprensibile poiché utilizza delle codifiche testuali come alternativa alle sequenze di bit per specificare il codice operativo dell'istruzione macchina. Tali codifiche richiamano direttamente il significato dell’istruzione (ad esempio ADD, SUB, LOAD, …). Inoltre consente l’utilizzo di etichette per identificare gli indirizzi di memoria e i registri (es. R1, R2, …). Docente: Marco Sechi La metodologia di sviluppo basata sull' assembly rimane comunque molto complicata poiché questo linguaggio è comunque “umanamente” poco immediato. Inoltre la sua estrema atomicità (ad esempio per svolgere una semplice somma sono necessarie numerose istruzioni assembly!) implica la scrittura di lunghe sequenze di istruzioni anche quando si tratta di un semplice programma. Queste difficoltà hanno relegato la scrittura diretta in codice macchina o in assembly solo ai casi in cui è indispensabile creare applicazioni estremamente veloci oppure nella programmazione dei microcontrollori (PIC) dove il sistema operativo è quasi inesistente o limitato a poche funzionalità di base. Virtualizzazione microcontrollore Sviluppatore 5 Come nei linguaggi ad alto livello, è necessario un processo di traduzione affinché un programma assembly possa diventare un'applicazione eseguibile. Sviluppatore Docente: Marco Sechi UTILIZZANDO LINGUAGGI AD ALTO LIVELLO L'adozione dei linguaggi ad alto livello, che diversamente dall’assembly risultano invece umanamente più comprensibili e compatti (ad esempio per svolgere un’operazione complessa come l’ordinamento basta una singola istruzione: sort), ha semplificato notevolmente lo sviluppo delle applicazioni 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 linguaggio macchina. (linguaggio a basso livello). Virtualizzazione Docente: Marco Sechi Sviluppatore 6 Durante la compilazione vengono inseriti nel programma eseguibile i richiami alle funzioni integrate messe a disposizione dal linguaggio di programmazione e contenute nelle librerie di runtime. Le funzionalità messe a disposizione possono essere quindi utilizzate senza che sia necessario produrne ogni volta uno specifico codice. UTILIZZANDO LE API DEL SISTEMA OPERATIVO Nessuna delle modalità di sviluppo precedentemente descritte tiene conto del sistema operativo. In realtà il sistema operativo gioca un ruolo indispensabile nello sviluppo delle applicazioni. Oltre a gestire l’interfaccia utente/macchina, fornisce una serie di funzionalità che sono frequentemente richieste dalla maggior parte delle applicazioni come ad esempio: l’accesso al disco, la gestione della stampante, la lettura delle periferiche di input, etc. Questi servizi, resi fruibili grazie a funzioni chiamate API (DLL in windows), possono essere utilizzati dalle applicazioni senza che sia necessario svilupparne uno specifico codice. Questo approccio permette di semplificare ulteriormente lo sviluppo delle applicazioni. Il processo di sviluppo delle applicazioni ora include, rispetto alle precedenti modalità di sviluppo, l'utilizzo delle librerie del sistema operativo. Virtualizzazione 7 Le API (application programming interface) svolgono un ulteriore funzione: controllano gli accessi alle risorse hardware. Più il sistema operativo occulta alle applicazioni il livello fisico (impedendo qualsiasi accesso diretto all’hardware) maggiore è il livello di sicurezza che quel S.O. fornisce. Le API regolamentano l’uso delle risorse hardware imponendo delle direttive che garantiscano un elevato livello di sicurezza e la stabilità del sistema. Docente: Marco Sechi Architettura applicazione in un ambiente privo di sistema operativo Architettura applicazione in ambiente DOS Architettura applicazione in un ambiente con sistema operativo "sicuro" Ad esempio un keylogger (dispositivo per registrare tutta l’attività di input dell’utente) per non essere rilevato dal sistema operativo deve comunicare direttamente con il livello hardware bypassando qualsiasi controllo. Quindi un’applicazione spia, per aggirare le protezioni offerte dal sistema operativo, deve necessariamente avviarsi prima della fase di boot del sistema operativo e successivamente modificarne le procedure di sicurezza. Virtualizzazione 8 Docente: Marco Sechi Le applicazioni native prodotte attraverso il processo di compilazione, anche se contengono richiami alle API di sistema, restano comunque scritte in linguaggio macchina. La presenza delle API all'interno del codice eseguibile rende le applicazioni sviluppate per diversi sistemi operativi tra loro incompatibili anche quando l'hardware utilizzato è sempre lo stesso. Ad esempio i sistemi operativi MAC OS e Windows supportano lo stesso hardware Intel ma le loro applicazioni native risultano incompatibili: un Word per MAC non può essere eseguito su Windows e viceversa. L'introduzione del sistema operativo nel processo di sviluppo ha aumentato i problemi di portabilità delle applicazioni poiché non è possibile eseguire sullo stesso hardware applicazioni progettate per sistemi operativi differenti. Virtualizzazione 9 Le modalità di sviluppo illustrate determinano in tutti i casi la produzione di un programma in codice macchina che può essere eseguito solo su un particolare processore (scrittura diretta del codice macchina, uso dell'assembly e di un linguaggio ad alto livello) o su un determinato sistema operativo (quando si utilizzano le API). Docente: Marco Sechi Vincolare un'applicazione ad un particolare ambiente hardware o sistema operativo comporta forti limitazioni che, con le tecniche di sviluppo analizzate, possono essere superate solo con investimenti consistenti. Le diffusione delle applicazioni che non risultano portabili (ovvero utilizzabili su differenti piattaforme hardware/cpu) risulta fortemente limitata. Un'applicazione come WhatsApp avrebbe ottenuto un così ampio successo se fosse stata implementata solo per particolari modelli di telefonino? Virtualizzazione 10 Alla luce di quanto specificato fin qui l'unico modo per aumentare la portabilità di una applicazione è quello di implementarla (porting) su ogni piattaforma hardware o sistema operativo che si decida di supportare. Questa scelta comporta notevoli costi di produzione poiché i diversi porting dell'applicativo devono essere gestiti da specifici team di sviluppo che devono preoccuparsi di mantenerli aggiornati all'ultima release e al tempo stesso impegnarsi a condurre tutti i test necessari a garantire la stabilità dell'applicazione. Più ambienti operativi risultano supportati maggiore è la diffusione che l'applicazione può avere sul mercato. L'eventuale successo di una nuova piattaforma hardware non può essere trascurato per cui è necessario procedere al porting dell'applicazione anche per il nuovo ambiente operativo. Tale sviluppo richiede investimenti e tempo: un ritardo eccessivo sulla data di rilascio potrebbe compromettere il successo dell'applicazione in quell'ambiente (ad esempio a causa di un prodotto concorrente che entra sul mercato prima del nostro) vanificando gli investimenti sostenuti. Il metodo di sviluppo utilizzato deve quindi permettere anche un tempestivo porting delle applicazioni. Docente: Marco Sechi Nell'attuale panorama informatico, caratterizzato da una gran varietà di dispositivi, la portabilità di una applicazione è un elemento fondamentale per il suo successo e va sostenuto con determinazione. Virtualizzazione 11 VIRTUALIZZAZIONE Docente: Marco Sechi Lo scopo della virtualizzazione è quello di limitare i costi necessari ad ottenere applicazioni portabili evitando di dover scrivere per ogni sistema supportato la specifica versione nativa. La virtualizzazione in generale consiste nell'implementare per ogni piattaforma che si intende supportare un substrato software detto framework (o virtualizzatore) che mette a disposizione una sorta di codice macchina virtuale (bitcode). Le applicazioni scritte con questo bitcode possono essere eseguite sul virtualizzatore e quindi essere adoperate su differenti sistemi operativi senza necessità di un porting specifico. Il bitcode può essere: la riproduzione di un codice macchina adottato da una cpu realmente esistente (in questo caso si parla di virtualizzazione hardware) un linguaggio macchina inventato non riferibile ad alcuna architettura realmente esistente (virtualizzazione software). Virtualizzazione 12 VIRTUALIZZAZIONE HARDWARE Docente: Marco Sechi 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. La virtualizzazione HW consente l'esecuzione di applicativi progettati per sistemi operativi differenti da quello installato sulla macchina fisica che ospita il virtualizzatore e questo senza apportare modifiche all'applicazione utilizzata. Virtualizzazione 13 Docente: Marco Sechi Il software di virtualizzazione hardware presenta nel pannello di gestione l'elenco delle macchine virtuali che possono essere avviate. Virtualizzazione 14 Docente: Marco Sechi Dal punto di vista pratico la virtualizzazione hardware crea all'interno del nostro pc delle finestre applicative nelle quali vengono eseguiti interi sistemi operativi. Le applicazioni non native vengono eseguite all'interno di una finestra dove, oltre ad esse, è evidente che sta girando un altro sistema operativo (OS Guest). Virtualizzazione 15 Docente: Marco Sechi In alcuni casi il software di virtualizzazione hardware si integra fortemente con il sistema operativo ospitante (OS Host) fino a presentare le applicazioni scritte per altri sistemi operativi come se fossero applicazioni native del computer fisico. Il livello di integrazione è tale che l'utente non si rende neppure conto della presenza del software di virtualizzazione. Virtualizzazione 16 Programmi di Virtualizzazione Hardware sono: QEmu, Virtual Box, Microsoft Virtual PC, Parallel Desktop (Mac) e VMWare. https://www.virtualbox.org/ http://www.vmware.com http://www.qemu.org Docente: Marco Sechi http://www.parallels.com/ Obsoleto! https://www.microsoft.com/it‐it/download/details.aspx?id=4580 Virtualizzazione 17 Per utilizzare un PC virtuale è necessario installare al suo interno il sistema operativo altrimenti all'avvio della virtual machine riceviamo un messaggio di halt. Docente: Marco Sechi L'installazione del sistema operativo avviene con le stesse modalità previste per un pc reale per cui è necessario procurarsi il set di DVD contenenti l'installazione del sistema operativo. Virtualizzazione 18 Docente: Marco Sechi La Virtualizzazione Hardware riproduce via software 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 fisso virtuale utilizzato dalla Virtual Machine. VANTAGGI VIRTUALIZZAZIONE HARDWARE Posso utilizzare la virtual machine come sistema di test per visitare siti web ritenuti pericolosi o per provare programmi la cui provenienza induce a pensare che siano infettati da qualche virus o nascondano un trojan horse. Se la macchina virtuale diventa instabile a causa di un'infestazione virale mi basta sostituire il file abbinato al disco fisso del sistema corrotto con una copia integra (che ad esempio mi ero messo da parte durante la configurazione iniziale della virtual machine) per ottenere subito una macchina perfettamente funzionante. Applicazioni costruite per particolari sistemi operativi (anche obsoleti!) possono essere eseguite su altri sistemi operativi senza dover apportare modifiche al software originale. Senza la virtualizzazione hardware il paradigma Terminal Server non esisterebbe. SVANTAGGI VIRTUALIZZAZIONE HARDWARE Richiede macchine potenti Virtualizzazione 19 La virtualizzazione hardware rappresenta il punto di partenza del paradigma applicativo Terminal Server. Le macchine virtuali, invece di essere usate in locale (standalone), vengono messe a disposizione sulla LAN. Videata CLIENT TS 1 Input VM 1 1 A77 … CLIENT TS 2 TERMINAL SERVER Videata virtuale VM 2 Concentratore VM N CLIENT TS N Docente: Marco Sechi Videata virtuale Nel Terminal Server il virtualizzatore non gira più sul nostro computer ma su un sistema centrale che si preoccupa di collegare le "videate virtuali" di ogni virtual machine (sessioni) con il corrispondente client. Il client a sua volta invia alla VM associata tutti i comandi acquisiti tramite mouse e tastiera. Virtualizzazione 20 Docente: Marco Sechi La virtualizzazione hardware allargata ad un contesto WAN (reti geografiche come ad esempio internet) rappresenta la piattaforma di partenza su cui si basa uno dei servizi offerti dal paradigma applicativo del CLOUD: la remotizzazione dell'infrastruttura di rete aziendale. Virtualizzazione 21 VIRTUALIZZAZIONE SOFTWARE Docente: Marco Sechi L’obiettivo della virtualizzazione software è quello di fornire un linguaggio di sviluppo universale che sia indipendente dal sistema operativo e dall'hardware utilizzato. Lo strato software che consente la virtualizzazione software è detto framework. Programmi di virtualizzazione software sono Java e Flash. Virtualizzazione 22 #include #include #include #include #include <QApplication> <QTextEdit> <QPushButton> <QWidget> <QVBoxLayout> int main(int argc, char *argv[]) { QApplication app(argc, argv); QTextEdit textEdit; QPushButton quitButton("Esci"); QVBoxLayout layout; QWidget window; QObject::connect(&quitButton,SIGNAL(clicked()),&app,SLOT(quit()) ); layout.addWidget(&textEdit); layout.addWidget(&quitButton); window.setLayout(&layout); window.show(); Con la virtualizzazione software l’applicazione viene scritta una sola volta e può essere eseguita su tutte le piattaforme che supportano quel framework in forma nativa (ovvero il virtualizzatore è un eseguibile di quel sistema operativo). return app.exec(); } Docente: Marco Sechi Win Virtualizzazione Apple Linux 23 Il concetto di virtualizzazione software può essere applicato anche in ambito WAN. Il browser rappresenta il virtualizzatore software mentre JavaScript, CSS e HTML il suo bitcode. Il browser gestisce il front‐end applicativo mentre un motore applicativo (app engine), presente sulla piattaforma del provider, amministra il back‐end. L'architettura descritta non è altro che l'infrastruttura delle Web Application e del Cloud. Docente: Marco Sechi Piattaforma CLOUD Le funzionalità fornite dal back‐end vengono distribuite ai client tramite gli endpoints che mettono a disposizione le API, richiamabili con uno specifico client code. Virtualizzazione 24 Ogni client (non necessariamente un browser!) richiama con un opportuno client code (Javascript, Java, Object C) le API messe a disposizione dai cloud endpoints ed accede ai servizi offerti dal back‐end amministrato dall'app‐engine della piattaforma Cloud utilizzata. CODICE CLIENT API SERVER CLIENT SPECIFICO Docente: Marco Sechi L'Endpoint genera le API e le librerie client (a partire da un App Engine indicato come un backend API) che semplificano l'accesso alle risorse disponibili sulla piattaforma. Virtualizzazione 25 Un esempio di virtualizzazione di questo tipo è rappresentato dalle Google MAPS Api. Google Maps API Docente: Marco Sechi Google Maps API permettono di personalizzare le informazioni visualizzate sulle mappe di Google. <html> Pagina WEB JavaScript Client Code <HEAD> <script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script> <script src="googlemaps.js"></script> </HEAD> <body> <div id="map-canvas" style="width: 500px; height:305px; float: left;" class=googlemap></div> </BODY> </HTML> Il riferimento online relativo alle api messe a disposizione da google è: https://developers.google.com/products/ Virtualizzazione