حساب کاربری
​
زمان تقریبی مطالعه: 8 دقیقه
لینک کوتاه

مقایسه نرم‌افزار مجازی‌سازی اپلیکیشن

نرم‌افزار مجازی سازی برنامه‌ها هم به ماشین‌های مجازی و هم به نرم‌افزارهای پیاده‌سازی آن‌ها اشاره دارد. ماشین‌های مجازی برنامه، معمولاً برای تبدیل کردن بایت کد به کد ماشین برای معماری‌های کامپیوتری و سیستم‌عامل‌های مختلف استفاده می‌شوند. برنامه معمولاً با استفاده از مفسر یا کامپایل درجا (JIT) روی رایانه اجرا می‌شود. اغلب چندین پیاده‌سازی از یک ماشین مجازی وجود دارد که هر کدام ویژگی‌های خاصی را دارا می‌باشند.

فهرست

  • ۱ مقایسه ماشین‌های مجازی
  • ۲ مقایسه پیاده‌سازی‌ها ماشین مجازی برنامه‌ها
  • ۳ جستارهای وابسته
  • ۴ منابع
  • ۵ منابع

مقایسه ماشین‌های مجازی

ماشین‌ها مجازی برای جاوا اسکریپت گنجانده نشده‌است. فهرست موتورهای ECMAScript را برای پیدا کردن آنها ببینید.

جدول زیر خلاصه ای از عناصری از کارآمدی ماشین‌ها مجازی است، و لیستی از تمام توانایی‌های موجود در هر پیاده‌سازی نیست!

ماشین مجازی مدل ماشین مدیریت حافظه امنیت کد مفسر کامپیال درجا کامپایل جلوتر از زمان کتابخانه‌های اشتراکی مدل شیء زبان مشترک سیستم نوع پویا
ماشین زمان اجرا اندروید (آرت) (ART) ماشین رجیستری (ثباتی) خودکار بله بله بله بله ؟ بله بله
زمان اجرا زبان مشترک (CLR) ماشین پشته‌ای خودکار یا دستی بله بله بله بله بله بله بله
دیس (اینفرنو) ماشین رچیستری (ثباتی) خودکار بله بله بله بله بله بله بله
DotGNU

(.Net قابل حمل)

ماشین پشته‌ای خودکار یا دستی بله بله بله بله بله بله خیر
ماشین مجازی جاوا (JVM) ماشین پشته‌ای خودکار بله بله بله بله بله بله بله
JikesRVM ماشین پشته‌ای خودکار بله بله بله بله ؟ بله بله
LLVM ماشین رجیستری (ثباتی) دستی خیر بله بله بله بله بله خیر
مونو ماشین پشته‌ای خودکار یا دستی بله بله بله بله بله بله بله
پروت ماشین رجیستری (ثباتی) خودکار خیر بله خیربله بله بله بله
دالویک ماشین رجیستری (ثباتی) خودکار بله بله بله خیر ؟ خیر خیر
اسکوییک ماشین پشته‌ای خودکار خیر بله بله خیر بله خیر بله
BEAM (ارلنگ) ماشین رجیستری (ثباتی) خودکار ؟ بله بله بله بله بله بله
MoarVM ماشین رجیستری (ثباتی) خودکار ؟ بله بله بله بله بله بله

داده‌ها پردازش دستورالعمل‌ها ماشین مجازی در متغیرهای محلی از یک مدل محاسبات استفاده می‌کنند، که معمولاً یک ماشین پشته‌ای، ماشین ریجیستری (ثباتی)، یا ماشین دسترسی تصادفی(RAMachine) است که اغلب به نام ماشین حافظه نامیده می‌شوند. استفاده از این سه ماشین باعث ایجاد انگیزه‌ها مختلف شده‌است و ایجاد برتری‌هایی در ماشین‌های مجازی در مقابل ماشین‌های فیزیکی، مانند سهولت در تفسیر، کامپایل و تأیید برای امنیت می‌شود.

مدیریت حافظه در این ماشین‌های مجازی قابل حمل در سطح بالاتری از انتزاع نسبت به ماشین‌های فیزیکی آدرس دهی می‌شود. برخی از ماشین‌های مجازی مانند ماشین جاوا (JVM)، با آدرس‌ها به گونه‌ای درگیر هستند که با اجازه دادن به ماشین مجازی برای ردیابی ارجاع‌های اشاره‌گر، و غیرمجاز ساختن اشاره‌گرها دستی به حافظه، به مدیریت حافظه خودکار ایمن مجهز می‌شوند. سایر ماشین‌های مجازی، مانند LLVM، بیشتر شبیه ماشین‌های فیزیکی سنتی هستند که امکان استفاده مستقیم و دستکاری نشانگرها را فراهم می‌کنند. زبان متوسط معمولی (CIL) ترکیبی را در این بین ارائه می‌دهد که به هر دو امکان استفاده کنترل‌شده از حافظه را می‌دهد (مانند JVM، که مدیریت خودکار حافظه را امکان‌پذیر می‌کند)، در حالی که حالت «ناامن» را امکان‌پذیر می‌سازد که امکان دستکاری اشاره‌گرها را مستقیماً به روش‌هایی که می‌تواند مرزها تایپ متغیرها را نقض کند، مجوزهایی می‌دهد.

