Uygulama sanallaştırma yazılımının karşılaştırılması - Comparison of application virtualization software

Uygulama sanallaştırma yazılımı her iki uygulamayı da ifade eder Sanal makineler ve bunların uygulanmasından sorumlu yazılım. Uygulama sanal makineleri genellikle uygulamaya izin vermek için kullanılır bayt kodu birçok farklı bilgisayar mimarisinde ve işletim sisteminde taşınabilir olarak çalıştırmak için. Uygulama genellikle bilgisayarda bir çevirmen veya tam zamanında derleme (JIT). Genellikle, belirli bir sanal makinenin, her biri farklı bir işlev kümesini kapsayan birkaç uygulaması vardır.

Sanal makinelerin karşılaştırılması

JavaScript makineler dahil değildir. Görmek ECMAScript motorlarının listesi onları bulmak için.

Buradaki tablo, herhangi bir uygulamada mevcut olan yeteneklerin listesini değil, sanal makine tasarımlarının verimli olması amaçlanan öğeleri özetlemektedir.

Sanal makineMakine modeliHafıza yönetimiKod güvenliğiÇevirmenJITAOTPaylaşılan kitaplıklarOrtak dil Nesne ModeliDinamik yazım
Android Çalışma Zamanı (SANAT)Kayıt olotomatikEvetEvetEvetEvet?EvetEvet
Ortak dil çalışması (CLR)yığınotomatik veya manuelEvetEvetEvetEvetEvetEvetEvet
Dis (Cehennem )Kayıt olotomatikEvetEvetEvetEvetEvetEvetEvet
DotGNU Portable.NETyığınotomatik veya manuelEvetEvetEvetEvetEvetEvetHayır
Java sanal makinesi (JVM)yığınotomatikEvetEvetEvetEvetEvetEvetEvet[1]
JikesRVMyığınotomatikEvetEvetEvetEvet?EvetEvet
LLVMKayıt olManuelHayırEvetEvetEvetEvetEvetHayır
Monoyığınotomatik veya manuelEvetEvetEvetEvetEvetEvetEvet
PapağanKayıt olotomatikHayırEvetHayır[2]EvetEvetEvetEvet
DalvikKayıt olotomatikEvetEvetEvetHayır?HayırHayır
GıcırtıyığınotomatikHayırEvetEvetHayırEvetHayırEvet
KİRİŞ (Erlang )Kayıt olotomatik?EvetEvetEvetEvetEvetEvet
MoarVMKayıt olotomatik?EvetEvetEvetEvetEvetEvet

Sanal makine talimatları yerel değişkenlerdeki verileri bir ana hesaplama modeli, tipik olarak bir yığın makinesi, kayıt makinesi veya rastgele erişim makinesi genellikle bellek makinesi olarak adlandırılır. Bu üç yöntemin kullanımı, güvenlik için yorumlama, derleme ve doğrulama kolaylığı gibi sanal makineler ile fiziksel makinelerde farklı ödünleşmelerle motive edilir.

Hafıza yönetimi bu taşınabilir sanal makinelerde, fiziksel makinelere göre daha yüksek bir soyutlama düzeyinde ele alınmaktadır. Popüler gibi bazı sanal makineler Java sanal makineleri (JVM), sanal makinenin işaretçi referanslarını izlemesine izin vererek güvenli otomatik bellek yönetimi gerektirecek şekilde adreslerle ilgilenir ve makine talimatlarının belleğe işaretçileri manuel olarak oluşturmasına izin vermez. LLVM gibi diğer sanal makineler, işaretçilerin doğrudan kullanımına ve manipülasyonuna izin veren geleneksel fiziksel makineler gibidir. Ortak Ara Dil (CIL), hem kontrollü bellek kullanımına (güvenli otomatik bellek yönetimine izin veren JVM gibi) izin veren, hem de tür sınırlarını ve izni ihlal edebilecek şekillerde doğrudan işaretçi manipülasyonuna izin veren 'güvenli olmayan' bir moda izin veren, arada bir hibrit sunar. .

Kod güvenliği genel olarak, taşınabilir sanal makinenin kodu çalıştırırken ona yalnızca önceden belirlenmiş bir yetenek seti sunma yeteneğini ifade eder. Örneğin, sanal makine, kodun yalnızca belirli işlevler veya verilere erişmesine izin verebilir. Otomatik bellek yönetimini mümkün kılan ve sanal makinenin tür güvenli veri erişimini sağlamasına izin veren işaretçiler üzerindeki aynı kontroller, bir kod parçasının belleğin yalnızca belirli öğelerine izin verildiğinden ve sanal makinenin kendisini atlayamayacağından emin olmak için kullanılır. Diğer güvenlik mekanizmaları daha sonra kod doğrulayıcılar, yığın doğrulayıcılar ve diğer yöntemler olarak üstte katmanlanır.

