# Virtualisatie

Virtualisatie verwijst naar het creëren van een virtuele versie van iets. Dit wordt het meest gebruikt om gelijktijdig een besturingssysteem op computers te laten draaien die reeds een besturingssysteem hebben.
In de informatica is virtualisatie een techniek voor het verbergen van fysieke karakteristieken van computerbronnen voor de manier waarop andere systemen, applicaties of eindgebruikers met deze bronnen communiceren.
Hieronder valt het beschikbaar maken van een enkele fysieke bron (zoals een server, een besturingssysteem, een applicatie of een gegevensdrager) als meerdere logische bronnen. Hieronder valt ook het beschikbaar maken van meerdere fysieke bronnen (zoals gegevensdragers of servers) als een enkele logische bron". Deze nieuwe virtuele kijk op bronnen is niet beperkt door implementatie, geografische locatie of fysieke configuratie van de onderliggende bronnen. Virtualisatie wordt heel veel gebruikt bij bronnen zoals rekenkracht, gegevensopslag en rekenmethodes.

## Kenmerken

Normaal is er op een computer slechts één besturingssysteem aanwezig, zoals Windows, Linux of Mac OS X. Er kunnen meerdere besturingssystemen op een computer geïnstalleerd worden, maar dan kan er maar één besturingssysteem tegelijkertijd opgestart worden.
Er zijn echter verschillende softwareoplossingen beschikbaar waarbinnen een tweede besturingssysteem opgestart kan worden. Het besturingssysteem dat binnen zo'n programma draait kan niet zomaar gebruikmaken van bijvoorbeeld de harde schijf of het toetsenbord, want dat is al in gebruik door het hoofdbesturingssysteem. Maar het programma spiegelt als het ware een denkbeeldige (virtuele) computer voor, met een virtuele harde schijf en een virtueel toetsenbord etc.
Omdat zo'n programma zich voordoet als een virtuele computer, heet de methode 'virtualisatie'. Het is mogelijk om meerdere virtuele computers te maken en zo meerdere gastbesturingssystemen op één computer tegelijkertijd te laten werken.
    Het hoofdbesturingssysteem wordt de 'host' genoemd.
    Het gastbesturingssysteem wordt de 'guest' genoemd.
Deze methode bestond al enige tijd, maar werd nog niet veel toegepast omdat het guest-besturingssysteem vaak erg traag werkte. Vanaf ongeveer 2004 kwamen er echter nieuwe processors met speciale mogelijkheden voor virtualisatie, waardoor het guest-besturingssysteem nauwelijks vertraagd wordt.
Virtuele machines bestaan reeds sinds de jaren 1960, op IBM's S/360-computer en sinds de jaren 1980 waren die al erg performant.

## Geschiedenis

Virtuele machines bestaan sinds ongeveer 1967 toen IBM CP67 maakte.
Dat was in de beginperiode van IBM's S/360-mainframemachine (die machine evolueerde naar wat nu een IBM z Series is). Inherent aan virtuele machines was ook de uitvinding van het virtueel geheugen, het geheugen van deze virtuele machines is enkel virtueel. CP (Control Program) werd indertijd al soms hypervisor genoemd, tegenwoordig een ingeburgerde term. CP maakt virtuele machines, in zo'n virtuele machine kon je eender welk operating systeem draaien dat gemaakt was voor S/360. Maar er kwam ook CMS, een lichtgewicht besturingssysteem dat enkel onder CP draait, vaak voor personal computing. Een CMS-virtuele machine was een soort "pc avant la lettre".
Met de komst van het S/370-systeem (de opvolger van S/370 rond 1970) werd CP67+CMS algemener beschikbaar, gekend als VM/370. VM is dus helemaal niets nieuw, en bestaat al meer dan 50 jaar. VM/370 evolueerde naar VM/SP(1980), VM/XA(1984), VM/ESA(1995) en z/VM(2001). Sinds de jaren 2000 wordt z/VM niet veel meer gebruikt voor personal computing maar voornamelijk als host voor Linux op z.
In een virtuele machine kan je opnieuw VM opstarten, dat is dan "VM onder VM". De overhead wordt telkens wel wat groter. Op een z Series is de hardware sinds ongeveer 2010 voorzien op twee lagen; de eerste laag wordt gebruikt door PR/SM, een hardwareversie van VM. z/VM opstarten onder z/VM maakt dus eigenlijk drie lagen, wat nog naar behoren werkt, ten koste van wat extra CPU-verbruik. VM onder VM wordt doorgaans gebruikt om VM te testen bij de installatie van bijvoorbeeld nieuwe versies.

### Werking van VM

