حافظه کش Cache یا حافظه پنهان پردازنده چیست ؟
حافظه کش یکی از چیزهاییه که تو مشخصات فنی پردازنده ها می بینین . شاید براتون سوال باشه که حافظه کش چیه و این که میگن کش سطح 1 و 2 و … چیه . پس تا انتهای پست همراه من باشید تا مفصل توضیح بدم .
حافظه کش Cache چیست ؟حافظه کش یا Cache Memory یا حافظه نهان یا حافظه پنهان ، حافظه بسیار سریع از نوع SRAM هست که برای جلوگیری از تاخیر زمانی بین پردازنده و حافظه رم بوجود اومده . حافظه کش تقریبا از سال 1980 در پردازنده ها وجود داره . در واقع حافظه کش ، یه حافظه کوچولو ، سریع و گرون تر از حافظه رم هست که همیشه مقداری از اطلاعات موجود در رم رو درون خودش نگهداری می کنه تا پردازنده خیلی زودتر به اون اطلاعات دسترسی داشته باشه .
کش Cache در پردازنده
یه کتابخونه رو در نظر بگیرید که یه کتابدار داره . اتاق کتابها مثلا 10 متر باهاش فاصله داره . هر فردی که به کتابخونه میاد و درخواست کتاب می کنه ، این کتابدار باید 10 متر بره و 10 متر هم برگرده و از بین انبوهی از کتاب ، کتاب مورد نظر رو تحویل دانشجو بده . کتابدار اینجا نقش پردازنده رو داره و اون اتاق کتاب هم نقش حافظه رم . حالا اگه کتابدار یه سری از کتاب های معروف و پر طرفدار رو بیاره روی میزش بچینه ، سرعت دسترسی به کتاب ها بیشتر میشه . این میز حکم حافظه کش در پردازنده رو داره . یعنی باعث افزایش سرعت دسترسی میشه .
چرا از حافظه کش استفاده میشه ؟سریع ترین قطعه توی کامپیوتر ، پردازنده است . پردازنده طبق دستوراتی که سیستم عامل بهش میده کار می کنه . سیستم عامل روی هارد ذخیره شده ، از طرفی برنامه ها و فایل ها هم روی هارد ذخیره میشن . همونطور که می دونید هارد یه قطعه الکترومکانیکی هست ، یعنی برای دستیابی به اطلاعات باید یه سوزن ، روی یه دیسک گردون بچرخه تا اطلاعات ذخیره شده رو بکشه بیرون . این مسئله خیلی زمان میگیره . واسه همین ، هارد سرعت خیلی خیلی کمتری نسبت به پردازنده داره . واسه اینکه این مشکل پیش نیاد ، یه حافظه RAM طراحی کردن که اول اطلاعات از هارد به رم و بعد به پردازنده منتقل بشه . اما بازهم مشکل تاخیر زمانی وجود داشت . حافظه RAM سرعت بیشتری نسبت به هارد داره اما در قیاس با پردازنده سرعتش کمتره . یعنی اگه قرار بود پردازنده به صورت مستقیم با رم کار کنه ، برای دریافت اطلاعات باید چندین کلاک پالس منتظر می موند . خب این مسئله تو علم کامپیوتر یه فاجعه است چون سرعت پردازش اصلی ترین عامل پیشرفت کامپیوترها بوده و هست .
واسه اینکه سرعت پردازش رو بیشتر کنن ، اومدن بین حافظه رم و پردازنده دوباره یه حافظه دیگه قرار دادن به نام حافظه کش یا Cache Mmeory . تکنولوژی ساخت حافظه کش با حافظه رم متفاوته واسه همین سرعت بیشتری داره . حافظه رم از جنس DRAM هست اما کش از جنس SRAM . قبلا در مورد فرق بین SRAM و DRAM توضیح دادم که پیشنهاد می کنم حتما بخونید تا بدونید چرا حافظه کش از رم سریع تره .
جالب اینجاست که شاید فکر کنید بعد از حافظه کش دیگه حافظه ای در پردازنده وجود نداره اما اشتباه فکر می کنید چون پردازنده ها داخل خودشون یه حافظه خیلی خیلی کوچولو دارن به نام ثبات ها که برای دسترسی به اطلاعات با سرعت خیلی بالا استفاده میشه .
پس ترتیب قرار گیری حافظه ها در کامپیوتر به این شکله : هارد ، حافظه رم ، حافظه کش ، ثبات ها که هر چی جلوتر بریم ، سرعت این حافظه ها بیشتر میشه .
موقعیت حافظه کش در ترتیب حافظه های کامپیوتر
حافظه کش اشتراکی یا کش هوشمند چیست ؟قبلا برای هر هسته ، یه حافظه کش مشخص با مقدار ثابت در نظر می گرفتن . مثلا اگه پردازنده ای 4 تا هسته داشت ، 4 تا حافظه کش با مقدار ثابت ( مثلا 64 کیلو بایت ) در نظر میگرفتن . تو این حالت اگه یه دونه از هسته ها به کش بیشتر از 64 کیلوبایت نیاز داشت باید میرفت سراغ حافظه اصلی یا همون حافظه RAM .
حافظه کش اشتراکی سطح 3 در CPU
اما با طراحی کش هوشمند یا Smart Cache که توسط اینتل انجام شد ، این مشکل برطرف شد . تو حالت اسمارت کش ، یه حافظه کش کلی در نظر میگرن مثلا 1 مگابایت . هر هسته بسته به نیازش ، از کش استفاده میکنه مثلا اگه هسته 4 نیاز به کش بیشتر داشته باشه و هسته 2 بیکار باشه ، هسته 4 می تونه از کش بیشتری استفاده کنه . در واقع حافظه کش به صورت داینمیک تو هر لحظه می تونه بسته به نیاز هسته ها ، در اختیار هسته ها قرار بگیره . اینجوری دیگه در اکثر مواقع ، نیازی به سرک کشیدن به حافظه RAM نیست .
حافظه کش ثابت برای هر هسته پردازنده
مثلا تو شکل زیر هسته 2 مامور پردازش فتوشاپ میشه و هسته 3 مامور پردازش برنامه میدیا پلیر . خب مسلما هسته 2 به کش بیشتری نیاز داره چون برنامه سنگین تری رو داره پردازش می کنه . پس حجم کش بیشتری درخواست می کنه . تو این حالت 70 درصد از کش اشتراکی به هسته 2 میرسه و 30 درصد هم در اختیار بقیه هسته هاست . بعد از گذشت زمان ، شاید قضیه کلا برعکس بشه و هسته 2 دیگه فتوشاپ رو پردازش نکنه و کش درخواست نکنه .
حافظه کش اشتراکی یا کش هوشمند
یکی دیگه از مزایای کش هوشمند یا کش اشتراکی اینه که اگه یه دیتایی توسط هسته 1 به کش اومده باشه و هسته 2 هم به همون دیتا نیاز داشته باشه ، دیگه نیازی نیست که هسته 2 اون دیتا رو از رم به کش بکشه چون همونجا هست و می تونه استفاده کنه که این مسئله باعث افزایش سرعت میشه .
حافظه کش سطح 1 و 2 و 3 چیست ؟چیز عجیب و غریبی نیست . فرض کنید یه پردازنده فقط یه حافظه کش داشته باشه مثلا 128 کیلوبایت ، وقتی اطلاعاتی که میخواد رو پیدا نکنه مجبور میشه به رم مراجعه کنه . اما اگه یه کش دیگه باشه که نقش زاپاس رو داشته باشه ، سرعت دسترسی به اطلاعات بیشتر میشه . فلسفه وجودی حافظه کش سطح 1 و 2 و 3 و حتی 4 هم همینه . نزدیک ترین حافظه کش به پردازنده میشه کش سطح 1 یا به انگلیسی L1 Cache که اون حرف L مخفف Level هست . اگه اطلاعات مورد نظر پردازنده توی کش سطح 1 نبود ، میره سراغ حافظه کش سطح 2 و اگه نبود میره سراغ حافظه کش سطح 3 و اگه نبود میره 4 و اگه نبود میره به سراغ حافظه رم و اگه اونجا هم نبود میره سراغ هارد .
معمولا حافظه سطح 1 ، به صورت جداگانه و مخصوص هر هسته طراحی میشه ( یعنی تقسیم نمیشه ) ، حافظه کش سطح 2 معمولا بین دو تا هسته تقسیم میشه و حافظه کش سطح 3 بین تمام هسته ها تقسیم میشه .
ترتیب حافظه کش و نحوه تقسیم آنها
قدیما ، فقط حافظه کش سطح 1 درون پردازنده تعبیه میشد و بقیه کش ها درون یه چیپست بود که روی مادربورد قرار میگیرفت و اون چیپست مجبور بود با سرعت کلاک مادربورد کار کنه که سرعت کمی بود . بعدا حافظه کش سطح 1 و 2 رو داخل خود پردازنده قرار دادن و اینجوری سرعت کلاک کش برابر با سرعت کلاک داخلی پردازنده میشه .
هرچی سطح حافظه کش بیشتر میشه ، سرعتش کمتر میشه ولی در عوض حجمش بیشتر میشه . نکته مهم اینه که بدونید هر 3 تا سطح از کش ، سرعت بیشتری نسبت به حافظه رم دارن .
منظور از Cache Miss و Cache Hit چیست ؟همونطور که در قسمت کش سطح 1 و 2 و 3 گفتم ، حافظه های کش به ترتیب مورد بررسی قرار میگیرن . اگه اون اطلاعات داخل کش 1 نباشه ، پردازنده سراغ کش 2 میره . همین اتفاق باعث تاخیر زمانی میشه . به این اتفاق میگن Cache Miss . به زبون ساده ، اگه اطلاعاتی که پردازنده لازم داره در حافظه کش باشه میگن Cache Hit و اگه نباشه میگن Cache Miss .
تمام دغدغه طراحان الکترونیک اینه که میزان Cache Hit رو بالا ببرن . میزان Cache Hit رو با درصد بیان می کنن . در حال حاضر میزان Cache Hit برای کش سطح 1 حدود 95 تا 97 درصد هست . یعنی احتمال اینکه اطلاعات مورد نیاز پردازنده در کش نباشه حدود 5 تا 3 درصد هست . البته در پردازنده های سریع و رده بالا معمولا مقدار Cache Hit 99 تا 100 درصد هست . این مسئله بستگی به معماری پردازنده ، الگوریتم کش و حجم کش سطح 1 داره .
چرا حافظه RAM رو مثل حافظه کش نمی سازن ؟شاید واستون این سوال پیش بیاد که خب چرا یه دفعه حافظه رم DRAM رو مثل حافظه کش SRAM نمی سازن که دیگه خلاص بشیم ؟ اول از همه اینکه ساخت حافظه SRAM به مقدار 4 گیگ یا 8 گیگ خیلی گرون تموم میشه ، انقدر گرون که تا الان نتونستن این کار رو بکنن . دوم اینکه حافظه DRAM خیلی متراکمه یعنی در حجم کم می تونیم مقدار حافظه زیادی درست کنیم . مثلا حافظه 16 یا حتی 32 گیگ از نوع DRAM در اندازه ماژول های فعلی قابل ساخته اما همین مقدار رو اگه بخوایم با حافظه SRAM در بیاریم اندازه فیزیکی رم خیلی بزرگ میشه . اینجوری هم باید ظاهر اسلات رم ها روی مادربورد رو تغییر بدن که خرج داره و هم اینکه هزینه ساخت رم SRAM خیلی زیاد میشه . خلاصه اینکه نمیشه اینکار رو کرد وگرنه این خارجیا تا الان پدرشو درآورده بودن !