الرابط (الحوسبة)

رسم توضيحي لعملية الربط. يتم تجميع ملفات الكائنات والمكتبات الثابتة في مكتبة جديدة أو ملف تنفيذي.

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

يُطلق على النسخة الأبسط التي تكتب مخرجاتها مباشرةً إلى الذاكرة اسم المُحمِّل ، على الرغم من أن التحميل يُعتبر عادةً عملية منفصلة. [ 1 ] [ 2 ]

ملخص

تتكون برامج الكمبيوتر عادةً من عدة أجزاء أو وحدات؛ ولا يلزم أن تكون هذه الأجزاء/الوحدات موجودة داخل ملف كائن واحد ، وفي مثل هذه الحالات تشير إلى بعضها البعض باستخدام الرموز كعناوين للوحدات الأخرى، والتي يتم تعيينها في عناوين الذاكرة عند ربطها للتنفيذ.

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

عادةً، يمكن أن يحتوي ملف الكائن على ثلاثة أنواع من الرموز:

  • تم تعريف رموز "خارجية"، تسمى أحيانًا رموز "عامة" أو "إدخال"، والتي تسمح باستدعائها بواسطة وحدات أخرى،
  • الرموز "الخارجية" غير المعرّفة، والتي تشير إلى وحدات أخرى حيث تم تعريف هذه الرموز، و
  • الرموز المحلية، المستخدمة داخليًا داخل ملف الكائن لتسهيل عملية النقل .

بالنسبة لمعظم المترجمات، يكون كل ملف كائن ناتجًا عن ترجمة ملف واحد من ملفات التعليمات البرمجية المصدرية. عندما يتألف البرنامج من عدة ملفات كائن، يقوم الرابط بدمج هذه الملفات في برنامج تنفيذي موحد، مع تحليل الرموز أثناء عملية الترجمة.

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

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

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

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

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

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

يوفر هذا النهج ميزتين:

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

وهناك أيضاً بعض العيوب:

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

قد تسمح البيئات المغلقة أو الافتراضية لمسؤولي النظام بالتخفيف من هذه المزايا والعيوب الفردية أو الموازنة بينها.

الربط الثابت

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

الانتقال

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

بينما يحدث تخفيف التعليمات عادةً أثناء عملية الربط، يمكن أن يحدث تخفيف التعليمات داخل الوحدة كجزء من عملية التحسين أثناء الترجمة . في بعض الحالات، يمكن أن يحدث التخفيف أيضًا أثناء التحميل كجزء من عملية إعادة التوطين أو بالاشتراك مع تقنيات إزالة التعليمات البرمجية غير المستخدمة ديناميكيًا .

محرر الروابط

في أنظمة تشغيل الحواسيب المركزية IBM System/360 و IBM Z ، مثل OS/360 والإصدارات اللاحقة ، يُعرف هذا النوع من البرامج باسم محرر الربط . وكما يوحي الاسم، يتمتع محرر الربط بقدرة إضافية على إضافة أقسام البرنامج الفردية أو استبدالها أو حذفها. تحتوي أنظمة التشغيل، مثل OS/360، على تنسيق لوحدات التحميل التنفيذية يتضمن بيانات تكميلية حول أقسام البرنامج، مما يسمح باستبدال قسم معين من البرنامج وتحديث أجزاء أخرى منه، بحيث يقوم محرر الربط بتصحيح العناوين القابلة للنقل والمراجع الأخرى كجزء من العملية.

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

لا ينبغي تفسير مصطلح "محرر الروابط" على أنه يعني أن البرنامج يعمل في وضع تفاعلي مع المستخدم مثل محرر النصوص. فهو مصمم للتنفيذ في وضع الدُفعات، حيث يُدخل المستخدم أوامر التحرير في ملفات مُنظمة تسلسليًا، مثل البطاقات المثقبة أو أقراص التخزين ذات السعة المباشرة أو الشريط المغناطيسي .

يشير تحرير الربط ( مصطلحات IBM ) أو التوحيد أو التجميع ( مصطلحات ICL ) إلى عملية قيام محرر الربط أو الموحد بدمج الأجزاء المختلفة في ملف ثنائي قابل للنقل، بينما تُعتبر عملية التحميل والنقل إلى ملف ثنائي مطلق في العنوان المستهدف خطوة منفصلة عادةً. [ 2 ]

