حافظهی نهان (Cache) و تاثیر آن در عملکرد پردازنده
در این مقاله ( حافظهی نهان (Cache) و تاثیر آن در پردازنده) با ما همراه باشید تا با مقوله کَش و کاربرد آن آشنا شوید.
اگر تا بهحال به مشخصات پردازندهی رایانهی خود توجه کرده باشید حتما با واژهای به نام کش (Cache) روبهرو شدهاید، در واقع باید بدانید این واحد تاثیر قابل توجهی در سرعت و عملکرد پردازندهها دارد.
این بخش را با نامهای حافظهی نهان، حافظهی میانگیر و حافظهی CPU نیز میشناسند.
همانطور که گفتیم حافظهی کش نقش قابل ملاحظهای در عملکر پردازنده دارد، برای آشنایی با این واحد و نحوهی عملکرد آن با هوشیار همراه باشید.
حافظهی نهان (Cache) چیست؟
کش (Cache) حافظهی کوچکی داخل پردازنده است که همیشه مقداری از اطلاعات موجود در رم (RAM) را به صورت موقتی در خود نگهداری کرده و آنها را برای پردازش در اختیار CPU قرار میهد.
حافظهی Cache حدودا از سال ۱۹۸۰ در پردازندهها مورد استفاده قرار گرفت، نام این واحد از کلمهی Cacher که در زبان فرانسوی به معنای “نهان کردن یا مخفی کردن” است گرفته شده.
در دهههای اولیهی استفاده از کامپیوتر حافظهی اصلی بسیار کند بود و در عین حال پردازندهها نیز از سرعت بالایی برخوردار نبودند.
با گذشت زمان و در اوایل سال ۱۹۸۰ در حالی که حافظه های رایانهای هنوز سرعت کمی داشتند سرعت پردازندهها به طرز چشمگیری افزایش یافت به طوری که حافظهی اصلی و رم توان رقابت با سرعت پردازندهها را نداشتند و وقت زیادی از پردازنده صرف انتقال اطلاعات از حافظه به بخش پردازش CPU میشد، میتوانید مقایسهی سرعت رشد حافظهی DRAM و CPU را در نمودار زیر مشاهده کنید:
اگر کمی با نحوهی عملکرد رایانهها آشنایی داشته باشید حتما میدانید که سیستمعامل و سایر نرمافزارها داخل حافظهی اصلی (SSD یا HDD) قرار دارند، این قطعه نسبت به پردازنده سرعت بسیار کمتری دارد از این رو حافظهی رم به وجود آمد تا این مشکل را برطرف کند.
هرچند رم از سرعت بالاتری نسبت به حافظهی اصلی برخوردار بود ولی توان مقابله با سرعت پردازنده را نداشت و نتوانست این کمبود را جبران کند.
برای این منظور در نهایت با اختراع حافظهی Cache و عملیات کشینگ این مشکل تا حدودی برطرف شد، میتوانید ترتیب قرارگیری حافظهها را در تصویر زیر به صورت خیلی ساده مشاهده کنید:
اگر به تصویر توجه کنید متوجه وجود بخشهای مختلفی در CPU میشوید، این اجزا به ترتیب از سمت راست به چپ: حافظهی کش پردازنده (رنگ نارنجی)، حافظهی رجیستر پردازنده (رنگ آبی) و هستهی پردازنده (رنگ بنفش) هستند.
حال قصد داریم به داخل CPU سفر کرده و با نحوهی کار حافظهی کش بیشتر آشنا شویم (عملکرد سایر قسمتها در آموزشها بعدی مورد بررسی قرار خواهند گرفت)
حافظهی کش (Cache) چگونه کار میکند؟
برای اینکه بهتر با مفهوم کش و عملیات Caching آشنا شوید نحوهی عملکرد این قسمت را با مثالی ساده برای شما توضیح میدهیم:
کتابخانهای را در نظر بگیرید که تعداد زیادی کتاب در آن وجود دارد، شما برای دریافت یک کتاب به کتابدار مراجعه میکنید و او کتاب را در قفسه اصلی جستجو کرده و به شما تحویل میدهد، پس از مدتی شما کتاب را باز گردانده و کتابدار آن را در قفسهای کوچک نزدیک خود نگه میدارد.
پس از مدتی شخص دیگری مراجعه کرده و همان کتاب را درخواست میکند، این بار کتابدار سریعتر کتاب را به او میدهد.
چرا که کتاب را در یک فضای محدود و نزدیک به خود قرار داده تا در دفعات بعدی بتواند سریعتر به آن دسترسی داشته باشد.
اگر قرار بود کتابدار مجددا به مخزن اصلی مراجعه کند مطمئنا زمان بیشتری صرف اینکار میشد ولی با نگهداری کتابهای پر استفاده در نزدیکی خود سرعت عمل جستجو و استفاده از کتابها به طرز چشمگیری بهبود مییابد.
حافظه Cache پردازنده نیز به همین صورت است، این حافظهها با حجم کم خود (در حد چند مگابایت) و ساختار خاصی که دارند باعث میشوند سرعت جستجو در آنها تا حد چشمگیری افزایش یافته و به همین دلیل در سرعت پردازنده نقش چشمگیری ایفا میکنند.
اطلاعاتی که CPU بیشتر به آنها احتیاج دارد در حافظه کش ذخیره میشوند تا سرعت پردازنده بالاتر رود، در اکثر پردازندههای امروزی چند لایه حافظه کش قرار دارد (تا ۳ یا ۴ لایه)، این بخش تاثیر مستقیمی در قیمت پردازندهها نیز دارد!
طبق یک اصل هنگامی که پردازنده به بخشی از حافظهی اصلی احتیاج داشته باشد احتمالا در آیندهای نزدیک نیز مجددا به آن احتیاج خواهد داشت که به این اصل همجواری زمانی گفته میشود.
همچنین اگر پردازنده به مکانی در حافظهی اصلی احتیاج داشته باشد احتمالا در آیندهای نزدیک به مکانهای مجاور آن نیز احتیاج خواهد داشت که یه این اصل همجواری مکانی گفته میشود.
هدف از استفادهی کش این است که بیت بعدی که پردازنده به آن احتیاج خواهد داشت در حافظهی کش آماده باشد، به این فرایند Cache Hit نیز گفته میشود، انتخاب اطلاعات موجود در کش توسط الگوریتمهای پیچیده و فرضیات متعدد نرمافزاری صورت میگیرد.
طبق تعریف بالا هنگامی که دادهای به پردازنده منتقل میشود بخشی از اطلاعات مرتبط با آن نیز منتقل شده و در حافظهی Cache پردازنده ذخیره میشود.
چراکه به احتمال زیاد پردازنده در عملیات بعدی خود به آنها احتیاج خواهد داشت، با انجام این کار سرعت پردازش دادهها افزایش چشمگیری خواهد داشت.
معمولا در پردازندههای امروزی حافظهی کش از چند لایه (۳ یا ۴ لایه) تشکیل شده است، این لایهها به ترتیب L1، L2، L3، L4 نامیده میشوند، میزان حجم این حافظهها به صورت زیر تقسیمبندی میشود:
L4 > L3 > L2 > L1
سرعت عملکرد این لایهها نیز به صورت زیر دستهبندی میشود:
L1 > L2 > L3 > L4
همان گونه که متوجه شدهاید لایهی L1 کمترین اندازه را داشته ولی در عین حال از بیشترین سرعت برخوردار است و در طرف مقابل سطح L4 بیشترین حجم و کمترین سرعت را نسبت به دیگر لایهها دارد.
هنگامی که پردازنده به دادهای نیاز داشته باشد ابتدا سطح L1 را مورد بررسی قرار میدهد در صورتی که دادهی مورد نظر در آنجا وجود نداشته باشد به سراغ سطح L2 میرود، این عملیات تا پیدا کردن دادهی مورد نیاز و تا سطح L4 انجام میشود به این عمل Cache Miss گفته میشود.
در نهایت اگر اطلاعات مورد نیاز در حافظهی کش موجود نباشد CPU به ناچار به حافظهی RAM مراجعه کرده و اطلاعات مورد نیاز خود را از آنجا استخراج میکند.
ساختار لایههای کش در پردازندههای مختلف، متفاوت میباشد، در برخی از پردازندهها لایهها دارای ساختار پوششی هستند یعنی یک کپی از اطلاعات موجود در کش سطح ۱ در سطح ۲ نیز وجود دارد.
همچنین یک کپی از اطلاعات موجود در کش سطح ۲ در کش سطح ۳ موجود است، علاوه بر این ساختار طرح دیگری نیز در سطوح کش وجود دارد به اینصورت که هیچیک از دادههای موجود در لایهها با دیگری یکسان نخواهند بود.
با توجه به این توضیح در میابیم که حافظهی کش باید از سرعت بسیار بالایی برخوردار باشد به طوری که مدت زمان جستجو در آن تقریبا نزدیک به صفر بوده و وقت پردازنده برای جستجو در کش تلف نشود.
در پردازندههای چند هستهای (پردازندههای امروزی) معمولا هر هسته مقدار مشخصی حافظهی کش اختصاصی و مقداری حافظهی کش اشتراکی در اختیار دارد که بسته به پردازشی که در حال انجام آن است این مقدار متفاوت خواهد بود، طرح سادهای از این مفهوم را در تصویر زیر مشاهده میکنید:
چرا کل حافظهی کامپیوتر را از نوع Cache نمیسازند؟
با مطالعهی توضیحات بالا شاید این سوال برای شما پیش بیاید که چرا کل حافظهی سیستم را از نوع کش نمیسازند تا به این ترتیب سرعت کامپیوترها افزایش پیدا کند؟
یکی از عواملی که باعث افزایش سرعت حافظههای کش میشود اندازهی کوچک آنهاست (در حد چند مگابایت) و با افزایش حجم اطلاعات سرعت جستجو در آنها کاهش مییابد.
همچنین از دیگر عوامل موثر در سرعت بالای حافظهی کش فاصلهی کم آن تا هستههای پردازنده است .
در نتیجه با افزایش فاصله، این سرعت کاهش چشمگیری خواهد داشت و در نهایت حافظهی کش با فناوری پیچیده ای طراحی میشود و افزایش حجم، پیچیدگی آن را بیشتر میکند، به این دلیل ساخت این حافظه در ابعاد بزرگتر به هیچ وجه توجیه اقتصادی نداشته و به نوعی نیز غیر ممکن است.