Virtuální stroj
Za virtuální stroj je v jednom ze svých významů považován software, který nad nějakou počítačovou platformou vytváří jednotné virtuální prostředí pro běh aplikací.
Virtuální stroj
- skrývá rozdíly mezi různými hardwarovýmí platformami
- definuje sadu instrukcí
- vytváří jednotnou abstraktní vrstvu nad různými operačními systémy
- efektivně překládá virtuální instrukce na skutečné instrukce procesoru
- poskytuje podporu pro vyšší programovací jazyky (např. způsob voláni podprogramů, OOP)
Výhody použiti virtuálního stroje:
- jednodužší vývoj software a jeho připrava pro použití
- společné požadavky vyšších programovacích jazyků stačí implementovat jednou, např.
- podprogramy, objekty, jmenné prostory (namespaces)
- uzávěry (closures) a navazování (continuations)
- správu paměti
- snadnější spolupráce mezi vyššími programovacími jazyky
- způsob volání podprogramů a metod
- reprezentace základnich typů (řetězců, polí, objektů, ...)
- kód s částmi v různých jazycích běží jako jeden program
- možnost nastavit bezpečnostní opatření a kvóty
- např. tenhle program se může připojivat k jiným počítačům v síti, ale nemůže přistupovat k lokálním souborům
- ladění, analýza a optimalizování programů jsou jednodužší
- možnost použít dynamické optimalizace, tj. využit informace, které jsou známý až za běhu programu, ne při jeho psaní
Mezi nejznámější virtuální stroje patří
- JVM (Java Virtual Machine),
- .Net CLR (Common Languages Runtime)
- Parrot
Někdy se za virtuální stroje považuje také interprety jazyků Perl 5, Python nebo Ruby. Ty jsou však úzce svázány se svými programovacímí jazyky a proto toto označní není zcela přesné.
Mnoho virtuálích strojů (JVM, .NET) jsou zásobníkové (stack based). Sečtení čísel 10 a 17 většinou probíhá pomocí tří instukcí takto:
push 10 - ulož 10 na vrchol zásobníku push 17 - ulož 17 na vrchol zásobníku add - sečti dva čísla na vrcholu zásobníku
Druhým typem virtuálních strojů jsou registrové (register based). Mezi ně patří např. virtuální stroj Parrot. Registry jsou očíslované místa v paměti pro ukládání pracovních dat. Sečtení dvou čísel probíhá pomocí jedné instrukce např. takto:
add I5, I1, I0 - do registru I5 ulož součet registrů I1 a I0
To co je u zásobníkového virtuálního stroje popsáno třemi istrukcemi, může být u registrového popsáno jednou. Když je kód interpretován (bez použití JIT), tak je nutné každou virtuální instukci přemapovat na reálnou instrukci procesoru, což vyžaduje práci procesuru navíc. Proto je v tomto vhodnější mít méně instrukcí.
Externí odkazy
- Virtual machine (anglická Wikipedie)
- Inside Virtual Machines, Jonathan Worthington
- The Case for Virtual Register Machines, Brian Davis, Andrew Beatty, Kevin Casey, David Gregg and John Waldron, 12.6.2003, PDF paper