موضوع مقاله: مقایسه نرم‌افزار مجازی‌سازی اپلیکیشن | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # مقایسه نرم‌افزار مجازی‌سازی اپلیکیشن | مقدمه: نرم‌افزار مجازی سازی برنامه‌ها هم به ماشین‌های مجازی و هم به نرم‌افزارهای پیاده‌سازی آن‌ها اشاره دارد. | ## بخش 1: مقایسه نرم‌افزار مجازی‌سازی اپلیکیشن | ماشین‌های مجازی برنامه، معمولاً برای تبدیل کردن بایت کد به کد ماشین برای معماری‌های کامپیوتری و سیستم‌عامل‌های مختلف استفاده می‌شوند. اغلب چندین پیاده‌سازی از یک ماشین مجازی وجود دارد که هر کدام ویژگی‌های خاصی را دارا می‌باشند. جدول زیر خلاصه ای از عناصری از کارآمدی ماشین‌ها مجازی است، و لیستی از تمام توانایی‌های موجود در هر پیاده‌سازی نیست! ماشین مجازی مدل ماشین مدیریت حافظه امنیت کد مفسر کامپیال درجا کامپایل جلوتر از زمان کتابخانه‌های اشتراکی مدل شیء زبان مشترک سیستم نوع پویا ماشین زمان اجرا اندروید (آرت) (ART) ماشین رجیستری (ثباتی)خودکار؟ LLVM ماشین رجیستری (ثباتی)دستی مونو ماشین پشته‌ایخودکار یا دستی پروت ماشین رجیستری (ثباتی)خودکار دالویک ماشین رجیستری (ثباتی)خودکار؟ داده‌ها پردازش دستورالعمل‌ها ماشین مجازی در متغیرهای محلی از یک مدل محاسبات استفاده می‌کنند، که معمولاً یک ماشین پشته‌ای، ، یا است که اغلب به نام ماشین حافظه نامیده می‌شوند. استفاده از این سه ماشین باعث ایجاد انگیزه‌ها مختلف شده‌است و ایجاد برتری‌هایی در ماشین‌های مجازی در مقابل ماشین‌های فیزیکی، مانند سهولت در تفسیر، کامپایل و تأیید برای امنیت می‌شود. مدیریت حافظه در این ماشین‌های مجازی قابل حمل در سطح بالاتری از انتزاع نسبت به ماشین‌های فیزیکی آدرس دهی می‌شود. برخی از ماشین‌های مجازی مانند ماشین جاوا (JVM)، با آدرس‌ها به گونه‌ای درگیر هستند که با اجازه دادن به ماشین مجازی برای ردیابی ارجاع‌های اشاره‌گر، و غیرمجاز ساختن اشاره‌گرها دستی به حافظه، به مدیریت حافظه خودکار ایمن مجهز می‌شوند. | ## بخش 2: مقایسه نرم‌افزار مجازی‌سازی اپلیکیشن | سایر ماشین‌های مجازی، مانند LLVM، بیشتر شبیه ماشین‌های فیزیکی سنتی هستند که امکان استفاده مستقیم و دستکاری نشانگرها را فراهم می‌کنند. زبان متوسط معمولی (CIL) ترکیبی را در این بین ارائه می‌دهد که به هر دو امکان استفاده کنترل‌شده از حافظه را می‌دهد (مانند JVM، که مدیریت خودکار حافظه را امکان‌پذیر می‌کند)، در حالی که حالت «ناامن» را امکان‌پذیر می‌سازد که امکان دستکاری اشاره‌گرها را مستقیماً به روش‌هایی که می‌تواند مرزها تایپ متغیرها را نقض کند، مجوزهایی می‌دهد. امنیت کد، به‌طور کلی به توانایی ماشین مجازی قابل حمل، برای اجرای کد در حالی که تنها مجموعه ای از توانایی‌ها را به کد ارائه می‌دهد، اشاره دارد. به عنوان مثال، ماشین مجازی ممکن است فقط به کد اجازه دسترسی به مجموعه خاصی از توابع یا داده‌ها را بدهد. کنترلرهای یکسانی بر روی پوینترها که مدیریت خودکار حافظه را ممکن می‌سازند و به ماشین مجازی اجازه می‌دهد از دسترسی ایمن به داده‌ها اطمینان حاصل کند، استفاده می‌شود. علت دیگر این کنترلرها این است که اطمینان حاصل شود که یک قطعه کد فقط به عناصر خاصی از حافظه دسترسی دارد و نمی‌تواند ماشین مجازی را دور بزند. سپس سایر مکانیسم‌های امنیتی به عنوان تأیید کننده کد، تأیید کننده پشته و سایر روش‌ها در بالای این کنترلرها قرار می‌گیرند. یک مفسر اجازه می‌دهد تا برنامه‌های ساخته شده از دستورالعمل‌های مجازی بلافاصله بدون کامپایل پرهزینه در دستورالعمل‌های ماشین بومی بارگیری و اجرا شوند. هر ماشین مجازی که می‌تواند اجرا شود را می‌توان تفسیر کرد، بنابراین تعیین ستون در اینجا به این اشاره دارد که آیا طرح شامل مقرراتی برای تفسیر کارآمد (برای استفاده رایج) است یا خیر. | ## بخش 3: مقایسه نرم‌افزار مجازی‌سازی اپلیکیشن | کامپایل درجا (JIT)، به روشی برای کامپایل کردن کد ماشین در کمترین زمان ممکن، معمولاً بلافاصله قبل یا در حین اجرای برنامه گفته می‌شود. چالش JIT بیشتر یک پیاده‌سازی است تا طراحی ماشین مجازی، با این حال، طراحی‌های مدرن کامپایلر شروع به ملاحظاتی برای کارایی برنامه کرده‌اند. با این حال، اغلب از روش‌های پیچیده‌تری استفاده می‌شود که قطعات کد کامپایل‌شده را به بخش‌هایی(fragments) که فقط در زمان اجرا شناخته می‌شوند، اختصاص می‌دهند (به بهینه‌سازی تطبیقی مراجعه کنید). کامپایل جلوتر از زمان (AOT) به روش کلاسیک تری استفاده از پیش کامپایلر برای تولید مجموعه ای از کد ماشین اشاره دارد که در طول زمان اجرای برنامه تغییر نمی‌کنند. از آنجا که کامپایل و بهینه‌سازی تهاجمی می‌تواند زمان بر باشد، یک برنامه از پیش کامپایل شده ممکن است سریعتر از برنامه ای که برای اجرا به JIT تنها متکی است راه اندازی شود. در سیستم عامل‌های مدرن، این به‌طور کلی به معنای استفاده از حافظه مجازی برای به اشتراک گذاشتن صفحات حافظه(Memory Pages) حاوی یک کتابخانه مشترک در میان فرآیندهای مختلف است که از طریق روش‌ها حفاظت از حافظه محافظت می‌شوند. جالب است که روش‌های تهاجمی JIT مانند بهینه‌سازی تطبیقی اغلب قطعات کدی را تولید می‌کنند که برای اشتراک‌گذاری در بین فرایندها یا اجرای متوالی برنامه نامناسب هستند، که مستلزم یک معاوضه بین کارایی کد از پیش کامپایل شده و کد مشترک و مزایای کدهای تخصصی تطبیقی است. برای مثال، چندین مفاد طراحی CIL وجود دارد تا امکان کتابخانه‌های مشترک کارآمد را فراهم کند، احتمالاً به قیمت کد JIT تخصصی تر. مقایسه پیاده‌سازی‌ها ماشین مجازی برنامه‌ها علاوه بر ماشین‌های مجازی قابل حمل که در بالا توضیح داده شد، ماشین‌های مجازی اغلب به‌عنوان یک مدل اجرایی برای زبان‌های برنامه‌نویسی جداگانه، معمولاً توسط یک مفسر استفاده می‌شوند. | ## جمع‌بندی | این جدول پیاده‌سازی‌های ماشین مجازی خاص، هم ماشین‌های مجازی قابل حمل بالا و هم ماشین‌های مجازی به زبان اسکریپت را فهرست می‌کند.