برنامج التحميل (الحوسبة)

في مجال الحوسبة ، يُعدّ المُحمِّل جزءًا من نظام التشغيل المسؤول عن تحميل البرامج والمكتبات . وهو إحدى المراحل الأساسية في عملية بدء تشغيل أي برنامج، حيث يقوم بوضع البرامج في الذاكرة وتجهيزها للتنفيذ. يتضمن تحميل البرنامج إما ربط الذاكرة أو نسخ محتويات الملف التنفيذي الذي يحتوي على تعليمات البرنامج إلى الذاكرة، ثم تنفيذ المهام التحضيرية الأخرى اللازمة لتجهيز الملف التنفيذي للتشغيل. بمجرد اكتمال التحميل، يبدأ نظام التشغيل تشغيل البرنامج عن طريق تمرير التحكم إلى رمز البرنامج المُحمَّل.

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

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

المسؤوليات

في أنظمة يونكس والأنظمة الشبيهة بيونكس ، يُعدّ المُحمِّل هو المسؤول عن معالجة استدعاء النظامexecve() . [ 1 ] تشمل مهام مُحمِّل يونكس ما يلي:

  1. التحقق (الأذونات، متطلبات الذاكرة، إلخ)؛
  2. ربط الكائن القابل للتنفيذ من القرص إلى الذاكرة الرئيسية ؛
  3. نسخ وسائط سطر الأوامر إلى الذاكرة الافتراضية؛
  4. تهيئة السجلات (مثل مؤشر المكدس)؛
  5. الانتقال إلى نقطة دخول البرنامج ( _start).

