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

تعريفًا بالموضوع، الرابط في مجال الحوسبة، يعد الرابط أو محرر الارتباط برنامج نظام كمبيوتر يأخذ ملفا واحدا أو أكثر من ملفات الكائنات (ينشأ بواسطة مترجم أو مجمّع) ويجمعها في ملف واحد قابل للتنفيذ أو ملف مكتبة أو ملف «كائن» آخر. يطلق على الإصدار الأبسط الذي يكتب مخرجاته مباشرة في الذاكرة اسم المُحمل، على الرغم من اعتبار التحميل عادة عملية منفصلة. وتعرض الأقسام التالية جوانب أخرى من الموضوع.
محرر الارتباط
ومن ناحية أخرى، يُشير تحرير الارتباط (تسمية IBM) أَو الدمج أَو التجميع (تسميات ICL) إِلى عمل محرر الارتباط أَو التوحيد المتمثل في دمج القطع المختلفة في أزواج ثنائية قابلة للنقل، في حين يعتبر التحميل وإِعادة التوطين في ثنائي مطلق في العنوان المقصود عادة خطوة منفصلة.
في هذا الإطار، في بيئات حاسب مركزي IBM System / 360 مثل OS / 360، بما في ذلك z / OS للحواسب المركزية z / Architecture، يُعرف هذا النوع من البرامج باسم محرر الربط. كما يوحي الاسم، فإِن محرر الروابط لديه القدرة الإِضافية على السماح بإِضافة، واستبدال، و / أو حذف أقسام البرنامج الفردية. تحتوي أنظمة التشغيل مثل OS / 360 على تنسيق لوحدات التحميل القابلة للتنفيذ التي تحتوي على بيانات تكميلية حول الأقسام المكونة للبرنامج، بحيث يمكن استبدال قسم برنامج فردي، وتحديث أجزاء مختلفة من البرنامج بحيث يمكن تغيير مكان العناوين والمراجع المختلفة يتم تصحيحه بواسطة محرر الربط، كجزء من العملية.
كذلك، تتمثل إِحدى مزايا ذلك في أَنه يسمح للصيانة بالبرنامج دون الحاجة إِلى الاحتفاظ بجميع ملفات الكائنات الوسيطة، أَو دون الحاجة إِلى إِعادة تجميع أَقسام البرنامج التي لم تتغير. كما يسمح بتوزيع تحديثات البرنامج في شكل ملفات صغيرة (في الأصل مجموعات بطاقات)، تحتوي فقط على وحدة الكائن المراد استبدالها.ِ في مثل هذه الأنظمة، يكون رمز الكائن في شكل وتنسيق صور بطاقة مثقوبة بحجم 80 بايت، بحيث يمكن إِدخال التحديثات في نظام باستخدام تلك الوسيلة. في الإِصدارات اللاحقة من OS / 360 والأَنظمة اللاحقة، تحتوي وحدات التحميل على بيانات إِضافية حول إِصدارات وحدات المكونات النمطية، لإِنشاء سجل للتحديثات يمكن تتبعه. كما يسمح للشخص بإِضافة هيكل تراكب أَو تغييره أَو إِزالته من وحدة تحميل مرتبطة بالفعل.
علاوةً على ذلك، لا ينبغي تفسير مُصطلح «محرر الروابط» على أَنه يعني أَن البرنامج يعمل في وضع تفاعلي للمستعمل مثل محرر النصوص.ِ الغرض منه هو تنفيذ الوضع الدفعي، حيث يتم توفير أَوامر التحرير من قبل المستعمل في ملفات منظمة بِشكل تسلسلي، مثل البطاقات المثقوبة أَو DASD أَو الشريط المغناطيسي، وغالبا ما يتم استخدام الأشرطة أَثناء التثبيت الأَولي لنظام التشغيل.
الارتباط الديناميكي
يقدم هذا النهج ميزتين:
في هذا الإطار، تسمح الكثير من بيئات أنظمة التشغيل بالربط الديناميكي، مما يؤجل دقة بعض الرموز غير المحددة حتى يتم تشغيل البرنامج.ِ هذا يعني أَن الكود القابل للتنفيذ لا يزال يحتوي على رموز غير محددة، إلى جانب قائمة بالكائنات أَو المكتبات التي ستوفر تعريفات لهذه الرموز. سيؤدي تحميل البرنامج إِلى تحميل هذه الكائنات / المكتبات كذلك، وإِجراء ارتباط نهائي.
من جهة ثانية، يجب تخزين المكتبات المستعملة كثيرا (مثلًا مكتبات النظام القياسية) في مكان واحد فقط، وليس تكرارها في كل ملف قابل للتنفيذ، وبالتالي توفير مساحة محدودة من الذاكرة والقرص. إِذا تم تصحيح خطأ في وظيفة مكتبة عن طريق استبدال المكتبة، فستستفيد جميع البرامج التي تستعملها ديناميكيا من التصحيح بعد إِعادة تشغيلها. يجب إِعادة ربط البرامج التي تضمنت هذه الوظيفة عن طريق الارتباط الثابت أولا.
وفي هذا السياق، تُعرف المكتبة المحدثة غير المتوافقة، المعروفة على نظام Windows باسم " DLL hell "، الملفات التنفيذية التي تعتمد على سلوك الإِصدار السابق من المكتبة إِذا كان الإِصدار الأَحدث غير متوافق مع الإصدارات السابقة بشكل غير صحيح. قد يتم اعتماد أَحد البرامج، جنبًا إِلى جنب مع المكتبات التي يستعملها (مثلًا فيما يتعلق بالصحة أو متطلبات التوثيق أو الأداء) كحزمة، ولكن ليس إِذا كان من الممكن استبدال المكونات (وهذا يناقض كذلك مع التحديثات التلقائية لنظام التشغيل في الأنظمة الهامة؛ في كليهما الحالات ونظام التشغيل والمكتبات جزء من بيئة مؤهلة).
هناك كذلك عيوب:
نقل
من جهة ثانية، بينما يحدث استرخاء التعليمات عادة في وقت الارتباط، يمكن أَن يحدث استرخاء الوحدة الداخلية بالفعل كجزء من عملية التحسين في وقت الترجمة.ِ في بعض الحالات، يمكن أن يحدث الاسترخاء كذلك في وقت التحميل كجزء من عملية النقل أو يتم دمجه مع تقنيات إزالة الشفرة الميتة الديناميكية.
وفي السياق ذاته، نظرا لأَن المترجم ليس لديه معلومات عن تخطيط الكائنات في الإِخراج النهائي، فلا يمكنه الاستفادة من التعليمات الأَقصر أَو الأَكثر كفاءة التي تضع متطلبا على عنوان كائن آخر. مثلًا، يمكن أَن تشير تعليمات القفز إِلى عنوان مطلق أَو إِزاحة من الموقع الحالي، ويمكن التعبير عن الإِزاحة بأَطوال مختلفة اعتمادا على المسافة إِلى الهدف. من خلال إِنشاء التعليمات الأَكثر تحفظا أولا (عادة أَكبر متغير نسبي أو مطلق، اعتمادًا على النظام الأساسي) وإِضافة تلميحات استرخاء، من الممكن استبدال تعليمات أَقصر أَو أَكثر كفاءة أَثناء الارتباط النهائي. فيما يتعلق بتحسينات القفز، يسمى هذا أَيضًا التحجيم التلقائي للقفز. لا يمكن تنفيذ هذه الخطوة إِلا بعد قراءة جميع كائنات الإِدخال وتعيين عناوين مؤقتة؛ يقوم ممر استرخاء الرابط في وقت لاحق بإِعادة تعيين العناوين، مما قد يؤدي بدوره إِلى السماح بحدوث المزيد من عمليات الاسترخاء المحتملة. بشكل عام، تكون التسلسلات المستبدلة أَقصر، مما يسمح لهذه العملية بالتلاقي دائما على أَفضل حل في ظِل ترتيب ثابت للكائنات؛ إِذا لم يكن الأَمر كذلك، يمكن أَن تتعارض عمليات الاسترخاء، ويحتاج الرابط إِلى موازنة مزايا أَي من الخيارين.
LLD - رابط LLVM
ld(1)
ربط ثابت
من جانب آخر، الارتباط الثابت هو نتيجة نسخ الرابط لجميع إِجراءات المكتبة المستعملة في البرنامج إلى الصورة القابلة للتنفيذ.ِ قد يتطلب هذا مساحة قرص وذاكرة أكبر من الارتباط الديناميكي، ولكنه أَكثر قابلية للنقل، لأَنه لا يتطلب وجود المكتبة على النظام الذي يتم تشغيله فيه. يمنع الارتباط الثابت كذلك "DLL h ell"، نظرا لأَن كل برنامج يتضمن بالضبط إصدارات إِجراءات المكتبة التي يتطلبها، دون تعارض مع البرامج المختلفة. لا يتطلب البرنامج الذي يستعمل إِجراءات قليلة من مكتبة فقط تثبيت المكتبة بأَكملها.
إدخالات مدونة Ian Lance Justin Linkers
دليل رابط جنو
إضافةً إلى ذلك، Linkers and Loaders ، مقال في مجلة Linux بقلم Sandeep Grover
علاوةً على ذلك، قائمة مختلفة بمكان الحصول على مجموعة كاملة من الأدوات المجانية لتطوير لغة التجميع
ملخص
علاوةً على ذلك، رموز محددة «خارجية»، تسمى أحيانا رموز «عامة» أو «دخول»، والتي تسمح باستدعائها من قبل وحدات مختلفة، الرموز «الخارجية» غير المعرفة، والتي تشير إلى وحدات نمطية مختلفة حيث يتم تعريف هذه الرموز، ورموز محلية، تستعمل داخليا داخل ملف الكائن لتسهيل النقل.
في هذا الإطار، يعتني الرابط أَيضا بترتيب الكائنات في مساحة عنوان البرنامج. قد يتضمن ذلك إِعادة تحديد موضع الكود الذي يفترض وجود عنوان أساسي محدد في قاعدة مختلفة. نظرًا لأن المترجم نادرًا ما يعرف مكان وجود الكائن، فإِنه غالبا ما يفترض موقعا أساسيا ثابتا (مثلًا، صفر). قد يتضمن نقل رمز الجهاز إعادة استهداف القفزات المطلقة والأحمال والمخازن. قد يحتاج الإِخراج القابل للتنفيذ بواسطة الرابط إلى تمريرة نقل مختلفة عندما يتم تحميله أَخيرًا في الذاكرة (قبل التنفيذ مباشرة). عادة ما يتم حذف هذا التمرير على الأجهزة التي تقدم ذاكرة افتراضية: يتم وضع كل برنامج في مساحة العنوان الخاصة به، لذلك لا يوجد تعارض حتى إِذا تم تحميل جميع البرامج على نفس العنوان الأَساسي. يمكن كذلك حذف هذا التمرير إِذا كان الملف القابل للتنفيذ هو موضع تنفيذي مستقل. في بعض متغيرات Unix، مثل SINTRAN III، كانت العملية التي يقوم بها رابط (تجميع ملفات الكائنات في برنامج) تسمى التحميل (كما هو الحال في تحميل التعليمات البرمجية القابلة للتنفيذ على ملف). بالإِضافة إلى ذلك، فيِ بعض أَنظمة التشغيل، يتعامل نفس البرنامج مع وظائف ربط وتحميل البرنامج (الارتباط الديناميكي).
وفي هذا السياق، تتكون برامج الكمبيوتر عادة من عدة أجزاء أو وحدات؛ هذه الأجزاء/الوحدات لا يلزم تضمينها في ملف كائن واحد، وفي مثل هذه الحالات، تقوم بالإشارة إلى بعضها البعض عن طريق الرموز كعناوين في الوحدات النمطية المختلفة، والتي يتم تعيينها في عناوين الذاكرة عند ربطها للتنفيذ. عادة، يمكن أن يحتوي ملف الكائن على ثلاثة أنواع من الرموز:
علاوةً على ذلك، بالنسبة لأغلب المترجمين، يكون كل ملف كائِن نتيجة تجميع ملف كود مصدر إِدخال واحد. عندما يشتمل البرنامج على ملفات كائنات متعددة، يَقوم الرابط بدمج هذه الملفات في برنامج موحد قابل للتنفيذ، مما يؤدي إِلى حل الرموز أَثناء سيرها. يمكن أَن تأخذ الروابط كائنات من مجموعة تسمى مكتبة أو مكتبة وقت التشغيل. لا تتضمن أغلب الروابط المكتبة بأَكملها في الإِخراج؛ أَنها تشمل الملفات فقط التي يتم الرجوع إِِليها بواسطة ملفات أو مكتبات الكائنات المختلفة.ِ قد يكون ربط المكتبة بالتالي عملية تكرارية، مع بعض الوحدات المرجعية التي تتطلب وحدات إِضافية لربطها، وما إلى ذلك. توجد المكتبات لأغراض متنوعة، وعادة ما يتم ربط مكتبة نظام واحدة أو أكثر بشكل افتراضي.
قراءة متعمقة
- Code: Errata:
- (19 pages)
- روابط خارجية
رابط جنو
- الأُصول المحتملة لاسم "ld" هيَ «LoaD» و "Link eDitor". ]
- رابط جنو هو برنامج مجاني، يتم توزيعه بِموجبِ شروط رخصة جنو العمومية العامة.
- انظر كذلك
- حوسبة
- مراجع
إضافةً إلى ذلك، رابط جنو (أو جنو ld) هو تنفيذ مشروع جنو لأَمر يونكس ld. يقوم GNU ld بتشغيل الرابط، الذي ينشئ ملفا تنفيذيا (أَو مكتبة) من ملفات الكائنات التي تم إِنشاؤها أَثناء تجميع مشروع برمجيِ. يمكن تمرير نص رابط إِلى GNU ld لممارسة سيطرة أَكبر على عملية الربط. رابط جنو هو جزء من GNU Binary Utilities (binutils). يتم توفير نسختين من ld في binutils: نسخة GNU ld التقليدية القائمة على bfd، ونسخة ELF فقط تسمى الذهب.
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