Macchina virtuale

In informatica , una macchina virtuale (inglese macchina virtuale , Rep. VM ) è un'illusione di un dispositivo di elaborazione creato da un software di emulazione o un'istanza su un hypervisor . Il software di emulazione simula la presenza di risorse hardware e software come la memoria , il processore , l' hard disk o il sistema operativo ei driver , consentendo di eseguire programmi nelle stesse condizioni di quelli della macchina simulata.

Uno dei vantaggi delle macchine virtuali è quello di poter astrarre dalle caratteristiche della macchina fisica utilizzata ( hardware e software - in particolare il sistema operativo ), consentendo una forte portabilità del software e la gestione di sistemi legacy che a volte sono progettati per le macchine o sistemi, ambienti software più vecchi e non più disponibili.

Le macchine virtuali vengono utilizzate anche per isolare le applicazioni per motivi di sicurezza , per aumentare la robustezza di un server limitando l'impatto degli errori di sistema o per emulare più macchine su un'unica macchina fisica ( virtualizzazione ).

Gli svantaggi delle macchine virtuali sono da un lato le prestazioni lorde significativamente inferiori rispetto all'esecuzione sull'hardware nativo (che può rendere difficile testare i giochi 3D), dall'altro il consumo di una piccola parte della memoria reale per il proprio funzionamento. I loro vantaggi sono quelli di consentire il test delle varianti di installazione su macchine simulate con dimensioni molto diverse di RAM , memoria grafica e numero di processori.

L'utilizzo delle macchine virtuali è uno dei principi fondamentali della tecnologia Java .

Storia

La nozione di macchina virtuale iniziò ad emergere nel campo della logica già nel 1936, quando Turing inventò la macchina di Turing universale . Questo permette di simulare il comportamento di una macchina, con in input un certo programma di cui vorremmo simulare l'esecuzione.

Prodotto VM / 370 , creato da IBM nel 1970, ha permesso a più utenti di utilizzare time-sharing un computer che esegue il sistema operativo DOS / VSE  (in) che da soli non offriva la possibilità di multiproprietà uso.

VM/370 è stato uno dei primi sistemi di virtualizzazione in ambito IT e il primo ad essere rilasciato su scala industriale. Funzionava su computer IBM 370 , sebbene una versione universitaria funzionasse sul Modello 67 chiamata programma di controllo (CP). Da allora si è evoluto in z/VM con capacità di indirizzamento più estese, ancora in uso nel 2016.

Nel 1989, i software Desqview, Omniview, VM/386 e Windows/386 sono stati utilizzati per simulare macchine virtuali che eseguono il sistema operativo MS-DOS . I software Desqview e Windows/386 offrono anche un'interfaccia grafica che permette di vedere le varie macchine virtuali in funzione sullo stesso schermo.

La Java Virtual Machine è stata creata nel 1995 da Sun Microsystems . Era inteso per eseguire software scaricato da un server web , indipendentemente dalle caratteristiche tecniche del dispositivo che scarica ed esegue il software. Il prodotto viene fornito con il linguaggio di programmazione Java , ispirato al C++ e promesso di diventare uno standard de facto .

Windows NT ei suoi successori incorporano una macchina virtuale per simulare una macchina che esegue MS-DOS  ; Windows Server 2008 offre un hypervisor integrato. Linux ha anche un ambiente di virtualizzazione open source chiamato Xen .

Creato nel 1999, VMware è un software che consente di eseguire più sistemi operativi contemporaneamente sulla stessa macchina (vedere la sezione Virtualizzazione di seguito). Una versione semplificata di questo prodotto di VMware , acquisita da EMC Corporation nel 2004, è stata resa gratuita da questo editore nel 2006 .

Usi

Emulazione

L' emulazione viene eseguita per implementare la funzionalità di un dispositivo utilizzando un dispositivo diverso con caratteristiche diverse. Uno degli usi consiste nell'implementare il set di istruzioni di un processore utilizzando un altro processore. Ciò consente, ad esempio, di utilizzare un computer recente per eseguire programmi destinati a un computer, un sistema operativo o una console di gioco che non esistono più sul mercato. La simulazione è accompagnata da una significativa diminuzione della potenza di calcolo: la potenza del processore simulato sarà una frazione di quella del processore del simulatore.

