# Hypervisor

In informatica l'hypervisor (in italiano conosciuto come ipervisore), conosciuto anche come virtual machine monitor (VMM), è il componente centrale e più importante di un sistema basato sulle macchine virtuali. Un computer sul quale venga eseguito un hypervisor che a sua volta controlla una o più macchine virtuali è detto macchina host, e ogni macchina virtuale è detta macchina guest. Il compito di un hypervisor è quello di presentare all'utente i sistemi operativi delle macchine guest e di gestire la loro esecuzione. Grazie ad un hypervisor, su una macchina host possono essere in esecuzione contemporaneamente diverse macchine guest, su ognuna delle quali può girare un sistema operativo diverso che ha il controllo sulle risorse hardware virtualizzate rese disponibili dall'hypervisor. Questo tipo di virtualizzazione è diversa dalla virtualizzazione a livello di sistema operativo, dove tutte le istanze (dette anche container) devono essere eseguite in un unico kernel. Il termine inglese hypervisor è un rafforzativo di supervisor, usato tradizionalmente per il kernel di un sistema operativo. In altre parole si vuole indicare che un hypervisor è il supervisor di un supervisor. Il termine è nato approssimativamente nel 1970, mentre prima si usava il termine Control Program.

## Descrizione
### La virtualizzazione

La potenza di calcolo e la complessità dei moderni sistemi informatici induce a trovare nuove vie per facilitarne la gestione ed ottimizzarne l'utilizzo. Spesso i calcolatori che offrono servizi (server, non "desktop") sono sotto utilizzati per questioni di sicurezza e praticità: viene, di norma, installata una sola applicazione per sistema operativo e dunque una sola applicazione per calcolatore. Questa condizione implica la presenza di più calcolatori, che occupano spazio ed impiegano ingenti risorse di denaro, nonché di gestione e manutenzione.
La virtualizzazione è la tecnologia emergente che sembra raccogliere interesse soprattutto da parte delle aziende, che permette ad un server fisico ospitante di gestire sistemi operativi andando ad emulare le istanze delle macchine non più fisiche, ma appunto virtuali, e dei relativi sistemi operativi ospitati; questo agevola il mantenimento di un insieme di applicazioni su un singolo server e con un maggior livello di affidabilità. L'hypervisor è il componente chiave per un sistema basato appunto sulla virtualizzazione.

### Compiti dell'hypervisor

Il virtual machine monitor (es. Xen, open source monitor di macchine virtuali, VMware ESX attuale standard di virtualizzazione in ambito enterprise o Hyper-V monitor di macchine virtuali di Microsoft) deve operare in maniera trasparente senza pesare con la propria attività sul funzionamento e sulle prestazioni dei sistemi operativi.
Svolge attività di controllo al di sopra di ogni sistema, permettendone lo sfruttamento anche come monitor e debugger delle attività dei sistemi operativi e delle applicazioni in modo da scoprire eventuali malfunzionamenti ed intervenire celermente. I requisiti richiesti a questo scopo sono quelli di compatibilità, performance e semplicità. Gli ambiti di applicazione delle macchine virtuali sono molteplici ed eterogenei fra loro, poiché la virtualizzazione sta diventando sinonimo di sicurezza informatica ed affidabilità del sistema.
L'hypervisor può controllare ed interrompere eventuali attività pericolose, e ciò fa sì che si usino macchine virtuali sempre più frequentemente in ambito di ricerca e collaudo di software. Tra gli altri, i vantaggi della virtualizzazione che i sostenitori della tecnologia vedono in questa soluzione quando ben progettata sono di riduzione e controllo dei costi consolidando l'hardware. L'hypervisor può allocare le risorse dinamicamente quando e dove necessario, ridurre in modo drastico il tempo necessario alla messa in opera di nuovi sistemi, isolare l'architettura nel suo complesso da problemi a livello di sistema operativo ed applicativo, abilitare ad una gestione più semplice di risorse eterogenee e, come già accennato, facilitare collaudo e debugging di ambienti controllati.

## Classificazione

La classificazione si fa risalire all'articolo pubblicato nel 1974 da Gerald J. Popek e Robert P. Goldberg, in cui sono stati individuati due tipi di hypervisor:
* Tipo-1, detto anche nativo o bare-metal hypervisor: questi hypervisor sono eseguiti direttamente sull'hardware dell'host, del quale hanno quindi controllo diretto. Alcuni esempi sono: AntsleOS, Microsoft Hyper-V e Xbox One system software, Nutanix AHV, XCP-ng, Oracle VM Server, POWER Hypervisor e VMware ESXi (precedentemente noto come ESX) e Xen.
* Tipo-2, detto anche hosted hypervisor: questi hypervisor sono eseguiti all'interno di un tradizionale sistema operativo, proprio come un qualsiasi altro programma. Alcuni esempi sono: Parallels Desktop for Mac, QEMU, VirtualBox, VMware Player e VMware Workstation
Nella realtà la distinzione tra questi due tipi non è sempre definita in modo chiaro. Ad esempio, Kernel-based Virtual Machine (KVM) di Linux e bhyve di FreeBSD sono moduli del kernel che in pratica trasformano un sistema operativo host in un hypervisor di tipo-1.. In modo simile, dato che Linux e FreeBSD sono considerati sistemi operativi per uso generico, le cui applicazioni sono in competizione per le risorse delle macchine virtuali, KVM e bhyve possono essere classificati come hypervisor di tipo-2.