رابط ديناميكي
الرابط الديناميكي هو ميزة في نظام التشغيل تقوم بتحميل وربط المكتبات الديناميكية للملف التنفيذي أثناء التشغيل ، قبل أو أثناء تنفيذه. على الرغم من اختلاف التفاصيل باختلاف نظام التشغيل، إلا أن الرابط الديناميكي عادةً ما ينسخ محتوى كل مكتبة من وحدة التخزين الدائمة إلى ذاكرة الوصول العشوائي (RAM) ، ويملأ جداول الانتقال ، ويعيد توجيه المؤشرات .
يُشار عادةً إلى عملية الربط بأنها عملية تُنفذ عند تجميع الملف التنفيذي ، بينما يُعد الرابط الديناميكي جزءًا خاصًا من نظام التشغيل يقوم بتحميل المكتبات المشتركة الخارجية في عملية قيد التشغيل ، ثم يربط هذه المكتبات ديناميكيًا بهذه العملية. يُطلق على هذا الأسلوب أيضًا اسم الربط المتأخر .
التطبيقات
مايكروسوفت ويندوز
مكتبة الارتباط الديناميكي (DLL) هي تطبيق مايكروسوفت لمفهوم المكتبة المشتركة في نظامي التشغيل مايكروسوفت ويندوز و OS/2 . عادةً ما تحمل هذه المكتبات امتداد الملف .dll (للمكتبات التي تحتوي على عناصر تحكم ActiveX )، أو .dll ( لبرامج تشغيل النظام القديمة ). تتشابه تنسيقات ملفات DLL مع تنسيقات ملفات EXE في ويندوز ، أي ملف تنفيذي محمول (PE) لأنظمة ويندوز 32 بت و 64 بت ، وملف تنفيذي جديد (NE) لأنظمة ويندوز 16 بت . وكما هو الحال مع ملفات EXE، يمكن أن تحتوي ملفات DLL على التعليمات البرمجية والبيانات والموارد ، بأي تركيبة.DLLOCXDRV
يمكن تسمية ملفات البيانات التي لها نفس تنسيق ملف DLL، ولكن بامتدادات ملفات مختلفة، والتي قد تحتوي فقط على أقسام الموارد، بملفات DLL للموارد. ومن أمثلة هذه الملفات مكتبات واجهة المستخدم متعددة اللغات ذات الامتداد MUI.، ومكتبات الأيقونات التي تحمل أحيانًا الامتداد ICL.، وملفات الخطوط التي تحمل الامتدادين . FONو . [ 1 ]FOT
أنظمة شبيهة بنظام يونكس تستخدم ELF، وأنظمة قائمة على داروين
في معظم الأنظمة الشبيهة بنظام يونكس ، يكون معظم كود الآلة الذي يشكل الرابط الديناميكي عبارة عن ملف تنفيذي خارجي تقوم نواة نظام التشغيل بتحميله وتنفيذه أولاً في مساحة عنوان عملية يتم إنشاؤها حديثًا نتيجةً لاستدعاء execدوال posix_spawnمعينة. عند الربط، يتم تضمين مسار الرابط الديناميكي المطلوب استخدامه في صورة الملف التنفيذي.
عند تحميل ملف تنفيذي، تقرأ نواة نظام التشغيل مسار الرابط الديناميكي منه، ثم تحاول تحميل هذا الملف التنفيذي الآخر وتنفيذه. إذا فشلت هذه المحاولة، على سبيل المثال، لعدم وجود ملف بهذا المسار، فإن محاولة تنفيذ الملف التنفيذي الأصلي تفشل. بعد ذلك، يقوم الرابط الديناميكي بتحميل صورة الملف التنفيذي الأولية وجميع المكتبات المرتبطة ديناميكيًا التي يعتمد عليها، ثم يبدأ تشغيل الملف التنفيذي. ونتيجة لذلك، يصبح مسار الرابط الديناميكي جزءًا من واجهة التطبيق الثنائية لنظام التشغيل .
الأنظمة التي تستخدم ELF
في الأنظمة الشبيهة بنظام يونكس التي تستخدم ملفات ELF للصور التنفيذية والمكتبات الديناميكية، مثل سولاريس ، وإصدارات 64 بت من HP-UX ، ولينكس ، وفري بي إس دي ، ونت بي إس دي ، وأوبن بي إس دي ، ودراغون فلاي بي إس دي ، يُضمَّن مسار الرابط الديناميكي المطلوب استخدامه أثناء عملية الربط في .interpقسم من مقطع الملف التنفيذي PT_INTERP. في هذه الأنظمة، يمكن تحديد المكتبات المشتركة المحملة ديناميكيًا من خلال لاحقة اسم الملف .so(الكائن المشترك).
يمكن التأثير على الرابط الديناميكي لتعديل سلوكه أثناء تنفيذ البرنامج أو ربطه، ويمكن الاطلاع على أمثلة لذلك في صفحات دليل رابط وقت التشغيل لأنظمة شبيهة بنظام يونكس. [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] يتمثل أحد التعديلات الشائعة لهذا السلوك في استخدام متغيرات البيئةLD_LIBRARY_PATH ، التي تُعدّل عملية ربط وقت التشغيل من خلال البحث عن المكتبات المشتركة في مواقع بديلة، ومن خلال تحميل وربط المكتبات التي لا يتم تحميلها وربطها في الأحوال العادية. ومن الأمثلة على ذلك مكتبة zlibc، [ 7 ] المعروفة أيضًا باسم zlibc، [ a ] والتي تُسهّل فك الضغط الشفاف عند استخدامها من خلال ثغرة zlibc ؛ وبالتالي، يُمكن قراءة بيانات الملفات المضغوطة مسبقًا (gzip) على أنظمة BSD ولينكس كما لو كانت غير مضغوطة، مما يسمح للمستخدم بإضافة ضغط شفاف إلى نظام الملفات الأساسي، مع بعض التحفظات. تتميز هذه الآلية بالمرونة، مما يسمح بتكييف الكود نفسه بسهولة لإجراء معالجة إضافية أو بديلة للبيانات أثناء قراءة الملف، قبل تزويد عملية المستخدم التي طلبتها بهذه البيانات. [ 8 ] [ 9 ]LD_PRELOADuncompress.soLD_PRELOAD
الأنظمة القائمة على داروين
في نظام التشغيل داروين من آبل ، وفي أنظمة التشغيل المبنية عليه، مثل macOS و iOS و iPadOS و tvOS و watchOS و visionOS ، يُضمَّن مسار الرابط الديناميكي المطلوب استخدامه أثناء عملية الربط في أحد أوامر تحميل Mach-O في الصورة التنفيذية. في هذه الأنظمة، يمكن تحديد المكتبات المشتركة المحملة ديناميكيًا إما من خلال لاحقة اسم الملف .dylibأو من خلال موقعها داخل حزمة إطار العمل.
لا يقتصر دور الرابط الديناميكي على ربط الملف التنفيذي المستهدف بالمكتبات المشتركة فحسب، بل يضع أيضًا وظائف لغة الآلة في نقاط عناوين محددة في الذاكرة، والتي يعرفها الملف التنفيذي المستهدف أثناء عملية الربط. عندما يرغب ملف تنفيذي في التفاعل مع الرابط الديناميكي، فإنه ببساطة ينفذ تعليمات الاستدعاء أو القفز الخاصة بالآلة إلى إحدى نقاط العناوين المعروفة هذه. غالبًا ما تتفاعل الملفات التنفيذية على منصات داروين مع الرابط الديناميكي أثناء تنفيذ العملية؛ بل من المعروف أن الملف التنفيذي قد يتفاعل مع الرابط الديناميكي، مما يؤدي إلى تحميل المزيد من المكتبات وحل المزيد من الرموز، بعد ساعات من تشغيله الأولي. يعود سبب تفاعل العديد من البرامج لأنظمة التشغيل المبنية على داروين مع الرابط الديناميكي بشكل متكرر إلى واجهات برمجة تطبيقات Cocoa و Cocoa Touch من Apple ، المستخدمة في معظم تطبيقات هذه الأنظمة، ولغة Objective-C ، وهي اللغة التي تُنفذ بها هذه الواجهات (راجع المقالات الرئيسية لمزيد من المعلومات).
يمكن إجبار الرابط الديناميكي على تعديل بعض سلوكياته؛ إلا أنه على عكس أنظمة التشغيل الأخرى الشبيهة بنظام يونكس، فإن هذه التعديلات عبارة عن تلميحات يمكن للرابط الديناميكي تجاهلها (ويتجاهلها أحيانًا). يمكن الاطلاع على أمثلة لذلك في dyldصفحة دليل [ 10 ] . ومن التعديلات الشائعة لهذا السلوك استخدام متغيري البيئة `<اسم المتغير DYLD_FRAMEWORK_PATH>` و` DYLD_PRINT_LIBRARIES<اسم المتغير>`. يُعدّل المتغير الأول مسار بحث الملفات التنفيذية عن المكتبات المشتركة، بينما يعرض المتغير الثاني أسماء المكتبات أثناء تحميلها وربطها.
يُعدّ رابط macOS الديناميكي من Apple مشروعًا مفتوح المصدر تم إصداره كجزء من Darwin ويمكن العثور عليه في مشروع Apple مفتوح المصدر dyld. [ 11 ]
أنظمة شبيهة بنظام يونكس تعتمد على XCOFF
في أنظمة التشغيل الشبيهة بنظام Unix التي تستخدم XCOFF ، مثل AIX ، تستخدم المكتبات المشتركة المحملة ديناميكيًا لاحقة اسم الملف .a.
يمكن التأثير على الرابط الديناميكي لتعديل سلوكه أثناء تنفيذ البرنامج أو ربطه. ومن التعديلات الشائعة لهذا السلوك استخدام LIBPATHمتغير البيئة . يُعدّل هذا المتغير عملية الربط أثناء التشغيل من خلال البحث عن المكتبات المشتركة في مواقع بديلة، ومن خلال تحميل وربط المكتبات التي لا يتم تحميلها وربطها في الوضع الافتراضي.
نظام التشغيل OS/360 والأنظمة اللاحقة له
يتم الربط الديناميكي من برامج لغة التجميع في نظام التشغيل IBM OS/360 والإصدارات اللاحقة عادةً باستخدام تعليمة ماكرو LINK التي تحتوي على تعليمة استدعاء المشرف ، والتي بدورها تُفعّل إجراءات نظام التشغيل التي تجعل وحدة المكتبة المراد ربطها متاحة للبرنامج. قد توجد وحدات المكتبة في "STEPLIB" أو "JOBLIB" المحددة في بطاقات التحكم، والتي لا تتوفر إلا لتنفيذ محدد للبرنامج، أو في مكتبة مُضمنة في قائمة الربط LINKLIST في مكتبة المعلمات PARMLIB (المحددة عند بدء تشغيل النظام)، أو في "منطقة حزمة الربط" حيث يتم تحميل وحدات قابلة لإعادة الدخول عند بدء تشغيل النظام.
Multics
في نظام التشغيل Multics، تُعتبر جميع الملفات، بما فيها الملفات التنفيذية، مقاطع . عند استدعاء روتين ليس جزءًا من المقطع الحالي، يقوم النظام بالبحث عن المقطع المشار إليه، سواءً في الذاكرة أو على القرص، وإضافته إلى مساحة عنوان العملية الجارية. الربط الديناميكي هو الطريقة المعتادة للتشغيل، بينما يُعد الربط الثابت (باستخدام الرابط ) استثناءً.
كفاءة
يُعدّ الربط الديناميكي أبطأ عمومًا (يتطلب دورات معالجة أكثر) من الربط أثناء وقت الترجمة، [ 12 ] كما هو الحال بالنسبة لمعظم العمليات التي تُنفّذ أثناء وقت التشغيل. مع ذلك، يُمكن تقليل وقت التحميل باستخدام "الربط الكسول"، وهي عملية يتم فيها ربط استدعاءات دوال المكتبة بالتنفيذ (داخل المكتبة) فقط عند حدوث الاستدعاء الأول؛ ومن الآثار الجانبية لذلك، أنه بمجرد تحميل البرنامج، سيكون الاستدعاء الأول للدالة أبطأ، حيث يتم نقل وقت الربط بها من وقت بدء التشغيل إلى وقت التشغيل.
مع ذلك، غالبًا ما يكون الربط الديناميكي أكثر كفاءة في استخدام المساحة (على القرص وفي الذاكرة أثناء التشغيل). عند ربط مكتبة بشكل ثابت، يرتبط كل برنامج قيد التشغيل بنسخته الخاصة من دوال المكتبة التي يتم استدعاؤها. لذلك، إذا تم استدعاء مكتبة ما عدة مرات بواسطة برامج مختلفة، فإن الدوال نفسها في تلك المكتبة تتكرر في عدة مواقع في ذاكرة النظام. استخدام المكتبات الديناميكية المشتركة يعني أنه بدلًا من ربط كل ملف بنسخته الخاصة من المكتبة أثناء الترجمة، مما قد يؤدي إلى إهدار مساحة الذاكرة، يتم تخزين نسخة واحدة فقط من المكتبة في الذاكرة في كل مرة، مما يوفر مساحة ذاكرة لاستخدامها في أماكن أخرى. [ 13 ] بالإضافة إلى ذلك، في الربط الديناميكي، لا يتم تحميل المكتبة إلا إذا كانت قيد الاستخدام فعليًا. [ 14 ]
انظر أيضاً
ملحوظات
مراجع
- ↑ شركة مايكروسوفت. "إنشاء ملف DLL للموارد فقط" . مكتبة شبكة مطوري مايكروسوفت .
- ↑ : رابط/محمل ديناميكي لنظام سولاريس – دليل مرجعي لأوامر مستخدم سولاريس 11.4
- ↑ – دليل مبرمج لينكس – أوامر الإدارة والأوامر ذات الامتيازات من Manned.org
- ↑ : رابط/محمل ديناميكي لنظام FreeBSD – دليل أوامر FreeBSD العامة
- ↑ : رابط/محمل NetBSD الديناميكي – دليل أوامر NetBSD العامة
- ↑ : رابط/محمل OpenBSD الديناميكي – دليل أوامر OpenBSD العامة
- ↑ "ZLIBC - الوصول الشفاف إلى الملفات المضغوطة" . مؤرشف من الأصل بتاريخ 2000-06-04.
- ↑ "uncompress.so" . delorie.com . تم الاطلاع عليه بتاريخ 2014-07-04 .
- ↑ "zlibc.conf" . delorie.com . تم الاطلاع عليه بتاريخ 2014-07-04 .
- ↑ : رابط/محمل ديناميكي لنظامي التشغيل داروين/ماك أو إس إكس – دليل الأوامر العامة لنظامي التشغيل داروين وماك أو إس
- ↑ شركة آبل. "المصادر المفتوحة - الإصدارات" . apple.com . تم الاطلاع عليه بتاريخ 4 يوليو 2014 .
- ↑ شينغيان، جيانغ (2009). "مبادئ أنظمة التشغيل: الربط والتحميل" (ملف PDF) . جامعة ولاية كارولينا الشمالية . تم الاطلاع عليه بتاريخ 24-09-2020 .
- ↑ جونز، م. (28-08-2008). "تشريح المكتبات الديناميكية لنظام لينكس" . آي بي إم . تم الاسترجاع في 24-09-2020 .
- ↑ سيفيلوتي، بول (أغسطس 2012). "الربط والتحميل الديناميكي" (ملف PDF) . جامعة ولاية أوهايو . تم الاطلاع عليه بتاريخ 24 سبتمبر 2020 .
للمزيد من القراءة
- ليفين، جون ر. (2000) [أكتوبر 1999]. الروابط والمحملات . سلسلة مورغان كوفمان في هندسة البرمجيات والبرمجة ( الطبعة الأولى). سان فرانسيسكو، الولايات المتحدة الأمريكية: مورغان كوفمان . ISBN 1-55860-496-0. OCLC 42413382 . تم الاسترجاع في 12 يناير 2020 .
{{cite book}}: CS1 maint: deprecated archiveal service ( link ) Code:تصحيحات:
روابط خارجية
- الربط والتحميل الديناميكي ، IECC.com
- الربط الديناميكي في لينكس وويندوز، الجزء الأول ، Symantec.com
- تشريح المكتبات الديناميكية لنظام لينكس ، IBM.com
- مكتبات الحاسوب
- ثغرات أمنية في الحاسوب
- المترجمون