Het basisprincipe van VM was heel eenvoudig: een S/360 (en opvolgers) kent twee soorten instructies: problem-state en supervisor-state. De eerste soort instructies wordt gebruikt door toepassingen (bijvoorbeeld om getallen op te tellen); de tweede soort wordt gebruikt door het besturingssysteem "de supervisor" (bijvoorbeeld om gegevens naar een schijf te schrijven). De supervisor maakt dat de verschillende toepassingsprogramma's elkaar niet in de weg lopen. Als een toepassingsprogramma een supervisor-state-instructie gebruikt, wordt het onderbroken ("program check") en krijgt de supervisor de besturing. Klassiek zal de supervisor het programma afbreken en een foutbericht tonen. Toepassingsprogramma's moeten gebruik maken van de SVC-instructie als ze hulp nodig hebben van de supervisor (bijvoorbeeld om in een bestand op schijf te schrijven). In een VM-systeem draait enkel het control program in supervisor state. Een besturingssysteem in een virtuele machine gebruikt ook supervisor-state-instructies, maar omdat dat hardwaregewijs in problem state draait, signaleert de hardware een program check aan het control program, CP. CP houdt voor virtuele machines bij of ze virtueel gezien in supervisor state of problem state zitten. Komt de privileged instructie uit virtuele supervisor state, dan zal CP die instructie simuleren voor die virtuele machine; stond die in virtuele problem state, dan zal CP een program check simuleren aan het besturingssysteem van die virtuele machine.
Elke supervisor-state-instructie onderscheppen en aan CP doorgeven geeft overhead. Daarom werden al in de s/370-machines "hardware VM assists" gemaakt die ervoor zorgden dat CP minder moest ingrijpen. In de XA-architectuur (1984) werd de notie "virtuele machine" helemaal in de architectuur opgenomen: Interpretive Execution; CP moet dan minder vaak ingrijpen.
Doordat "foute" instructies een program check geven, was VM ook uitermate geschikt om nieuwe hardware te ontwikkelen. Een program check komt immers bij CP binnen. Besturingssystemen, zoals MVS/XA, konden geschreven worden voordat de HW helemaal klaar was met die nieuwe instructies, CP simuleerde ze.

## Toepassingen

Het grote voordeel van virtualisatie is dat de verschillende besturingssystemen van elkaar afgeschermd zijn. Daardoor kan bijvoorbeeld onderzoek naar computervirussen gedaan worden zonder dat de computer (de 'host') wordt geïnfecteerd.
Er kunnen ook kosten bespaard worden, door meerdere besturingssystemen (met bijvoorbeeld elk een webserver) te laten werken op één computer. Doordat de 'guests' van elkaar afgeschermd zijn is het gemakkelijker te beheren en ook dat levert een kostenbesparing op.
Door meerdere guest-besturingssystemen te laten werken op één computer, heeft die computer extra geheugen nodig en een snellere processor. In de praktijk blijkt echter dat het goedkoper is om één duurdere computer (vaak een server) te gebruiken met virtualisatie, dan meerdere goedkopere computers zonder virtualisatie.

## Programma's

Vanaf 2007 zijn er meerdere virtualisatie-programma's die stabiel werken. Virtualisatie-programma's waarbinnen een guest-besturingssysteem kan werken zijn o.a.: z/VM, VMware, Microsoft Virtual PC, Microsoft Hyper-V, Xen, QEMU, KVM (gebaseerd op Qemu), VirtualBox, Parallels, Bochs, Docker (software), etc.

## Vormen van virtualisatie