Bir çevirmen sanal talimatlardan oluşan programların, potansiyel olarak maliyetli bir yerel makine talimatlarında derlenmeden hemen yüklenmesine ve çalıştırılmasına izin verir. Çalıştırılabilen herhangi bir sanal makine yorumlanabilir, bu nedenle buradaki sütun gösterimi, tasarımın verimli yorumlamaya yönelik hükümler (ortak kullanım için) içerip içermediğini ifade eder.

Tam zamanında derleme (JIT), yerel talimatları mümkün olan en son zamanda, genellikle programın çalıştırılmasından hemen önce veya çalıştırılırken derleme yöntemini ifade eder. JIT'in zorluğu, sanal makine tasarımından ziyade uygulamayla ilgili bir sorundur, ancak modern tasarımlar verimliliğe yardımcı olmak için dikkate alınmaya başlamıştır. En basit JIT yöntemleri, çevrimdışı bir derleyiciye benzer bir kod parçasına derlenir. Bununla birlikte, derlenmiş kod parçalarını yalnızca çalışma zamanında bilinen parametrelere dönüştüren daha karmaşık yöntemler sıklıkla kullanılır (bkz. Uyarlamalı optimizasyon ).

Zamanın ilerisinde derleme (AOT), programın çalışma süresi boyunca değişmeyen bir dizi yerel talimat oluşturmak için bir ön derleyici kullanmanın daha klasik yöntemini ifade eder. Agresif derleme ve optimizasyon zaman alabileceğinden, önceden derlenmiş bir program, yürütme için tek başına JIT'e dayanan bir programdan daha hızlı başlayabilir. JVM uygulamaları, JIT tarafından yerel kod parçaları oluşturulana kadar başlatma sürelerini hızlandırmak için ilk yorumlama yaparak bu başlangıç ​​maliyetini azaltmıştır.

Paylaşılan kitaplıklar yerel kod segmentlerini birden çok çalışan programda yeniden kullanma olanağı sağlar. Modern işletim sistemlerinde bu genellikle kullanmak anlamına gelir sanal bellek Paylaşılan bir kitaplık içeren bellek sayfalarını, birbirlerinden korunan farklı işlemler arasında paylaşmak için hafıza koruması. Uyarlanabilir optimizasyon gibi agresif JIT yöntemlerinin, önceden derlenmiş ve paylaşılan kodun verimlilikleri ile uyarlamalı olarak özelleştirilmiş kodun avantajları arasında bir değiş tokuş yapılmasını gerektiren, süreçler arasında paylaşıma veya programın art arda çalıştırılmasına genellikle uygun olmayan kod parçaları üretmesi ilginçtir. Örneğin, CIL'in çeşitli tasarım hükümleri, muhtemelen daha özel JIT kodu pahasına, verimli paylaşılan kitaplıklara izin vermek için mevcuttur. JVM uygulaması OS X Java Paylaşılan Arşivi kullanır[3] paylaşılan kitaplıkların bazı avantajlarını sağlamak.

Uygulama sanal makine uygulamalarının karşılaştırılması

Yukarıda açıklanan taşınabilir sanal makinelere ek olarak, sanal makineler genellikle bir yorumlayıcı tarafından bireysel komut dosyası dilleri için bir yürütme modeli olarak kullanılır. Bu tablo, hem yukarıdaki taşınabilir sanal makinelerin hem de komut dosyası dili sanal makinelerinin belirli sanal makine uygulamalarını listeler.

