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