مفاهيم اوليه CLR فريمورک دات نت ( بخش اول )
اين مطلب از طريق سايت شرکت سخاروش در اختيار شما گذاشته شده است .

مفاهيم اوليه CLR فريمورک دات نت

مفاهيم اوليه CLR  فريمورک دات نت ( بخش اول )

فريمورک دات نت يک محيط اجراء با نام CLR)Common Language Runtime) را ارائه که مسئوليت مديريت اجرای کد و تامين سرويس های لازم بمنظور پياده سازی نرم افزار را  برعهده دارد . CLR ، زيرساخت مستحکمی را بمنظورايجاد انواع نرم افزار در اختيار پياده کنندگان قرار می دهد . يک برنامه ASP.NET  ، يک برنامه فرم های ويندوز ، يک سرويس وب ، يک برنامه مختص موبايل ، يک برنامه توزيعی و يا يک برنامه که چندين مدل از برنامه های فوق را با يکديگر ترکيب می نمايد ، نمونه هائی از برنامه هائی می باشند که می توان آنها را بر اساس زيرساخت ارائه شده ، پياده سازی نمود.  CLR ، دارای مزايای متعددی بمنظور پياده سازی سريع و آسان نرم افزار با قابليت مهم ارتباط و يکپارچگی بين کدهای نوشته توسط زبانهای متفاوت برنامه نويسی است .
 درمجموعه مقالاتی که در اين زمينه ارائه خواهد شد به بررسی
CLR
، خواهيم پرداخت .

CLR ، ابزاری ( Engine) است که دستورالعمل های IL)Intermediate Language) را بعنوان ورودی اخذ و در ادامه آنها را به دستورالعمل های زبان ماشين ترجمه و در نهايت آنان را اجراء می نمايد. موضوع فوق ، بدين معنی نيست که CLR ، دستورالعمل ها را  تفسير می نمايد. عبارت فوق ، بدين دليل بيان شده است که بنوعی به اين موضوع اشاره گردد  که CLR ، محيط لازم بمنظور اجرای کد IL را فراهم می نمايد. بمنظور نيل به اهداف مورد نظر خصوصا" : کارآمدی کدها و قابليت حمل آنان ، هسته اجرائی می بايست، شرايط ومحيط  لازم بمنظور ايجاد کد  با  لحاظ نمودن اهداف موردنظر ( کارآمد ،  قابليت حمل)  را ارائه نمايد.  کارآمدی کدها ، يکی از مسائل کليدی در رابطه با محيط اجراء خواهد بود. اگر کد، با سرعت قابل قبول اجراء نگردد ، تمام ويژگی های ديگر موجود در سيستم ، تحت الشعاع  قرار خواهند گرفت .
 قابليت حمل ، امکان استفاده از نرم افزار را مستقل از نوع پردازنده و دستگاه فراهم می نمايد. بنابراين افزايش تعداد پردازنده ها و دستگاههائی که
CLR  می تواند بر روی آنها اجراء گردد، همواره دارای اهميت خاص خود خواهد بود. ماکروسافت و اينتل برای مدت زمان زيادی ، دارای همکاری مناسبی  در عرصه تجارت بودند. ماکروسافت  کم و بيش از خط پردازنده های اينتل بمنظور اجراء نرم افزارهای خود ، استفاده می کرد.بدين ترتيب ، ماکروسافت ، بدون وجود نگرانی ( حمايت از معماری چندين پردازنده ای و دستورالعمل های مربوطه ) ، اقدام به ايجاد و پياد ه سازی  نرم افزار می نمود. شرکت ماکروسافت هرگز نگران ارائه يک نسخه خاص از محصولات خود برای يک نسخه خاص از پردازنده های Motoral 68XXX ، نبود ، چراکه اصولا" آنها را حمايت نمی کرد . بروز محدوديت در حمايت از پردازنده ها در زمان انتقال از برنامه ها یمبتنی بر Win16 به Win32، بعنوان يک مسئله مهم ،مطرح گرديد. ( ما عملا" دارای API با نام Win16 نبوده ايم ، ولی می توان اين واژه را برای API قبل از Win32 استفاده کرد) . ماکروسافت اگر می خواهد همچنان بعنوان يکی از شرکت های فعال در زمينه توليد و طراحی نرم افزار در سطح جهان مطرح باشد ، می بايست تدابير لازم در خصوص قابليت حمل نرم افزارهای پياده سازی شده خود را بر روی محيط های متفاوت فراهم نمايد. باتوجه به تغييرات بنيادين و مهم در طراحی و پياده سازی برنامه های مبتنی بر وب طی ساليان اخير  و ضرورت استفاده از دستگاههای متعدد بمنظور ارتباط به اينترنت و در نهايت استفاده از خدمات برنامه های موجود ، ما با واقعيت بزرگ ديگری نيز مواجه هستيم و آن اينکه هر يک از دستگاههای موجود ( تلفن های موبايل ، کامپيوترهای hand-held ، tablet ، ) دارای معماری و پردازنده اختصاصی خود می باشند. با توجه به وضعيت موجود، می بايست تمهيدات و تدابير خاصی در رابطه با طراحی و پياده سازی انديشيده گردد که ماحصل آن قابليت حمل نرم افزار از يک معماری خاص به معماری ديگر باشد .
 ماکروسافت نيز در صدد حضوری فعال تر و ارائه نرم افزار در رابطه با دستگاه های فوق ، است ، بديهی است می بايست اقدامی صورت می گرفت که پاسخگوی واقعيت های جديد صنعت نرم افزارباشد . ماکروسافت در پاسخ به محدوديت های موجود، خواسته های جديد و حل مشکل قابليت حمل به ساير پردازنده ها ، تصميم به ايجاد يک محيط اجراء و يا
CLR نمود ه  است .
در ادامه اين مقاله ، قصد داريم بدون درگير شدن به جزيئات مربوطه ، به بررسی محيط اجراء پرداخته  امکانات آن را در رابطه با اجرای برنامه های
managed
، بررسی نمائيم .

مروری بر  Runtime 
قبل از دات نت، يک برنامه اجرائی معمولا" بصورت يک فايل با انشعاب
exe. ارائه می گرديد ( برنامه  صرفا" شامل يک فايل بود) . بمنظور اجراء کارآمد تمامی سيستم ، برنامه می بايست از کدهائی استفاده نمايد که بصورت اشتراکی باشند ( معمولا" يک فايل با انشعاب dll. ) اگر در زمان استفاده از کد مشترک ، مسائلی ايجاد می گرديد، می توان  از يک کتابخانه وارداتی استفاده و يا  يک DLL را در زمان اجراء ، load کرد ( با استفاده از LoadLibrary,LoadLibraryEx و GetProcAddress

در دات نت ، واحد اجراء و بکارگيری ، اسمبلی (Assembly ) است . فرآيند اجراء، همواره با يک اسمبلی که  دارای  انشعاب exe . می باشد ، آغاز می گردد . برنامه می تواند  از کد اشتراکی بکمک  Importing  اسمبلی که شامل کد مشترک بهمراه يک مرجع صريح است ، استفاده نمايد ( برای اضافه نمودن مرجع ، می توان  از AddReference در ويژوال استوديو دات نت استفاده کرد )  برنامه ها همچنين می توانند با استفاده از  Assembly.Load و يا Assembly.loadForm  ، اقدام به استقرار يک اسمبلی در حافظه  نمايند .
در ادامه  ، لازم است با برخی از اصطلاحات آشنا و تعريف مناسبی از آنها را ارائه نمائيم  .

 پس ازاستقرار کد در حافظه ( Loading ) ، امکان اجرای آنان فراهم می گردد . از اين مرحله به بعد ( آغاز عمليات اجراء کد ) ، تفاوت محسوسی را بين  برنامه های قديمی ( قبل از دات نت ) و برنامه های جديد ( دات نت ) ، شاهد خواهيم بود . در حالت کد غيرمديريت يافته ( Unmanaged) ، کمپايلر و linker  بر روی کدهای مربوطه عمليات خود را آغاز و آنها را به native code تبديل می نمايند . بدين ترتيب  ،دستورالعمل ها می توانند بلافاصله اجراء گردند. لازم است به اين نکته مهم اشاره گردد که در صورتيکه قصد استفاده از برنامه نوشته شده بر روی محيط های متفاوت ( ساير پلات فرم ها ) وجود داشته باشد ، می بايست برای هر يک نسخه ای جداگانه را کمپايل کرد. در برخی حالات ، امکان ايجاد و ترجمه نسخه های متعدد بمنظور اجراء بر روی محيط های متفاوت ، امری مطلوب بنظر نمی رسد ، در چنين مواردی سعی می گردد ، صرفا" يک نسخه ارائه گردد. نسخه فوق ، بگونه ای طراحی و پياده سازی می گردد که بتواند با محيط های متفاوت سازگار باشد . بدين ترتيب ، امکان اجراء نرم افزارهای توليدی در محيط های متفاوت ، فراهم خواهد شد . وجود پتانسيل در بطن يک دستگاه سخت افزاری يک موضوع است و ارائه برنامه ای که زمينه بهره برداری از پتانسيل های مربوطه را فراهم  و برنامه ای که از پتانسيل های دستگاه فوق ، در نهايت استفاده می نمايد ، موضوعات ديگری است . مثلا" امروز ما کمتر شاهد ارائه نرم افزار از طرف شرکت های توليد کننده ای می باشيم که تاکيد و اصرار بر استفاده از يک محيط سخت افزاری  نظير وجود يک " شتاب دهنده گرافيک " ، داشته باشند . در چنين موارد علاوه بر اينکه توليد کننده " شتاب دهنده گرافيک " ، می بايست برای هر " کارت شتاب دهنده گرافيک " ، برنامه ای خاص را ارائه نمايد ، بلکه همچنين پياده کنندگان می بايست از برناهه های مجزائی برای هر يک از کارت ها ی عرضه  شده ، استفاده نمايند . " شتاب دهنده گرافيک " ، صرفا" يک نمونه در اين رابطه بوده و می توان به مواردی ديگر نظير :  disk cache,memory cache ، شبکه های با سرعت بالا ،   سيستم های مبتنی  بر چندين پردازنده  و  سخت افزارهای خاص بمنظور پردازش تصاوير، اشاره کرد .

يکی از اولين مراحلی که CLR  در ارتباط  با اجراء يک برنامه انجام می دهد ، بررسی متدی است که می بايست اجراء گردد ( آيا  به native code ،تبديل شده است ؟) . در صورتيکه متد به native code ، تبديل نشده باشد ، کد موجود در متد بصورت  JITd) Just - In - time compild) خواهد بود . تاخير در ترجمه يک متد ،  دارای دو مزيت است :

