The Onion PC Virtualizzazione strato dopo strato
Cos'è un livello di astrazione?
Cos'è un livello di astrazione? Nell'esecuzione di un programma un livello di astrazione rappresenta i gradi di libertà di esecuzione Ovvero quanto il programma è consapevole dell'ambiente di esecuzione reale
Perché usare livelli di astrazione?
Perché usare livelli di astrazione? Per eseguire programmi pensati per un sistema su un altro
Perché usare livelli di astrazione? Per eseguire programmi pensati per un sistema su un altro Per isolare programmi potenzialmente pericolosi
Perché usare livelli di astrazione? Per eseguire programmi pensati per un sistema su un altro Per isolare programmi potenzialmente pericolosi Per consentire una migliore gestione delle risorse
I diversi strati della cipolla
I diversi strati della cipolla 1. Emulazione 2. Virtualizzazione 3. Paravirtualizzazione 4. Virtualizzazione d'ambiente 5. Sandbox applicativo 6. Codice gestito
Emulazione Si tratta del livello di astrazione più elevato Consente di eseguire codice compilato per un architettura hardware su un altra Esempi di questo livello sono software come QEMU, Bochs, PCSX...
Emulazione Consente di eseguire codice compilato per un architettura hardware su un altra Tali sistemi si basano su costrutti chiamati ricompilatori dinamici, essi sono specifici per la coppia architetturale (emulata,emulatore) e traducono al momento i comandi incomprensibili ; un pò come la traduzione simultanea tra linguaggi naturali Questo livello è computazionalmente molto pesante, per la necessità di eseguire tutto lo stack applicativo in modalità traduzione
Virtualizzazione Il secondo livello di astrazione per complessità Non permette l'esecuzione di codice di diverse architetture rispetto alla macchina fisica Consente l'esecuzione di differenti sistemi operativi contemporaneamente su un unica macchina Esempi di questo livello sono stack come KVM, VirtualBox, VMWare...
Virtualizzazione Consente l'esecuzione di differenti sistemi operativi contemporaneamente su un unica macchina Tali sistemi funzionano sfruttando varie tecniche: Estensioni hardware (particolari istruzioni presenti nei processori di ultima generazione), Il ring-scaling; ovvero il forzare il sistema virtualizzato ad eseguire istruzioni privilegiate (ring 0) come istruzioni a più bassa priorità (ring 1)
Paravirtualizzazione Un estensione del secondo livello Consente l'esecuzione di differenti sistemi operativi contemporaneamente su un unica macchina Migliori prestazioni della virtualizzazione, ma richiede sistemi ad hoc Esempi di questo livello sono il software Xen e i precedenti sistemi di virtualizzazione con attivi i meccanismi di integrazione
Paravirtualizzazione Migliori prestazioni della virtualizzazione, ma richiede sistemi ad hoc Tali sistemi aumentano le prestazioni della virtualizzazione informando il sistema virtualizzato del suo stato di ospite Può essere parziale per ottimizzare solo alcune operazioni (virtio per gestione dischi; guest-additions per gestione video, usb,...) Può essere globale, tramite kernel specificamente modificati, per evitare al sistema di virtualizzazione l'operazione di ringscaling, risparmiando risorse
Virtualizzazione d'ambiente Sistemi di quarto livello, i primi a bassa complessità Prestazioni molto elevate, ma è possibile eseguire solo software compatibile col sistema operativo della macchina reale Esempi di questo livello sono il FreeBSD Jails, OpenVZ, Solaris Zones e LXC
Virtualizzazione d'ambiente Prestazioni molto elevate, ma è possibile eseguire solo software compatibile col sistema operativo della macchina reale Questi sistemi sfruttano le potenzialità di gestione dei processi dei moderni sistemi, uniti ad una tecnica di astrazione risalente a UNIX (chroot). Il limite di compatibilità deriva dall'esecuzione di un solo kernel che esporta parte delle sue funzioni e dei suoi drivers agli ambienti virtualizzati
Sandbox applicativo Estensione del quarto livello Riduce il consumo di risorse, mantenendo le limitazioni della virtualizzazione d'ambiente Esempi di questo livello sono le modalità single-application di FreeBSD Jails e LXC
Sandbox applicativo Riduce il consumo di risorse, mantenendo le limitazioni della virtualizzazione d'ambiente Mentre nel livello precedente pur condividendo un unico kernel tutti gli altri processi venivano duplicati per fornire un ambiente completo ma isolato, con il sistema Sandbox l'ambiente isolato è relativo unicamente alla singola applicazione, riducendo l'uso della memoria e fornendo all'applicativo sistemi per interagire (seppur in modo filtrato) ai processi di sistema.
Codice gestito Ultimo livello di astrazione È un sistema per eseguire codice su differenti macchine senza passare per l'emulazione È scelto in fase di compilazione o scrittura del codice In questo livello rientrano i programmi scritti per la piattaforma Java (JVM), con i linguaggi interpretati (Python, Ruby,...) o compilati particolari framework (LLVM)
Virtualizzazione: possibili usi Test di nuovi sistemi, o nuove versioni di sistemi operativi Test di software potenzialmente dannoso Test di nuove impostazioni del sistema operativo Utilizzo di software scritto per altri sistemi operativi Server Consolidation: aggregare i servizi su un unica macchina fisica
Server Consolidation Riduce costi operativi relativi al numero di macchine Riduce la complessità dei sistemi di backup Riduce il MTBF, ovvero il tempo di ripristino di un sistema a causa di problemi