پالس پویا

در اینجا، مباحث آموزشی و پروژه های مربوط به برق، الکترونیک، کامپیوتر، تجهیزات شبکه، سخت افزارها، نرم افزارها، طراحی، طراحی های دیجیتال و... را با هم بررسی خواهیم نمود.

آموزش سی شارپ - احمدی - قسمت دوم- بخش دوم

قسمت دوم :: آشنایی با NET Framework. و ساختار آن (بخش دوم)

در بخش قبلی آموزش زبان سی شارپ، با برخی مفاهیم در .NET Framework آشنا شدیم. در ادامه قصد داریم مفاهیم را بیشتر باز کرده و برخی خدمات .NET Framework را با هم بررسی کنیم. مطالبی که در این قسمت به آنها خواهیم پرداخت به شرح زیر می باشند:

  1. آشنایی با برخی سرویس های ارائه شده توسط CLR
  2. اجرای کدها در دات نت و سرویس JIT و اجرای مدیریت شده کد ها
  3. مدیریت حافظه و سرویس GC



آشنایی با برخی سرویس های ارائه شده توسط CLR

همانطور که در بخش قبلی خدمت دوستان گفتیم، CLR قلب تپنده دات نت بوده و اکثر وظایف در زمان اجرای برنامه های دات نت، به عهده CLR می باشد. در حقیقت، برای اجرای برنامه های مبتنی بر دات نت، حتما" باید نسخه مربوطه NET Framework. بر روی سیستم مقصد نصب شده باشد. در این بخش قصد داریم تا برخی از سرویس های CLR را خدمت دوستان معرفی کرده و در مورد دو سرویس، یعنی JIT و GC به تفصیل صحبت کنیم. در تصویر زیر نمای کلی از سرویس های CLR را مشاهده می کنید:



  1. Class Loader: این سرویس وظیفه بارگذاری کلاس ها در زمان اجرا در محیط CLR را به عهده دارد
  2. IL to Native: در قسمت قبل گفتیم که کدهای نوشته شده در زبان های مبتنی بر دات نت، بعد از کامپایل به یک زبان میانی به نام IL تبدیل می شوند، این سرویس وظیفه تبدیل کدهای IL به کد ماشین جهت اجرای برنامه را به عهده دارد. در این بخش به تفصیل به معرفی این سرویس می پردازیم.
  3. Code Manager: این سرویس وظیفه مدیریت کدها در زمان اجرا را به عهده دارد.
  4. Garbage Collector: با کمک این سرویس، CLR کار مدیریت حافظه را انجام می دهد، پاک سازی حافظه از اشیاء بلااستفاده از وظایف GC می باشد. در این بخش به تفصیل به معرفی این سرویس می پردازیم.
  5. Debug Engine: یکی از امکانات مورد نیاز برنامه نویسان، قابلیت خطا یابی برنامه ها می باشد که این سرویس، قابلیت خطایابی یا همان Debugging را به برنامه نویسان می دهد.
  6. Type Checker: یکی از ویژگی های دات نت، Type Safety می باشد، بدین معنی که تمام Data Type ها یا نوع های داده باید مشخص باشند. برای مثال شما در دات نت نمی توانید در یک متغیر از نوع عددی، رشته ای را ذخیره کنید یا باالعکس، این سرویس وظیفه کنترل نوع های داده را به عهده دارد!
  7. Security Engine: یکی دیگر از سرویس های CLR می باشد که وظیفه امنیت اجرای کدها در محیط دات نت را به عهده دارد. در مورد این سرویس و امنیت در دات نت به تفصیل در فصل های آتی صحبت خواهیم کرد.
  8. Exception Manager: هنگامی که در برنامه های مبتنی بر دات نت، خطایی اتفاق می افتد، CLR یک استثنا یا Exception برای آن خطا ایجاد می کند، وظیفه کنترل و مدیریت استثناها به عهده این سرویس می باشد.
  9. COM Marshaler: یکی از مزایای دات نت، قابلیت ارتباط با اجزای COM که در بخش قبلی در مورد آن صحبت کردیم می باشد، این سرویس وظیفه انتقال اطلاعات بین برنامه های دات نت و اجزای COM را به عهده دارد.
  10. Thread Support: یکی از ویژگی های برنامه های امروزی، قابلیت Multi-Threading جهت همزمانی انجام وظایف و عملیات ها می باشد که باعث بالارفتن کارایی برنامه می شود، این سرویس وظیفه مدیریت اجرای کدها به صورت Multi-Thread را به عهده دارد.
  11. Base Class Library: امکان دسترسی به کتابخانه پایه دات نت را به برنامه ها می دهد. در مورد BCL در قسمت قبلی توضیح دادیم.




اجرای کدها در دات نت و سرویس JIT و اجرای مدیریت شده کد ها

