موضوع مقاله: ماشین مجازی | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # ماشین مجازی | مقدمه: این پیاده‌سازی به‌گونه‌ای است که تصور می‌شود یک کامپیوتر واقعی در حال اجرای برنامه‌های ماست. | ## بخش 1: ماشین مجازی | از قابلیت‌های آنها می‌توان به نصب سیستم عامل‌های ویندوزی و لینوکسی به صورت اختصاصی اشاره کرد. استفاده‌های کنونی، ماشین‌های مجازی‌ای را شامل می‌شود که هیچ ارتباط با سخت‌افزار واقعی ندارند. ماشین‌های مجازی، بر اساس استفاده و درجه ارتباط به ماشین واقعی، به دو دسته اصلی تقسیم می‌شوند. یک ماشین مجازی سیستمی یک زیرساخت محاسباتی کامل را فراهم می‌کند که از اجرای یک سیستم‌عامل کامل پشتیبانی می‌کند. در مقابل، یک ماشین مجازی فرایند، برای اجرای یک برنامه واحد طراحی شده، که این به این معناست که صرفاً از یک فرایند خاص پشتیبانی می‌کند. ماشین‌های مجازی می‌توانند فعالیت‌های خاصی را انجام دهند که انجام دادن آنها در محیط میزبان بسیار خطرناک است، مانند دسترسی به داده‌های آلوده به ویروس یا آزمایش سیستم عامل‌ها. از آنجا که ماشین مجازی از بقیه سیستم جدا شده‌است، نرم‌افزار داخل ماشین مجازی نمی‌تواند کامپیوتر میزبان را دستکاری کند. تاریخچه ماشین مجازی سیستمی و ماشین مجازی فرایند به دههٔ ۶۰ میلادی بازمی‌گردند و همچنان درحال توسعه می‌باشند. ماشین‌های مجازی سیستمی از سیستم‌های اشتراک زمانی ایجاد شدند به ویژه که این سیستم‌ها در سیستم اشتراک زمانی سازگار یا CTSS پیاده‌سازی شدند. | ## بخش 2: ماشین مجازی | اشتراک زمانی به کاربرها این اجازه را می‌دهد که از یک کامپیوتر به صورت همزمان استفاده کنند به طوری که به نظر می‌رسد هر برنامه دسترسی کامل به ماشین دارد اما در حقیقت تنها یک برنامه در یک لحظه در حال اجرا می‌باشد به صورتی که سیستم در فاصله‌های زمانی بین برنامه‌ها تعویض انجام می‌دهد که هر بار باعث صرفه جویی و بازیابی حالت می‌شود. این مطلب در قالب ماشین‌های مجازی تکامل یافت به خصوص به وسیلهٔ سیستم‌های تحقیقاتی شرکت IBM مانند سیستم M44/44X که از مجازی سازی جزئی استفاده می‌کرد و CP_40 و SIMMON که از مجازی سازی کامل استفاده می‌کردند و نمونه‌های اولیهٔ هایپروایزرها بودند. اولین معماری ماشین مجازی که به‌طور گسترده در دسترس قرار گرفت CP-67/CMS بود (برای دسترسی به اطلاعات بیشتر به تاریخچه‌ی CP/CMS رجوع کنید). یک تمایز مهم بین استفاده از چند ماشین مجازی بر روی یک سیستم میزبان برای اشتراک زمانی مثلاً در M44/44X و CP_40 و استفاده از یک ماشین مجازی بر روی یک سیستم میزبان برای نمونه سازی مثلاً در SIMMON وجود داشت. برابرسازها که وظیفهٔ شبیه‌سازی سخت‌افزار سیستم‌های قبلی برای سازگاری را دارند به مانند System/360 IBM در سال ۱۹۶۳ به‌وجود آمدند. ماشین‌های مجازی فرایند در ابتدا به عنوان زمینه‌های انتزاعی برای یک زبان میانی استفاده شده به عنوان نمایش میانی یک برنامه به وسیلهٔ یک کامپایلر به وجود آمدند که نمونه‌های اولیه آن به سال ۱۹۶۶ بازمی‌گردند. یک نمونهٔ اولیه در سال ۱۹۶۶ ماشین O_code بود که یک ماشین مجازی است که O_code (کد شیء) خارج شده از جلوبندی کامپایلر بی سی پی ال را اجرا می‌کند. این انتزاعی سازی این اجازه را به کامپایلر می‌داد که به راحتی به یک معماری جدید انتقال یابد و این کار به وسیلهٔ پیاده‌سازی یک عقب بندی جدید که کد شیء موجود را تبدیل به کد ماشین برای ماشین فیزیکی فعلی می‌کرد، انجام می‌شد. این مطلب درحدود سال ۱۹۷۰ به وسیلهٔ پاسکال (زبان برنامه‌نویسی) عمومیت یافت به خصوص در سیستم پاسکال_پی (۱۹۷۳) و کامپایلر پاسکال_اس (۱۹۷۵) که در آن‌ها پی_کد نامیده شد و ماشین حاصل ماشین پی_کد نامیده شد. | ## بخش 3: ماشین مجازی | این مطلب تأثیر گذار بوده‌است و ماشین‌های مجازی از این نظر به‌طور کلی ماشین پی_کد خوانده می‌شوند. پی_کد پاسکال علاوه بر یک زبان میانی بودن، به صورت مستقیم به وسیلهٔ یک مفسر که ماشین مجازی را پیاده‌سازی می‌کند، اجرا می‌شود به خصوص در پاسکال UCSD (1978). یک مثال ابتدایی دیگر SNOBLO4 (1967) می‌باشد که به زبان پیاده‌سازی اسنوبول نوشته شده‌است. SNOBLO4 یک زبان اسمبلی برای یک ماشین مجازی است و پس از آن ماشین‌های فیزیکی را با ترنسپایل کردن اسمبلر محلی به وسیلهٔ اسمبلرهای سطح-بالا مورد هدف قرار داد. با این وجود از آن زمان اسمبلرهای سطح_بالا از رده خارج شده‌اند در نتیجه این روش کمتر تأثیرگذار بوده‌است. ماشین‌های مجازی فرایند، رویکردی محبوب برای پیاده‌سازی نرم‌افزارهای میکرو کامپیوترهای اولیه مانند تاینی بیسیک و بازی‌های ماجراجویی بودند و از پیاده‌سازی‌های یکباره مانند Pyramid 2000 گرفته تا یک موتور همه منظوره مانند z-machine شرکت Infocom که به گفتهٔ گراهام نلسون "شاید بیشترین میزان قابل حمل بودن برای یک ماشین مجازی " را داراست را پیاده‌سازی می‌کردند. پیشرفت‌های قابل توجهی در پیاده‌سازی اسمال تاک – ۸۰ رخ داد به خصوص پیاده‌سازی دویچ/شیفمان که کامپایل در جا را به عنوان رویکرد پیاده‌سازی که از ماشین مجازی فرایند استفاده می‌کند، به جلو راند. زبان مرتبط دیگری که نوآوری‌های بسیاری را در زمینهٔ ماشین‌های مجازی ایجاد کرد زبان برنامه‌نویسی سلف می‌باشد که بهینه‌سازی تطبیقی و جمع‌آوری زباله‌های نسلی را پایه‌گذاری کرد. | ## جمع‌بندی | این تکنیک‌ها از نظر تجاری مثلاً در ماشین مجازی جاوای هات اسپات (سال ۱۹۹۹) موفق بودند.