لودر (بارکننده)
برخی از ویرایشها در این مقاله در چارچوب یک تکلیف دانشگاهی انجام شدهاند. این تکالیف توسط ؟ برای دانشجویان ؟ تعیین شدهاند. |
در سیستم های کامپیوتری لودر بخشی از یک سیستم عامل است که وظیفه بارگذاری برنامه ها و کتابخانه ها را بر عهده دارد . این یکی از مراحل ضروری در فرآیند شروع یک برنامه است، زیرا برنامه ها را در حافظه قرار می دهد و آنها را برای اجرا آماده می کند. بارگذاری یک برنامه شامل خواندن محتویات فایل اجرایی حاوی دستورالعمل های برنامه در حافظه و سپس انجام سایر کارهای مقدماتی مورد نیاز برای آماده سازی فایل اجرایی برای اجرا است. پس از اتمام بارگذاری، سیستم عامل با انتقال کنترل به کد برنامه بارگذاری شده، برنامه را شروع می کند.
تمام سیستم عامل هایی که از بارگذاری برنامه پشتیبانی می کنند، لودر دارند، به غیر از سیستم های کامپیوتری بسیار تخصصی که فقط مجموعه ای ثابت از برنامه های تخصصی دارند. سیستم های جاسازی شده معمولاً لودر ندارند و در عوض، کد مستقیماً از ROM یا موارد مشابه اجرا می شود. برای بارگذاری خود سیستم عامل، به عنوان بخشی از بوت کردن ، از یک بوت لودر تخصصی استفاده می شود. در بسیاری از سیستمعاملها، لودر بهطور دائم در حافظه باقی میماند ، اگرچه برخی از سیستمعاملهایی که از حافظه مجازی پشتیبانی میکنند ممکن است به لودر اجازه دهند در ناحیهای از حافظه قرار گیرد که قابل صفحهبندی است.
در مورد سیستم عامل هایی که از حافظه مجازی پشتیبانی می کنند، لودر ممکن است در واقع محتویات فایل های اجرایی را در حافظه کپی نکند، بلکه ممکن است به سادگی به زیرسیستم حافظه مجازی اعلام کند که بین ناحیه ای از حافظه اختصاص داده شده برای در حال اجرا، نقشه برداری وجود دارد. کد برنامه و محتویات فایل اجرایی مرتبط. (به فایل نگاشت حافظه مراجعه کنید. ) سپس به زیرسیستم حافظه مجازی اطلاع داده می شود که اگر و زمانی که اجرای برنامه واقعاً به آن قسمت از حافظه پر نشده برسد، صفحات با آن ناحیه از حافظه باید در صورت تقاضا پر شوند. این ممکن است به این معنی باشد که بخشهایی از کد یک برنامه تا زمانی که واقعاً مورد استفاده قرار نگیرند، واقعاً در حافظه کپی نمیشوند، و ممکن است کدهای استفاده نشده هرگز در حافظه بارگذاری نشوند.
مسئولیت ها[ویرایش]
در یونیکس ، لودر کنترل کننده فراخوانی سیستم execve()
. [۱] وظایف لودر یونیکس عبارتند از:
- اعتبارسنجی (مجوزها، نیازهای حافظه و غیره) )
- کپی کردن تصویر برنامه از دیسک در حافظه اصلی .
- کپی کردن آرگومان های خط فرمان روی پشته
- مقداردهی اولیه رجیسترها (مثلاً نشانگر پشته).
- پرش به نقطه ورود برنامه (
_start
).
در مایکروسافت ویندوز 7 و بالاتر، لودر LdrInitializeThunk
موجود در ntdll.dll است که کارهای زیر را انجام می دهد:
- راه اندازی ساختارها در خود DLL (به عنوان مثال بخش های مهم ، لیست های ماژول).
- اعتبار سنجی فایل اجرایی برای بارگذاری؛
- ایجاد یک پشته (از طریق تابع
RtlCreateHeap
)؛ - تخصیص بلوک متغیر محیطی و بلوک PATH.
- افزودن فایل اجرایی و NTDLL به لیست ماژول (یک لیست دارای پیوند دوگانه )؛
- بارگیری KERNEL32. DLL برای به دست آوردن چندین تابع مهم، به عنوان مثال
BaseThreadInitThunk
. - بارگذاری ورودی های اجرایی (به عنوان مثال کتابخانه های پیوند پویا ) به صورت بازگشتی (واردات وارداتی، واردات آنها و غیره را بررسی کنید).
- در حالت اشکال زدایی، افزایش نقطه شکست سیستم.
- راه اندازی اولیه DLL ها.
- مجموعه زباله؛
- فراخوانی
NtContinue
بر روی پارامتر زمینه داده شده به تابع لودر (یعنی پرش بهRtlUserThreadStart
، که فایل اجرایی را شروع می کند)
جابجایی لودرها[ویرایش]
برخی از سیستمعاملها به لودرهای جابجایی نیاز دارند که آدرسها (اشارهگرها) را در فایل اجرایی تنظیم میکنند تا تغییرات آدرسی را که بارگیری از آنجا شروع میشود، جبران کند. سیستمعاملهایی که به لودرهای جابهجا شده نیاز دارند، سیستمهایی هستند که در آنها یک برنامه همیشه در یک مکان در فضای آدرس بارگذاری نمیشود و در آنها نشانگرها آدرسهای مطلق هستند نه جابجایی از آدرس پایه برنامه. برخی از نمونههای شناخته شده عبارتند از OS/360 IBM برای رایانههای اصلی System/360 و نسلهای آن، از جمله z/OS برای پردازندههای مرکزی z/Architecture.
OS/360 و مشتقات[ویرایش]
در OS/360 و سیستمهای فرعی، تسهیلات سیستم عامل (ممتاز) IEWFETCH نامیده میشود، و جزء داخلی OS Supervisor است، در حالی که برنامه LOADER (غیر امتیازی) میتواند بسیاری از عملکردهای مشابه را انجام دهد، به علاوه مربوط به ویرایشگر Linkage، و کاملاً خارج از OS Supervisor است (اگرچه مطمئناً از بسیاری از خدمات Supervisor استفاده می کند).
IEWFETCH از برنامه های کانال بسیار تخصصی استفاده می کند و از نظر تئوری امکان بارگیری و جابجایی کل یک فایل اجرایی در یک دور از رسانه DASD (حدود 16.6) وجود دارد. ms حداکثر، 8.3 ms میانگین، در "میراث" 3600 درایوهای دور در دقیقه). برای ماژولهای بارگذاری که اندازه آنها از یک مسیر بیشتر است، بارگیری و جابجایی کل ماژول بدون از دست دادن چرخش رسانه نیز امکان پذیر است.
IEWFETCH همچنین دارای امکاناتی برای به اصطلاح ساختارهای همپوشانی است و اجرای فایل های اجرایی بالقوه بسیار بزرگ را در یک مدل حداقل حافظه (به اندازه 44) تسهیل می کند. KB در برخی از نسخه های سیستم عامل، اما 88 کیلوبایت و 128 KB رایج تر است).
IEWFETCH همچنین دارای امکاناتی برای به اصطلاح ساختارهای همپوشانی است و اجرای فایل های اجرایی بالقوه بسیار بزرگ را در یک مدل حداقل حافظه (به اندازه 44) تسهیل می کند. KB در برخی از نسخه های سیستم عامل، اما 88 کیلوبایت و 128 KB رایج تر است).
اپلیکیشن Linkage Editor سیستم IEWL نام دارد. عملکرد اصلی IEWL این است که ماژولهای بارگذاری (برنامههای اجرایی) و ماژولهای شی (خروجی از اسمبلرها و کامپایلرها)، از جمله «تماسهای خودکار» به کتابخانهها (زبان سطح بالا «توابع داخلی») را به یک قالب مرتبط کند. که ممکن است به بهترین نحو توسط IEWFETCH بارگذاری شود. تعداد زیادی گزینه ویرایش وجود دارد، اما برای یک برنامه معمولی فقط تعداد کمی از آنها معمولاً استفاده می شوند.
قالب ماژول بارگذاری شامل یک "ثبت متن" اولیه است، و بلافاصله پس از آن "جابجایی و/یا رکورد کنترل" برای آن رکورد متنی، و به دنبال آن نمونه های بیشتری از ضبط متن و جابجایی و/یا جفت های رکورد کنترل، تا پایان مدول.
رکوردهای متنی معمولاً بسیار بزرگ هستند. رکوردهای جابجایی و/یا کنترل کوچک هستند زیرا سه بافر رکوردهای جابجایی و/یا کنترل IEWFETCH روی 260 بایت ثابت شده اند (قطعیت کوچکتر و/یا رکوردهای کنترل مطمئناً امکان پذیر است، اما 260 بایت حداکثر ممکن است، و IEWL تضمین می کند که این محدودیت وجود دارد. با درج سوابق جابجایی اضافی، در صورت لزوم، قبل از ضبط متن بعدی، در صورت لزوم، رعایت می شود؛ در این مورد خاص، ترتیب رکوردها ممکن است به صورت زیر باشد: ...، رکورد متن، رکورد جابجایی، ...، رکورد کنترل., رکورد متن, . . . ).
یک بایت ویژه در بافر رکورد جابجایی و/یا کنترل به عنوان ناحیه ارتباطی "بیت اسپین غیرفعال" استفاده می شود و به یک مقدار منحصر به فرد مقداردهی اولیه می شود. Read CCW برای رکورد تغییر مکان و/یا کنترل دارای بیت وقفه کنترل شده برنامه تنظیم شده است. در نتیجه زمانی که کانال از طریق یک خروجی ویژه IOS به CCW دسترسی پیدا کرد، به پردازنده اطلاع داده می شود. در این مرحله پردازنده وارد حلقه "بیت اسپین غیرفعال" می شود (که گاهی اوقات "کوتاه ترین حلقه در جهان" نامیده می شود). هنگامی که آن بایت از مقدار اولیه خود تغییر می کند، CPU از چرخش بیت خارج می شود و جابجایی در طول "فاصله" در رسانه بین تغییر مکان و/یا رکورد کنترل و رکورد متن بعدی رخ می دهد. اگر جابجایی قبل از رکورد بعدی به پایان برسد، NOP CCW به دنبال خواندن به TIC تغییر خواهد کرد و بارگیری و جابجایی با استفاده از بافر بعدی ادامه خواهد یافت. در غیر این صورت، کانال در NOP CCW متوقف می شود، تا زمانی که توسط IEWFETCH از طریق یک خروجی ویژه دیگر IOS راه اندازی مجدد شود. سه بافر در یک صف دایره ای پیوسته قرار دارند که هر کدام به بعدی اشاره می کند و آخرین بافر به اولین اشاره می کند و سه بافر دائماً به عنوان بارگیری و جابجایی درآمد مورد استفاده مجدد قرار می گیرند.
به این ترتیب IEWFETCH می تواند یک ماژول بار را با هر اندازه عملی و در حداقل زمان ممکن بارگذاری و جابجا کند.
پیوند دهنده های پویا[ویرایش]
لودرهای پیوند پویا نوع دیگری از لودرها هستند که کتابخانههای مشترک (مانند فایلهای .so ، فایلهای .dll یا فایلهای .dylib.) را بارگیری و به برنامههای در حال اجرا بارگذاری شده پیوند میدهند.
This article "لودر (بارکننده)" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:لودر (بارکننده). Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.
- ↑ "exec". The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition. The Open Group. Retrieved 2008-06-23.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.