ماشین مجازی: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
Nikipari (بحث | مشارکت‌ها)
←‏تعاریف: اضاقه شدن داده های جدید
ویژگی پیوندهای پیشنهادی: ۲ پیوند افزوده شد.
خط ۲۹:
ماشین‌های مجازی سیستمی از سیستم‌های [[اشتراک زمانی]] ایجاد شدند به ویژه که این سیستم‌ها در [[سیستم اشتراک زمانی سازگار]] یا CTSS پیاده سازی شدند. اشتراک زمانی به کاربرها این اجازه را می‌دهد که از یک کامپیوتر به صورت [[هم زمان]] استفاده کنند به طوری که به نظر می‌رسد هر برنامه دسترسی کامل به ماشین دارد اما در حقیقت تنها یک برنامه در یک لحظه در حال اجرا می‌باشد به صورتی که سیستم در فاصله‌های زمانی بین برنامه‌ها تعویض انجام می‌دهد که هر بار باعث صرفه جویی و بازیابی حالت می‌شود. این مطلب در قالب ماشین‌های مجازی تکامل یافت به خصوص به وسیله‌ی سیستم‌های تحقیقاتی شرکت IBM مانند سیستم [[M44/44X]] که از [[مجازی سازی جزئی]] استفاده می‌کرد و [[CP_40]] و [[SIMMON]] که از [[مجازی سازی کامل]] استفاده می‌کردند و نمونه‌های اولیه‌ی [[هایپروایزر]]ها بودند. اولین معماری ماشین مجازی که به طور گسترده در دسترس قرار گرفت [[CP-67]]/CMS بود (برای دسترسی به اطلاعات بیشتر به [[تاریخچه‌ی CP/CMS]] رجوع کنید). یک تمایز مهم بین استفاده از چند ماشین مجازی بر روی یک سیستم میزبان برای اشتراک زمانی مثلاً در M44/44X و CP_40 و استفاده از یک ماشین مجازی بر روی یک سیستم میزبان برای نمونه سازی مثلاً در SIMMON وجود داشت. [[برابرساز]]ها که وظیفه ی شبیه سازی سخت افزار سیستم‌های قبلی برای سازگاری را دارند به مانند [[System/360 IBM]] در سال 1963 بوجود آمدند. این در حالی است که شبیه سازی نرم‌افزار (که آن زمان به نام "simulation" شناخته می‌شد) به قبل از آن بازمی‌گردد.
 
ماشین‌های مجازی فرایند در ابتدا به عنوان زمینه‌های انتزاعی برای یک زبان میانی استفاده شده به عنوان [[نمایش میانی]] یک برنامه به وسیله ی یک کامپایلر به وجود آمدند که نمونه‌های اولیه آن به سال 1966 بازمی‌گردند. یک نمونه ی اولیه در سال 1966 ماشین O_code بود که یک ماشین مجازی است که O_code (کد شئ) خارج شده از [[کامپایلر#جلوبندی|جلوبندی]] کامپایلر [[بی سی پی ال]] را اجرا می‌کند. این انتزاعی سازی این اجازه را به کامپایلر می‌داد که به راحتی به یک معماری جدید انتقال یابد و این کار به وسیله ی پیاده سازی یک [[کامپایلر#عقب بندی|عقب بندی]] جدید که کد شئ موجود را تبدیل به [[کد ماشین]] برای ماشین فیزیکی فعلی می‌کرد، انجام می‌شد. [[زبان اویلر]] از یک طراحی مشابه برخوردار است و زبان میانی آن P می‌باشد. این مطلب درحدود سال 1970 به وسیله ی [[پاسکال (زبان برنامه‌نویسی)]] عمومیت یافت به خصوص در سیستم پاسکال_پی (1973) و کامپایلر پاسکال_اس (1975) که در آن‌ها [[پی_کد]] نامیده شد و ماشین حاصل [[ماشین پی_کد]] نامیده شد. این مطلب تاثیر گذار بوده‌است و ماشین‌های مجازی از این نظر به طور کلی ماشین پی_کد خوانده می‌شوند. پی_کد پاسکال علاوه بر یک زبان میانی بودن، به صورت مستقیم به وسیله ی یک مفسر که ماشین مجازی را پیاده سازی می‌کند، اجرا می‌شود به خصوص در پاسکال [[UCSD (1978)]]. این مطلب مفسرهای بعدی به خصوص [[ماشین مجازی جاوا]] را تحت تاثیر قرار داد. یک مثال ابتدایی دیگر SNOBLO4 (1967) می‌باشد که به زبان پیاده سازی [[اسنوبول]] نوشته شده‌است. SNOBLO4 یک زبان اسمبلی برای یک ماشین مجازی است و پس از آن ماشین‌های فیزیکی را با ترنسپایل کردن اسمبلر محلی به وسیله ی [[زبان اسمبلی#اسمبلرهای سطح-بالا|اسمبلرهای سطح-بالا]] مورد هدف قرار داد. با این وجود از آن زمان اسمبلرهای سطح_بالا از رده خارج شده‌اند در نتیجه این روش کمتر تاثیرگذار بوده‌است. ماشین‌های مجازی فرایند، رویکردی محبوب برای پیاده سازی نرم‌افزارهای میکرو کامپیوترهای اولیه مانند [[تاینی بیسیک]] و بازی‌های ماجراجویی بودند و از پیاده سازی‌های یک باره مانند [[Pyramid 2000]] گرفته تا یک موتور همه منظوره مانند [[z-machine]] شرکت [[Infocom]] که به گفته ی [[گراهام نلسون]] "شاید بیشترین میزان قابل حمل بودن برای یک ماشین مجازی " را داراست را پیاده سازی می‌کردند.
 
پیشرفت‌های قابل توجهی در پیاده سازی [[اسمال تاک]] – 80 رخ داد به خصوص پیاده سازی دویچ/شیفمان که [[کامپایل در جا]] را به عنوان رویکرد پیاده سازی که از ماشین مجازی فرایند استفاده می‌کند، به جلو راند. از دیگر ماشین‌های مجازی قابل توجه اسمال تاک می‌توان [[VisualWorks]]، [[Strongtalk]] و [[Squeak]] را نام برد. زبان مرتبط دیگری که نوآوری‌های بسیاری را در زمینه ی ماشین‌های مجازی ایجاد کرد زبان برنامه نویسی [[سلف (زبان برنامه نویسی)|سلف]] می‌باشد که [[بهینه سازی تطبیقی]] و [[جمع آوری زباله‌های نسلی]] را پایه گذاری کرد. این تکنیک‌ها از نظر تجاری مثلاً در ماشین مجازی جاوای [[هات اسپات]] (سال 1999) موفق بودند. نوآوری‌های دیگر شامل استفاده از ماشین مجازی مبتنی بر ثبات برای تطابق بهتر با سخت افزار اصلی، به جای استفاده از ماشین مجازی مبتنی بر پشته که تطابق نزدیک تری با [[زبان برنامه‌نویسی|زبان برنامه نویسی]] دارد، می‌باشد؛ این مطلب در سال 1995 به وسیله ی [[ماشین مجازی دیس]] برای زبان برنامه نویسی [[لیمبو (زبان برنامه نویسی)|لیمبو]] پایه گذاری شد.OpenJ9 یک جایگزین برای ماشین مجازی جاوا HotSpot در OpenJDK می‌باشد و یک پروژه ی منبع_باز اکلیپس می‌باشد که مدعی استارتاپ بهتر و استفاده از منابع کمتر در مقایسه با HotSpot می‌باشد.
 
== منابع ==