تنفيذ (حوسبة)

**التنفيذ** في هندسة الحاسوب والبرمجيات هو العملية التي يقوم بها الحاسوب أو الآلة الافتراضية بتفسير و تنفيذ تعليمات برنامج الكمبيوتر والتصرف بناءً عليها. كل تعليمة في البرنامج هي وصف لفعل معين يجب تنفيذه لحل مشكلة معينة. يشمل التنفيذ تكرار دورة " الجلب - فك التشفير - التنفيذ " بشكل متكرر لكل تعليمة يتم إجراؤها بواسطة وحدة التحكم . تقوم بها وحدة التحكم، و مع اتباع الآلة المنفذة للتعليمات ، يتم إنتاج تأثيرات محددة وفقًا لدلالات تلك التعليمات.

يتم تنفيذ برامج الحاسوب في عملية دفعية دون تفاعل بشري أو قد يقوم المستخدم بكتابة الأوامر في جلسة تفاعلية مع المترجم . في هذه الحالة، "الأوامر" ببساطة تعليمات برمجية، والتي يتم تنفيذ بعضها البعض بشكل متسلسل.

يستخدم مصطلح "**التشغيل"** بشكل شبه مترادف مع "**التنفيذ**" و يشير المعنى المرتبط بكلمتي "تشغيل" و"تنفيذ" إلى الإجراء المحدد الذي يقوم به المستخدم عند بدء (أو *تشغيل* أو *استدعاء* ) برنامج، كما في "الرجاء تشغيل التطبيق".

## العملية

قبل التنفيذ، يجب كتابة البرنامج أولاً. يتم ذلك عادةً في الشيفرة المصدرية ،و التي تتحول لاحقًا في وقت الترجمة (وربطه بشكل ثابت في وقت الارتباط ) لإنتاج ملف تنفيذي. يتم استدعاء هذا الملف التنفيذي بعد ذلك، غالبًا بواسطة نظام التشغيل، الذي يقوم بتحميل البرنامج في الذاكرة ( وقت التحميل )،و يتم ربطها ديناميكيًا ، ثم يبدأ التنفيذ عن طريق نقل التحكم إلى نقطة دخول البرنامج؛ تعتمد كل هذه الخطوات على واجهة التطبيق الثنائية لنظام التشغيل. في هذه المرحلة يبدأ التنفيذ ويدخل البرنامج وقت التشغيل . ثم يستمر البرنامج في العمل حتى ينتهي، إما بالإنهاء العادي أو بالتعطل .

## قابل للتنفيذ
الشفرة التنفيذية، أو المَلف التنفيذي، والذي يُشار إليه أحيانًا باسم *التنفيذي* أو *الثنائي* ، هو قائمة من التعليمات والبيانات التي تجعل الحاسوب "ينفذ المهام المشار إليها وفقًا لتعليمات مشفرة"،  على عكس ملف البيانات الذي يجب تفسيره ( تحليله ) بواسطة برنامج ليكون ذا معنى.

يعتمد التفسير الدقيق على السياق المستخدم فيه. فـ "التعليمات" تفهم تقليديًا على أنها تعليمات الكود الآلي لوحدة المعالجة المركزية المادية. في بعض السياقات، قد يُعتبر الملف الذي يحتوي على تعليمات البرمجة النصية (مثل البايت كود ) قابلاً للتنفيذ أيضًا.

## سياق التنفيذ
السياق الذي تتم فيه التنفيذ أمر له أهمية بالغة. فعدد قليل جدًا من البرامج ينفذ على آلة مجردة . تحتوي البرامج عادةً على افتراضات ضمنية وصريحة بشأن الموارد المتاحة في وقت التنفيذ. و معظم البرامج تنفذ ضمن نظام تشغيل متعدد المهام ومكتبات وقت التشغيل الخاصة باللغة المصدر والتي توفر خدمات أساسية لا يوفرها الكمبيوتر نفسه مباشرة. على سبيل المثال، تعمل هذه البيئة الداعمة عادةً على فصل البرنامج عن التلاعب المباشر بالأجهزة الطرفية للكمبيوتر، وتوفير خدمات أكثر عمومية وتجريدية بدلاً من ذلك.

### تبديل السياق
لكي تعمل البرامج ومعالجات المقاطعة دون تداخل وتتشارك نفس ذاكرة الأجهزة والوصول إلى نظام الإدخال و الإخراج، في نظام تشغيل متعدد المهام يعمل على نظام رقمي يحتوي على وحدة معالجة مركزية أو متحكم دقيق واحد، فإنه يلزم وجود بعض الوسائل البرمجية لتتبع بيانات العملية الجارية (عناوين صفحات الذاكرة والسجلات وما إلى ذلك) وحفظها واستعادتها إلى الحالة التي كانت عليها قبل تعليقها. ويتم تحقيق ذلك من خلال تبديل السياق.: 3.3  غالبًا ما يتم تعيين معرفات سياق العملية (PCID) للبرامج قيد التشغيل.

في أنظمة التشغيل المبنية على Linux، يتم عادةً حفظ مجموعة من البيانات المخزنة في السجلات داخل واصف العملية في الذاكرة لتنفيذ تبديل السياق. كما يستخدم معرفات سياق العملية PCIDs أيضًا.

## وقت التشغيل
**وقتُ** **التشغيل** أو **مرحلةُ التشغيل أو وقت التنفيذ** هي المرحلة النهائية من دورة حياة الحاسوب، حيث يتم تنفيذ الشيفرة على وحدة المعالجة المركزية (CPU) للكمبيوتر كرمز آلي . بعبارة أخرى، "وقت التشغيل" هو مرحلة تشغيل البرنامج.

يَتم اكتشاف خطأ وقت التشغيل بعد أو أثناء تنفيذ (حالة التشغيل) البرنامج، بينما يتم اكتشاف خطأ وقت الترجمة بواسطة المترجم قبل أن يتم تنفيذ البرنامج . يتم عادةً تنفيذ فحص الأنواع ، وتخصيص السجلات ، وتوليد الشيفرة ، وتحسين الشيفرة في الترجمة، ولكن قد يتم تنفيذها في وقت التشغيل اعتمادًا على اللغة والمترجم المحدد. يوجد العديد من الأخطاء وقت التشغيل الأخرى ويتم التعامل معها بشكل مختلف بواسطة لغات البرمجة المختلفة، وذلك مثل أخطاء القسمة على الصفر ، وأخطاء المجال، وأخطاء خارج حدود المصفوفة ، وأخطاء التدفق الحسابي ، والعديد من أنواع أخطاء التدفق الزائد والناقص ، والعديد من أخطاء وقت التشغيل الأخرى التي تعتبر عمومًا عيوبًا برمجية قد يتم اكتشافها ومعالجتها أو قد لا يتم ذلك من قبل أي لغة حاسوب معينة.

### تفاصيل التنفيذ
عند تنفيذ برنامج، يقوم المحمل البرامج أولاً بإجراء الإعدادات اللازمة للذاكرة ويربط البرنامج بأي مكتبات مرتبطة ديناميكيًا، ثم يبدأ التنفيذ بدأ من نقطة دخول البرنامج. قد يتم تنفيذ هذه المهام بواسطة وقت تشغيل اللغة بدلاً من ذلك، على الرغم من أن هذا أمر غير معتاد في اللغات السائدة على أنظمة التشغيل الاستهلاكية الشائعة.

بعض التصحيحات الأخطاء في البرامج يمكن أن تتم فقط (أو تكون أكثر كفاءة أو دقة عند إجرائها) في وقت التشغيل. أمثلة على ذلك الأخطاء المنطقية و فحص حدود المصفوفات. ولهذا السبب، لا يتم اكتشاف بعض أخطاء البرمجة إلا عندما يتم اختبار البرنامج في بيئة إنتاجية باستخدام بيانات حقيقية، على الرغم من عمليات التحقق المتطورة في وقت التجميع واختبار ما قبل الإصدار. في هذه الحالة، قد يواجه المستخدم النهائي رسالة "خطأ وقت التشغيل".

### أخطاء التطبيق (الاستثناءات)
تعامل الاستثناءات هي إحدى ميزات اللغة المصممة للتعامل مع أخطاء وقت التشغيل، حيث توفر طريقة منظمة لالتقاط الحالات غير المتوقعة تمامًا بالإضافة إلى الأخطاء المتوقعة أو النتائج غير المعتادة أو القابلة للتنبؤ دون الحاجة للتحقق من الأخطاء داخل الشيفرة كما في اللغات التي لا تحتوي على هذه الخاصية. تتيح التطورات الأحدث في محركات وقت التشغيل معالجة الاستثناءات الآلية التي توفر معلومات تصحيح "السبب الجذري" لكل استثناء مهم ويتم تنفيذها بشكل مستقل عن الكود المصدر، عن طريق ربط منتج برمجي خاص بمحرك وقت التشغيل.

## نظام وقت التشغيل

*نظام وقت التشغيل* ، والذي يُطلق عليه أيضًا *بيئة وقت التشغيل* ، ينفذ بشكل أساسي أجزاء من نموذج التنفيذي. &#x5B; **' &#x5D;</sup> لا ينبغي الخلط بينه و بين مرحلة دورة حياة وقت التشغيل الخاصة بالبرنامج، والتي يكون فيها نظام وقت التشغيل قيد التشغيل. عند التعامل مع ''نظام وقت التشغيل'' باعتباره مميزًا عن ''بيئة وقت التشغيل'' (RTE)، يمكن تعريف الأول على أنه جزء محدد من [[بيئة تطوير متكاملة|برنامج التطبيق (IDE) المستخدم للبرمجة]] ، وهو قطعة من البرنامج التي توفر للمبرمج بيئة أكثر ملاءمة لتشغيل البرامج أثناء إنتاجها ( [[فحص البرمجيات|كالاختبار]] وما شابه)، أما الثاني (RTE) سيكون هو نفس [[مثيل (برمجة كائنية التوجه)|نموذج]] التنفيذ الذي يتم تطبيقه على البرنامج المتطور والذي يتم تشغيله بعد ذلك في ''نظام وقت التشغيل'' المذكور أعلاه.

مُعظم [[لغة برمجة|لُغات البرمجة]] تمتلك نوعًا من نظام وقت التشغيل الذي يوفر بيئة يتم فيها تشغيل البرامج. قد تتناول هذه البيئة عددًا من الجوانب، بما في ذلك [[إدارة الذاكرة|إدارة]] [[ذاكرة حاسوب|ذاكرة]] التطبيق، وكيفية وصول البرنامج إلى [[متغير (علم الحاسوب)|المتغيرات]] ، وآليات تمرير المعلمات بين [[دالة (برمجة)|الإجراءات]] ، والتفاعل مع [[نظام تشغيل|نظام التشغيل]] ، وغيرها. يقوم [[مصرف (حوسبة)|المترجم]] بإجراء افتراضات اعتمادًا على نظام التشغيل المحدد لتوليد الشيفرة الصحيحة. و عادةً ما يتحمل نظام التشغيل بعض المسؤولية عن إعداد وإدارة [[مكدس (بنية بيانات)|المكدس]] [[كومة (هياكل بيانات)|والكومة]] ، وقد يتضمن ميزات مثل [[جمع القمامة (حاسوب)|جمع القمامة]] أو [[تشعب (حوسبة)|الخيوط]] أو غيرها من الميزات [[لغة برمجة ديناميكية|الديناميكية]] المُدمجة في اللُغة.

== دورة تعليمية ==

