الفريق العربي للهندسة العكسية

نسخة كاملة : الربط والتحميل في أنظمة التشغيل Linking and Loading in Operating Systems
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .

R333T

[صورة مرفقة: dark.jpg]

Linking:
  • تعريف: عملية ربط كائنات التعليمات البرمجية (مثل المكتبات والوحدات النمطية) مع بعضها البعض لإنشاء برنامج قابل للتنفيذ.
  • خطوات:
    1. معالجة رمز المصدر: تحويل رمز المصدر إلى لغة آلية بواسطة المُجمّع.
    2. ربط المكتبات: ربط المكتبات الخارجية بالبرنامج.
    3. معالجة الرموز: تحويل عناوين الرموز إلى عناوين فعلية.
    4. إنشاء ملف قابل للتنفيذ: تخزين البرنامج النهائي في ملف قابل للتنفيذ.
Loading:
  • تعريف: عملية تحميل برنامج قابل للتنفيذ في الذاكرة الرئيسية وتنفيذه.
  • خطوات:
    1. تخصيص الذاكرة: تخصيص مساحة كافية في الذاكرة الرئيسية للبرنامج.
    2. تحميل التعليمات: تحميل التعليمات البرمجية من الملف القابل للتنفيذ إلى الذاكرة.
    3. تحميل البيانات: تحميل البيانات من الملف القابل للتنفيذ إلى الذاكرة.
    4. بدء التنفيذ: نقل التحكم إلى تعليمات بدء التشغيل للبرنامج.
النظرية:
  • الذاكرة الافتراضية: تقنية تسمح للبرامج باستخدام المزيد من الذاكرة مما هو متاح فعليًا من خلال تقسيم الذاكرة إلى صفحات وتخزين بعض الصفحات على القرص الصلب عند الحاجة.
  • إدارة الذاكرة: وظيفة نظام التشغيل التي تتحكم في كيفية تخصيص الذاكرة وإلغاء تخصيصها للبرامج.
  • جدولة العمليات: وظيفة نظام التشغيل التي تقرر أي برنامج يجب تشغيله في أي وقت.
 تحميل البرامج وتنفيذها

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

لا يوجد روتين واحد في لينكس لتحميل برنامج جديد. بدلاً من ذلك، يحتفظ لينكس بجدول من وظائف التحميل المحتملة، ويمنح كل وظيفة فرصة لتجربة تحميل الملف المحدد عند استدعاء النظام exec(). السبب الأساسي لهذا الجدول هو أنه بين إصداري 1.0 و 1.2 من نواة لينكس، تغير التنسيق القياسي للملفات الثنائية في لينكس. كانت النواة الأقدم تدعم تنسيق a.out للملفات الثنائية —وهو تنسيق بسيط نسبيًا شائع في أنظمة UNIX القديمة. الأنظمة الحديثة في لينكس تستخدم تنسيق ELF الأكثر حداثة، والمدعوم الآن من معظم تطبيقات UNIX الحالية. يحتوي تنسيق ELF على عدد من المزايا مقارنةً بـ a.out، بما في ذلك المرونة وقابلية التمدد. يمكن إضافة أقسام جديدة إلى الملف الثنائي ELF (مثل إضافة معلومات تصحيح إضافية) دون أن تتسبب في ارتباك روتين التحميل. من خلال السماح بتسجيل وظائف تحميل متعددة، يمكن للينكس دعم تنسيقي ELF و a.out في نظام تشغيل واحد.

لمزيد من المعلومات، انظر الموضوع المتضمن في الكتاب : 

مفهوم أنظمة التشغيل، الإصدار العاشر Operating System C0nc€pts, 10th €dition



Smile