در برنامه نویسی رایانه، یک **سیستم زمان اجرا**، همچنین یا نام محیط زمان اجرا از آن یاد میشود، در درجه اول بخش هایی از یک مدل اجرا را پیاده سازی میکند. این نباید با مرحله چرخه زمان اجرای یک برنامه اشتباه گرفته شود، که در حین آن سیستم زمان اجرا در حال کار است. بیشتر زبانها نوعی سیستم زمان اجرا دارند که محیطی را فراهم می کند که برنامه ها در آن اجرا شوند. این محیط ممکن است تعدادی از موضوعات از جمله چیدمان حافظه برنامه، چگونگی دستیابی برنامه به متغیرها ، مکانیسم های عبور پارامترها بین رویه ها، رابط با سیستم عامل و موارد دیگر را مورد بررسی قرار دهد. کامپایلر برای تولید کد صحیح، بسته به سیستم زمان خاص، فرضیاتی را ایجاد می کند. به طور معمول سیستم زمان اجرا مسئولیت تنظیم و مدیریت پشته و پشته را بر عهده خواهد داشت و ممکن است شامل ویژگی هایی مانند زباله روب، نخ ها یا سایر ویژگی های دینامیکی داخلی باشد.

دیدگاه
------

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

با این تعریف ، اساساً هر زبانی یک سیستم زمان اجرا دارد، از جمله زبان های کامپایل شده ، زبان های تفسیر شده و زبان های خاص دامنه تعبیه شده. حتی API مدل های اجرای مستقل مانند مدل Pthreads از سیستم اجرا استفاده می کند که اجرای رفتار مدل اعدام است. 

بیشتر مقالات علمی در مورد سیستم های زمان اجرا بر جزئیات اجرای سیستم های زمان اجرای موازی تمرکز دارند. یک نمونه قابل توجه از یک سیستم زمان اجرای موازی ، نمونه ای از Cilk ، یک مدل برنامه نویسی موازی محبوب است.  علاوه بر این ، ابزار ساده برنامه زمان اجرا برای ساده سازی ایجاد سیستم های زمان اجرا موازی ایجاد شده است. 

علاوه بر رفتار مدل اعدام ، یک سیستم زمان اجرا ممکن است خدمات پشتیبانی مانند بررسی نوع ، اشکال زدایی یا تولید کد و بهینه سازی را نیز انجام دهد. 

سیستم زمان اجرا همچنین دروازه ای است که با استفاده از آن یک برنامه در حال اجرا با **محیط زمان اجرا** تعامل **دارد** ، که شامل نه تنها مقادیر حالت است که در هنگام اجرای برنامه قابل دسترسی است ، بلکه موجودات فعال دیگری نیز هستند که می توانند در حین اجرای برنامه مانند درایو دیسک و افراد از طریق کیبورد تعامل داشته باشند.. به عنوان مثال ، متغیرهای محیطی ویژگیهای بسیاری از سیستم عاملها و بخشی از محیط زمان اجرا هستند. یک برنامه در حال اجرا می تواند از طریق سیستم زمان اجرا به آنها دسترسی پیدا کند. به همین ترتیب ، دستگاه های سخت افزاری مانند درایو دی وی دی موجودی فعال هستند که یک برنامه می تواند از طریق یک سیستم زمان اجرا با آنها ارتباط برقرار کند. 

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

مثال ها
-------

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

یك راه برای مشاهده این تفکیك بین معنایی یك برنامه خاص و محیط زمان اجرا این است كه برنامه را در یك فایل شیء شامل تمام توابع در مقابل تهیه یك كل برنامه به یك باینری اجرا كنید. پرونده شی فقط حاوی کد مونتاژ مربوط به آن توابع است ، در حالی که باینری اجرایی شامل کد اضافی است که برای اجرای محیط زمان اجرا استفاده می شود. پرونده شیء از یک سو ممکن است اطلاعاتی را از محیط زمان اجراکه با پیوند حل می شود ، از دست ندهد. از طرف دیگر ، کد موجود در پرونده شیء به فرضیات سیستم زمان اجرا بستگی دارد. به عنوان مثال ، بسته به کنوانسیون فراخوانی مورد استفاده در محیط زمان اجرا ، یک عملکرد ممکن است پارامترهای مربوط به یک رجیستر یا محل پشته را بخواند. 

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

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

ویژگی های پیشرفته
-----------------

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

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

در حد مجاز ، سیستم زمان اجرا ممکن است خدماتی مانند دستگاه P-code یا ماشین مجازی را ارائه دهد که حتی مجموعه دستورالعمل پردازنده را نیز پنهان می کند. این رویکردی است که بسیاری از زبانهای تفسیر شده مانند AWK و بعضی از زبانها مانند جاوا دنبال می کنند ، منظور این است که در برخی از کد های نمایندگی واسطه مستقل ماشین (مانند بایت کد ) وارد می شوند. این ترتیب کار اجرای زبان و سازگاری آن با دستگاه های مختلف را ساده تر کرده و کارایی ویژگی های زبان پیشرفته مانند بازتاب را بهبود می بخشد. همچنین این امکان را می دهد که برنامه مشابهی را در هر دستگاه و بدون قدم برداشتن صریح اجرا کند ، ویژگی ای که از زمان تکثیر شبکه جهانی وب بسیار مهم شده است. برای سرعت بخشیدن به اجرای ، برخی از سیستم های زمان اجرا کامپایل همزمان را در کد دستگاه دارند. 

یک جنبه مدرن از سیستم های زمان اجرا رفتارهای اجرای موازی است ، مانند رفتارهایی که توسط سازه های mutex در Pthreads و سازه های موازی در OpenMP به نمایش گذاشته شده است. یک سیستم زمان اجرا با چنین رفتارهای اجرای موازی ممکن است مطابق رویکرد زمان اجرای اولیه مدولار شود.

تاریخچه
-------

نمونه های اولیه سیستم های زمان اجرا ، مفسر هایی مانند BASIC و Lisp هستند. این محیط ها همچنین حاوی جمع آوری زباله بودند. چهارم مثال اولیه زبانی است که برای تهیه کد نمایندگی میانی طراحی شده است. سیستم زمان اجرای آن یک ماشین مجازی بود که آن کد را تفسیر می کرد. مثال محبوب دیگر ، اگر نظری ، رایانه MIX دونالد ناتوس است. 

در زبانهای C و بعد از آن که از تخصیص حافظه پویا پشتیبانی می کردند ، سیستم زمان اجرا شامل کتابخانه ای نیز بود که حافظه برنامه را مدیریت می کرد. 

در زبانهای برنامه نویسی شی گرا ، سیستم زمان اجرا نیز اغلب مسئول بررسی نوع پویا و حل مراجعات روش بود.

برای مشاهده بیشتر
-----------------

* زمان اجرا (مرحله چرخه برنامه)
* مدل اعدام
* مدل برنامه نویسی

منابع
-----

1. ↑  Aho, Alfred V.; Lam, Monica S.; Sethi, Ravi; Ullman, Jeffrey D. (2007). *Compilers: Principles, Techniques and Tools* (2nd ed.). Boston, MA: Pearson Education. p. 427. ISBN 978-0-321-48681-3.
2. ↑  Blumofe, Robert D.; et al. (1995). "Cilk: An efficient multithreaded runtime system". ACM.
3. ↑  Open Source Research Institute; et al. (2011). "The Proto-Runtime Toolkit".
4. ↑  Andrew W. Appel (May 1989). "A Runtime System" (PDF). Princeton University. Archived from the original (PDF) on 2013-12-30. Retrieved 2013-12-30.