روند اجرای کدها در دات نت، کمی پیچیده ولی در عین حال، بسیار کارامد است. زیرا طراحی این قسمت توسط شرکت مایکروسافت طوری انجام شده که اجرای کدها به بهینه ترین شکل ممکن انجام شود. همانطور که در قسمت قبلی گفتیم، سرویسی که وظیفه اجرای کدها در دات نت را دارد، کامپایلر JIT یا Just-In-Time می باشد. در زیر به صورت قدم به قدم به تشریح روند کامپایل و اجرای کدها، از زمان کامپایل توسط کامپایلر زبان برنامه نویسی تا زمان اجرای کد توسط JIT می پردازیم:

  1. در قدم اول شما کد مورد نظر خود را با زبان برنامه نویسی مورد نظرتان مانند سی شارپ می نویسید.
  2. در ادامه، با کمک کامپایلر زبان مورد نظر، کدی که شما نوشتید به زبان IL ترجمه شده و داخل یک فایل به نام Assembly قرار داده می شوند. Assembly ها فایل هایی هستند که بعد از کامپایل کدها توسط کامپایلر ایجاد می شوند. Assembly ها شامل کد IL برنامه، Metadata ها که اطلاعاتی در مورد کد نوشته شده توسط شما در اختیار CLR قرار می دهد و Assembly Manifest که اطلاعات اولیه در مورد اسمبلی مانند نسخه و ... می باشند. (در مورد Metadata ها Manifest در بخش Reflection به تفضیل صحبت خواهیم کرد)
  3. بعد از ایجاد Assembly توسط کامپایلر، با اجرای برنامه، CLR وارد صحنه می شود. بدین صورت که ابتدا توسط سرویس Class Loader که در بخش قبلی در مورد آن توضیح دادیم، اطلاعت اولیه مورد نیاز جهت اجرای کد مانند کد IL و Metadata را داخل حافظه بارگذاری شده، و سپس کد بارگذاری شده توسط Class Loader توسط JIT به کد ماشین تبدیل شده و اجرا می شود.

نکته 1: هر اسمبلی دات نت برای اجرا نیاز به یک نقطه شروع یا Entiry Point دارد که Class Loader در ابتدا این بخش، یعنی Entry Point را در حافظه بارگذاری کرده و JIT آن را اجرا می کند.
نکته 2: برنامه های نوشته شده توسط دات نت، می توانند شامل چندین هزار خط و بخش مجزا باشند، از مزیت های JIT این است که برای اجرای برنامه ها، کل کدها را یکجا به کد ماشین تبدیل نمی کند، بلکه تنها بخش مورد نیاز برای اجرا توسط Class Loader در حافظه بارگذاری شده و توسط JIT اجرا می شود. با این کار سرعت باگذاری اولیه برنامه های دات نت بسیار بالا می رود.

اما MCE یا Managed Code Execution دقیقا" به چه معناست؟ همانطور که گفتیم، CLR پروسه ای برای اجرای کدها دارد که به شرح زیر می باشد:

  1. بارگذاری کد IL و Meta Data های مربوطه
  2. تبدیل کد IL به کد Native و اجرای آن
  3. کنترل و مدیریت حافظه در زمان اجرای برنامه
  4. اعمال Type Safety
  5. کنترل امنیت در اجرای برنامه ها
  6. مدیریت Exception ها

پروسه ایی در بالا برای اجرای کدها در دات نت ذکر شد به MCE یا همون Managed Code Execution شناخته میشه. البته مطالب در مورد این موضوع بسیار است که به دلیل تخصصی بودن مطالب، در بخش پیشرفته آموزش سی شارپ به تفصیل به موضوعات مربوط به CLR و اجرای کدها خواهیم پرداخت.



مدیریت حافظه و سرویس GC

یکی از کابوس های برنامه نویسان، بهتره بگیم بزرگترین کابوس، مدیریت و استفاده بهینه از حافظه کامپیوتر می باشد. برنامه ای که از حافظه استفاده بهینه داشته باشد، سرعت اجرا و عملکرد بهتری دارد. اگر شما با زبان هایی که مدیریت حافظه در آنها به صورت خودکار نباشد، کار کرده باشید، حتما" واژه کابوس را تائید می کنید. اما در دات نت، مسئله مدیریت و استفاده بهینه از حافظه بوسیله سرویس GC یا Garbage Collector به صورت کامل حل شده است. در حقیقت سرویس GC وظیفه مانیتور کردن حافظه در حین اجرای برنامه و پاک سازی آن را به عهده دارد. به همین دلیل شما به عنوان برنامه نویس، هیچ گونه نگرانی در مورد پاک سازی حافظه را نخواهید داشت.

پروسه آزاد سازی حافظه در دات نت، کمی پیچیده است، اما به طور کلی، در مدیریت حافظه توسط CLR، دو وظیفه کلی وجود دارد. تخصیص حافظه و آزاد سازی حافظه که این وظایف به صورت خودکار توسط CLR انجام می شوند.

در ادامه آموزش بخشی را به سرویس GC اختصاص خواهیم داد که در آن بخش به طور کامل با پروسه های تخصیص و آزاد سازی حافظه، Finalizer ها و Generation ها در GC آشنا خواهیم شد.

با پایان بخش چهام آموزش سی شارپ، مفاهیم ابتدایی دات نت نیز به پایان می رسد. به امید خدا از بخش بعدی، کار اصلی ما، یعنی شروع نوشتن کدها به زبان سی شارپ آغاز خواهد شد. در بخش بعدی با محیط Visual Studio آشنا شده و اولین برنامه خود را به زبان سی شارپ خواهیم نوشت.

منبع : حسین احمدی
انجمن تخصصی فناوری اطلاعات ایران

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