Multitasking

Le macchine virtuali sono state utilizzate fin dagli anni '70 per implementare il multitasking , ovvero consentire al computer di eseguire più operazioni contemporaneamente al servizio di più utenti. Ad ogni utente viene assegnata una macchina virtuale, dandogli l'illusione di essere gli unici ad utilizzare il computer. Questa funzionalità è ora inclusa in tutti i sistemi operativi.

Macchina virtuale di alto livello

Nella tecnica della macchina virtuale di alto livello , il codice sorgente dei programmi viene tradotto da un compilatore in codice oggetto intermedio, che verrà successivamente tradotto in codice macchina utilizzando lo specifico set di istruzioni del processore che simulerà la macchina. I programmi sono distribuiti sul mercato come bytecode - codice intermedio - e possono essere eseguiti da qualsiasi dispositivo informatico che disponga del software necessario per simulare quella macchina.

Il bytecode utilizza un set di istruzioni macchina fittizio, non disponibile in commercio, ed è progettato per ignorare il set di istruzioni finale che verrà utilizzato per eseguire il programma. Questa tecnica è stata utilizzata per la prima volta per il linguaggio di programmazione Pascal nel 1980.

La CLI gestita da Microsoft .NET e la Java virtual machine di Sun Microsystems sono macchine virtuali di alto livello.

Macchina virtuale Java

La specifica tecnica della Java virtual machine o JVM, definita nel 1995 dalla società Sun Microsystems , cita il set di istruzioni del processore, il formato dei file eseguibili e l' interfaccia di programmazione della libreria standard . La macchina virtuale Java è simulata da software come Java Runtime Environment . Lo slogan di questa tecnologia è "  scrivi una volta, esegui ovunque  ": che il software scritto una volta può essere utilizzato su una vasta gamma di macchine (che vanno dai telefoni cellulari all' supercomputer).

Esistono diverse implementazioni della JVM, la più utilizzata delle quali è HotSpot di Oracle Corporation .

Virtualizzazione

In senso lato, la virtualizzazione consiste nel simulare l'esistenza di più computer utilizzandone uno solo. Ciò consente in particolare di ridurre i costi di acquisto delle apparecchiature informatiche e di rendere redditizio il loro utilizzo. Le tecnologie del 2008 sono così potenti che in condizioni ordinarie un server utilizza solo il 10% della capacità dell'hardware. La virtualizzazione consente di risparmiare anche il tempo: una breve procedura di modificare la configurazione del emulatore sostituisce una lunga procedura di acquisizione hardware del computer.

KVM , QEMU , VMware , VirtualBox , VirtualPC , Xen e Bochs sono alcuni software di virtualizzazione.

Server virtuale dedicato

Un server virtuale dedicato (in inglese: virtual private server , abr. VPS) è una macchina virtuale che simula un server di computer destinato a un determinato consumatore. La macchina utilizzata per la simulazione serve più utenze contemporaneamente. Ogni server virtuale dedicato ha il proprio spazio su disco e il proprio sistema operativo, che può essere installato e riavviato dal consumatore. Un server IT fisico può quindi ospitare più server virtuali dedicati che condividono risorse e sono partizionati l'uno dall'altro.

Macchina virtuale parallela

Una macchina virtuale parallela è un dispositivo che crea l'illusione di un singolo computer mentre vengono utilizzate le risorse di più computer, aumentando così la concorrenza computazionale. PVM è un insieme di librerie software e strumenti di comunicazione per reti di computer che consente di aggregare una rete di computer in un'unica macchina virtuale.

Programmazione

Una macchina virtuale è un ambiente confinato e controllato, protetto contro l'uso improprio delle risorse hardware. Questo lo rende un ambiente di scelta per l'esecuzione di programmi non affidabili, come il software in fase di sviluppo, e in particolare i sistemi operativi , o per l'analisi del malware . Inoltre, l'uso per la programmazione di sistemi operativi risolve un problema circolare: il software utilizzato per lo sviluppo e il debug del sistema operativo ha bisogno di un sistema operativo.

tecniche

