Virtualizace

Virtualizace je v informatice označení postupů a technik, které umožňují v počítači přistupovat k dostupným zdrojům jiným způsobem, než jakým fyzicky existují, jsou propojeny atd. Virtualizované prostředí může být mnohem snáze přizpůsobeno potřebám uživatelů, snáze se používat, případně před uživateli zakrývat pro ně nepodstatné detaily (jako např. rozmístění hardwarových prostředků). Virtualizovat lze na různých úrovních, od celého počítače (tzv. virtuální stroj), po jeho jednotlivé hardwarové komponenty (např. virtuální procesory, virtuální paměť atd.), případně pouze softwarové prostředí (virtualizace operačního systému).

Virtualizace platformy
Původní význam termínu virtualizace, pocházející z 60. let 20. století, je vytváření virtuálních strojů za pomoci kombinace hardwaru a softwaru. Pro lepší srozumitelnost toto budeme nazývat virtualizací platformy. Pojem virtuální stroj zjevně pochází od pokusného stránkovacího mechanismu systému IBM M44/44X. Zakládání a správa virtuálních strojů byla v počátcích CP-40 také označována jako zakládaní a správa pseudostrojů a později jako virtualizace serverů. Od té doby získal termín virtualizace a virtuální stroj další významy.

Virtualizace platformy je prováděna na dané hardwarové platformě pomocí softwaru hostitele (řídící program), který vytváří simulované prostředí počítače (virtuální stroj) pro hostovaný software. Software hosta, což často bývá celý operační systém, běží, jako by byl nainstalován na samostatné hardwarové platformě. Typicky je simulováno více takových virtuálních strojů na jednom fyzickém stroji. Pro správnou funkci hosta je třeba, aby simulace byla dostatečně robustní, aby podporovala všechna vnější rozhraní hostovaného systému, což (vzhledem k druhu virtualizace) může zahrnovat ovladače hardwaru.

Existuje řada přístupů k virtualizaci platformy. Ty jsou seřazeny níže vzhledem k úplnosti simulace hardwaru (následující pojmy jako takové nejsou univerzálně uznané, ale obecné principy, na nichž stojí, lze nalézt ve většině literatury).