Virtualisatie komt binnen de automatisering in vele vormen voor. Om een goed beeld te krijgen over wat virtualisatie is, is het belangrijk om te weten in welke vormen virtualisatie mogelijk is. Virtualisatie is onder te verdelen in de volgende categorieën:
Emulation – Dit is software die binnen een besturingssysteem geladen wordt in de vorm van een programma. Dit programma bootst een complete machine na waardoor het mogelijk is om een ongewijzigd gast-OS te starten. Dit OS zal virtueel draaien op een ander hardware platform. Voorbeelden hiervan zijn: Bochs PearPC, PowerPC , Virtual PC en bijvoorbeeld Hercules emulator. Andere vormen zijn ook wel gameconsole-emulatoren. Bij emulatie kunnen allerlei technieken gebruikt worden om de instructies aan de virtuele hardware te vertalen naar de werkelijke hardware van het onderliggende systeem.
Native Virtualization – Bij native virtualization wordt net als bij emulatie een stuk software geladen om een complete machine na te bootsen of te emuleren. Het verschil met emulatie is echter dat bij native virtualisatie de na te bootsen machine of virtual machine hetzelfde soort hardware gebruikt als het onderliggende systeem. Een x86-hardwareplatform zal dus alleen virtual machines kunnen draaien die geschikt zijn voor het x86-platform. De software die wordt geladen om de virtuele machines te faciliteren (ook wel de host genoemd), verdeelt de beschikbaar gestelde systeemresources onder de verschillende virtual machines of guests. Hierdoor wordt de hardware op de host beter benut. Voorbeelden van Native Virtualization zijn: Vmware Server/Workstation/player, Microsoft virtual PC/Server, Vserver Qemu etc.
Full Virtualization – Hierbij worden meerdere virtuele machines (guests) naast elkaar gezet op een set hardware. Dit gebeurt door tussen de hardware en de virtuele machine een softwarematige laag te plaatsen die voor de afhandeling van aanvragen aan de hardware zorgt. Een andere term hiervoor is het plaatsen van de virtual host op het 'bare-metal'. Hierdoor is het mogelijk om hardware-resources efficiënter te benutten dan bij gewone emulatie. Een bekende vorm van deze manier van virtualiseren is VMware ESX server.
Operating system-level Virtualization – Lijkt op full virtualization maar wijkt af in het feit dat bij full virtualization de guests een afwijkend OS kunnen hebben van de host en bij operating system-level virtualization de guests hetzelfde OS hebben als de host. Voorbeelden zijn: Linux-Vserver, Virtuozzo (voor Microsoft Windows of Linux), OpenVZ, Solaris containers en FreeBSD Jails.
Hardware enabled Virtualization – In dit geval wordt de software die de hardware verdeelt tussen de verschillende virtual machines in de hardware zelf geïmplementeerd. Voordeel hiervan is dat virtualisatie nog dieper in het systeem is geïntegreerd en dat het managen van de hardwareresources nog minder systeemcapaciteit kost.
Partial Virtualization – Bij partial virtualization worden voor veel maar niet voor alle hardwarecomponenten meerdere virtuele componenten gecreëerd. Deze componenten of instances zorgen ervoor dat het wel mogelijk is om apparaten te delen. Hierbij is het niet mogelijk meer dan één OS te delen. Vaak wordt dit niet gezien als virtualisatie en het komt veelvuldig voor in besturingssystemen zoals Windows en Linux maar ook op grote mainframesystemen.
Paravirtualization – Bij deze technologie wordt de hardware aangeboden aan de virtual machine door middel van speciale API’s die alleen kunnen worden gebruikt door deze aan te passen aan het guest OS. Op deze manier kan er een keus worden gemaakt welke hardware door de VM’s (virtual machines) worden gedeeld en welke hardware specifiek voor een VM aanwezig is. Deze technologie wordt toegepast bij onder andere: Xen, Trango en Sun logical domains.
Cross-platform Virtualization – Is de vorm van virtualisatie waarbij een applicatie is gecompileerd voor een bepaald OS maar draait op een ander OS, zonder dat daarvoor een emulatie van het andere OS hoeft plaats te vinden. En zonder de source code en of binaire bestanden aan te passen. Denk hierbij aan: Apple Rosetta en Transitive QuickTransit.
Application Virtualization – Bij application virtualization draaien applicaties lokaal op een desktop, gebruikmakend van lokale systeem resources, zonder dat de applicatie op de machine is geïnstalleerd, binnen een aangepaste VM. Daardoor kunnen onder meer updates in applicaties gemakkelijk doorgevoerd worden, zonder dat dit op elk systeem onafhankelijk hoeft te gebeuren. Het is enigszins te vergelijken met terminal-gebaseerde toepassing, met het grote verschil dat bij terminal-services de applicaties op een server draaien en bij application virtualization de applicaties lokaal draaien. Door applicaties virtueel aan te bieden is het mogelijk om applicaties met conflicterende eisen toch op een desktop samen te laten werken. Voorbeelden zijn: Thinstal, Microsoft Application Virtualization, Altiris SVS, Sun Java VM en Trigence.
Resource Virtualization – Is eigenlijk het basisconcept van alle typen virtualisatie in de ICT-branche. Later werd dit uitgebreid naar de virtualisatietermen die we vandaag de dag kennen. Onder resource virtualization wordt ook het virtualiseren van storage- en networking-elementen bedoeld, denk hierbij aan technieken als: SAN- en NAS-systemen, VLANs , VPNs, etc., etc. Ook clusteroplossingen partitioneringen en encapsulatie vallen onder resource virtualization. Resource virtualization is dus eigenlijk de verzamelnaam voor alle types virtualization.