امنیت کد، به‌طور کلی به توانایی ماشین مجازی قابل حمل، برای اجرای کد در حالی که تنها مجموعه ای از توانایی‌ها را به کد ارائه می‌دهد، اشاره دارد. به عنوان مثال، ماشین مجازی ممکن است فقط به کد اجازه دسترسی به مجموعه خاصی از توابع یا داده‌ها را بدهد. کنترلرهای یکسانی بر روی پوینترها که مدیریت خودکار حافظه را ممکن می‌سازند و به ماشین مجازی اجازه می‌دهد از دسترسی ایمن به داده‌ها اطمینان حاصل کند، استفاده می‌شود. علت دیگر این کنترلرها این است که اطمینان حاصل شود که یک قطعه کد فقط به عناصر خاصی از حافظه دسترسی دارد و نمی‌تواند ماشین مجازی را دور بزند. سپس سایر مکانیسم‌های امنیتی به عنوان تأیید کننده کد، تأیید کننده پشته و سایر روش‌ها در بالای این کنترلرها قرار می‌گیرند.

یک مفسر اجازه می‌دهد تا برنامه‌های ساخته شده از دستورالعمل‌های مجازی بلافاصله بدون کامپایل پرهزینه در دستورالعمل‌های ماشین بومی بارگیری و اجرا شوند. هر ماشین مجازی که می‌تواند اجرا شود را می‌توان تفسیر کرد، بنابراین تعیین ستون در اینجا به این اشاره دارد که آیا طرح شامل مقرراتی برای تفسیر کارآمد (برای استفاده رایج) است یا خیر.

کامپایل درجا (JIT)، به روشی برای کامپایل کردن کد ماشین در کمترین زمان ممکن، معمولاً بلافاصله قبل یا در حین اجرای برنامه گفته می‌شود. چالش JIT بیشتر یک پیاده‌سازی است تا طراحی ماشین مجازی، با این حال، طراحی‌های مدرن کامپایلر شروع به ملاحظاتی برای کارایی برنامه کرده‌اند. ساده‌ترین روش JIT مانند کامپایل برنامه در یک کامپایلر آفلاین است. با این حال، اغلب از روش‌های پیچیده‌تری استفاده می‌شود که قطعات کد کامپایل‌شده را به بخش‌هایی(fragments) که فقط در زمان اجرا شناخته می‌شوند، اختصاص می‌دهند (به بهینه‌سازی تطبیقی مراجعه کنید).

کامپایل جلوتر از زمان (AOT) به روش کلاسیک تری استفاده از پیش کامپایلر برای تولید مجموعه ای از کد ماشین اشاره دارد که در طول زمان اجرای برنامه تغییر نمی‌کنند. از آنجا که کامپایل و بهینه‌سازی تهاجمی می‌تواند زمان بر باشد، یک برنامه از پیش کامپایل شده ممکن است سریعتر از برنامه ای که برای اجرا به JIT تنها متکی است راه اندازی شود. پیاده‌سازی JVM این هزینه راه‌اندازی را با تفسیر اولیه برای سرعت بخشیدن به زمان راه‌اندازی کاهش داده‌است تا زمانی که قطعات(fragments) کد ماشین توسط JIT تولید شوند.

کتابخانه‌های اشتراکی(Shared Library)توانایی ای برای استفاده مجدد از بخش‌های کد ماشین در چندین برنامه در حال اجرا هستند. در سیستم عامل‌های مدرن، این به‌طور کلی به معنای استفاده از حافظه مجازی برای به اشتراک گذاشتن صفحات حافظه(Memory Pages) حاوی یک کتابخانه مشترک در میان فرآیندهای مختلف است که از طریق روش‌ها حفاظت از حافظه محافظت می‌شوند. جالب است که روش‌های تهاجمی JIT مانند بهینه‌سازی تطبیقی اغلب قطعات کدی را تولید می‌کنند که برای اشتراک‌گذاری در بین فرایندها یا اجرای متوالی برنامه نامناسب هستند، که مستلزم یک معاوضه بین کارایی کد از پیش کامپایل شده و کد مشترک و مزایای کدهای تخصصی تطبیقی است. برای مثال، چندین مفاد طراحی CIL وجود دارد تا امکان کتابخانه‌های مشترک کارآمد را فراهم کند، احتمالاً به قیمت کد JIT تخصصی تر. پیاده‌سازی JVM در OS X از یک آرشیو مشترک جاوا برای ارائه برخی از مزایای کتابخانه‌های مشترک استفاده می‌کند.