نصوص التحكم في الرابط

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

تطبيقات بارزة

يونكس والأنظمة الشبيهة بيونكس

في أنظمة يونكس والأنظمة الشبيهة بيونكس، يُستدعى الرابط الثابت عادةً عبر الأمر `loader` ld، وهو اختصار لـ `Loader` أو `Link eDitor` . استُخدم مصطلح "loader" لوصف عملية تحميل الرموز الخارجية من برامج أخرى أثناء عملية الربط. [ 4 ] (استُخدم هذا المصطلح في أنظمة تشغيل أخرى أيضًا. على سبيل المثال، في SINTRAN III ، كان الربط (تجميع ملفات الكائنات في برنامج) يُسمى تحميلًا - كما في تحميل التعليمات البرمجية القابلة للتنفيذ في ملف. [ 5 ] )

جنو

يُعدّ GNU ld، وهو جزء من أدوات GNU الثنائية (binutils)، نسخة مشروع GNU من الرابط الثابت لنظام Unix. يمكن تمرير نص برمجي للرابط إلى GNU ld للتحكم الدقيق في عملية الربط. [ 6 ] يتوفر إصداران من ld في binutils: الإصدار التقليدي GNU ld المبني على bfd ، وإصدار مُبسّط يدعم ملفات ELF فقط يُسمى gold .

رابط مشروع LLVM ،صُممت أداة lld لتكون متوافقة مع البرامج الأخرى، [ 7 ] ويمكن استخدامها مباشرةً مع مُصرّف GNU. أما أداة mold، فهي بديل آخر متوافق مع البرامج الأخرى، وتتميز بقدرة عالية على التوازي وسرعة أكبر، كما أنها مدعومة من أدوات GNU. [ 8 ]

انظر أيضاً

مراجع

  1. محرر ومحمل ربط نظام التشغيل من IBM (ملف PDF) . شركة IBM . 1972. مؤرشف (ملف PDF) من الأصل بتاريخ 2020-03-06 . تم الاطلاع عليه بتاريخ 2020-03-07 .
  2. 1 2 بارون، ديفيد ويليام (1978) [1971، 1969]. "5.7. محررات ومجمعات الربط". كُتبت في جامعة ساوثهامبتون ، ساوثهامبتون، المملكة المتحدة. في فلوريتين، ج. جون (محرر). المجمعات والمحملات . دراسات حاسوبية (الطبعة الثالثة ). نيويورك، الولايات المتحدة: إلسيفير نورث هولاند. الصفحات 65-66 . ISBN   0-444-19462-2. إل سي سي إن 78-19961 . 
  3. سالومون، ديفيد (فبراير 1993) [1992]. "8.2.3 التحجيم التلقائي للقفز" (ملف PDF) . كُتب في جامعة ولاية كاليفورنيا، نورثريدج، كاليفورنيا، الولايات المتحدة الأمريكية. في: تشيفرز، إيان د. (محرر). المُجمِّعات والمُحمِّلات . سلسلة إليس هوروود في الحواسيب وتطبيقاتها ( الطبعة الأولى). تشيستر، غرب ساسكس، المملكة المتحدة: إليس هوروود المحدودة / مجموعة سيمون وشوستر الدولية . الصفحات 237-238 . ISBN   0-13-052564-2تمت أرشفة الملف (PDF) من النسخة الأصلية بتاريخ 23 مارس 2020. تم الاطلاع عليه بتاريخ 1 أكتوبر 2008 .(xiv+294+4 صفحات)
  4. دليل مبرمج يونكس الإصدار 6ld(1)  
  5. دليل مستخدم BRF-LINKER . أغسطس 1984. ND-60.196.01.
  6. "أدوات GNU الثنائية: نصوص الربط" . 18-07-2018. مؤرشف من الأصل في 06-03-2020 . تم الاطلاع عليه في 18-01-2019 .
  7. "LLD - رابط LLVM — وثائق lld 14" . lld.llvm.org .
  8. "يضيف GCC 12 دعمًا لاستخدام Mold Linker " . www.phoronix.com

للمزيد من القراءة