نقل (حوسبة)

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

ويتم نقل عادة عن طريق رابط في وقت الارتباط، ولكن يمكن أيضا أن يتم ذلك في وقت التحميل من قبل الانتقال محمل، أو في وقت التشغيل من قبل برنامج تشغيل نفسه. تتجنب بعض الأبنية النقل تمامًا عن طريق تأجيل تعيين العنوان لوقت التشغيل؛ يُعرف هذا باسم حساب العنوان الصفري.

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

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

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

### دوز وا وندوز 16 بت
المؤشرات البعيدة (مؤشرات 32 بت مع مقطع: الإزاحة، تُستخدم لمعالجة مساحة ذاكرة 20 بت 640 كيلوبايت المتاحة لبرامج DOS)، والتي تشير إلى رمز أو بيانات داخل DOS قابل للتنفيذ (EXE)، لا تحتوي على مقاطع مطلقة، لأن يعتمد العنوان الفعلي للرمز / البيانات على مكان تحميل البرنامج في الذاكرة وهذا غير معروف حتى يتم تحميل البرنامج.

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

### ويندوز 32 بت
مع أنظمة تشغيل وندوز 32 بت، ليس من الضروري توفير جداول إعادة تحديد موقع لملفات EXE، نظرًا لأنها أول صورة يتم تحميلها في مساحة العنوان الافتراضية، وبالتالي سيتم تحميلها على العنوان الأساسي المفضل لديهم.

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

### نظام التشغيل وندوز 64 بت
عند تشغيل ثنائيات 64 بت أصلية على نظام التشغيل وندوز فيستا والإصدارات الأحدث، فإن ASLR إلزامي، وبالتالي لا يمكن حذف أقسام النقل من قبل المترجم.

### أنظمة شبيهة بيونكس
يسمح التنسيق القابل للتنفيذ والصيغة القابلة للربط (ELF) وتنسيق المكتبة المشتركة الذي تستخدمه معظم الأنظمة الشبيهة بيونكس بتحديد عدة أنواع من إعادة التوطين.

## إجراء النقل
يقرأ الرابط معلومات المقطع وجداول النقل في ملفات الكائنات وينفذ عملية النقل عن طريق:

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

## مثال
يستخدم المثال التالي بنية مكس ولغة التجميع مكسال الخاصة بدونالد كانوت المبادئ هي نفسها لأي بنية، رغم أن التفاصيل ستتغير.
يسار|لاإطار|435x435بك

* (أ) *يتم تجميع برنامج SUBR* لإنتاج ملف كائن (B)، يظهر ككود الجهاز والمجمع. قد يبدأ المترجم الشفرة المترجمة في موقع عشوائي، وغالبًا ما يكون الموقع 1 كما هو موضح. يحتوي الموقع 13 على رمز الآلة لتعليمات الانتقال إلى العبارة *ST* في الموقع 5.
* (ج) إذا *تم ربط SUBR* لاحقًا برمز آخر، فقد يتم تخزينه في مكان آخر غير 1. في هذا المثال، يضعه الرابط في الموقع 120. يجب **نقل** العنوان في تعليمات القفز، والتي هي الآن في موقع 133، للإشارة إلى الموقع الجديد من رمز للبيان *ST،* الآن 125. [1 61 هو مبين في التعليمات هي رمز الجهاز تمثيل MIX 125].
* (د) عند تحميل البرنامج في الذاكرة لتشغيله، يمكن تحميله في مكان آخر غير الموقع المعين من قبل الرابط. يوضح هذا المثال *SUBR* الآن في الموقع 300. يحتاج العنوان الموجود في تعليمات الانتقال، الآن في 313، إلى إعادة نقله مرة أخرى بحيث يشير إلى الموقع المحدث لـ *ST* 305. [4 49 هو تمثيل آلة MIX لـ 305].

## انظر أيضًا

* الرابط (الحوسبة)
* المكتبة (الحوسبة)
* ملف الكائن
* جمع القمامة

## مراجع

## مواضيع ذات صلة
* 
*  https://archive.org/stream/dr_dobbs_journal_vol_03/dr_dobbs_journal_vol_03_djvu.txt https://web.archive.org/web/20170819141800/http://www.retrotechnology.com/dri/d_dri_refs.html https://web.archive.org/web/20170819173516/http://archive.computerhistory.org/resources/access/text/2016/12/102762506-05-01-acc.pdf (This "resize" method, named *page boundary relocation*, could be applied statically to a CP/M-80 disk image using  in order to maximize the TPA for programs to run. It was also utilized dynamically by the CP/M debugger Dynamic Debugging Tool (DDT) to relocate itself into higher memory. The same approach was independently developed by Bruce Van Natta of IMS Associates to produce relocatable PL/M code. As *paragraph boundary relocation*, another variant of this method was later utilized by dynamically HMA self-relocating TSRs like KEYB، SHARE, and NLSFUNC under DR DOS&nbsp;6.0 and higher. A much more sophisticated and byte-level granular method based on a somewhat similar approach was independently conceived and implemented by Matthias R. Paul and Axel C. Frinke for their dynamic dead-code elimination to dynamically minimize the runtime footprint of resident drivers and TSRs (like FreeKEYB).)
*  https://ethw.org/Milestones:The_CP/M_Microcomputer_Operating_System,_1974https://www.youtube.com/watch?v=HO6IPpL0y8g (33 pages)
*   
* 
* 
* 
* 
*  (2+xiv+270+6 pages)
* 
* 
*  https://www.seasip.info/Cpm/amsfid.html#PRL%20file%20format
* 
* 
*  https://archive.org/stream/80-microcomputing-magazine-1983-04/80Microcomputing_0483_djvu.txthttps://archive.org/download/80-microcomputing-magazine-1983-04/80Microcomputing_0483_text.pdf
*  https://archive.org/stream/80-microcomputing-magazine-1985-04/80Microcomputing_0485_djvu.txthttps://archive.org/download/80-microcomputing-magazine-1985-04/80Microcomputing_0485_text.pdf
*  https://archive.org/stream/the-computer-journal-33/tcj_33_July-August_1988_djvu.txthttps://archive.org/download/the-computer-journal-33/tcj_33_July-August_1988_text.pdf
*  https://archive.org/stream/the-computer-journal-34/tcj_34_September-October_1988_djvu.txthttps://archive.org/download/the-computer-journal-34/tcj_34_September-October_1988_text.pdf
* 

تصنيف:مكتبات برمجية
تصنيف:برمجة
تصنيف:تنفيذ لغات البرمجة
تصنيف:تقنيات