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.

traduzione viene fatta nel source code, ovvero attraverso mo<strong>di</strong>fiche del sistema operativo.<br />

L’hypervisor fornisce “hypercall interfaces” per le operazioni critiche del kernel come<br />

gestione della memoria, trattamento delle interruzioni; queste hypercalls avvengono solo se<br />

necessario, perché la maggior parte delle operazioni vengono effettuate dagli OS guest. In<br />

questo modo si riduce in maniera rilevante l’overhead associato alla binary translation, con lo<br />

svantaggio <strong>di</strong> dover mo<strong>di</strong>ficare i sistemi operativi guest [18].<br />

Un’altra questione importante riguarda l’I/O. Infatti, nel momento in cui si effettua la<br />

virtualizzazione, su un solo server ci sono in esecuzione <strong>di</strong>verse macchine virtuali: ogni VM<br />

contende per le stesse risorse hardware che forniscono collegamenti con la rete o i <strong>di</strong>spositivi<br />

<strong>di</strong> memoria. L’hypervisor deve fornire ad ogni VM la percezione <strong>di</strong> accesso a risorse <strong>di</strong> I/O<br />

de<strong>di</strong>cate, gestendo e controllando le operazioni <strong>di</strong> I/O tra le macchine virtuali e l’hardware.<br />

I dati <strong>di</strong> I/O devono prima essere portati nella memoria accessibile dal <strong>di</strong>spositivo <strong>di</strong> I/O: ogni<br />

<strong>di</strong>spositivo connesso a un computer ha la propria specifica locazione nella memoria del<br />

sistema (memory mapped I/O). Il sistema operativo conosce dove si trova questa memoria e,<br />

quando deve inviare dati a i <strong>di</strong>spositivi <strong>di</strong> I/O, li trasferisce dalla memoria del processore alla<br />

memoria specifica del <strong>di</strong>spositivo, accessibile da quest’ultimo. Viceversa, quando i dati<br />

ritornano, il <strong>di</strong>spositivo <strong>di</strong> I/O li pone nella sua locazione <strong>di</strong> memoria, da cui sono prelevati<br />

dall’OS e trasferiti nella memoria del processore per essere eseguiti.<br />

Tutto ciò si complica in un ambiente virtualizzato. Il sistema operativo guest scrive i dati<br />

associati all’I/O dove pensa che il <strong>di</strong>spositivo possa prelevarli: l’hypervisor deve intercettare<br />

il tentativo del guest <strong>di</strong> scrivere nella memoria fisica, mappandolo prima nella sua memoria<br />

(virtuale) e poi nella memoria fisica reale a cui il <strong>di</strong>spositivo è collegato.<br />

L’hypervisor deve tenere traccia e mappare tutte le <strong>di</strong>verse locazioni <strong>di</strong> memoria virtuale I/O<br />

del guest e scambiare costantemente le rappresentazioni delle locazioni <strong>di</strong> memoria guest<br />

nella memoria fisica effettiva <strong>di</strong> I/O.<br />

Questo, come si comprende, può sovraccaricare il processore (perché l’hypervisor deve<br />

eseguire numerosi compiti per gestire l’I/O) e limitare il throughput dell’I/O, dal momento<br />

che i dati devono passare attraverso l’hypervisor prima <strong>di</strong> arrivare nella VM o nel <strong>di</strong>spositivo<br />

<strong>di</strong> I/O [11].<br />

37

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

Saved successfully!

Ooh no, something went wrong!