السبت، 16 أكتوبر 2010

بعض المبادئ لنطرق باب الإحتراف, لمن يريد أن يتعلم الدوت نت (14,13)

بعون الله نبدأ الدرس الثالث عشر من سلسلة دروس هيا نتعلم بعض المبادء لنطرق باب الإحتراف
أتمنى من الله أن يمدكم بجلد لتقوموا بقراءة هذه الدروس بعناية

مجالات تطبيق (أماكن عمل التطبيق في الذاكرة) - Application Domains
تزوّد بيئات وقت التشغيل Runtime وأنظمة التشغيل Operating System نوع نموذجي من العزلة بين التطبيقات. على سبيل المثال، تستعمل مايكروسوفت ويندوز الـ العمليات Process لعزل التطبيقات. هذه العزلة ضرورية لضمان الشيفرة التي تعمل في أحد التطبيقات أنها لن تقوم بالتأثير على التطبيقات لأخرى الغير مرتبطة معها بشكل عكسي.
تزوّد مجالات التطبيق Application Domains حدود عزلة للأمن Security و الثقة أو الإعتماديهReliability ، وتعدد الإصدارات Versioning ولإلغاء تحميل التجمعات Unloading Assemblies. يقوم مضيفي وقت التشغيل Runtime Hosting المسؤلين عن عملية إقلاع التطبيق Bootstrapping بإنشاء مجالات التطبيق Application Domains قبل إنتهاء عملية الإقلاع.

لمحه عن مجالات التطبيق - Application Domains Overview
تاريخياً ، تستحدم حدود العملية Process Boundaries لتقوم بعزل التطبيقات التي تعمل على حاسب واحد عن بعضها البعض و كل تطبيق يحمل في عملية Process مستقلة التي تضمن له تلك العزلة.
جميع المؤشرات في مساحة الذاكرة Memory Pointer الخاصة بالعملية Process مرتبطة بتلك العملية Process أي أن أي مؤشر Pointer في عملية Process لا معنى له في عملية Process آخرى، هذا بسبب العزلة التي يفرضها نظام التشغيل على العمليات Processes. لذلك لايمكن التعامل مع العمليات Processes الآخرى إلا عن طريق وكيل Proxy الذي يزودنا بمستوى الدخول لتلك العملية Process.
أما بنسبة للكود المدار يقوم وقت التشغيل Runtime من التحقق من الكود المكتوب Verification Code قبل عملية التنفيذ لكي لا يكون هناك أي إختراق للكتابة على عنوانين ذاكرة غير مخول للتطبيق من الكتابه عليها Invalid Memory Pointer أو أن تكون تلك العناوين تابعه لعملية آخرى، وهذا التحقق يجعل من الكود المنفذ آمن ومما يتيح وقت تشغيل اللغة المشتركة Common Language Runtime لإيجاد عزلة أقوى من ذي قبل وهذا يزيد من أداء التطبيق.
تزوّد مجالات التطبيق Application Domains وحدات آمنة أكثر من ذي قبل التي تزود وقت تشغيل اللغة المشتركة Common Language Runtime أكثر تنوع للمحافظة على حدود العملية Process Boundaries مما يتيح تشغيل أكثر من مجال التطبيق Application Domains في نفس العملية Process مما يخفف من العمليات Codes التي نحتاجها لإنتقال بين التطبيقات Application التي نقوم بتشغيلها أو المخاطبه في ما بينها.




عزل التطبيقات عن بعضها البعض وعملية التحقق من الكود المنفذ Verification Code يتيح لنا من تشغيل البرامج التي نقوم بتنزلها من الإنترنت دون الخوف من المساس بالبينات التي نقوم بتخزينها أو العبث في مصادر الجهاز أو أن تقوم بعلمية تخريب للبرامج المشغلة مسبقاً. في مايلي سنتحدث عن أهم الميزات التي يزدها عزل التطبيقات Isolation Application عن بعضها البعض:
  • • أي إخفاق في أحد التطبيقات Application لا يستطيع التأثير على التطبيقات Applications الأخرى. لأن الشيفرة من نوع الآمن Type-Safe Code لا تستطيع أن تسبّب عيوب في ذاكرة التطبيقات Applications الآخرى، يضمن إستعمال مجالات التطبيق Application Domains أن الشيفرة المنفذة في مجال واحد لا تستطيع التأثير على التطبيقات Applications الأخرى في العملية Process.
  • • إيقاف أي مجال لن يوقف العملية Process بالكامل. إستعمال مجالات التطبيق Application Domains يمكّنك لإقاف الشيفرة المنفذة في أي عملية Process دون المساس في المجالات الآخرى Application Domains المنفذة في نفس العملية Process.
  • • الشيفرة المنفذة في أحد تطبيق Applicationلا تستطيع الدخول إلى الشيفرة أو أي مصادر من التطبيق Application الآخر مباشرة. يفرض وقت تشغيل اللغة المشترك Common Language Runtime هذه العزلة بمنع النداءات المباشرة بين الكائنات Objects في مجالات التطبيق المختلفة. تستطيع الكائنات Objects أن تعبر بين المجالات عن طريق نسخ تلك الكائنات Objects أو أن دخل عن طريق وكالاء Proxy. إذا تم تمرير الكائن Objects عن طريق النسخ يتم تنفيذ الكود الخاص بذلك الكائن Object على أنه كائن Object محلي. أما إذا تم تمرير الكائن Object عبر الوكيل Proxy فيتم تنفيذه على شكل نداء بعيد ويجب أن يكون المرجع إلى ذلك الكائن Object متاح لتطبيقين ليستطيع تنفيذ الكود الملحق به.
  • • التحكم بالسلوك الذي يتبعه مجال الكود في التطيبق المنفذ. بكلمات آخرى العثور على التجمعات التي يحتاجها التطبيق ليتم إقلاعه بإمان والتعرف على أماكن تواجد الأنواع.
  • • التحكم بالتراخيص Permissions الممنوحة لكود المنفذ.
