عملیات لینک پویا (Dynamic Linking)

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

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

با توجه به مطالب ذکر شده، لینک پویا بدین معنی است که زیربرنامه و روالهای کتابخانه مورد ارجاع، در زمان اجرا در حافظه بارگذاری خواهند شد نه در زمان کامپایل برنامه.

تنها کاری که در زمان کامپایل انجام می‌شود اینست که نام کتابخانه‌ها و آدرس توابع مورد استفاده آنها در برنامه ذخیره می‌گردد تا در زمان اجرا بتوان آنها را بارگذاری کرد، سپس عمل لینک توسط بخشی از هسته سیستم عامل به نام بارگذار (Loader) در زمان اجرا انجام می‌شود که وظیفه بارگذاری کد مورد نیاز در فضای پروسه برنامه را بر عهده دارد.

برخی از مزایای استفاده از کتابخانه‌های لینک پویا به شرح زیر است:

– با استفاده از این روش، حجم برنامه کامپایل شده خیلی کمتر شده و نیازی به الحاق روتینهای مورد ارجاع به فایل اجرایی نیست.

– با اجرای برنامه فضای کمتری از حافظه اصلی اشغال شده و در مصرف آن صرفه‌جویی می‌گردد.

– هر برنامه می‌تواند به شکل کاملا پویا در حین اجرا توابع و روتینهای مورد نیاز خود را از کتابخانه‌های مورد نظر بارگذاری و اجرا نماید.

– با استفاده مشترک همه برنامه‌ها از یک کتابخانه، به سادگی می‌توان کتابخانه‌های جدید را جایگزین نسخه‌های قدیمی آنها کرد(Library versioning)، بدون اینکه نیازی به کامپایل مجدد برنامه‌هایی باشد که از آن کتابخانه‌ها استفاده می‌کنند.

از معایب آنها نیز می‌توان به موارد زیر اشاره نمود:

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

– قابلیت بالای این کتابخانه‌ها در Versioning گاهی باعث بروز مشکلاتی مانند عدم تطابق روتینهای یک کتابخانه با روتینهای مورد نیاز یک برنامه یا تغییر ساختار برخی روتینها در نسخه‌های جدید کتابخانه و بروز مشکلات ناهمخوانی با برنامه‌های قدیمی می‌گردد.

– از دیگر مشکلات بسیار مهم این کتابخانه‌ها نقصهای امنیتی آنهاست که در آینده به بررسی آنها خواهم پرداخت.

About محمد شمس

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

پاسخ دهید

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


8 × 2 =