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