19.05.2013 Views

Facoltà di Ingegneria Tesi di laurea ANALISI DELLE TECNOLOGIE ...

Facoltà di Ingegneria Tesi di laurea ANALISI DELLE TECNOLOGIE ...

Facoltà di Ingegneria Tesi di laurea ANALISI DELLE TECNOLOGIE ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

l’overhead associato a questo tipo <strong>di</strong> virtualizzazione sia sempre basso, e inoltre il BT non<br />

può decifrare completamente molte funzioni, come le system calls, interruzioni, accessi all’<br />

I/O , gestione della memoria.<br />

Come detto in precedenza, il kernel ha l’accesso privilegiato alle istruzioni <strong>di</strong> CPU che gli<br />

altri processi non hanno; quin<strong>di</strong> i normali processi utenti devono richiedere al kernel <strong>di</strong><br />

svolgere un’operazione privilegiata, e, se non lo fanno, la CPU causa un’eccezione e il kernel<br />

subentra lo stesso. Nello stesso tempo lo scheduler del kernel (che è un programma che<br />

stabilisce un or<strong>di</strong>namento temporale delle richieste al kernel) usa l’interruzione “timer” per<br />

intervenire <strong>di</strong> tanto in tanto, per assicurarsi che nessun processo tenti <strong>di</strong> avere il controllo<br />

della CPU per troppo tempo.<br />

Una system call, così, si ha quando un’applicazione utente richiede un servizio dal kernel; il<br />

x86 fornisce una latenza molto bassa per l’esecuzione <strong>di</strong> una system call atttraverso le due<br />

istruzioni SYSENTER e SYSEXIT. Una chiamata a sistema dà all’hypervisor, specialmente<br />

con la Binary Translation, un bel po’ <strong>di</strong> lavoro extra: infatti, le tecniche <strong>di</strong> virtualizzazione<br />

software mettono il sistema operativo in un ring leggermente meno privilegiato <strong>di</strong> quello<br />

normale (ring 1 invece che ring 0), tecnica chiamata ring deprivileging. Il problema è che una<br />

SYSENTER è inviata a una pagina con privilegio 0 e si aspetta <strong>di</strong> trovare il sistema operativo,<br />

ma invece trova l’hypervisor: quin<strong>di</strong> quest’ultimo deve emulare ogni system call, tradurre il<br />

co<strong>di</strong>ce e infine cedere il controllo al co<strong>di</strong>ce kernel tradotto che gira nel ring 1. Una volta che il<br />

co<strong>di</strong>ce traslato dell’OS guest è stato eseguito, questo usa una SYSEXIT per ritornare<br />

all’applicazione utente; però l’OS guest si trova al ring 1 e non ha i privilegi necessari per<br />

eseguire SYSEXIT, e si genera un errore. Da questo <strong>di</strong>scorso risulta chiaro che una sistem call<br />

provoca molto overhead (una system call su una macchina virtuale ha un impatto fino a 10<br />

volte maggiore <strong>di</strong> una su una macchina fisica): da un esperimento degli ingegneri <strong>di</strong> Wmware<br />

su un Pentium 4 a 3.8 GHz risulta che una system call nativa occupa 242 cicli, mentre una<br />

“binary translated” 2308 cicli [18]. Se in un sistema ci sono <strong>di</strong>verse macchine virtuali in<br />

esecuzione, si comprende come questo metodo sia inefficiente.<br />

Per quanto concerne la gestione della memoria, altro aspetto cruciale nella virtualizzazione,<br />

l’OS guest eseguito sulla macchina virtuale, ovviamente, non ha accesso alle page tables reali,<br />

ma vede page tables che si trovano su una MMU emulata (shadow page tables). Queste<br />

tabelle danno all’OS guest l’illusione <strong>di</strong> poter tradurre i suoi in<strong>di</strong>rizzi virtuali in in<strong>di</strong>rizzi<br />

fisici, ma in realtà questo è fatto dall’hypervisor “in the shadow”, cioè <strong>di</strong> nascosto al sistema<br />

34

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!