موعدنا إن شاء الله في الدروس القادمة أتمنى لكم التوفيق

بعون الله نبدأ الدرس الرابع عشر من سلسلة دروس هيا نتعلم بعض المبادء لنطرق باب الإحتراف
أتمنى من الله أن يمدكم بجلد لتقوموا بقراءة هذه الدروس بعناية

مجالات التطبيق والتجمعات - Application Domains and Assemblies
قبل أي تنفيذ للكود المتواجد داخل أي تجمع Assembly لا بد لنا من تحميل ذلك التجمع Assembly ضمن مجال تطبيق Application Domains لذلك ينتج عن تشغيل برنامج إنشاء مجال تطبيق Application Domains إفتراضي من قبل وقت التشغيل ويقوم بتحميل جميع التجمعات Assemblies التي يحتاجه التطبيق في ذلك المجال Application Domains.
ويستطيع البرنامج المسؤل عن الترجمة عند الطلب في وقت التشغيل Just-In-Time (JIT) Compiler أن يتخذ قرار بشأن مشاركة التجمع Assembly إذا كان مستخدم من قبل محموعة من مجالات التطبيق Application Domains داخل العملية Process الواحدة أو عن طريق إضافة احد الخصائص لتجمع Assembly لإعلام الترجمة عند الطلب في وقت التشغيل Just-In-Time (JIT) Compiler بأننا نريد مشاركة هذا التجمع Assembly مع بقية المجالات Application Domains المستخدمة ليقوم بإعداد الازم لهذه المشاركة بأن يقوم بتغير مؤشر الوظيفة إلى المؤشر الجديد الذي يتم إنشائه من قبله في جميع مجالات التطبيق Application Domains المتشاركة في العملية Process.
نستطيع تحميل التجمع Assembly ضمن مجال التطبيق بثلاثة طرق:
1. تحميل التجمع Assembly دون مشاركة. أي أن كل مجال تطبيق Application Domains سوف يقوم بتحميل نسخة الخاصة من التجمع Assembly . يتثنى من هذه الحالة التجمع Mscorlib Assembly لأنه يتم تحميله مقبل مضيف وقت التشغيل Runtime Host ويقوم بمشاركته في جميع مجالات التطبيق Application Domains .
2. تحميل التجمع Assembly مع مشاركته. يتم تحميل التطبيق في منطقة محايدة Domain-Neutral ليتم مشاركة مع جميع مجالات التطبيق Application Domains التي تقوم بتحميل نفس التجمع Assembly مع تماثل لخيارت التحميل.
3. جعل التجمع Assembly عام ومشاركته مع جميع مجالات Application Domains التطبيق وفي جميع العمليات Processes. ملاحظة يمكن لأحد التطبيقات إستثاء هذا الخيار و تحميل نسخته الخاصة من التجمع Assembly العام الذي يريده ليعمل بشكل سليم إذا كان هناك إختلاف في رقم الإصدار ولكن كما قلنا هذا الخيار يتعامل مع التجمعات التي تحمل اسم متين Strong-Named Assemblies .

المخطط يصف كيف تقوم التجمعات في وضع مؤشر للوظيفة المستدعاة في بدء تشغيله لأول مرة وهذا ينطبق على جميع التجمعات:



وعند وضع التجمع عام أو تنفيذ الكود لمره آخرة يقوم الترجمة عند الطلب في وقت التشغيل Just-In-Time (JIT) Compiler في تغير مؤشر الوظيفة إلى مكان الوظيفة الجديده التي تمت ترجمتها وهذا ينطبق على جميع التجمعات التي يتم مشاركتها:



يجب الإنتباه في حال إتخاذ قرار بإنشاء منطقة محايده Domain-Neutral لتجمع Assembly من أداء التجمع Assembly Performance والذاكرة المستهلكة من قبل التجمع Reducing Memory Use يجب عدم وضع بيانات ساكنه Static Data كبيرة الحجم لأنه يتم عمل نسخه من هذه البيانات لكل مجال تطبيق Application Domains ليتم تطبيق العزلة Isolate Assemblies على البيانات الساكنه Static Data داخل التجمع Assembly . ويجب تزويد جميع السماحيات Permissions لهذا التجمع Assembly ليتم تطبيق سياسة الأمن Security Policy التي يتبعها نظام التشغيل Operating System .

إنتهى و الله الموفق

تمنياتي للجميع بالتوفيق و الفائدة

ليست هناك تعليقات: