Vai al contenuto

Macchina virtuale: differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Contenuto cancellato Contenuto aggiunto
 
(39 versioni intermedie di 27 utenti non mostrate)
Riga 1: Riga 1:
{{F|software|marzo 2013|nessuna fonte}}
{{F|software|marzo 2013|nessuna fonte}}
[[File:VirtualBox2.png|thumb|Una macchina virtuale creata con [[VirtualBox]]]]
In [[informatica]] il termine '''macchina virtuale''' ('''VM''') indica un [[software]] che, attraverso un processo di [[virtualizzazione]], crea un ambiente virtuale che emula tipicamente il comportamento di una macchina fisica ([[PC]] [[client]] o [[server]]) grazie all'assegnazione di risorse hardware (porzioni di [[disco rigido]], [[RAM]] e risorse di [[processore|processamento]]) ed in cui alcune [[applicazione (informatica)|applicazioni]] possono essere [[esecuzione (informatica)|eseguite]] come se interagissero con tale macchina; infatti se dovesse andare fuori uso il [[sistema operativo]] che gira sulla macchina virtuale, il sistema di base non ne risentirebbe affatto. Tra i vantaggi vi è il fatto di poter offrire contemporaneamente ed efficientemente a più utenti diversi [[sistema operativo|ambienti operativi]] separati, ciascuno attivabile su effettiva richiesta, senza sporcare il sistema fisico reale con il [[partizione (informatica)|partizionamento]] del [[disco rigido]] oppure fornire ambienti [[computer cluster|clusterizzati]] su sistemi [[server]].
In [[informatica]] il termine '''macchina virtuale''' ('''VM''') indica un [[software]] che, attraverso un processo di [[virtualizzazione]], crea un ambiente virtuale che emula tipicamente il comportamento di una macchina fisica ([[PC]], [[client]] o [[server]]) grazie all'assegnazione di risorse hardware (porzioni di [[disco rigido]], [[RAM]] e risorse di [[processore|processamento]]) e in cui alcune [[applicazione (informatica)|applicazioni]] possono essere [[esecuzione (informatica)|eseguite]] come se interagissero con tale macchina; infatti se dovesse andare fuori uso il [[sistema operativo]] che gira sulla macchina virtuale, il sistema di base non ne risentirebbe affatto. Tra i vantaggi vi è il fatto di poter offrire contemporaneamente ed efficientemente a più utenti diversi [[sistema operativo|ambienti operativi]] separati, ciascuno attivabile su effettiva richiesta, senza "sporcare" il sistema fisico reale con il [[partizione (informatica)|partizionamento]] del [[disco rigido]] oppure fornire ambienti [[computer cluster|clusterizzati]] su sistemi [[server]].<ref name="vmwa_What">{{Cita web |titolo=What is a Virtual Machine? |sito=VMware |data=10 aprile 2020 |accesso=22 maggio 2020 |url= https://www.vmware.com/it/topics/glossary/content/virtual-machine.html |lingua=it }}</ref><ref name="redh_Cos'">{{Cita web |titolo=Cos'è una macchina virtuale? |sito=redhat.com |accesso=22 maggio 2020 |url= https://www.redhat.com/it/topics/virtualization/what-is-a-virtual-machine |lingua=it }}</ref><ref name="azur_Chec">{{Cita web |titolo=Che cos'è una macchina virtuale e come funziona |accesso=22 maggio 2020 |url= https://azure.microsoft.com/it-it/overview/what-is-a-virtual-machine/ |lingua=it }}</ref>
[[File:VirtualBox2.png|thumb|[[VirtualBox]]]]


== Significati ==
== Significati ==


