Virtualizzazione. Scritta così, può significare tante cose. Vediamo di spiegare i diversi tipi di "virtualizzazione".
Generalmente con virtualizzazione in ambito
SOHO si intende l'operazione di avviare, in un sistema "host" già avviato, un kernel con i relativi tools (generalmente un sistema operativo) come se fosse "un processo". Gli viene assegnato un quantitativo di memoria, eventualmente un certo "tempo di processore" (ovvero quanta potenza del processore può usare), le varie schede, ecc. L'hardware della macchina virtualizzata quindi dipende solo per una minima parte (anche se importante) dal sistema reale: solo il processore e le memorie (disco e RAM) sono effettivamente una parte di quelle reali: eventuali schede o periferiche aggiuntive possono essere completamente virtuali (più schede di rete, più lettori cdrom). Questo permette, ad esempio, di avere a portata di mano un sistema operativo "diverso" che si usa per una sola applicazione che non funziona con il sistema usato nella macchina reale (pensiamo ad esempio ad un'applicazione scritta per Windows: si può far girare in una macchina virtuale sotto Linux, o viceversa). Questo è quello che si chiama "virtualizzazione completa", ovvero l'emulazione completa (o quasi) dell'intero sistema "guest". Un esempio di prodotti di questo genere sono qemu, VirtualBox, VirtualPC, VMware Workstation/Player, ecc.)
Esiste anche un altro tipo di virtualizzazione, chiamata paravirtualizzazione, presente soprattutto in ambito Enterprise (o semi-Enterprise). Questo tipo particolare di virtualizzazione, al contrario di quella "completa", non emula il "sistema virtuale", ma bensì divide le risorse del sistema reale tra più kernel/sistemi operativi, mediante un kernel che gira "al di sopra delle parti", chiamato Hypervisor (supervisore appunto). Questo Hypervisor, a seconda delle configurazioni, farà girare con più o meno priorità i vari sistemi operativi avviati.
Di solito, un Hypervisor ha bisogno di un sistema di controllo: facendo l'esempio di Xen, c'è una macchina GNU/Linux avviata con "priorità alta", in grado di controllare e di fornire delle impostazioni al kernel supervisore. Questo di fatto vuol dire che ci sarà una macchina virtuale che, per forza di cose, avrà come scopo quello di interfacciarsi con il supervisore, e di solito è chi progetta l'Hypervisor che stabilisce quale può essere il sistema operativo da utilizzare (GNU/Linux, Windows, Mac OS X, ecc.).
Alcuni sistemi inoltre sono in grado di spostare le macchine virtuali accese "al volo", con un downtime di circa 300 ms al massimo, cioò vuol dire che per l'utente la differenza non esiste. Le connessioni non vengono resettate, quindi ogni trasferimento di dati (sessione terminale remota ad esempio) continuerà senza alcun rallentamento visibile o downtime.
Un esempio di tali soluzioni sono: Xen, Microsoft HyperV, VMware ESX.
Ma quali sono i vantaggi di una o dell'altra soluzione? Certo, la virtualizzazione completa ci da un controllo maggiore del sistema guest, poiché possiamo personalizzarlo pressoché totalmente e possiamo applicargli limitazioni tipiche di un processo (in ambito UNIX ad esempio), mentre in un sistema dove l'ipervisore, solo se tale software è stato progettato per lo scopo si riesce a limitare l'uso delle macchine virtuali ad un certo "tot" di tempo di CPU. I vantaggi sono visibili tuttavia in campo "prestazionale": non c'è dubbio che, dovendo passare per un programma che simula un processore, il sistema rallenti, cosa che non succede se il processo/sistema operativo viene eseguito direttamente nel processore "reale" (in condivisione con altri processi).
Possiamo quindi desumere che, dove le prestazioni e la ridondanza sono importanti (in ambito aziendale), soluzioni di virtualizzazione che puntano a maggiori prestazioni, uniti alla possibilità di migrare in tempo reale le macchine virtuali da un server ad un altro (per permettere ad esempio manutenzioni programmate), sono la scelta migliore. Per gli sviluppatori, gli "smanettoni", soluzioni di virtualizzazione completa possono essere la scelta migliore, poiché incidono poco sul sistema "ospitante", permettendo un'elevata possibilità di configurazione nel sistema "ospitato".
Enrico
Etichette: emulazione, hypervisor, paravirtualizzazione, virtualizzazione