ARM, AVR, آموزش, توصیه شده, معرفی, مقاله, نرم افزار

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

انواع حافظه

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

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

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

در حالی که ممکن بود همین برنامه رو تنها با داشتن اطلاعاتی از نحوه 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 پیش روی طراحان سخت افزار وجود داره.

 

endurance

 

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

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

سعید حقیقی پور

درباره سعید حقیقی پور

تا حالا به این فکر کردین که تو یه سیستم کامپیوتری GPU چقدر کارآمد و مهمه ولی به اندازه CPU شناخته شده نیست.یه جورایی همون "مجهولون فی الارض معروفون فی السماء" که میگن! یه حسی بهم میگه کاش بتونم مثه GPU باشم :)

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

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

  1. E گفت:

    تبریک می گم بابت سایت خوب و پر محتوا تون؛
    من اطلاع زیادی از سخت افزار و الکترونیک ندارم و این دومین مطلبیه که از این سایت می خونم؛ ولی علاقه مند شدم که همه مطالب این سایت رو هم بخونم؛

  2. علی گفت:

    ممنون …:)
    ادامه بدین …….

    1. سلام خدمت علی آقای گل!
      خوشحالم که این مطلب مورد توجه شما واقع شده.

  3. رامین گفت:

    تشکر از پست خوبتون . لطفا ادامه بدین🙏

    1. سلام رامین جان!
      ممنونم از لطفت 🙂

  4. سلام.
    بسیار عالیست.امیدوارم در حد باز کردن یک حافظه پیش بروید.

    1. سلام علی آقا
      ممنونم نظر لطفتون هستش.
      بله ایشالا در قسمت های آینده جزییات بیشتری از معماری حافظه رو باهم بررسی میکنیم.

  5. Reza Poordana رضا گفت:

    سلام
    عالی , لطفا ادامه بدید.

    1. سعید حقیقی پور سعید حقیقی پور گفت:

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