عملية تنفيذ مُدارة
تتضمن عملية التنفيذ المدارة الخطوات التالية , و التي سيتم مناقشتها بالتفصيل لاحقاً في هذا الموضوع:
اختيار المحول البرمجي.
للحصول على الفوائد التي يوفرها وقت تشغيل اللغة العامة (CLR) , يجب أن تستخدم محول لغة برمجي واحد أو أكثر يستهدف وقت التشغيل.
تحويل التعليمات البرمجية الخاصة بك برمجياً إلى MSIL.
التحويل البرمجي يترجم التعليمات البرمجية المصدرية الخاصة بك إلى لغة Microsoft الوسيطة (MSIL) و يقوم بإنشاء بيانات التعريف المطلوبة.
التحويل البرمجي من MSIL إلى تعليمات برمجية أصلية.
في وقت التنفيذ , المحول البرمجي في الوقت المناسب (JIT) يترجم MSIL إلى تعليمات برمجية أصلية. أثناء ذلك التحويل البرمجي , يجب أن تجتاز التعليمات البرمجية عملية التأكد من الصحة التي تفحص الـ MSIL و بيانات التعريف لمعرفة ما إذا كان يمكن تحديد التعليمات البرمجية على أنها آمنة النوع.
تشغيل التعليمات البرمجية.
يوفر وقت تشغيل اللغة العامة البنية التحتية التي تُمَكِن التنفيذ أن يحدث و الخدمات التي يمكن استخدامها أثناء التنفيذ.
اختيار محول برمجي
للحصول على الفوائد التي يوفرها وقت تشغيل اللغة العامة (CLR) , يجب أن تستخدم محول لغة برمجي واحد أو أكثر يستهدف وقت التشغيل , مثل Visual Basic , أو C# , أو Visual C++ , أو F# أو أحد المحولات البرمجية العديدة من جهة خارجية مثل المحول البرمجي Eiffel , أو Perl , أو COBOL .
لأنها بيئة تنفيذ متعددة اللغات , يدعم وقت التشغيل تشكيلة واسعة من أنواع البيانات و ميزات اللغة. محول اللغة البرمجي الذي تستخدمه يحدد أي ميزات وقت التشغيل متوفرة , و ستصمم التعليمات البرمجية الخاصة بك باستخدام تلك الميزات. المحول البرمجي الخاص بك , ليس وقت التشغيل ، يؤسس قواعد بناء الجملة التي يجب أن تستخدمها التعليمات البرمجية الخاصة بك. إذا كان المكون الخاص بك يجب أن يكون قابل للاستخدام بشكل كامل بواسطة المكونات المكتوبة بلغات أخرى ، فالأنواع التي يصدرها المكون الخاص بك يجب أن تقوم بالكشف عن ميزات اللغة المُضَمَنة في تحديدات اللغة العامة (CLS). يمكنك استخدام السمة CLSCompliantAttribute للتأكد من أن التعليمات البرمجية الخاصة بك متوافقة مع CLS. لمزيد من المعلومات، راجع كتابة التعليمات البرمجية المتوافقة مع CLS.
العودة إلى الأعلى
التحويل البرجمي إلى MSIL
عند التحويل البرمجي إلى التعليمات البرمجية المُدارة ، المحول البرمجي يترجم التعليمات البرمجية المصدرية الخاصة بك إلى لغة Microsoft الوسيطة (MSIL) ، و التي هي مجموعة من الأوامرالمستقلة عن الـ CPU التي يمكن تحويلها بكفاءة إلى تعليمات برمجية أصلية. MSIL تتضمن أوامر للتحميل , و التخزين ،و التهيئة , و استدعاء أساليب على كائنات , بالإضافة إلى أوامر للعمليات الحسابية و المنطقية , و للتحكم في التدفق , و الوصول المباشر إلى الذاكرة , و معالجة الاستثناءات , و عمليات أخرى. قبل ان يمكن تشغيل التعليمات البرمجية , MSIL يجب تحويلها إلى تعليمات برمجية خاصة بالـ CPU عادةً بواسطة المحول البرمجي في الوقت المناسب (JIT) . لأن وقت تشغيل اللغة العامة يوفر محول برمجي JIT واحد أو أكثر لكل هندسة كمبيوتر يدعمها ، نفس مجموعة الـ MSIL يمكن تحويلها برمجياً JIT و تشغيلها على أي هندسة مدعومة.
عندما يُنتِج المحول البرمجي MSIL ، يُنتِج أيضًا بيانات التعريف. بيانات التعريف تصف الأنواع في التعليمات البرمجية الخاصة بك ، بما في ذلك تعريف كل نوع , تواقيع أعضاء كل نوع , الأعضاء التي تشير إليها التعليمات البرمجية الخاصة بك , والبيانات الأخرى التي يستخدمها وقت التشغيل في وقت التنفيذ. الـ MSIL و بيانات التعريف مُحتَواة في ملف (PE) محمول قابل للتنفيذ و الذي يعتمد على و يمدد PE Microsoft المنشور و تنسيق ملف الكائن الشائع (COFF) المُستخدم تَارِيخياً للمحتوى القابل للتنفيذ. تنسيق الملف هذا الذي يلائم MSIL أو التعليمات البرمجية الأصلية بالإضافة إلى بيانات التعريف ، يُمَكِن نظام التشغيل من التعرف على صور وقت تشغيل اللغة العامة. وجود بيانات تعريف في الملف و MSIL معاً يُمكِن التعليمات البرمجية الخاصة بك من وصف نفسها، مما يعني أن ليس هناك حاجة لمكتبات الأنواع أو لغة تعريف الواجهات (IDL). وقت التشغيل يحدد موقع و يستخرج بيانات التعريف من الملف حسب الحاجة أثناء التنفيذ.
العودة إلى الأعلى
التحويل البرمجي من MSIL إلى تعليمات برمجية أصلية
قبل أن تتمكن من تشغيل لغة Microsoft الوسيطة (MSIL) ، يجب أن يتم تحويلها برمجي مقابل وقت تشغيل اللغة العامة إلى تعليمات برمجية أصلية لهندسة الجهاز الهدف. .NET Framework يوفر طريقتان لإجراء هذا التحويل:
محول .NET Framework البرمجي في الوقت المناسب (JIT).
Ngen.exe (مولد النسخة الأصلي) .NET Framework.
التحويل البرمجي بواسطة المحول البرمجي JIT
التحويل البرمجي JIT يحول MSIL إلى تعليمات برمجية أصلية حسب الطلب في وقت تشغيل التطبيق ، عند تحميل محتويات تجميع و تنفيذها. لأن وقت تشغيل اللغة العامة يوفر محول برمجي JIT لكل هندسة CPU مدعومة , المطورون يمكنهم بناء مجموعة من تجميعات MSIL التي يمكن تحويلها برمجياً JIT و تشغيلها على أجهزة كمبيوتر مختلفة مع هندسات أجهزة مختلفة. ومع ذلك ، إذا كانت التعليمات البرمجية المُدَارة الخاصة بك تستدعي APIs أصلية خاصة بالنظام الأساسي أو مكتبة فئات خاصة بالنظام الأساسي ، سيتم تشغيلها فقط على نظام التشغيل ذلك.
التحويل البرمجي JIT يأخذ في الاعتبار احتمالية أن بعض التعليمات البرمجية قد لا تُستَدعَى أبداً أثناء التنفيذ. بدلاً من استخدام الوقت و الذاكرة في تحويل كل الـ MSIL في ملف PE إلى تعليمات برمجية أصلية ,فإنه يُحَوِل MSIL حسب الحاجة أثناء تنفيذ و يخزن التعليمات البرمجية الأصلية الناتجة في الذاكرة بحيث يمكن للإستدعاءات اللاحقة الوصول إليها في سياق تلك العملية. ينشئ المُحمل ويُرفِق كعب الروتين بكل أسلوب في نوع عندما يتم تحميل النوع و تهيئته. عندما يتم استدعاء أسلوب للمرة الأولى , كعب الروتين يمرر التحكم إلى المحول البرمجي JIT , الذي يحول الـ MSIL لذلك الأسلوب إلى تعليمات برمجية أصلية و يُعَدِل كعب الروتين ليشير مباشرة إلى التعليمات البرمجية الأصلية المُنشَئة. لذلك، الاستدعاءات اللاحقة للأسلوب المحول برمجياً JIT تنتقل مباشرة للتعليمات البرمجية الأصلية.
توليد التعليمات البرمجية الخاصة بوقت التثبيت باستخدام NGen.exe
لأن المحول البرمجي JIT يحول MSIL الخاص بتجميع إلى تعليمات برمجية أصلية عند إستدعاء أساليب فردية مُعَرَفة في ذلك التجميع , فإنه يؤثر على الأداء بصورة عكسية في وقت التشغيل. في معظم الحالات، ذلك الأداء المتضائل يمكن قبوله. والأهم من ذلك , أن التعليمات البرمجية المُوَلَدة بواسطة المحول البرمجي JIT ترتبط بالعملية التي أدت إلى التحويل البرمجي. لا يمكن مشاركتها عبر عدة عمليات. للسماح بمشاركة التعليمات البرمجية المُوَلَدة عبر استدعاءات متعددة من تطبيق ما أو عبر عدة عمليات تشترك في مجموعة من التجميعات , وقت تشغيل اللغة العامة يدعم وضع التحويل البرمجي قبل الوقت. وضع التحويل البرمجي قبل الوقت هذا يستخدم Ngen.exe (مولد النسخة الأصلي) لتحويل تجميعات الـ MSIL إلى تعليمات برمجية أصلية مما يشبة كثيراً ما يفعله المحول البرمجي JIT. ومع ذلك، عمليات Ngen.exe تختلف عن نظيراتها في المحول البرمجي JIT من ثلاث أوجه:
إنه يُجْرِي التحويل من MSIL إلى تعليمات برمجية أصلية قبل تشغيل التطبيق بدلاً من أثناء تشغيل التطبيق.
إنه يحول تجميع بأكمله برمجيًا في كل مرة، بدلاً من أسلوب واحد في كل مرة.
إنه يحافظ على التعليمات البرمجية المُوَلَدة في ذاكرة التخزين المؤقتة للصورة الأصلية كملف على القرص.
التحقق من صحة التعليمات البرمجية
كجزء من تحويلها البرمجي إلى تعليمات برمجية أصلية , يجب أن تمر التعليمات البرمجية MSIL في عملية التحقق من الصحة إلا إذا قام مسؤول بإنشاء نهج أمان يسمح للتعليمات البرمجية بتجاوز التحقق من الصحة. التحقق يفحص MSIL و بيانات التعريف لمعرفة ما إذا كانت التعليمات البرمجية آمنة النوع ، مما يعني أنها تصل فقط إلى مواقع الذاكرة المخول لها الوصول إليها. أمان النوع يساعد في عزل الكائنات عن بعضها البعض و يساعد على حمايتها من التلف غير المقصودة أو الضار. كما يوفر تأكيداً أنه يمكن فرض قيود الآمان على التعليمات البرمجية بشكل يُعتَمد عليه.
يَعتَمِد وقت التشغيل على حقيقة أن العبارات التالية صحيحة للتعليمات البرمجية التي يُمكِن التأكد من أنها آمنة للنوع:
المرجع إلى نوع متوافق بشكل صارم مع النوع الذي تتم الإشارة إليه.
فقط العمليات المعرفة بشكل مناسب يتم استدعاءها على الكائن.
الهويّات هي ما تدعي أنها تكونه.
أثناء عملية التحقق من الصحة , التعليمات البرمجية MSIL يتم التحقق منها في محاولة للتأكد أن التعليمات البرمجية يمكنها الوصول إلى مواقع الذاكرة و استدعاء الأساليب فقط من خلال أنواع معرّفة بشكل صحيح. على سبيل المثال، التعليمات البرمجية لا يمكنها أن تسمح بالوصول لحقول الكائن بطريقة تسمح بتجاوز مواقع الذاكرة. بالإضافة إلى ذلك ، التحقق من الصحة يفتش في التعليمات البرمجية لتحديد ما إذا كان الـ MSIL تم توليده بشكل صحيح , لأن MSIL غير صحيح قد يؤدي إلى انتهاك قواعد أمان الأنواع. عملية التحقق من الصحة تمرر مجموعة من التعليمات البرمجية الآمنة للنوع المعرفة جيداً , و هي تمرر فقط التعليمات البرمجية الآمنة للنوع. ومع ذلك ، قد لا تجتاز بعض التعليمات البرمجية الآمنة للنوع التحقق من الصحة لوجود بعض القيود على عملية التحقق من الصحة , و بعض اللغات حسب تصميمها لا تنتج تعليمات برمجية يُمكِن التأكد من أنها آمنة للنوع . إذا كانت التعليمات البرمجية الآمنة للنوع مطلوبة من قبل نهج الأمان و لكن التعليمات البرمجية لا تجتاز التحقق من الصحة ، يتم إلقاء استثناء عند تشغيل التعليمات البرمجية.
العودة إلى الأعلى
تشغيل التعليمات البرمجية
يوفر وقت تشغيل اللغة العامة البنية التحتية التي تُمَكِن التنفيذ المُدار أن يحدث و الخدمات التي يمكن استخدامها أثناء التنفيذ. قبل أن يمكن تشغيل أسلوب , يجب أن يكون محولاً برمجياً إلى تعليمات برمجية خاصة بالمعالج. كل أسلوب تم من أجله توليد MSIL يتم تحويله برمجياً JIT عندما يتم استدعاءه للمرة الأولى , ثم يتم تشغيله. في المرة القادمة التي يتم فيها تشغيل الأسلوب , يتم تشغيل التعليمات البرمجية الأصلية الموجودة . عملية التحويل البرمجي JIT و من ثم تشغيل التعليمات البرمجية تُكَرَر حتى إتمام التنفيذ.
أثناء التنفيذ ، تتلقى التعليمات البرمجية المُدارة خدمات مثل جمع البيانات المهملة , و الأمان , و إمكانية التشغيل المتداخل مع التعليمات البرمجية الغير مُدَارة , دعم التصحيح عبر اللغات , و دعم مُحَسَن للنشر و تعيين الإصدارات.
في Microsoft نظام التشغيل Windows XP و Windows Vista، مُحمل نظام التشغيل تتحقق من الوحدات المُدَارة عن طريق فحص بت في رأس COFF. تشير البت التي يتم تعيينها إلى وحدة مُدَارة. في حالة اكتشاف المحمل الوحدات النمطية التي تمت إدارتها، يحمل mscoree.dll و _CorValidateImageو _CorImageUnloadingإعلام المحمل عندما يتم تم تحميله الصور وحدة نمطية? التي تمت إدارتها وإلغاء تحميلها. _CorValidateImageتنفيذ الإجراءات التالية:
يضمن أن التعليمات البرمجية هي تعليمات برمجية مُدارة صالحة.
يغير نقطة الدخول في الصورة إلى نقطة دخول في وقت التشغيل.
على Windows 64 بت , _CorValidateImage يُعَدِل الصورة التي في الذاكرة عن طريق تحويلها من تنسيق PE32 إلى تنسيق PE32 +.
العودة إلى الأعلى
راجع أيضًا:
المرجع
المبادئ
بيانات التعريف و المكونات التي تصف نفسها
المجمعات في وقت تشغيل اللغة العامة