''دورة التعليمة'' (المعروفة أيضًا بدورة ''الجلب وفك التشفير والتنفيذ'' ، أو ببساطة ''دورة الجلب والتنفيذ'' ) هي الدورة التي يتبعها [[وحدة معالجة مركزية|وحدة المعالج المركزي]] (CPU) منذ [[إقلاع (حاسوب)|بدء التشغيل]] الحاسوب، حتى إيقافه من أجل معالجة التعليمات. تتكون من ثلاث مراحل رئيسية: مرحلة الاسترجاع أو الجلب، ومرحلة فك التشفير، ومرحلة التنفيذ.
[[ملف:Fetch-Decode-Execute_Cycle.png|تصغير|هذا رسم تخطيطي بسيط يوضح المراحل الفردية لدورة الجلب وفك التشفير والتنفيذ.]]
في المعالجات الأبسط، تنفذ دورة التعليمة بشكل تسلسلي، حيث تعالج كل تعليمة قبل بدء التعليمة التالية. أما في معظم المعالجات المركزية الحديثة، فتنفذ دورات التعليمات بدلاً من ذلك [[حوسبة متزامنة|بشكل متزامن]] ، وغالبًا [[حوسبة متوازية|بالتوازي]] ، من خلال [[خط أنابيب تعليمات|خط أنابيب التعليمات]] : تبدأ معالجة التعليمات التالية قبل انتهاء التعليمات السابقة، وهو أمر ممكن لأن الدورة مقسمة إلى خطوات منفصلة.

== مترجم ==

النظام الذي ينفذ برنامجًا يطلق عليه اسم [[مفسر (برمجة)|مُفسِّر]]. و بصورة عامة، يقوم المترجم بتنفيذ البرنامج بشكل مباشر. وهذا يتناقض مع [[معالج اللغة (برمجة)|مترجم]] اللغة الذي يحول البرنامج من لغة إلى أخرى قبل تنفيذه.

== آلة افتراضية ==

''الآلة الافتراضية'' ( ''VM'' ) هي [[مضاه (حوسبة)|محاكاة]] أو تمثيل افتراضي لنظام الحاسوب. تعتمد الآلات الافتراضية على [[معمارية الحاسوب|بنى الحاسوب]] وتوفر وظائف الكمبيوتر المادي. وقد تتضمن عمليات التنفيذ الخاصة بها أجهزة أو برامج متخصصة أو مزيجًا منهما.

تختلف الآلات الافتراضية وتُنظم حسب وظيفتها، كما هو موضح هنا:

* توفر **الآلات الافتراضية للنظام** (وتسمى أيضًا الآلات [[محاكاة افتراضية|الافتراضية الكاملة]] ) بديلاً للآلة الحقيقية. أنها توفر الوظائف اللازمة لتشغيل [[نظام تشغيل|أنظمة التشغيل]] بأكملها. يستخدم [[مراقب الأجهزة الافتراضية|المشرف الافتراضي]] [[لغة الآلة|التنفيذ الأصلي]] لمشاركة الأجهزة وإدارتها، مما يسمح بوجود بيئات متعددة معزولة عن بعضها البعض، ولكنها موجودة على نفس الجهاز المادي. تستخدم برامج التشغيل الافتراضية الحديثة [[محاكاة افتراضية|تقنية المحاكاة الافتراضية بمساعدة الأجهزة]] ، وهي أجهزة خاصة بالمحاكاة الافتراضية، بشكل أساسي من وحدات المعالجة المركزية المضيفة.
* تم تصميم **الآلات الافتراضية للعمليات''' لتنفيذ برامج الكمبيوتر في بيئة مستقلة عن النظام الأساسي.

بعض محاكيات الآلات الافتراضية، مثل QEMU ومحاكيات وحدات التحكم في ألعاب الفيديو ، لمحاكاة (أو "تقليد افتراضيًا") بُنى أنظمة مختلفة، مما يتيح تشغيل تطبيقات البرمجيات وأنظمة التشغيل المكتوبة لمعالج مركزي أو بنية مختلفة. أماتقنية المحاكاة الافتراضية على مستوى نظام التشغيل تقسيم موارد الكمبيوتر عبر النواة . المصطلحات ليست قابلة للتبادل عالميًا.

## انظر أيضًا

* قابل للتنفيذ
* نظام وقت التشغيل
* مرحلة تشغيل البرنامج
* عداد البرامج

## المراجع

تصنيف:مصطلحات حوسبة
تصنيف:برمجة
تصنيف:هندسة البرمجيات
تصنيف:معالجات الحاسوب
تصنيف:آلات افتراضية
تصنيف:تطوير البرمجيات