L' hypervisor è il software che controlla l'utilizzo, da parte delle diverse macchine virtuali, dell'hardware del dispositivo simulatore. Un hypervisor di tipo 2 utilizza il sistema operativo del computer del simulatore, mentre un hypervisor di tipo 1 non ha bisogno di questo sistema operativo sul dispositivo del simulatore.

Una delle funzioni comuni dei software hypervisor così come dei sistemi operativi è quella di simulare la presenza della memoria principale con la memoria virtuale . Il meccanismo permette anche di simulare la presenza di 4  GB di memoria in una macchina effettivamente dotata di 1  GB , l' overbooking viene implementato copiando sull'hard disk il contenuto della memoria inutilizzata .

Il giusto in tempo

La compilazione just-in-time (inglese just-in-time , Rep. JIT ) è una tecnica utilizzata sia per simulare un processore sia per accelerare l'implementazione di un programma scritto in bytecode.

Nel primo caso, il codice macchina previsto per il processore da simulare viene tradotto in vista di diventare codice macchina per il processore che sta simulando.

Nel secondo caso, il programma impiega un po' più di tempo per avviarsi, ma la sua esecuzione è più veloce. L'operazione di traduzione viene eseguita da un software simile a un compilatore immediatamente prima dell'esecuzione del codice tradotto. Questa tecnica è stata implementata per la prima volta per Lisp alla fine degli anni '60. La JVM di Oracle utilizza questa tecnica dalla versione 1.2 per motivi di efficienza, mentre la macchina Dalvik di Android no.

Stack macchina virtuale

La JVM Oracle funziona su questo principio.

Macchina virtuale del registro

La macchina virtuale Dalvik si basa su questa tecnica.

Macchina virtuale di alto livello

Il software o l'interprete che implementa una macchina virtuale di alto livello isola l'applicazione utilizzata dall'utente dalle specificità del computer, cioè da quelle della sua architettura o del suo funzionamento del sistema. Questa indiretto consente al progettista di un'applicazione di renderlo disponibile su un gran numero di computer senza i soliti vincoli di scrivere software portatile eseguito direttamente sul computer. In molti casi, la compilazione just-in-time consente all'applicazione di avere prestazioni paragonabili a un'applicazione nativa.

Windows XP e simili funzionano anche in un ambiente virtualizzato, creato dal livello HAL . In caso di modifica della macchina fisica, in linea di principio è possibile modificare solo l'HAL senza influire sul resto dell'installazione di Windows.

.NET vs. Java e Java EE

La CLI e il C# hanno diverse somiglianze con la JVM di Sun e Java . Entrambi sono basati su una macchina virtuale che nasconde i dettagli hardware del computer su cui sono in esecuzione i loro programmi. Entrambi utilizzano il proprio bytecode Common Intermediate Language (CIL, precedentemente MSIL) per Microsoft e il bytecode Java per Sun. Con .NET, il byte-code viene sempre compilato prima dell'esecuzione, al volo (JIT, just-in-time ) o in anticipo utilizzando l'utilità ngen.exe. Con Java, il byte-code viene interpretato o compilato in anticipo o addirittura compilato just-in-time. Entrambi forniscono librerie di classi estensibili che risolvono molti problemi di programmazione comuni. Entrambi risolvono molti problemi di sicurezza utilizzando lo stesso approccio. Gli spazi dei nomi forniti da .NET Framework sono molto simili al pacchetto API Java EE sia nello stile che nell'invocazione.