مقایسه پیاده‌سازی‌ها ماشین مجازی برنامه‌ها

علاوه بر ماشین‌های مجازی قابل حمل که در بالا توضیح داده شد، ماشین‌های مجازی اغلب به‌عنوان یک مدل اجرایی برای زبان‌های برنامه‌نویسی جداگانه، معمولاً توسط یک مفسر استفاده می‌شوند. این جدول پیاده‌سازی‌های ماشین مجازی خاص، هم ماشین‌های مجازی قابل حمل بالا و هم ماشین‌های مجازی به زبان اسکریپت را فهرست می‌کند.

ماشین مجازی زبان زبان پیاده‌سازی کامپایل درجا مفسر
زمان اجرا زبان مشترک (CLR) C#, C++/CLI, F#, VB.NET سی ++ و سی شارپ بله خیر
فلش پلیر ActionScript, SWF سی ++ بله بله
Dis (Inferno) Limbo سی بله بله
DotGNU-Portable.NET زبان‌ها CLR بله خیر
Forth Forth فورث و اسمبلر فورث نه بله
Glulx Inform 6و Inform 7 چندین مدل پیاده‌سازی نه بله
HHVM PHP, Hack سی ++, OCaml بله بله
Icon Icon سی نه بله
JVM Java, Kotlin, Jython, Groovy, JRuby, C, C++, Clojure, Scala ,.. سی و سی ++ و جاوا بله بله
LLVM C, C++, Kotlin, Objective-C, Swift, Ada, Fortran, Rust سی ++ بله بله
Lua Lua سی LuaJIT بله
MMIX MMIXAL
Mono زبان‌ها CLR سی و سی شارپ بله بله
NekoVM Neko و Haxe سی فقط x86 بله
Oz Oz, Alice
O-code machine BCPL
p-code machine Pascal
Parrot Perl 5, Raku, NQP-rx, PIR, PASM, PBC, BASIC, bc, C99, ECMAScript, Lisp, Lua, m4, Tcl, WMLScript, XML سی و پرل بله بله
Perl virtual machine Perl سی و پرل خیر بله
CPython Python سی فقط Psyco بله
PyPy Python پایتون بله بله
Rubinius Ruby سی ++ و روبی بله بله
Silverlight C#, VB.NET سی ++ بله بله
ScummVM Scumm
SECD ISWIM, Lispkit Lisp
Squirrel Squirrel سی ++ Squirrel_JIT بله
Smalltalk Smalltalk
SQLite SQLite opcodes
Squeak Squeak Smalltalk Smalltalk/Slang بله بله
SWI-Prolog Prolog: SWI-Prolog, YAP سی و SWI-Prolog خیر بله
TraceMonkey JavaScript سی ++ بله خیر
TrueType TrueType سی (عموماً) خیر بله
Valgrind کد ماشینx86 و x86-64 سی
VisualWorks Smalltalk سی بله خیر
Vx32 virtual machine کد ماشینx86 بله خیر
Waba
Yet Another Ruby VM (YARV) Ruby سی بله بله
Z-machine Z-Code
Zend Engine PHP سی خیر بله

جستارهای وابسته

  • مجازی سازی اپلیکیشن
  • الزام‌آور زبان
  • رابط عملکرد خارجی
  • فراخوان کنوانسیون
  • دستکاری نام
  • رابط برنامه‌نویسی برنامه (API)
  • رابط باینری برنامه (ABI)
  • مقایسه نرم‌افزار مجازی سازی پلت فرم
  • لیست موتورهای ECMAScript
  • WebAssembly

منابع

https://en.wikipedia.org/wiki/Comparison_of_application_virtualization_software

منابع

  1. ↑ «The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 292». jcp.org. دریافت‌شده در ۲۰۲۱-۱۲-۱۲.
  2. ↑ «JITRewrite – Parrot». trac.parrot.org. دریافت‌شده در ۲۰۲۱-۱۲-۱۲.
  3. ↑ Apple docs on OS X use of Java Shared Archive
آخرین نظرات
کلیه حقوق این تارنما متعلق به فرا دانشنامه ویکی بین است.