=== Significato originario ===
=== Significato originario ===
In origine, il termine '''''Virtual Machine''''' indicava la creazione di una molteplicità di ''ambienti di esecuzione'' identici in un unico [[computer]], ciascuno con il proprio [[sistema operativo]]. Lo scopo di questa tecnica era quello di dividere tra più utenti l'uso di un singolo [[computer]], dando ad ognuno l'impressione di esserne gli unici utilizzatori, oltre ad avere vantaggi che le macchine reali non hanno (ad esempio il caso di dover riavviare la macchina: con macchine virtuali l'operazione è più veloce e c'è la possibilità di scegliere quali componenti attivare e quali no). Il [[software]] che rende possibile questa ''divisione'' è chiamato virtual machine monitor o [[hypervisor]].
In origine, il termine "virtual machine" indicava la creazione di una molteplicità di [[Ambiente di esecuzione|ambienti di esecuzione]] identici in un unico [[computer]], ciascuno con il proprio [[sistema operativo]].<ref>{{Cita pubblicazione|nome=Gerald J.|cognome=Popek|nome2=Robert P.|cognome2=Goldberg|data=1974-07-01|titolo=Formal requirements for virtualizable third generation architectures|rivista=Communications of the ACM|volume=17|numero=7|pp=412–421|accesso=2024-02-01|doi=10.1145/361011.361073|url=https://dl.acm.org/doi/10.1145/361011.361073}}</ref> Lo scopo di questa tecnica era quello di dividere tra più utenti l'uso di un singolo [[computer]], dando ad ognuno l'impressione di esserne gli unici utilizzatori, oltre ad avere vantaggi che le macchine reali non hanno (ad esempio il caso di dover riavviare la macchina: con macchine virtuali l'operazione è più veloce e c'è la possibilità di scegliere quali componenti attivare e quali no). Il [[software]] che rende possibile questa divisione è chiamato ''virtual machine monitor'' o ''[[hypervisor]]''.
Questo genere di ''virtualizzazione'' è particolarmente utilizzata nel campo dei [[mainframe]] e dei [[supercomputer]].
Questo genere di ''virtualizzazione'' è particolarmente utilizzata nel campo dei [[mainframe]] e dei [[supercomputer]].
Esempi di virtualizzazioni di questo genere sono i sistemi operativi [[VM/CMS]] e [[OS/360]] di [[IBM]] e [[Xen]].
Esempi di virtualizzazioni di questo genere sono i sistemi operativi [[VM/CMS]] e [[OS/360]] di [[IBM]] e [[Xen]].
Riga 12: Riga 12:
La [[virtualizzazione]] può essere vista in diversi modi:
La [[virtualizzazione]] può essere vista in diversi modi:
* [[Paravirtualizzazione]]: la macchina virtuale non simula un [[hardware]] ma offre speciali [[Application programming interface|API]] che richiedono modifiche nel [[sistema operativo]];
* [[Paravirtualizzazione]]: la macchina virtuale non simula un [[hardware]] ma offre speciali [[Application programming interface|API]] che richiedono modifiche nel [[sistema operativo]];
* [[Virtualizzazione]] nativa (o totale): la macchina virtuale esercita una completa virtualizzazione dell'[[hardware]], tramite un [[Hypervisor]] di tipo 1 o 2;
* Virtualizzazione nativa (o totale): la macchina virtuale esercita una completa virtualizzazione dell'[[hardware]], tramite un ''[[hypervisor]]'' di tipo 1 o 2;
* [[Virtualizzazione]] non nativa: la macchina virtuale emula il software ed il [[sistema operativo]] scritti per un altro [[processore]] permettendogli di venire eseguiti, è possibile che siano incluse componenti hardware che necessitano di [[microcodice]].
* Virtualizzazione non nativa: la macchina virtuale emula il software e il [[sistema operativo]] scritti per un altro [[processore]], permettendo loro di essere eseguiti; è possibile che siano incluse componenti hardware che necessitano di [[microcodice]].
* [[Virtualizzazione]] a livello di [[sistema operativo]]: la macchina virtuale adotta una virtualizzazione a livello [[Kernel]] che permette a un [[server]] di virtualizzarne centinaia di altri.
* [[Virtualizzazione a livello di sistema operativo]]: la macchina virtuale adotta una virtualizzazione a livello [[kernel]], che permette a un [[server]] di virtualizzarne centinaia di altri.


=== Application virtual machine ===
=== Application virtual machine ===
Il significato più comune oggi è quello di un programma che emuli un [[computer|calcolatore]] (di solito un calcolatore astratto, cioè a cui non corrisponde un calcolatore reale). I programmi applicativi sono scritti in un linguaggio compilato per questo calcolatore immaginario (cioè tradotti nelle sue istruzioni native) e, una volta compilati, eseguiti sulla macchina virtuale software, che può agire o come [[interprete (informatica)|interprete]] o come [[compilatore]] "al volo" ([[Compilatore just-in-time|compilazione just in time]]). Dal momento che si possono scrivere diverse macchine virtuali per diverse piattaforme, il programma compilato può "girare" su qualsiasi piattaforma su cui "giri" la macchina virtuale.
Il significato più comune oggi è quello di un programma che emuli un [[computer|calcolatore]] (di solito un calcolatore astratto, cioè a cui non corrisponde un calcolatore reale). I programmi applicativi sono scritti in un linguaggio compilato per questo calcolatore immaginario (cioè tradotti nelle sue istruzioni native) e, una volta compilati, eseguiti sulla macchina virtuale software, che può agire o come [[interprete (informatica)|interprete]] o come [[compilatore]] "al volo" ([[Compilatore just-in-time|compilazione just in time]]). Dal momento che si possono scrivere diverse macchine virtuali per diverse piattaforme, il programma compilato può "girare" su qualsiasi piattaforma su cui "giri" la macchina virtuale.
L'Hypervisor, è il componente chiave per un sistema basato sulla virtualizzazione.
''L'hypervisor'' è il componente chiave per un sistema basato sulla virtualizzazione.
Il Virtual Machine Monitor deve operare in maniera trasparente senza pesare con la propria attività sul funzionamento e sulle prestazioni dei sistemi operativi.
Il Virtual Machine Monitor deve operare in maniera trasparente senza pesare con la propria attività sul funzionamento e sulle prestazioni dei sistemi operativi.


Un linguaggio moderno che fa uso della macchina virtuale è il Java: i programmi scritti in [[Linguaggio di programmazione Java|Java]] sono infatti compilati (cioè tradotti) nel linguaggio bytecode, che gira sulla [[Macchina virtuale Java|Java Virtual Machine]].
Un linguaggio moderno che fa uso della macchina virtuale è il Java: i programmi scritti in [[Linguaggio di programmazione Java|Java]] sono infatti compilati (cioè tradotti) nel linguaggio bytecode, che gira sulla [[Macchina virtuale Java|Java Virtual Machine]].


Progenitori delle macchine virtuali odierne si possono considerare sia la "macchina p", cioè il calcolatore astratto per cui erano (e sono tuttora) compilati i programmi in [[Pascal (linguaggio)|Pascal]] nelle prime fasi della compilazione (producendo il cosiddetto [[P-Code]]), sia la "macchina S", un altro calcolatore astratto (che però ebbe anche una realizzazione "concreta", cioè [[hardware]]) per cui erano compilati i programmi in [[Simula]] nelle prime fasi della compilazione (producendo il cosiddetto S-code).
Progenitori delle macchine virtuali odierne si possono considerare sia la "macchina P", cioè il calcolatore astratto per cui erano (e sono tuttora) compilati i programmi in [[Pascal (linguaggio)|Pascal]] nelle prime fasi della compilazione (producendo il cosiddetto [[P-Code]]), sia la "macchina S", un altro calcolatore astratto (che però ebbe anche una realizzazione "concreta", cioè [[hardware]]) per cui erano compilati i programmi in [[Simula]] nelle prime fasi della compilazione (producendo il cosiddetto S-code).
L'Hypervisor alloca le risorse dinamicamente quando e dove necessario, riduce in modo drastico il tempo necessario alla messa in opera di nuovi ''sistemi'', isola l'architettura nel suo complesso da problemi a livello di sistema operativo ed applicativo, abilita ad una gestione più semplice di risorse eterogenee e facilita testing e debugging di ambienti controllati.
''L'hypervisor'' alloca le risorse dinamicamente quando e dove necessario, riduce in modo drastico il tempo necessario alla messa in opera di nuovi ''sistemi'', isola l'architettura nel suo complesso da problemi a livello di sistema operativo ed applicativo, abilita ad una gestione più semplice di risorse eterogenee e facilita ''testing'' e ''debugging'' di ambienti controllati.


=== Emulazione di sistemi operativi ===
=== Emulazione di sistemi operativi ===
{{Vedi anche|Emulatore}}
{{Vedi anche|Emulatore}}
Talvolta il termine ''Virtual Machine'' viene utilizzato per indicare l'[[emulatore|emulazione]] di una [[piattaforma (informatica)|piattaforma]].
Talvolta il termine macchina virtuale viene utilizzato per indicare l'[[emulatore|emulazione]] di una [[piattaforma (informatica)|piattaforma]].


È possibile tramite appositi applicativi creare un "ambiente applicativo" tale da apparire come un "finto computer", su cui si potrà installare un [[sistema operativo]] diverso da quello che equ
È possibile tramite appositi applicativi creare un "ambiente applicativo" tale da apparire come un "finto computer", su cui si potrà installare un [[sistema operativo]] diverso da quello che equipaggia il vero elaboratore.


Gli usi possibili sono:
Gli usi possibili sono:



* la simulazione di piattaforme hardware ancora in fase di progettazione (è questo uno degli usi originari)
* la simulazione di piattaforme hardware ancora in fase di progettazione (è questo uno degli usi originari)

* l'emulazione di un sistema operativo diverso da quello realmente installato sul proprio hardware al solo scopo di utilizzare applicazioni sviluppate solo per quello emulato e non per il proprio
* l'emulazione di un sistema operativo diverso da quello realmente installato sul proprio hardware al solo scopo di utilizzare applicazioni sviluppate solo per quello emulato e non per il proprio
* operazioni di "''consolidamento''": passare cioè da avere '''x''' server fisici per '''x''' servizi, all'avere un unico server fisico con '''x''' istanze del sistema operativo, ognuna delle quali istanze può eseguire uno o più servizi.


===''Parallel virtual machine''===
* operazioni di "''consolidamento''". Passare cioè da avere '''x''' server fisici per '''x''' servizi, all'avere un unico server fisico con '''x''' istanze del sistema operativo, ognuna delle quali istanze può eseguire uno o più servizi.

=== Parallel virtual machine ===
{{Vedi anche|Parallel Virtual Machine}}
{{Vedi anche|Parallel Virtual Machine}}
Se nella sua accezione originaria il concetto di virtual machine indicava la suddivisione di un singolo computer tra più utenti, la potenza sempre crescente dei computer ha fatto sorgere l'esigenza inversa: far percepire come unica entità un sistema composto da molti computer distinti. In questo caso si parla di ''[[Parallel Virtual Machine]]''. L'uso più classico di questa tecnologia è quello della creazione di [[computer cluster|cluster]] di centinaia, se non migliaia, di elaboratori per sostenere carichi di lavoro massicciamente parallelizzabili.
Se nella sua accezione originaria il concetto di virtual machine indicava la suddivisione di un singolo computer tra più utenti, la potenza sempre crescente dei computer ha fatto sorgere l'esigenza inversa: far percepire come unica entità un sistema composto da molti computer distinti. In questo caso si parla di ''[[Parallel Virtual Machine]]''. L'uso più classico di questa tecnologia è quello della creazione di [[computer cluster|cluster]] di centinaia, se non migliaia, di elaboratori per sostenere carichi di lavoro massicciamente parallelizzabili.
== Note ==

<references/>


== Voci correlate ==
== Voci correlate ==
* [[Bochs]]
* [[Bochs]]
* [[Xen]]
* [[Macchina virtuale Java]]
* [[Piattaforma Microsoft .NET]]
* [[VirtualBox]]
* [[VMware player]]
* [[Emulatore]]
* [[LLVM]]
* [[VMGL]]
* [[HHVM]]
* [[HHVM]]
* [[QEMU]]
* [[Hypervisor]]
* [[Hypervisor]]
* [[Kernel-based Virtual Machine]]
* [[Kernel-based Virtual Machine]]
* [[LLVM]]
* [[Macchina virtuale Java]]
* [[Proxmox Virtual Environment]]
* [[QEMU]]
* [[VirtualBox]]
* [[VMware Workstation Player]]
* [[VMGL]]
* [[Xen]]

== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{FOLDOC|virtual machine|virtual machine}}

{{Controllo di autorità}}
{{portale|informatica}}


[[Categoria:Software di sistema]]
[[Categoria:Software di sistema]]

Versione attuale delle 10:12, 1 feb 2024

Una macchina virtuale creata con VirtualBox

In informatica il termine macchina virtuale (VM) indica un software che, attraverso un processo di virtualizzazione, crea un ambiente virtuale che emula tipicamente il comportamento di una macchina fisica (PC, client o server) grazie all'assegnazione di risorse hardware (porzioni di disco rigido, RAM e risorse di processamento) e in cui alcune applicazioni possono essere eseguite come se interagissero con tale macchina; infatti se dovesse andare fuori uso il sistema operativo che gira sulla macchina virtuale, il sistema di base non ne risentirebbe affatto. Tra i vantaggi vi è il fatto di poter offrire contemporaneamente ed efficientemente a più utenti diversi ambienti operativi separati, ciascuno attivabile su effettiva richiesta, senza "sporcare" il sistema fisico reale con il partizionamento del disco rigido oppure fornire ambienti clusterizzati su sistemi server.[1][2][3]

Significato originario

[modifica | modifica wikitesto]

In origine, il termine "virtual machine" indicava la creazione di una molteplicità di ambienti di esecuzione identici in un unico computer, ciascuno con il proprio sistema operativo.[4] Lo scopo di questa tecnica era quello di dividere tra più utenti l'uso di un singolo computer, dando ad ognuno l'impressione di esserne gli unici utilizzatori, oltre ad avere vantaggi che le macchine reali non hanno (ad esempio il caso di dover riavviare la macchina: con macchine virtuali l'operazione è più veloce e c'è la possibilità di scegliere quali componenti attivare e quali no). Il software che rende possibile questa divisione è chiamato virtual machine monitor o hypervisor. Questo genere di virtualizzazione è particolarmente utilizzata nel campo dei mainframe e dei supercomputer. Esempi di virtualizzazioni di questo genere sono i sistemi operativi VM/CMS e OS/360 di IBM e Xen.

La virtualizzazione può essere vista in diversi modi:

Application virtual machine

[modifica | modifica wikitesto]

Il significato più comune oggi è quello di un programma che emuli un calcolatore (di solito un calcolatore astratto, cioè a cui non corrisponde un calcolatore reale). I programmi applicativi sono scritti in un linguaggio compilato per questo calcolatore immaginario (cioè tradotti nelle sue istruzioni native) e, una volta compilati, eseguiti sulla macchina virtuale software, che può agire o come interprete o come compilatore "al volo" (compilazione just in time). Dal momento che si possono scrivere diverse macchine virtuali per diverse piattaforme, il programma compilato può "girare" su qualsiasi piattaforma su cui "giri" la macchina virtuale. L'hypervisor è il componente chiave per un sistema basato sulla virtualizzazione. Il Virtual Machine Monitor deve operare in maniera trasparente senza pesare con la propria attività sul funzionamento e sulle prestazioni dei sistemi operativi.

Un linguaggio moderno che fa uso della macchina virtuale è il Java: i programmi scritti in Java sono infatti compilati (cioè tradotti) nel linguaggio bytecode, che gira sulla Java Virtual Machine.

Progenitori delle macchine virtuali odierne si possono considerare sia la "macchina P", cioè il calcolatore astratto per cui erano (e sono tuttora) compilati i programmi in Pascal nelle prime fasi della compilazione (producendo il cosiddetto P-Code), sia la "macchina S", un altro calcolatore astratto (che però ebbe anche una realizzazione "concreta", cioè hardware) per cui erano compilati i programmi in Simula nelle prime fasi della compilazione (producendo il cosiddetto S-code). L'hypervisor alloca le risorse dinamicamente quando e dove necessario, riduce in modo drastico il tempo necessario alla messa in opera di nuovi sistemi, isola l'architettura nel suo complesso da problemi a livello di sistema operativo ed applicativo, abilita ad una gestione più semplice di risorse eterogenee e facilita testing e debugging di ambienti controllati.

Emulazione di sistemi operativi

[modifica | modifica wikitesto]
Lo stesso argomento in dettaglio: Emulatore.

Talvolta il termine macchina virtuale viene utilizzato per indicare l'emulazione di una piattaforma.

È possibile tramite appositi applicativi creare un "ambiente applicativo" tale da apparire come un "finto computer", su cui si potrà installare un sistema operativo diverso da quello che equipaggia il vero elaboratore.

Gli usi possibili sono:

  • la simulazione di piattaforme hardware ancora in fase di progettazione (è questo uno degli usi originari)
  • l'emulazione di un sistema operativo diverso da quello realmente installato sul proprio hardware al solo scopo di utilizzare applicazioni sviluppate solo per quello emulato e non per il proprio
  • operazioni di "consolidamento": passare cioè da avere x server fisici per x servizi, all'avere un unico server fisico con x istanze del sistema operativo, ognuna delle quali istanze può eseguire uno o più servizi.

Parallel virtual machine

[modifica | modifica wikitesto]
Lo stesso argomento in dettaglio: Parallel Virtual Machine.

Se nella sua accezione originaria il concetto di virtual machine indicava la suddivisione di un singolo computer tra più utenti, la potenza sempre crescente dei computer ha fatto sorgere l'esigenza inversa: far percepire come unica entità un sistema composto da molti computer distinti. In questo caso si parla di Parallel Virtual Machine. L'uso più classico di questa tecnologia è quello della creazione di cluster di centinaia, se non migliaia, di elaboratori per sostenere carichi di lavoro massicciamente parallelizzabili.

  1. ^ What is a Virtual Machine?, su VMware, 10 aprile 2020. URL consultato il 22 maggio 2020.
  2. ^ Cos'è una macchina virtuale?, su redhat.com. URL consultato il 22 maggio 2020.
  3. ^ Che cos'è una macchina virtuale e come funziona, su azure.microsoft.com. URL consultato il 22 maggio 2020.
  4. ^ Gerald J. Popek e Robert P. Goldberg, Formal requirements for virtualizable third generation architectures, in Communications of the ACM, vol. 17, n. 7, 1º luglio 1974, pp. 412–421, DOI:10.1145/361011.361073. URL consultato il 1º febbraio 2024.

Voci correlate

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
Controllo di autoritàThesaurus BNCF 70414 · LCCN (ENsh85143804 · GND (DE4188396-2 · BNF (FRcb11933350k (data) · J9U (ENHE987007541294705171
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica