حافظه پنهان یا کش به انگلیسی cache بخشی از حافظه سریع که چند دستور بعدی را که باید توسط پردازنده پردازش شوند را به صورت موقت درخود جای میدهد تا رایانه بتواند به سرعت به آنها دسترسی داشته باشد. فایل کردن یا قرار دادن در حافظه پنهان.حافظه cashe حافظهای سریع درون پردازنده مرکزی است که جهت صرفه جویی در زمان مراجعه به حافظه اصلی بکار میرود.
کمی تخصصی درباره cashe
کش در کامپیوتر اصطلاحی است که در مورد برخی قطعات مثل HDD و CPU بکار میرود پس اول به سراغ خود اصطلاح Cache میروم تا ببینیم این فناوری درپردازنده ها و هارد دیسک چه وظیفه ای داشته و چرا قیمت آن ، اینقدر بالا می باشد .
کش معمولا در پردازنده و هارد دیسک ها قرار گرفته و کاربرد اصلی آن هم افزایش سرعت سیستم می باشد ، این فناوری پلی است بین یک منطقه اطلاعات بزرگ با سرعت پائین و محلی که این اطلاعات مورد استفاده قرار میگیرد . وقتی اطلاعات از روی هارد دیسک یا رم فراخوانده میشوند این اطلاعات قبل از اینکه به مقصد اصلی برسند در نقطهای ذخیره میشوند که به این نقطه کش میگوئیم. سرعت انتقال اطلاعات از کش بالاتر از رم و هارد است و بخشی که نیاز به اطلاعات دارد میتواند با سرعت بیشتری به آنها دسترسی پیدا کند و در همین فاصله دادههای دیگر را فرا بخواند یا آنها را به خروجیها منتقل کند. اما همیشه هم اینطور نیست که اطلاعات در کش قابل دسترس باشند ، بنابراین اگر اطلاعات در کش باشد به این وضعیت cache hit و اگر نباشد cache miss میگویند.
امروزه تقربا تمام هارد دیسکها و DVD درایوها مجهز به این حافظه ذخیره کوتاه مدت هستند که به آن بافر هم گفته میشود اما در این قطعات معمولا از یک سطح حافظه استفاده میشود و مانند اغلب پردازندههای امروزی مجهز به دو و سه سطح از حافظه کش نیستند. با این حال همین مقدار هم تاثیر قابل توجهی در کارایی آنها دارد. اما ببینیم این کش چه تاثیری در پردازنده دارد.
وقتی اطلاعات از روی رم فراخوانده می شوند 60 نانوثانیه (یک ثانیه تقسیم بر 60 میلیارد) طول میکشد تا این اطلاعات در دسترس قرار بگیرند که مدت زمان واقعا کمی است ولی وقتی به چرخه زمانی پردازنده دقت کنیم که تنها 2 نانوثانیه است می فهمیم این زمان برای پردازنده زمانی طولانی است. کشهای اولیه ابتدا روی مادربورد قرار گرفتند و زمان دسترسی به اطلاعات را به 30 نانوثانیه کاهش دادند و بعد مشخص شد که این مقدار هم کافی نیست و یک لایه دیگر به آن اضافه کردند که این بار این لایه درون پردازنده قرار گرفت و با همان سرعت پردازنده کار میکرد. بعدها این ساختار به کلی عوض شد و اکنون علاوه بر این دو لایه یک لایه دیگر هم به حافظه درونی پردازنده اضافه شده که شروع کار آن را میتوان از زمان ورود پردازندههای چند هستهای دانست.
نکتهای که در مورد کش باید توجه کرد قیمت این حافظهها است. کش بیشتر ممکن است تاثیر مثبتی روی کارایی داشته باشد اما قیمت آن تا یک حد مشخص برای مصرف کننده قابل قبول است و به همین دلیل معمولا صرف نظر از توانائئهای فنی در ساخت پردازنده این نکته هم مورد توجه قرار میگیرد. مثال آن هم حجم کش پائین در مدلهای ارزان قیمت است.
وظیفه تمام این لایهها این است که تا حد امکان دادهها را نزدیک پردازنده نگه دارند تا پردازنده مجبور به فراخوانی اطلاعات از فاصلهای دورتر با سرعت کمتر و زمان بالاتر نباشد. اینها باعث شده تا در ساختار لایهها مخصوصا لایه دوم و سوم علاوه بر ذخیره اطلاعات مورد نیاز، از اشغال پهنای باند پردازنده با انتقال دادهها بین هستهها و ایجاد ترافیک غیرضروری در این ناحیه خودداری شود.
شیوه ذخیره اطلاعات در لایههای مختلف نیز متفاوت است. دادهها میتوانند به صورت انحصاری در یک لایه قرار بگیرند یا در لایههای مختلف تکرار شوند آنچه مشخص است این که در یک لایه اطلاعات تکرار نمیشوند و نمیتوان دو لایه همسان را در یک لایه پیدا کرد ولی با کاهش سطح لایهها و برای نزدیکتر شدن اطلاعات به هسته های پردازشی این داده تکرار میشوند و در هر سطح میتوان قسمتی از اطلاعات لایه بالاتر را دید. اینتل و AMD سیاست یکسانی در این مورد ندارند به عنوان مثال در فنومهای AMD اطلاعات به صورت انحصاری در یک لایه هستند ولی در اینتل از روش جمع دادهها بین لایهها استفاده میشود.
فراخوانی اطلاعات از سمت کش نیز میتواند حالتهای مختلفی داشته باشد. در یکی از این حالتها تنها در یک مسیر اطلاعات روی کش کپی میشوند که مزیتهایی مثل آدرسدهی بهتر اطلاعات روی رم را دارد اما در مقابل چندین مسیر برای کپی کردن اطلاعات روی رم بکارگرفته میشوند که این روش هم مزایا و معایبی دارد. مزیت آن در این است که اطلاعات روی کش بازنویسی نمیشوند و زمان دسترسی به دادههای رم کوتاهتر خواهد بود اما از طرف دیگر مقایسه اطلاعات انتقال داده شده روی کش با رم باعث افزایش زمان تاخیر رم میشود. امروزه مشخص شده که استفاده از چند مسیر انعطاف بیشتری را برای پردازنده ایجاد میکند و کارایی بهتری دارد. اینتل در پردازندههای جدید خود مثل Core i7 و i5 در سطح L1 از هشت مسیر برای انتقال دستورالعملها و از 4 مسیر برای انتقال دادهها استفاده میکند که در سطح L2نیز تقریبا همینطور است و 8 مسیر برای انتقال اطلاعات استفاده میشوند در حالی که در لایه سوم 16 مسیر برای ارتباط گذاشته شده است.
اما در AMD شیوه متفاوتی به کار گرفته شده که از مهمترین دلایل اختلاف این نوع پردازندهها با اینتل است. در فنومهای چهارهستهای برای لایه اول تنها 2 مسیر ایجاد شده که باعث کاهش زمان تاخیر میشود اما در کنار آن ظرفیت لایه L1 افزایش داده شده و 64 کیلوبایت برای دستورالعملها و 64 کیلوبایت نیز برای دادهها است. AMD در لایههای بعدی تهاجمیتر عمل میکند بطوریکه در لایه دوم همان هشت مسیر را استفاده کرده که مشابه اینتل است ولی در لایه سوم 48 مسیر برای انتقال اطلاعات فراهم شده است.
این ساختار و تفاوت معماری کش نمیتواند معیار کاملی برای مقایسه محصولات این دو تولیدکننده بزرگ پردازنده باشد و در کنار آن باید به سایر عوامل هم توجه کرد. ولی این نکات از این نظر که تفاوت بین این دو تولید کننده را بدانید بد نیست.
اولین سطح از کش دارای دو بخش است و محلی است که دستورالعملهای پردازنده و دادههای مهم در آن قرار میگیرد. این سطح L1 نامیده میشود. AMD اخیرا ( در همین یکی دو ساله) ساختار 64 کیلوبایتی را به کش پردازندههایش اضافه کرد و هر یک از این دو بخش (دادهها و دستورالعملها) دارای 64 کیلوبایت حافظههستند در حالی که اینتل همچنان به ساختار 32 کیلوبایتی متعهد مانده است. این لایه برای هر یک از هستهها اختصاصی است و اطلاعات هر هسته در اختیار سایر هستهها قرار نمیگیرد.
کش در لایه دوم تا مدتها به صورت مستقل برای هر هسته بود و حتی پیش از آن هم فقط AMD از این لایه درون CPU استفاده میکرد و در اینتل کش لایه دوم با هستهها روی یک سطح نبودند. در واقع پس از معرفی فناوری ساخت 180 نانومتری کش لایه دوم به سطح سیلیکونی CPU اضافه شد. با ورود پردازندههای Core 2 Due کش مشترک در اینتل خلق شد و لایه دوم بطور مشترک بین دو هسته مورد استفاده قرار گرفت و این روش در چهار هستهای های اینتل هم ادامه پیدا کرد تا جایی که در چهار هستهای دو کش L2 دیده میشد. زیرا این مدلها چهار هستهای واقعی نبودند و از اتصال دو سطح سیلیکونی هر یک با دو هسته تشکیل شدند. البته دلیل اینتل برای این شیوه مسائل اقتصادی و صرفه این مدلها مطرح شد با این حال AMD ساختار جدید را در فنومها پیاده کرد که همراه با کش لایه سوم بود.
حافظه نهان (cashe) به دو صورت سخت افزاری و مجازی
در نوع سخت افزاری، حافظه نهان قسمتی از واحد سخت افزاری مورد نظر (مثلاً CPUهای دارای این نوع حافظه یا هارد دیسکهای دارای این نوع حافظه) است که عمل Caching را برعهده دارد. مکانیزم،ساختار، سرعت و کارایی حافظه نهان سخت افزاری با حافظه اصلی (RAM) تفاوت زیادی دارد. از این رو با افزایش حجم حافظه نهان سخت افزاری در واحدهایی مانند CPU، قسمت تمام شده آن بیشتر میشود. دلیل این که در همه جا از حافظه نهان استفاده نمیکنند، قیمت و هزینه تهیه بسیار زیاد آن نسبت به سایر حافظهها است.
نحوه عملکرد حافظه نهان مجازی با سخت افزاری متفاوت است. این نوع حافظه نهان در واقع قسمتی از حافظه جانبی است که توسط برنامهها مشخص میشود و برای دسترسی سریعتر، از این قسمت استفاده میکنند. این نوع حافظه نهان به صورت محلی (Local) کارایی ندارد. برای مثال، برنامههایی مانند مرورگرهای وب، قسمتی از حافظه جانبی را تحت عنوان حافظه نهان وب (Web Cache) برای ذخیره سازی موقت دادههای وب مانند صفحات وب، تصاویر، استایلها و … استفاده میکنند و زمانی که کاربر قصد مشاهده صفحه یا تصویر درخواست شده را داشته باشد که در حافظه نهان وب مرورگرموجود باشد، مرورگر همان دادههای کَش شده را به کاربر نشان میدهد. دراین فرایند دیگر دادههای کش شده از طریق اینترنت یا شبکه بارگیری نمیشوند و باعث کاهش ترافیک شبکه، پنهای باند مصرفی، بار روی سرور شده و باعث بهبود فرایند میشوند. این قسمت از حافظه جانبی، تفاوتی با سایر قسمتهای عادی حافظه ندارد و تنها توسط برنامهها به عنوان حافظه نهان مجازی استفاده میشوند.
L1 Cache چیست
L1 Cache یا کش لایه یک را به عنوان حافظه اصلی کش سیستم یا کش سطح اول می شناسند ، این حافظه دارای بالاترین سطح در سلسله مراتب کش هایی است که در CPU وجود دارند. در سه سطح از حافظه های Cache ای که در سیستم وجود دارد ، کش سطح یک یا L1 دارای بالاترین سرعت است ، این کش دارای کمترین ظرفیت و از طرفی کمترین زمان وقفه یا Delay ( تقریبا صفر ) است و این به دلیل نزدیکی زیاد به CPU و قرار گرفتن آن در خود چیپ CPU است. برای پیاده سازی L1 Cache از SRAM یا Static Random Access Memory استفاده می شود.
L2 Cache چیست
L2 Cache یا کش لایه دو را به عنوان کش ثانویه سیستم یا کش سطح دوم هم می شناسند ، این حافظه در واقع یک حافظه میانی بین لایه اول و لایه سوم از کش های CPU قرار می گیرد. قانون کش ها و لایه بندی آنها به این شکل است که در صورتیکه داده ها در سطح اول پیدا نشدند در لایه دوم و به ترتیب در لایه بعدی سیستم به دنبال داده ها می گردد و بدین ترتیب اگر داده ای در لایه اول L1 Cache پیدا نشد بلافاصله سیستم شروع به بررسی محتویات L2 Cache می کند تا داده را پیدا کند. کش لایه دوم به دلیل اینکه مابین L3 Cache و L1 Cache قرار دارد یک نوع رابط بین کارایی این دو Cache نیز به حساب می آید . کش لایه دو با استفاده از DRAM یا Dynamic Random Access Memory پیاده سازی می شود. بیشتر اوقات L2 Cache بر روی مادربورد لحیم می شود و بسیار به چیپ CPU نزدیک است ( ولی روی چیپ قرار نمی گیرد ) اما برخی از پردازنده ها مانند Pentium Pro از این استاندارد تبعیت نکرده اند. البته امروزه تقریبا هیچ سازنده ای از این قانون تبعیت نمی کند و شما می توانید کش لایه دو را در خود CPU مشاهده کنید.
Level3 Cache چیست
L3 Cache معمولا بر روی مادربورد قرار می گیرد و بین حافظه اصلی سیستم یا همان RAM و کش لایه دوم قرار می گیرد . هدف از طراحی و پیاده سازی این نوع لایه کش طبق معمول این است که اگر داده ای در کش لایه دوم پیدا نشد در لایه سوم سیستم به دنبال آن بگردد اما ذاتا کش لایه سوم سرعت پایینتر و ظرفیت بیشتری نسبت به کش لایه دوم دارد و هدف اصلی از طراحی آن جلوگیری از به وجود آمدن Bottleneck در زمان دریافت داده ها از حافظه RAM می باشد. در واقع کاری که امروزه کش لایه سه انجام می دهد همان کاری است که قبلا کش لایه دو انجام می داد و قبل از قرار گرفتن در خود پردازنده ابتدا بر روی مادربورد قرار داشت . قانون کش ها در این است که حافظه کش با بیشترین ظرفیت دارای کمترین سرعت است ، بیشتر CPU های امروزی کش CPU لایه یک و لایه دو را درون خود برای هر هسته تعبیه کرده اند و یک کش لایه سه نیز بصورت کلی برای همه Core ها قرار داده اند که می توانید در تصویر بالا این فرآیند را مشاهده کنید.