Sanal makineDillerYorumlarÇevirmenJITUygulama diliSLoC
Ortak dil çalışması (CLR)C #, C ++ / CLI, F #, VB.NETbayt kodu CIL; GitHub'da .NET Core Çalışma ZamanıHayırEvetC #, C ++
Adobe Flash Player (diğer adıyla Tamarin )ActionScript, SWF (dosya formatı)etkileşimli web yazma aracı. bayt kodu "ActionScript Bayt Kodu (.abc)" olarak adlandırılırEvetEvetC ++135k (başlangıçta piyasaya sürüldü)
Dis (Cehennem )LimboDis Virtual Machine SpecificationEvetEvetCJIT kemer başına 15k + 2850 + ana işletim sistemi başına 500
DotGNU -Portable.NETCLI dilleri dahil olmak üzere: C #Ortak Dil Çalışma Zamanı klonuHayırEvetC, C #
İleriİleriÖzellikler basitleştirilmiştir, genellikle derleyici, derleyici, metin düzeyinde ve ikili düzeyde yorumlayıcılar, bazen düzenleyici, hata ayıklayıcı ve işletim sistemini içerir. Derleme hızları> 20 SKLOC / S'dir ve daha çok JIT gibi davranır.EvetHayırForth, Forth Assembler2.8K - 5.6K; gelişmiş, profesyonel uygulamalar daha küçüktür.
GlulxBilgilendir 6, Bilgilendir 7, diğerleriEvetHayırÇeşitli uygulamalar mevcuttur
HHVMPHP, HileHack ve PHP ile yazılmış programları çalıştırmak için tasarlanmış açık kaynaklı bir sanal makinedir.EvetEvetC ++, OCaml
SimgeSimgeTemel kaynak kodu hem yorumlayıcı hem de desteklenmeyen bir derleme-C sürümü sağlar. Derleyici ve yorumlayıcı arasında paylaşılan çalışma zamanı kodu, RTT adı verilen bir C varyantında yazılır.EvetHayırC, RTT (C için özel bir ön uç, Icon için temel kaynak ile sağlanır).Toplam ~ 180 bin. (bayt kodu kaynağı: ~ 11k, bayt kodu yorumlayıcı: ~ 46k, iconc: ~ 23k, ortak / başlıklar: ~ 13k, rtt: ~ 15k)
JVMJava, Kotlin, Jython, Harika, JRuby, C, C ++, Clojure, Scala ve diğerleriSun tarafından referans uygulaması; OpenJDK: altında kod GPL  ; Buzlu çay: altında kod ve araçlar GPLEvetEvetJDK, OpenJDK & Buzlu çay normal JIT ile: Java, C, ASM; Buzlu çay "Sıfır" JIT ile: Java, CJVM yaklaşık 6500 bin satırdır; TCK 80 bin test ve yaklaşık 1000 bin satır
LLVMC, C ++, Kotlin, Amaç-C, Swift, Ada, Fortran, ve Pas, paslanmaMSIL, C ve C ++ çıktıları desteklenmektedir. ActionScript Bayt Kodu çıktısı, Adobe Alchemy tarafından desteklenir. bayt kodu "LLVM Bayt Kodu (.bc)" olarak adlandırılır. derleme "LLVM Assembly Dili (* .ll)" olarak adlandırılır.EvetEvetC ++811 bin [4]
LuaLuaEvetLuaJITC13k + 7k LuaJIT
MMIXMMIXAL
MonoCLI dilleri dahil olmak üzere: C #, VB.NET, IronPython, IronRuby, ve diğerleriOrtak Dil Çalışma Zamanı klonuEvetEvetC #, C2332 bin
OzOz, Alice
NekoVMşu anda Neko ve HaxeEvetyalnızca x86C46 bin
O-kod makinesiBCPL
p-kod makinesiPascalUCSD Pascal, Apple II dahil 70'lerin sonlarında yaygın
PapağanPerl 5, Raku, NQP-rx, PIR, PASM, PBC, TEMEL, M.Ö, C99, ECMAScript, Lisp, Lua, m4, Tcl, WMLScript, XML, ve diğerleriEvetEvetC, Perl111k C, 240k Perl
Perl sanal makinePerlişlem kodu ağaç gezginiEvetHayırC, Perl175k C, 9k Perl
CPythonPythonEvetPsycoC387k C, 368k Python, 10k ASM, 31k Psyco
PyPyPythonKendi kendine barındırma Python uygulaması, yeni nesil PsycoEvetEvetPython
RubiniusYakutBaşka bir Ruby uygulaması için sanal makineEvetEvetC ++, Ruby
SilverlightC #, VB.NETUygulamaların tarayıcı içinde korumalı alanda çalışmasına izin veren bir Microsoft .NET Framework Mikro sürümüEvetEvetC ++7MB (başlangıçta yayınlandı)
ScummVMPislikBilgisayar oyun motoru
SECDYÜZERİM, Lispkit Lisp
SincapSincapEvetSquirrel_JITC ++12 bin
SmalltalkSmalltalk
SQLiteSQLite işlem kodlarıSanal veritabanı motoru
GıcırtıGıcırtı SmalltalkKendi kendine barındırma Squeak sanal makinenin gerçeklenmesi. Zengin multimedya desteği.EvetCog ve ExuperySmalltalk / Argo110.000 Smalltalk, ~ 300K C
TraceMonkeyJavaScriptDayalı TamarinHayırEvetC ++173 bin
TrueTypeTrueTypeYazı tipi oluşturma motoruEvetHayırC (tipik olarak)
Valgrindx86 /x86-64 ikili dosyalarBellek erişimlerinin ve sızıntılarının kontrol edilmesi LinuxC467 bin [5]
VisualWorksSmalltalkHayırEvetC
Vx32 sanal makinex86 ikili dosyalarYerel kod için uygulama düzeyinde sanallaştırmaHayırEvet
WabaKüçük cihazlar için sanal makine, benzer Java
Yine Başka Bir Ruby VM (YARV )Yakutİçin referans uygulamasının sanal makinesi Yakut 1.9 ve daha yeni sürümlerEvetEvetC
Z makinesiZ Kodu
Zend MotoruPHPEvetHayırC75 bin

Ayrıca bakınız

Referanslar

  1. ^ "Java Topluluğu Süreci (SM) Programı - JSR'ler: Java Spesifikasyon İstekleri - JSR # 292 ayrıntısı". Jcp.org. Alındı 2013-07-04.
  2. ^ "JITRewrite - Papağan". Trac.parrot.org. Alındı 2013-07-04.
  3. ^ Java Shared Archive'ın OS X kullanımıyla ilgili Apple belgeleri
  4. ^ LLVM Derleyici Altyapısı, ohloh.net, 2011 Kasım 30
  5. ^ Valgrind, ohloh.net, 2011 Kasım 30.