شرح مختصری در رابطه با عملیات Link فایلهای اجرایی

سالها پیش، با ظهور سیستم عاملها، تحولات بسیاری در زمینه ساختار برنامه‌ها و نحوه اجرا و بارگذاری آنها پدید آمد. در گذشته هر برنامه‌ای تمام حافظه ماشین و پردازنده را به تنهایی در اختیار داشته و همه برنامه‌ها، با توجه به آدرسهای ثابت حافظه که در اختیارشان قرار گرفته بود ترجمه می‌شدند.
اما با پیدایش سیستم عامل این امر امکان پذیر نبود، چرا که حافظه مورد استفاده مشترک میان برنامه، سیستم عامل و دیگر برنامه‌ها قرار می‌گرفت و بدین شکل تا زمانی که برنامه مذکور توسط سیستم عامل در حافظه بارگذاری نمی‌شد، آدرسهای حقیقی مربوط به بارگذاری آن مشخص نبودند.
بدین شکل وجود مفاهیمی مانند linker ها و loader ها مورد اهمیت بیشتری قرار گرفتند.

در ساده‌ترین حالت، لینکر با فایلهای Object تولید شده در آخرین مرحله کامپایل سروکار داشته و آنها را به یکدیگر متصل کرده و در نهایت یک فایل واحد تولید می‌کند. فایلهای Object حاوی کدهای ماشینی هستند که کامپایلرها یا اسمبلرها، پس از پردازش کدهای منبع (Source Code) تولید می‌کنند.

به عنوان مثال، یکی از انواع رایج و شناخته شده فایلهای Object، فایلهای اجرایی COM در سیستم عامل MS-DOS هستند که حاوی کدهای خام ماشین بوده و فاقد هر گونه ساختار و قالب‌بندی از پیش تعیین شده هستند.

عملیات لینک، در واقع آخرین مرحله از روند کامپایل یک برنامه محسوب می‌شود. لینکر کدها و قطعه برنامه‌های مورد ارجاع توسط یک برنامه را به شکل ماژولهایی مناسب به برنامه اضافه کرده و یک فایل مناسب جهت بارگذاری و اجرا در حافظه تهیه می‌کند، چرا که هر برنامه جهت اجرا می‌بایست از حافظه جانبی به حافظه اصلی کپی شده و آدرسهای مورد استفاده و ارجاع در آن به آدرسهای حقیقی ترجمه شوند.

حال اگر این برنامه از مجموعه‌ای از زیربرنامه‌های جانبی استفاده کرده باشد، تمامی آنها نیز می‌بایست به شکل مناسبی به برنامه اصلی اضافه شده یا به هر شکل در هنگام اجرای برنامه مورد دسترسی و ارجاع قرار بگیرند.

به عنوان مثال اگر برنامه ما در زبان پاسکال از تابع sqrt موجود در کتابخانه Math استفاده کرده باشد، برای دسترسی به کد بدنه تابع، می‌بایست ارجاع آن فراخوانی، به کتابخانه مذکور را بررسی کرده و مکان کد تابع را در کتابخانه پیدا کنیم. پس از این کار می‌بایست دستور فراخوانی تابع به نوعی وصله (Patch) شده یا اینکه کد تابع به برنامه اصلی ضمیمه گردد تا در زمان اجرا بتوان از آن استفاده نمود.

در حقیقت کار اصلی لینکرها، ویرایش لینکها و ارجاعات موجود در برنامه به شکلی مناسب جهت اجرا می‌باشد. عملیات لینک، به دوشکل ایستا و پویا مورد اجرا قرار می‌گیرد، که در آینده در مورد ساختار و عملیات آنها مطالبی خواهم نوشت.

About محمد شمس

برنامه‌نویس، طراح انیمیشن و علاقمند به هوش مصنوعی

2 Comments

  1. سلام
    مطالب بسیار مفیدی بود.امیدوارم ادامه پیدا کنه.
    موفق باشید.

  2. سلام
    لطف دارید. از این مطلب دو قسمت دیگر هم منتشر شده است که تشریح “لینک ایستا” و “لینک پویا” هستند. این مطالب از بخش “نوشته‌های پیشین” یا آرشیو وبلاگ قابل دسترس هستند.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


5 × = 5