.NET nella sua forma completa (ovvero l'implementazione Microsoft) è attualmente disponibile completamente per Windows e parzialmente per Linux e Mac , mentre Java è completamente disponibile su quasi tutte le piattaforme. Fin dall'inizio, .NET ha supportato più lingue e rimane indipendente dalla piattaforma in modo che chiunque possa re-implementarlo su altre piattaforme (l'implementazione Microsoft è destinata solo a Windows , Windows CE e Xbox360 ). La piattaforma Java è stata originariamente costruita per supportare solo il linguaggio Java, ma su diversi sistemi operativi con lo slogan Scrivi una volta, esegui ovunque  " . Altri linguaggi sono stati sviluppati per la macchina virtuale java, ma non sono molto utilizzati. L'implementazione Java di Sun è open source (che include la libreria di classi, il compilatore, JVM e alcuni altri strumenti associati alla piattaforma Java) con licenza GNU GPL .

RIA-RDA

Sempre più tecnologie si stanno attualmente unendo per operare sul lato web e del sistema operativo. Si differenziano più per gli strumenti di produzione e manutenzione che per le tecnologie utilizzate che si possono riassumere nell'uso di un linguaggio di compilazione ed esecuzione (macchina virtuale)/interpretazione e di un formalismo xml (xaml, xmm, xul). Queste tecnologie si trovano, a seconda dei casi, su computer, telefoni, palmari o periferiche multimediali (ricevitori satellitari).

La RIA si basa su una macchina virtuale in esecuzione in un browser web. L' RDA si basa su una macchina virtuale in esecuzione sul sistema operativo. RIA e RDA in evoluzione sono sempre più multilingua (C#, javascript, java, C#), multi-interfaccia ( swing , wpf, flash, AJAX-ui-widgets), multi OS (Mac, Window, unix) , multi-hardware (PC, PDA, telefono).

Tecnologia web e applicativa
Società Tecnologia Sistema operativo Linguaggio di programmazione Applicazione tecnologia ragnatela formato
Microsoft Microsoft CLI Microsoft .NET C# poi CLR / DLR MFC / GDI Fare clic una volta Silverlight XAML .cs → .dll
Novella Microsoft CLI unix / SuSE C# poi CLR / DLR Mono ? chiaro di luna
Adobe Flash player Flash Animazione flash Actionscript ARIA ? Adobe flex .as → .swf
Microsistemi solari Giava applet Java Giava JFC awt-swing Java Web Start JavaFX .java → .class
Netscape navigatore unix javascript Ingranaggi (google) AJAX XUL SMIL SVG
Esempi

Vedi anche

Articoli Correlati

Note e riferimenti

  1. (in) Karen Hazzah, Scrittura di VxD Windows e driver di dispositivo , Focal Press - 1996 ( ISBN  9780879304386 )
  2. (in) Computerworld , vol. 9 - N° 33, agosto 1975, ( ISSN  0010-4841 )
  3. (in) InfoWorld , vol. 11 - N° 7, feb. 1989, ( ISSN  0199-6649 )
  4. (in) Network World , vol. 12 - N° 50, dicembre 1995, ( ISSN  0887-7661 )
  5. (in) InfoWorld , vol. 21 - N° 16, aprile 1999, ( ISSN  0199-6649 )
  6. (in) Harry Henderson, Enciclopedia dell'informatica e della tecnologia , Infobase Publishing - 2009 ( ISBN  9780816063826 )
  7. (in) James Edward Smith e Ravi Nair Titolo Macchine virtuali piattaforme versatili per sistemi e processi , Elsevier - 2005 ( ISBN  9781558609105 )
  8. (in) FJM Laver, Un'introduzione agli usi dei computer , Archivio CUP - 1976 ( ISBN  9780521290357 )
  9. (in) James Edward Smith e Ravi Nair, Macchine virtuali piattaforme versatili per sistemi e processi , Elsevier - 2005 ( ISBN  9781558609105 )
  10. (in) Joshua Engel, Programmazione per la macchina virtuale Java , Addison-Wesley Professional - 1999 ( ISBN  9780201309720 )
  11. (in) Ivanka Menken e Gerard Blokdijk, Virtualization: The Complete Cornerstone Guide to Virtualization Best Practices , Lulu.com - 2008 ( ISBN  9781921523915 )
  12. (in) Judith Hurwitz - Robin Bloor - Marcia Kaufman e Fern Halper, Cloud Computing For Dummies , For Dummies - 2009 ( ISBN  9.780.470,48,4708 mila )
  13. (in) Michael J. Jipping, sistema operativo per smartphone Symbian OS concetti con una guida tutorial , John Wiley & Sons - 2007 ( ISBN  9780470034491 )
  14. (in) PC massimo , dicembre 2008, ( ISSN  1522-4279 )
  15. (in) Michael A. Davis - Sean Bodmer e Aaron LeMasters, Hacking esposti Malware e rootkit: segreti e soluzioni di sicurezza di malware e rootkit , McGraw Hill Professional, 2009 ( ISBN  9780071591188 )