Emulace nebo simulace
Virtuální stroj simuluje celý hardware, dovoluje běh neupraveného OS hosta na zcela odlišném procesoru. Tento přístup je dlouho používán za účelem tvorby softwaru pro procesory, které nejsou fyzicky dostupné. Příklady zahrnují Bochs, PearPC, Microsoft Virtual PC pro PowerPC, QEMU bez akcelerace a emulátor Hercula. Emulace je implementována širokou škálou technik od stavových automatů až pod dynamickou rekompilaci na plně virtualizovaných platformách.
Nativní virtualizace a plná virtualizace
Virtuální stroj simuluje dostatečné množství hardwaru tak, aby umožnil oddělený běh neupraveného OS hosta určeného pro stejný druh CPU. Obvykle je možný souběh více instancí. Tato přístup se objevil v roce 1966 u systému CP-4O a CP[-67]/CMS (předchůdce rodiny VM od IBM). Příklady zahrnují VirtualBox, Virtual Iron, Virtual PC, VMware Workstation, VMware Server (dříve znám jako GSX Server), VMware ESX Server, QEMU, Parallels Desktop, Adeos, Mac-On-Linux, Win4BSD, Win4Lin Pro, Hyper-V a z/VM.
Částečná virtualizace (a virtualizace adresního prostoru)
Virtuální stroj simuluje více instancí mnoha (ale ne všech) prostředí hardwaru, na kterém běží hostitel, především adresního prostoru. Takové prostředí podporuje sdílení zdrojů a izolaci procesů, ale neumí oddělit instance hostovaných OS. Ačkoliv obecně nelze hovořit o virtuálním stroji, jedná se o významný přístup z historického hlediska. Byl použit u systémů CTSS, pokusného IBM M44/44X a zřejmě i u VMS. (Mnoho dalších systému jako Microsoft Windows nebo Linux a systémy ze zbývajících kategorií níže používají tuto techniku.)
Paravirtualizace
Virtuální stroj nemusí nezbytně simulovat hardware, ale místo toho (nebo navíc) nabízí zvláštní API, které může být použito jen z upraveného hostovaného OS. Toto systémové volání hypervizora se nazývá „hypercall“ v Xenu, Parallels Workstation a Enomalism. Volání je implementováno hardwarovou instrukci DIAG („diagnose“) v CMS od IBM pod VM (kde se pojem „hypervizor“ poprvé objevil). Příklady zahrnují Win4lin 9x, logické domény od Sunu a z/VM.
Virtualizace na úrovni operačního systému
Virtualizuje se fyzický server na úrovni OS, což umožňuje běh více izolovaných bezpečných virtuálních serverů na jednom fyzickém serveru. Prostředí hostovaného OS sdílejí jeden OS s hostitelským systémem – tj. stejné jádro OS je použito pro implementaci hostovaného OS. Aplikace běžící v hostovaném prostředí jej však vnímají jako samostatný systém. Mezi příklady patří Linux-VServer, Virtuozzo (pro Linux nebo Windows), OpenVZ, kontejnery Solarisu a FreeBSD Jail.
Aplikační virtualizace
Desktopové nebo serverové aplikace běžící na daném stroji, používají místní zdroje, ale běží ve zvláštním virtuálním stroji. To je rozdíl oproti tradičnímu lokálnímu běhu nativních aplikací, tj. softwaru nainstalovaném přímo na systému. (Srovnejte s instalací softwaru a terminálovými službami.) Taková aplikace běží v malém virtuálním prostředí obsahujícím komponenty nutné ke spuštění – např. položky registrů, soubory, proměnné prostředí, prvky uživatelského rozhraní a globální objekty. Toto virtuální prostředí se chová jako vrstva mezi aplikací a operačním systémem, která zabraňuje konfliktům mezi aplikací a OS nebo mezi aplikacemi vzájemně. Příklady zahrnují Java Virtual Machine od Sunu Softricity, Citrix, VMware, Altiris, Portable Apps a Trigence. (Tento druh virtualizace je zřetelně odlišný od všech předešlých. Dělí je pouze tenká hranice od prostředí virtuálních prostředí jako je Smalltalk, Forth, Tcl, P-kód a další interpretované jazyky.)
Příklady použití virtualizace
Virtuální stroj je obraz počítače, který však existuje jen jako model uvnitř jiného počítače. Programy běžící uvnitř tohoto stroje se chovají, jako by běžely na skutečném počítači, ale přitom nemohou nijak ovlivnit zbytek „vnějšího“ počítače. Virtuální stroje se používají z bezpečnostních důvodů pro běh některých aplikací, aby se tyto aplikace nemohly navzájem žádným způsobem ohrozit, ani ovládnout hostitelský počítač, resp. jeho operační systém. Některé programovací jazyky byly navrženy přímo pro běh ve virtuálním stroji a zpravidla se nepředpokládá, že by v nich napsané programy běžely přímo na hardwaru. Příkladem takových jazyků je Java (viz Java VM) či C# (viz Common Language Infrastructure). Ve virtuálním stroji je možno spustit také nějaký operační systém (často jiný než ten, pod kterým virtuální stroj běží) a uvnitř tohoto operačního systému pak běžným způsobem fungovat.
RAID umožňuje zapojení několika disků, které se navenek tváří jako jediný, přičemž nabízí vyšší rychlost či odolnost proti chybám.
Virtuální paměť je způsob, jakým programy mohou pracovat s větším množstvím paměti než počítač ve skutečnosti obsahuje, odděluje paměť jednotlivých procesů atd.
Díky multitaskingu a threadům může na jednom procesoru běžet více programů zdánlivě současně.
Někdy se jako součást virtualizace chápe také emulace, která umožňuje běh aplikací určených pro jiné hardwarové prostředí (zcela jinou architekturu počítače/procesoru, např. běh programů pro ZX Spectrum na běžném PC s procesorem architektury x86).
Některé virtualizační systémy a emulátory
Platforma x86
Komerční software
Hyper-V - hypervizorově stavěný serverový systém pro x86-64 (32 a 64 bit) systémy.
Citrix Delivery Center - ucelená řada produktů pro přeměnu statických datových center na dynamická „centra poskytování služeb“
Citrix XenServer – platforma podnikové třídy pro správu virtualizovaných aplikací v rámci libovolného počtu serverů datového centra formou agregovaného souhrnu výpočetních zdrojů. XenServer Platinum Edition je prvním a v tuto chvíli jediným řešením na trhu, které řeší virtuální i fyzické servery zároveň, a datové centrum je díky tomu dynamičtější.
Citrix NetScaler – speciální řešení pro poskytování webových aplikací, které dokáže urychlit výkon nejnáročnějších webových aplikací až na pětinásobek, při současném zvýšení zabezpečení a snížení nákladů na webovou infrastrukturu. Kromě zajištění webových aplikací pro tisíce firemních zákazníků se NetScaler používá jako infrastruktura pro většinu celosvětově největších zákaznických portálů, které každodenně odhadem navštíví 75 procent všech uživatelů Internetu.
Citrix XenApp – dříve známý jako Presentation Server je oborový standard pro poskytování aplikací platformy Windows s optimálním výkonem, zabezpečením a úsporou nákladů.
Citrix XenDesktop – komplexní systém virtuální infrastruktury desktopů – VDI (Virtual Desktop Infrastructure).
VMware Workstation - virtuální stroj, pro provoz více OS najednou. V počítačích s procesorem x64 je schopen podporovat obě platformy x86 a x64. Podporuje nejvíce operačních systémů.
VMware GSX Server - virtuální stroj, určený především pro nasazení v serverech. V současné době jej nahradil VMware Server, který je šířen zdarma.
VMware ESX Server - virtuální stroj, určený především pro velké servery a jejich konsolidaci.
Nekomerční software
Citrix XenServer Express Edition - zdarma startovací balíček pro začátky s virtualizací
Citrix XenDesktop Express Edition – zdarma balíček 10 uživatelských licencí zahrnující Desktop Delivery Controller a Virtual Desktop Infrastructure
Bochs – univerzální emulátor platformy x86
KVM (anglicky) - virtualizace x86 hardware v rámci Linux systému
Microsoft Virtual PC 2004 Service Pack 1 - virtuální stroj, pro provoz více OS najednou. Podporuje oficiálně jen operační systémy Microsoft Windows. Je šířen zcela zdarma i ke komerčním účelům.
Microsoft Virtual Server 2005 R2 - virtuální stroj, určený především pro nasazení v serverech. Podporuje oficiálně operační systémy Microsoft Windows a některé distribuce Linuxu. V počítačích s procesorem x64 je schopen podporovat obě platformy x86 a x64. Je šířen zcela zdarma i ke komerčním účelům.
Qemu – o něco rychlejší emulátor x86
VDMSound – virtuální zvuková karta podporující zvuk pro DOSové aplikace běžící pod Microsoft Windows
VirtualBox - virtuální stroj vytvořený firmou InnoTek, vydaný pod licencí GNU GPL.
VMware Player - virtuální stroj, úrčen pouze pro demonstrační účely a pouze pro běh již vytvořených virtuálních strojů ve VMware Workstation. Je šířen zcela zdarma i ke komerčním účelům.
VMware Server - virtuální stroj, nahrazuje VMware GSX Server, určený především pro nasazení v serverech. V počítačích s procesorem x64 je schopen podporovat obě platformy x86 a x64. Je šířen zcela zdarma i ke komerčním účelům.
XEN – virtuální stroj umožňující současný běh více OS na počítači architektury x86 (vyžaduje však specifické úpravy OS nebo procesor s podporou virtualizace).
Další platformy
IBM pSeries - Hardwarova RISC platforma IBM
1964 – emulátor Nintenda 64
PearPC – virtuální stroj umožňující běh operačního systému Mac OS X v Microsoft Windows nebo Linuxu (nad x86).
Qemu – rychlý emulátor několika platforem (x86, ARM, SPARC atd.)
VisualBoyAdvance – emulátor GameboyAdvance
ZSNES – emulátor NES
Zpřístupnění platformy bez virtualizace
Další možnost zpřístupnění platformy představuje reimplementace všech binárních rozhraní zpřístupňované platformy. Ve výsledku díky vzniklé překladové vrstvě (compatibility layer) jsou aplikaci poskytovány stejná rozhraní jako na originální platformě.

Tato myšlenka se často používá k zpřístupnění Windows například z Linuxu. Nejpoužívanějším řešením je software Wine. Protože se nejedná o virtualizaci Windows, není potřeba například nabýt licenci k používání Windows.

Další možností je speciální kompilace, kdy volání služeb původní platformy jsou nahrazeny například voláním emulujících funkcí ze speciální sdílené knihovny apod. Tento postup se hojně využívá při kompilaci softwaru určeného pro Linux pod Windows například s pomocí MinGW. Výsledkem je zvýšení režie (zpomalení, zvýšení paměťových nároků...), často dochází ke snížení stability a v některých případech výsledek kompilace není běhuschopný.

Komerční
Cedega – umožňuje běh moderních her pro Windows na Linuxu (vychází z Wine)
CrossOver – umožňuje běh některých aplikací (např. Microsoft Office) na Linuxu a MacOS (vychází z Wine)
Nekomerční
DOSBox – emulace MS-DOS pro operační systémy Linux a Windows, určený především ke hraní starých her.
DOSEMU – emulace MS-DOS v Linuxu
Wine – umožňuje běh programů pro Windows na Linuxu
Cygwin, MinGW... - prostředky kompilace POSIXových aplikací pro nativní spouštění pod Windows (převedení do Windows API)