Yusefnejad

یوسف نژاد

Yusefnejad

یوسف نژاد

در ادامه قسمت قبل، مفهوم اسمبلی و نحوه تولید اون در دات نت شرح داده میشه.

در قسمت قبل توضیحاتی راجع به نحوه تولید ماژولهای مدیریت شده توسط کامپایلرها داده شد. اما باید توجه داشت که در زمان اجرا، CLR با این ماژولها به صورت مستقیم سروکار نداره. چیزی که برای CLR معتبره مفهومیه با نام «اسمبلی». شاید با اسمبلی به عنوان یک زبان برنامه نویسی سطح پایین آشنا باشین، اما در دنیای دات نت کاربرد اسمبلی کاملا متفاوته.

معروفترین تعریفی که برای اسمبلی وجود داره به صورت زیره:

یک اسمبلی دسته بندی ای منطقی از یک یا چند ماژول مدیریت شده یا فایلهای ریسورسه.

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

ممکنه در نگاه اول این جملات چندان قابل فهم نباشن، اما پس از آشنایی و کار با اسمبلی، بیشتر با مفهوم و کاربرد اون آشنا میشیم.

تولید اسمبلی
در دنیای CLR یک اسمبلی چیزیه که میتونیم اون رو یک المان اجرایی بدونیم. کامپایلرها یا ابزارهای مناسب دیگه که CLR رو هدف قرار میدن (در ادامه درباره ابزارهای موجود بحث میشه)، کار تولید اسمبلی رو با ترکیب ماژولهای مدیریت شده انجام میدن. با توجه به شرایط و با استفاده از این ابزارها میشه یک اسمبلی «تک فایله» یا «چند فایله» تولید کرد.

البته بحث درباره اسمبلی ها بسیار مفصله که خودش یه سری جداگانه لازم داره. تو این سری تنها به مفاهیم موردنیاز درگیر با CLR مطرح میشه. بنابراین تا اینجا همین نکته کوچیک رو داشته باشین که یه اسمبلی یک مفهوم منحصر به فرد تو دات نته که برای گروهبندی چند فایل و ماژول تو یه موجودیت مستقل تولید میشه.

در تصویر نسبتا مفصل زیر میشه دریافت که اسمبلی در دنیای دات به چه چیزی گفته میشه:

تصویر بالا نشون میده که چند ماژول مدیریت شده به همراه چند فایل ریسورس توسط یه ابزار مخصوص پردازش میشن. نتیجه این فرایند تولید یک فایل (به صورت PE32 یا +PE32) مجزاست که درواقع معرف گروهی از فایلهاست. اتفاق مهمی که اینجا میفته (شاید مهمترین اتفاق) اینه که این فایل تولیدی حاوی یکسری داده های جدید به نام manifest هستش. این manifest درواقع خودش یه نوع دیگه از جداول متادیتاست که در قسمت قبل شرح داده شد.

مانیفستها حاوی کلیه داده های مربوط به فایلهای تشکیل دهنده اسمبلی هستن. این داده ها عبارتنداز:
- مشخصات فیزیکی فایلهای تشکیل دهنده اسمبلی
- مشخصات انواع public موجود در این فایلها
- و فایلهای ریسورس یا دیتا مرتبط با اسمبلی

همونطور که در تصویر بالا هم نشون داده شده، وظیفه ترکیب ماژول های مدیریت شده و ریسورس ها و تشکیل اسمبلی معمولا برعهده کامپایلرهاست. یعنی در زمان انجام فرایند کامپایل، خود کامپایلر کلیه عملیات درگیر مثل تایید کد برنامه، تولید کدهای IL، تولید داده های متادیتا، تولید فایل ماژول مدیریت شده، تولید فایل ریسورس، تولید مانیفست و درنهایت ترکیب همه اینها و تولید اسمبلی رو انجام میده.
اگه برنامه درحال کامپایل، تنها از یک ماژول مدیریت شده تشکیل شده باشه و هیچ فایل ریسورسی هم نداشته باشه، کامپایلر به صورت پیش فرض از همون تک فایل ماژول استفاده میکنه و با قرار دادن داده های مانیفست درون اون فایل، اسمبلی نهایی رو تو همون تک فایل تولید میکنه. یعنی برای اسمبلی های تک فایله، تمامی اطلاعات اسمبلی (متادیتا و مانیفست و هدرها و کد IL) همگی درون یک فایل ذخیره میشه.
اما اگه یک اسمبلی از چندین ماژول و ریسورس تشکیل شده باشه فرایند تولید اسمبلی کمی پیچیده تر میشه. برای اینکار نیاز به سوییچهای مخصوصی از خط فرمان کامپایلر یا ابزارهای مخصوص دیگه (مثل assembly linker یا al.exe) هست. این فرایند نیاز به شرح بیشتری داره که در آینده و در سریهای مخصوص اسمبلی ها آورده میشه.

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

نکته: با توجه به مطالب فوق میشه نتیجه گرفت که تمامی داده های موردنیاز برای بارگذاری و اجرای اسمبلی ها در دنیای دات درون خود اسمبلی ها موجوده. این ویژگی منحصر به فرد باعث میشه تا اسمبلی ها به اصطلاح «خودتوصیف» یا self-describing باشند. یعنی CLR برای اجرای یک قطعه کد درون یه اسمبلی براحتی میتونه از داده های موجود تو خود فایل(های) اسمبلی (مانیفست و متادیتا) استفاده کنه و نیازی به هیچ داده اضافی تو رجیستری یا سایر سرویسهای رایج که تو پلتفرمهای دیگه استفاده میشه نداره. بنابراین توزیع و استفاده از اسمبلی ها در دات نت بسیار راحتتر و سریعتر از دنیای مدیریت نشدس.


.: در قسمت بعد بارگذاری CLR شرح داده میشه.

CLR به زبان ساده - قسمت اول: پیشگفتار
CLR به زبان ساده - قسمت دوم: اسمبلی
CLR به زبان ساده - قسمت سوم: بارگذاری
CLR به زبان ساده - قسمت چهارم: اجرا
CLR به زبان ساده - قسمت پنجم: IL و بررسی کد
CLR به زبان ساده - قسمت ششم: NGen.exe
CLR به زبان ساده - قسمت هفتم: FCL و CTS
CLR به زبان ساده - قسمت هشتم: CLS
CLR به زبان ساده - قسمت نهم: کد مدیریت نشده

:.
  • یوسف نژاد

Assembly

NET Framework.

CLR

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی
آخرین نظرات