System virtual machinesEdit
Una “macchina virtuale” è stata originariamente definita da Popek e Goldberg come “un duplicato efficiente e isolato di una vera macchina informatica.”L’uso corrente include macchine virtuali che non hanno corrispondenza diretta con alcun hardware reale.L’hardware fisico “reale” che esegue la VM viene generalmente indicato come “host” e la macchina virtuale emulata su tale macchina viene generalmente indicata come “guest”., Un host può emulare diversi guest, ognuno dei quali può emulare diversi sistemi operativi e piattaforme hardware.
Il desiderio di eseguire più sistemi operativi è stato il motivo iniziale per le macchine virtuali, in modo da consentire la condivisione del tempo tra diversi sistemi operativi single-tasking. Per alcuni aspetti, una macchina virtuale di sistema può essere considerata una generalizzazione del concetto di memoria virtuale che storicamente l’ha preceduta., Il CP/CMS di IBM, i primi sistemi a consentire la virtualizzazione completa, implementava la condivisione del tempo fornendo a ciascun utente un sistema operativo a singolo utente, il Conversational Monitor System (CMS). A differenza della memoria virtuale, una macchina virtuale di sistema ha autorizzato l’utente a scrivere istruzioni privilegiate nel proprio codice. Questo approccio presentava alcuni vantaggi, come l’aggiunta di dispositivi di input/output non consentiti dal sistema standard.,
Man mano che la tecnologia evolve la memoria virtuale ai fini della virtualizzazione, nuovi sistemi di overcommitment della memoria possono essere applicati per gestire la condivisione della memoria tra più macchine virtuali su un sistema operativo del computer. Potrebbe essere possibile condividere pagine di memoria che hanno contenuti identici tra più macchine virtuali che girano sulla stessa macchina fisica, ciò potrebbe comportare la mappatura alla stessa pagina fisica con una tecnica chiamata kernel same-page merging (KSM)., Ciò è particolarmente utile per le pagine di sola lettura, come quelle che contengono segmenti di codice, come nel caso di più macchine virtuali che eseguono lo stesso o simile software, librerie software, server Web, componenti middleware, ecc. I sistemi operativi guest non devono essere conformi con l’hardware host, rendendo così possibile eseguire diversi sistemi operativi sullo stesso computer (ad esempio, Windows, Linux o versioni precedenti di un sistema operativo) per supportare il software futuro.,
L’uso di macchine virtuali per supportare sistemi operativi guest separati è popolare per quanto riguarda i sistemi embedded. Un uso tipico sarebbe quello di eseguire un sistema operativo in tempo reale contemporaneamente con un sistema operativo complesso preferito, come Linux o Windows. Un altro uso sarebbe per software nuovo e non provato ancora in fase di sviluppo, quindi funziona all’interno di una sandbox. Le macchine virtuali hanno altri vantaggi per lo sviluppo del sistema operativo e possono includere un migliore accesso al debug e riavvii più rapidi.,
Più macchine virtuali che eseguono il proprio sistema operativo guest sono spesso impegnate per il consolidamento del server.
Process virtual machinesEdit
Una VM di processo, talvolta chiamata Application Virtual Machine o Managed Runtime Environment (MRE), viene eseguita come una normale applicazione all’interno di un sistema operativo host e supporta un singolo processo. Viene creato quando il processo viene avviato e distrutto quando esce., Il suo scopo è quello di fornire un ambiente di programmazione indipendente dalla piattaforma che astrae i dettagli dell’hardware o del sistema operativo sottostante e consente a un programma di eseguire allo stesso modo su qualsiasi piattaforma.
Una VM di processo fornisce un’astrazione di alto livello-quella di un linguaggio di programmazione di alto livello (rispetto all’astrazione ISA di basso livello della VM di sistema). Le macchine virtuali di processo sono implementate utilizzando un interprete; prestazioni paragonabili ai linguaggi di programmazione compilati possono essere ottenute utilizzando la compilazione just-in-time.,
Questo tipo di VM è diventato popolare con il linguaggio di programmazione Java, che viene implementato utilizzando la macchina virtuale Java. Altri esempi includono la macchina virtuale Parrot e. NET Framework, che viene eseguito su una VM chiamata Common Language Runtime. Tutti possono servire come livello di astrazione per qualsiasi linguaggio informatico.
Un caso speciale di macchine virtuali di processo sono sistemi che astraggono i meccanismi di comunicazione di un cluster di computer (potenzialmente eterogeneo). Tale VM non consiste in un singolo processo, ma in un processo per macchina fisica nel cluster., Sono progettati per facilitare il compito di programmare applicazioni simultanee lasciando che il programmatore si concentri sugli algoritmi piuttosto che sui meccanismi di comunicazione forniti dall’interconnessione e dal sistema operativo. Non nascondono il fatto che la comunicazione ha luogo e come tale non tentano di presentare il cluster come una singola macchina.
A differenza di altre macchine virtuali di processo, questi sistemi non forniscono un linguaggio di programmazione specifico, ma sono incorporati in un linguaggio esistente; in genere tale sistema fornisce collegamenti per diversi linguaggi (ad esempio, C e Fortran)., Esempi sono Parallel Virtual Machine (PVM) e Message Passing Interface (MPI). Non sono macchine strettamente virtuali perché le applicazioni in esecuzione in cima hanno ancora accesso a tutti i servizi del sistema operativo e non sono quindi limitate al modello di sistema.