في نظام التشغيل مايكروسوفت ويندوز 7 والإصدارات الأحدث، يكون المحمل هو LdrInitializeThunkالدالة الموجودة في ملف ntdll.dll ، والتي تقوم بما يلي:

  1. تهيئة الهياكل في مكتبة الارتباط الديناميكي نفسها (أي الأقسام الحرجة ، قوائم الوحدات النمطية)؛
  2. التحقق من صحة الملف القابل للتنفيذ قبل التحميل؛
  3. إنشاء كومة (عبر الدالة RtlCreateHeap
  4. تخصيص كتلة متغيرات البيئة وكتلة المسار؛
  5. إضافة الملف التنفيذي وNTDLL إلى قائمة الوحدات النمطية ( قائمة مرتبطة بشكل مزدوج
  6. تحميل ملف KERNEL32.DLL للحصول على العديد من الوظائف المهمة، على سبيل المثال BaseThreadInitThunk؛
  7. تحميل واردات الملف التنفيذي (أي مكتبات الارتباط الديناميكي ) بشكل متكرر (التحقق من واردات الاستيراد، وواردات الاستيراد، وما إلى ذلك)؛
  8. في وضع التصحيح، يتم رفع نقطة توقف النظام؛
  9. تهيئة ملفات DLL؛
  10. جمع القمامة؛
  11. استدعاء NtContinueمعلمة السياق المعطاة لدالة التحميل (أي الانتقال إلى RtlUserThreadStart، مما سيؤدي إلى بدء تشغيل الملف التنفيذي)

نقل اللودر

تحتاج بعض أنظمة التشغيل إلى مُحمِّلات إعادة التموضع ، التي تُعدِّل العناوين (المؤشرات) في الملف التنفيذي للتعويض عن الاختلافات في عنوان بدء التحميل. وتشمل هذه الأنظمة تلك التي لا يُحمَّل فيها البرنامج دائمًا في نفس الموقع ضمن مساحة العناوين (الافتراضية)، والتي تكون فيها المؤشرات عناوين مطلقة وليست إزاحات من عنوان البرنامج الأساسي . ومن الأمثلة المعروفة على ذلك نظام التشغيل OS/360 من IBM لأجهزة System/360 الرئيسية، وأنظمة التشغيل اللاحقة له، بما في ذلك z/OS لأجهزة z/Architecture الرئيسية.

نظام التشغيل OS/360 ومشتقاته

في نظام التشغيل OS/360 والأنظمة المنحدرة منه، تسمى مرفق نظام التشغيل (المميز) IEWFETCH، [ 2 ] وهو مكون داخلي لمشرف نظام التشغيل، في حين أن تطبيق LOADER (غير المميز) يمكنه أداء العديد من الوظائف نفسها، بالإضافة إلى وظائف محرر الربط، وهو خارجي تمامًا عن مشرف نظام التشغيل (على الرغم من أنه يستخدم بالتأكيد العديد من خدمات المشرف).

تستخدم تقنية IEWFETCH برامج قنوات متخصصة للغاية ، ومن الممكن نظريًا تحميل ونقل ملف تنفيذي كامل خلال دورة واحدة لقرص التخزين المباشر (حوالي 16.6  مللي ثانية كحد أقصى، و8.3  مللي ثانية كمعدل، على  محركات الأقراص القديمة بسرعة 3600 دورة في الدقيقة). بالنسبة لوحدات التحميل التي يتجاوز حجمها مسارًا واحدًا، فمن الممكن أيضًا تحميل ونقل الوحدة بأكملها دون فقدان دورة واحدة من القرص.

يتضمن IEWFETCH أيضًا مرافق لما يسمى بالهياكل المتراكبة، مما يسهل تشغيل الملفات التنفيذية الكبيرة جدًا في نموذج ذاكرة دنيا (بحجم 44  كيلوبايت في بعض إصدارات نظام التشغيل، ولكن 88  كيلوبايت و128  كيلوبايت أكثر شيوعًا).

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

يُسمى تطبيق محرر الربط الخاص بالنظام IEWL. [ 3 ] تتمثل الوظيفة الرئيسية لـ IEWL في ربط وحدات التحميل (البرامج القابلة للتنفيذ) ووحدات الكائنات (مخرجات، على سبيل المثال، المجمعات والمترجمات)، بما في ذلك "الاستدعاءات التلقائية" للمكتبات (الوظائف المدمجة في لغات البرمجة عالية المستوى)، في تنسيق يسهل تحميله بكفاءة عالية بواسطة IEWFETCH. يتوفر عدد كبير من خيارات التحرير، ولكن في التطبيقات التقليدية، لا يُستخدم عادةً إلا عدد قليل منها.

يتضمن تنسيق وحدة التحميل "سجل نصي" أولي، يليه مباشرة "سجل النقل و/أو سجل التحكم" لهذا السجل النصي، يليه المزيد من حالات أزواج السجل النصي وسجل النقل و/أو سجل التحكم، حتى نهاية الوحدة.

عادة ما تكون سجلات النص كبيرة جدًا؛ أما سجلات النقل و/أو التحكم فتكون صغيرة لأن مخازن سجلات النقل و/أو التحكم الثلاثة الخاصة بـ IEWFETCH ثابتة عند 260 بايت (من المؤكد أنه من الممكن وجود سجلات نقل و/أو تحكم أصغر، ولكن 260 بايت هو الحد الأقصى الممكن، ويضمن IEWL الامتثال لهذا القيد، عن طريق إدراج سجلات نقل إضافية، حسب الحاجة، قبل سجل النص التالي، إذا لزم الأمر؛ في هذه الحالة الخاصة، قد يكون تسلسل السجلات كالتالي: ...، سجل نص، سجل نقل، ...، سجل تحكم، سجل نص، ...).

يُستخدم بايت خاص ضمن مخزن بيانات سجل النقل و/أو التحكم كمنطقة اتصال "معطلة" (بتات متداخلة)، ويُهيأ بقيمة فريدة. يتم ضبط بت مقاطعة التحكم البرمجي (PIC) لقراءة CCW لهذا السجل. وبذلك، يتم إخطار المعالج عند وصول القناة إلى CCW عبر مخرج IOS خاص . عند هذه النقطة، يدخل المعالج في حلقة "معطلة" (تُسمى أحيانًا "أقصر حلقة في العالم"). بمجرد أن يتغير هذا البايت عن قيمته الأولية، يخرج المعالج من حلقة البتات، ويحدث النقل، خلال "الفجوة" في الوسائط بين سجل النقل و/أو التحكم وسجل النص التالي. إذا انتهى النقل قبل السجل التالي، فسيتم تغيير NOP CCW الذي يلي القراءة إلى TIC، وسيستمر التحميل والنقل باستخدام المخزن التالي؛ وإلا، فستتوقف القناة عند NOP CCW، حتى يُعاد تشغيلها بواسطة IEWFETCH عبر مخرج IOS خاص آخر. توجد المخازن الثلاثة في قائمة انتظار دائرية مستمرة، يشير كل منها إلى المخزن التالي، ويشير الأخير إلى الأول، ويتم إعادة استخدام المخازن الثلاثة باستمرار أثناء عملية التحميل وإعادة التوطين.

وبذلك، يستطيع برنامج IEWFETCH تحميل ونقل وحدة تحميل بأي حجم عملي، وفي أقل وقت ممكن.

الروابط الديناميكية

تُعد أدوات التحميل بالربط الديناميكي نوعًا آخر من أدوات التحميل التي تقوم بتحميل وربط المكتبات المشتركة (مثل ملفات .so أو ملفات .dll أو ملفات .dylib) بالبرامج قيد التشغيل المحملة بالفعل.

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

انظر أيضاً

مراجع

  1. "exec" . المواصفات الأساسية لمجموعة Open Group، الإصدار 6، معيار IEEE 1003.1، إصدار 2004. مجموعة Open Group . تم الاسترجاع في 23 يونيو 2008 .
  2. شركة آي بي إم (1972). مشرف نظام التشغيل آي بي إم إم في تي (ملف PDF) .
  3. شركة IBM (1972). محرر ومحمل ربط نظام التشغيل IBM (ملف PDF) .