Virtuální stroj
Virtuální stroj je v informatice software, který vytváří virtualizované prostředí mezi platformou počítače a operačním systémem, ve kterém koncový uživatel může provozovat software na abstraktním stroji.
Definice
Termín virtuální stroj má několik odlišných významů:
Hardwarový virtuální stroj
Původní význam pro virtuální stroj, někdy nazývaný též hardwarový virtuální stroj, označuje několik jednotlivých totožných pracovních prostředí na jediném počítači, z nichž na každém běží operační systém. Díky tomu může být aplikace psaná pro jeden OS používána na stroji, na kterém běží jiný OS, nebo zajišťuje vykonání sandboxu, který poskytuje větší úroveň izolace mezi procesy, než je dosaženo při vykonávání několika procesů najednou (multitasking), na stejném OS. Jedním využitím může být také poskytnutí iluze mnoha uživatelům, že používají celý počítač, který je jejich „soukromým“ strojem, izolovaným od ostatních uživatelů, přestože všichni používají jeden fyzický stroj. Další výhodou může být to, že start (bootování) a restart virtuálního počítače může být mnohem rychlejší, než u fyzického stroje, protože mohou být přeskočeny úkoly jako například inicializace hardwaru.
Podobný software je často označován termíny jako virtualizace a virtuální servery. Hostitelský software, který poskytuje tuto schopnost je často označovaný jako hypervisor nebo virtuální strojový monitor (virtual machine monitor).
Softwarové virtualizace mohou být prováděny ve třech hlavních úrovních:
- Emulace, plná systémová simulace nebo „plná virtualizace s dynamickým přestavením (recompilation)“ — virtuální stroj simuluje kompletní hardware, dovolující provoz nemodifikovaného OS na úplně jiném procesoru.
- Paravirtualizace — virtuální stroj nesimuluje hardware, ale místo toho nabídne speciální rozhraní API, které vyžaduje modifikace OS.
- Nativní virtualizace a „plná virtualizace“ — virtuální stroj jen částečně simuluje dost hardwaru, aby mohl nemodifikovaný OS běžet samostatně, ale hostitelský OS musí být určený pro stejný druh procesoru. Pojem nativní virtualizace se někdy používá ke zdůraznění, že je využita hardwarová podpora pro virtualizaci (tzv. virtualizační technologie).
Aplikační virtuální stroj
Dalším významem termínu virtuální stroj je počítačový software, který izoluje aplikace používané uživatelem na počítači. Protože verze virtuálního stroje jsou psány pro různé počítačové platformy, jakákoliv aplikace psaná pro virtuální stroj může být provozována na kterékoli z platforem, místo toho, aby se musely vytvářet oddělené verze aplikace pro každý počítač a operační systém. Aplikace běžící na počítači používá interpret nebo Just in time kompilaci. Jeden z nejlepších známých příkladů aplikace virtuálního stroje je Java Virtual Machine od firmy Sun Microsystem.
Virtuální prostředí
Virtuální prostředí (jinak uváděné jako virtuální soukromý server) je jiný druh virtuálního stroje. Ve skutečnosti, to je virtualizované prostředí pro běh programů na úrovni uživatele (tj. ne jádra operačního systému a ovladače, ale aplikace). Virtuální prostředí jsou vytvořena použitím softwaru zavádějícího virtualizaci na úrovni operačního systému, jako například Virtuozzo, FreeBSD Jails, Linux-VServer, Solaris Containers, chroot jail a OpenVZ.
Sdružování strojů
Méně běžný význam tohoto termínu je počítačový cluster, což je mnoho počítačů sdružených do velkého a výkonnějšího virtuálního stroje. V tomto případě software vytváří jednotné prostředí rozprostřené přes více počítačů, takže se koncovému uživateli jeví, jako by používal počítač jediný.
PVM (Parallel Virtual Machine) a MPI (Message Passing Interface) jsou dvě běžné sady programů, které dovolí propojit různorodou skupinu počítačů s Unixem a/nebo Windows do sítě, aby byly použitelné jako jeden velký paralelní počítač. Velké výpočetní problémy tak mohou být řešeny cenově efektivněji použitím výkonu a paměti spojených počítačů než použitím tradičního superpočítače.
Operační systém Plan9 od laboratoří Bell používá tento přístup.
Firma Boston Circuits vyrobila procesor gCore (grid-on-chip) obsahující 16 jader ARC 750D a modul Time-machine využívající principy virtuálního stroje.
Techniky
Emulace hardwaru, na kterém běží virtuální stroj (native execution)
Tento přístup se popisuje jako plná virtualizace hardwaru a může být implementována hypervizorem typu 1 nebo typu 2 (hypervizor typu 1 běží přímo na hardwaru, hypervizor typu 2 spouští další operační systém). Každý virtuální stroj může spustit libovolný operační systém, který podporuje hardware pod hypervizorem. Uživatel tedy může spustit dva nebo více různých „hostovaných“ operačních systémů (angl. guests) současně v oddělených „soukromých“ virtuálních počítačích.
První systém používající tento přístup byl CP-40 od IBM, první (1967) verze CP/CMS (1967–1972) a předchůdce rodiny VM (od 1972). Za použití architektury virtuálního stroje většina uživatelů spouštěla poměrně jednoduchý interaktivní jednouživatelský operační systém CMS jako hosta nad programem řídícím virtuální stroj VM-CP. Tento koncept udržel návrh CMS jednoduchý, jako by běžel samostatně, zatímco řídící program tiše poskytoval multitasking a správu zdrojů. Kromě CMS uživatelé mohli spouštět jakýkoliv operační systém od IBM (např. MVS nebo z/OS). Současná verze VM se nazývá z/VM a je používána na mainframech pro správu stovek nebo tisíců virtuálních strojů. Některé instalace používají Linux pro zSeries pro běh webových serverů, kde Linux běží jako operační systém v mnoha virtuálních strojích.
Plná virtualizace je částečné nápomocna při vývoji operačních systémů, kdy nový experimentální kód může běžet ve stejném čase jako jeho starší stabilnější verze. Každý v jiném virtuálním stroji. (Tento proces může být dokonce rekurzivní: IBM ladila nové verze svých operačních systémů pro virtuální stroje, VM, ve virtuálním stroji běžícím na starší verzi VM, a dokonce používala tuto techniku na simulaci nového hardwaru.)
Architektura procesorů x86 jak je použita v moderních PC nesplňuje Popekovy a Goldbergovy virtualizační požadavky. Navíc chybí režim běhu, ve kterém jsou všechny citlivé instrukce zachyceny, což znemožňuje virtualizaci na úrovni instrukcí.
Navzdory těmto omezením řada softwarových balíků zvládla virtualizaci na x86 architektuře, i když dynamická rekompilace privilegovaného kódu (první implementace pochází od VMware) výkonnostně trpí režií v porovnání s virtuálními stroji běžícími na nativně virtualizovaných architekturách, jako je BM System/370 nebo Motorola MC68020. V současnosti mezi další balíky zvládající virtualizaci na x86 patří Virtual PC, VirtualBox, Parallels Workstation a Virtual Iron.
Na druhou stranu plex86 může spouštět jen speciálně upravený Linux na Linuxu. Neemuluje procesor, ale používá bochs na emulaci zařízení mateřské desky.
Intel a AMD přidaly do svých x86 procesorů funkcionalitu potřebnou pro hardwarovou virtualizaci.
Emulace jiného hardwaru nebo umělého systému
Virtuální stroje také mohou vykonávat funkci emulátoru, čímž umožňují běh aplikací nebo operačních systémů na hardwaru, pro který nebyly napsány.
Některé virtuální stroje emulují jen hardware, pro který existuje podrobná specifikace. Například:
- Prvním z nich byla specifikace stroje p-kódu, která umožňuje programátorům psát programy v Pascalu tak, že poběží na jakémkoliv počítači, na kterém bude spuštěn zvláštní virtuální stroj implementující tuto specifikaci.
- Specifikace Java Virtual Machine.
- Virtuální stroj Common Language Runtime, který je srdcem .NET iniciativy.
- Open Firmware umožňující dodatečně připojitelný hardware, který zahrnuje diagnostiku pro POST, konfigurační kód a ovladače zařízení, které budou fungovat na každém druhu CPU.
Tato technika umožňuje odlišným počítačům spouštět programy napsané podle dané specifikace. Pouze virtuální stroj je nutné napsat pro každý typ počítače zvlášť.
Virtualizace na úrovni operačního systému
Jedná se o techniku virtualizace serverů na úrovni jádra operačního systému. Může být na ni pohlíženo jako na jistý druh rozdělení jednoho fyzického serveru do více menších částí (tzv. virtuálních prostředí (VE), virtuálních soukromých serverů (VPS), hostů (guests), zón apod.). Z pohledu uživatele každá část vypadá a chová se jako samostatný server.
Podpůrná infrastruktura v operačním systému má malou režii, což napomáhá maximálnímu využití zdrojů serveru. Tato technika tedy umožňuje běh stovek virtuálních soukromých serverů na jednom serveru fyzickém. Naproti tomu techniky jako virtualizace (např. VMware) a paravirtualizace (např. Xen nebo UML) nemohou dosáhnout takového stupně hustoty, protože v každém virtuálním systému musí běžet samostatné jádro. Na druhou stranu virtualizace na úrovni OS neumožňuje běh různých operačních systémů (tj. jiných jader), ačkoliv knihovny a distribuce se lišit mohou.
Virtuální počítač ve vzdělávání
Virtuální počítače jsou využívány taktéž ve vzdělávání. Např. není dost dobře možné, v běžně využívané učebně, učit studenty hromadně instalovat software či provádět jeho úpravy. V případě, že bychom chtěli studenty naučit instalovat libovolný software, a stejná výuka by probíhala v několika paralelních skupinách po sobě, bylo by nutné provést vždy po výuce jeho odinstalaci, jinak by nebylo možné učit software znovu instalovat. Tento postup by byl časově velmi náročný a kladl na učitele nemalou zátěž.
Seznam hardwaru podporujícího virtuální stroje
Seznam softwaru pro správu virtuálních strojů
Aplikační virtuální stroje
Hardwarové virtuální stroje
- Bochs
- KVM
- QEMU
- User-mode Linux
- Microsoft Virtual PC
- Microsoft Virtual Server
- VirtualBox
- VMware ESX Server
- VMware Fusion
- VMware Server
- VMware Workstation
- VMware Player
- Windows Sandbox
- Xen