فرآيند استقرار يک متد در حافطه ( Loading )  و ترجمه آن ، در صورت نياز تکرار  تا زمانيکه تمام متدها ی موجود در برنامه ترجمه  و يا برنامه متوقف گردد .

شروع يک متد
CLR ، درارتباط با هر متد به اطلاعات زير نياز خواهد داشت . تمامی اطلاعات مورد نياز CLR  از طريق  متاديتا  ( Metadate)  موجود در هر اسمبلی در دسترس و ارائه خواهد شد .

با استفاده از اطلاعات فوق ، CLR ، قادر به ايجاد يک abstraction از چيزی خواهد بود که native stack frame است. عموما" هر پردازنده و يا ماشين يک stack frame را شکل که شامل آرگومانها ( پارامترها ) و يا مرجع به آرگومانها ی مربوط به متد است . در وضعيتی مشابه ، متغيرهای برگردانده شده در stack frame بر اساس  فراخوانی که وابسته به يک پردازنده و يا ماشين خاص است ، ذخيره می گردند. اولويت پارامترهای ورودی و خروجی در رابطه با  يک ماشين خاص ، مشخص می گردد . با توجه به اينکه تمام اطلاعات مورد نياز برای هر متد در دسترس است ، CLR  ، قادر به تشخيص وضعيت مورد نظر  stack frame ، در زمان اجراء است .
فراخوانی يک متد بگونه ای انجام خواهد شد که CLR دارای حداقل کنترل در رابطه با اجراء متد و حالت آن باشد .زمانيکه CLR ، يک متد را فرامی خواند ، متد  و حالت آن تحت کنترل CLR  خواهد بود ( Thread of control ) .
دربخش دوم اين مقاله به بررسی  نوع ها ی حمايت شده توسط
IL ، خواهيم پرداخت .


استفاده از اين مطلب  با ذکر منبع و اهداف غيرانتفاعی بلامانع است .
http://www.srco.
ir