الفبای معماری حافظه (قسمت اول – کلیات)

0
511
الفبای معماری حافظه (قسمت اول – کلیات)

سلام خدمت همه مخاطبین عزیز

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

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

در حالی که ممکن بود همین برنامه رو تنها با داشتن اطلاعاتی از نحوه map کردن کد بر روی حافظه و همچنین با کمی تغییرات (بدون تغییر عملکرد نهایی برنامه) بشه روی همون سخت افزار ارزون قیمت قبلی پیاده کنیم و عملکرد مطلوب رو ازش بگیریم. پس اهمیت مطالعه ساختار حافظه ها در سیستم های نهفته تا حدودی برامون مشخص شد.

در سیستم های نهفته ما با سه نوع حافظه سر و کله میزنیم:
  • حافظه کد : این حافظه رو معمولا از نوع Flash که به صورت فقط خواندنی هستش انتخاب میکنند چون تمایلی نداریم کدهایی که نوشتیم رو در حین برنامه با یه حرکت اشتباه از دست بدیم!
  • حافظه داده : این حافظه به علت ماهیتی که داره و لازمه در طی برنامه داده های داخلیش مدام تغییر کنن باید از نوع SRAM انتخاب بشه.
  • حافظه حالت برنامه: در حین اجرای برنامه استفاده میشه و دربرگیرنده رجیسترهای CPU (شامل General purpose و Special purpose) و رجیسترهای پریفرال ها هستش.

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

بیاید یه مثال واقعی رو بررسی کنیم!

تصویر زیر مربوط به برگه داده میکروکنترلر ATMEGA16 ساخته شرکت اتمل هستش :

همونطور که در تصویر بالا میبینید این نوع میکرو 16 کیلوبایت حافظه فلش، 1 کیلوبایت حافظه SRAM و 512 بایت حافظه EEPROM داره. اولین نکته ای که جلب توجه میکنه مقادیر بسیار کم این حافظه ها هستش (کافیه با ساده ترین USB های موجود تو بازار باحداقل 8GB حافظه مقایسه شون کنید!)

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

به طور کلی قاعده ای که در مورد حافظه ها وجود داره اینه که هرچی حجم حافظه افزایش پیدا میکنه قیمت حافظه کم میشه و در عوض سرعت دسترسی به اون حافظه هم کاهش پیدا میکنه. همین موضوع باعث میشه برای حافظه ها یک ساختار سلسله مراتبی (Hierarchy) تعریف بشه.

ویژگی های حافظه ها

ظرفیت: خب مشخصه که ما تمایل داریم حافظه هامون ظرفیت نگهداری داده بالایی داشته باشند

فرار یا غیرفرار: توانایی نگهداری داده بدون مصرف انرژی و در حالت قطع تغذیه. حافظه های فرار مثه RAM ،SRAM ،DRAM ،SDRAM و در نهایت اغلب رجیسترهایی که در CPU یا پریفرال ها وجود دارند. حافظه های غیر فرار هم مثه انواع ROM ها و حافظه های Flash

دسترسی: دو حالت دسترسی برای حافظه ها تعریف میشه. اولین حالت Random Access هستش که اجازه میده به هر قسمتی از حافظه تنها با داشتن آدرس مدنظر دسترسی داشته باشیم. انواع RAM ها از همین نوع دسترسی استفاده میکنند. نوع دیگه دسترسی Access Security هستش که فرایند خوندن یا نوشتن تو این تیپ حافظه ها نیاز به یه سری ابزارها و اختیارات خاص داره مثه حافظه Flash میکروها که برای نوشتن کدها توی این حافظه لازمه از سخت افزار خاصی به اسم پروگرامر استفاده کنیم.

تاخیر: مدت زمانی که طول میکشه حافظه به یه درخواست خوندن یا نوشتن پاسخ بده. طبیعتا این مدت زمان برای افزایش سرعت اجرای برنامه خیلی اهمیت داره و به همین دلیل هم هست که طراحان حافظه ها تلاش میکنند این مدت زمان رو تا حد ممکن کاهش بدن ولی خب باید به این نکته اشاره کرد که تو سال های اخیر افزایش سرعت دسترسی به حافظه ها خیلی خیلی کمتر از افزایش سرعتی بوده که CPU ها تجربه کردند و همچنان Memory wall پیش روی طراحان سخت افزار وجود داره.

ویژگی های حافظه ها

 

البته برای کم کردن این زمان ایده هایی اجرا شده که معروف ترین شون استفاده از Cache بوده که تو بعضی از پلتفرم های پیشرفته سخت افزار (مثه نمونه های جدید پردازنده های ARM) از این مورد استفاده شده ولی خب چون تو میکروهای ارزون مثه انواع AVR ها حافظه های cache رو نداریم پس بهتره چندان بهشون دل خوش نکنیم!

ایشالا در قسمت بعدی وارد حافظه خواهیم شد و بخش های مختلف حافظه رو باهم بررسی خواهیم کرد!

 

منبع:سیسوگ

مطلب قبلیامبدد لینوکس – قسمت هشتم – Toolchain یا زنجیره‌ای از ابزارهای لازم برای ساختن همه چیز (بخش چهارم)
مطلب بعدیماجرای اولین هک سخت افزار!

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید