حافظه نهان سی‌پی‌یو

حافظه پنهان سی‌پی‌یو حافظه‌ای است که توسط واحد پردازنده مرکزی رایانه برای کاهش زمان دسترسی به حافظه‌موقت استفاده می‌شود. کش حافظه‌ای کوچک‌تر، سریع‌تر، و گرانتر است که اطلاعات مورد نیازتر را در خود ذخیره می‌کند. استفاده از کش تاخیر را کاهش می‌دهد.
وقتی پردازنده می‌خواهد داده‌ای را از حافظه اصلی (حافظه‌موقت) بخواند ابتدا چک می‌کند که آن در کش موجود باشد در غیر این صورت به سراغ حافظه اصلی می‌رود.
اکثر کامپیوترهای امروزی حداقل دو کش دارند:یک کش دستورات برای افزایش سرعت واکشی دستورات و یک کش داده برای افزایش سرعت خواندن و ذخیره داده‌ها.
جزییات کار
وقتی پردازنده نیاز دارد که داده‌ای را بخواند یا بنویسد ابتدا چک می‌کند که در کش موجود است یا نه، این کار به وسیله مقایسه آدرس مکان حافظه با همه تگ‌های موجود در کش که ممکن است حاوی آدرس باشد صورت می‌پذیرد. اگر پردازنده آدرس مکان مورد نظر حافظه را در کش بیابد می‌گوییم که یک برخورد کش رخ داده در غیر این صورت گوییم که یک خطای کش روی داده‌است. در صورت برخورد پردازنده به سرعت داده‌ها را از خط کش می‌خواند یا می‌نویسد. نسبتی از دسترسی‌ها که منجر به برخورد می‌شود را نرخ برخورد گویند و مقیاسی است برای اندازه‌گیری کارایی یک الگوریتم یا برنامه. در صورت بروز خطا کش مدخلی دیگر را در نظر می‌گیرد.
اگر داده‌ای در کش نوشته شود باید در حافظه اصلی نیز نوشته شود. زمان این نگارش به وسیه سیاست نگارش کنترل می‌شود.
ساختمان مدخل کش
مداخل سطری کش معمولا ساختاری این چنینی دارند:
tag
data blocks
valid bit
بلوک‌های داده حاوی داده‌های واکشی شده از حافظه اصلی می‌باشند. بیت اعتبار مشخص می‌کند که مدخل مذکور داده معتبر دارد یا نه.
شرکت پذیری
Which memory locations can be cached by which cache locations
سیاست جایگزینی تصمیم می‌گیرد که کجا در کش یک کپی از داده‌ای از حافظه اصلی خواهد رفت. اگر سیاست جایگزینی آزاد باشد که هر جایی در کش را انتخاب کند کش شرکت پذیر کامل نامیده می‌شود. کشی که تنها یک جا را برای ذخیره داده دارد کش نقشه مستقیم خوانده می‌شود. اگر هر آدرس حافظه بتواند در دو نقطه از کش ذخیره شود کش را دو سویه شرکت پذیر گویند.
خطای کش
یک خطای کش به یک شکست در خواندن یا نوشتن داده در کش گویند، که باعث تاخیری بسیار بزرگ‌تر در دسترسی به حافظه اصلی می‌شود. سه نوع خطای کش وجود دارد: خطای خواندن دستور کش ، خطای خواندن داده کش و خطای نوشتن داده کش . برای کاهش میزان خطای کش تلاش‌های بسیاری صورت گرفته‌است
اعم از مسایل مربوط به شرکت پذیری، سایز بلوک و غیره.
ترجمه آدرس
اکثر پردازنده‌های چند منظوره امروزی نوعی از حافظه مجازی را پیاده‌سازی می‌کنند. برای ساده‌سازی هر برنامه‌ای که روی ماشین در حال اجراست فضای آدرس ساده شده خود را می‌بیند که تنها شامل کد و داده آن برنامه‌است. هر برنامه حافظه مجازی را صرف نظر از حافظه فیزیکی استفاده می‌کند. حافظه مجازی نیاز دارد که پردازنده آدرس‌های مجازی تولید شده توسط برنامه را بر حافظه اصلی ترجمه کند.
سلسله مراتب کش در یک پردازنده مدرن
پردازنده‌های مدرن کش‌های زیادی روی یک چیپ دارند.
کش اختصاصی
پردازنده‌های لوله کشی شده از طریق نقاط مختلف روی لوله کشی به حافظه دسترسی دارند. این پردازنده‌ها از الگوریتم فون نیومن برای عمل استفاده می‌کنند که در هر یک از پنج مرحله یک کش اختصاصی دارند.
کش متهم
یک کش متهم کشی است که بلوک‌هایی که توسط پردازنده واکشی شده‌اند را نگه می‌دارد.
کش دنبال
کشی است که در پنتیوم۴ برای افزایش پهنای باند واکشی دستورات و کاهش مصرف انرژی مورد استفاده قرار گرفت.
کش‌های چند سطحی
مسئله دیگر ایجاد توازن بین تاخیر کش و نرخ برخورد آن است. کش‌های بزرگ‌تر دارای نرخ برخورد بیشتر هستند ولی تاخیر بیشتری نیز دارند. به همین خاطر اکثر کامیپوترهای امروزی از چند سطح کش استفاده می‌کنند که در آن کش‌های کوچک و سریع به وسیله کش‌های بزرگ‌تر ولی کندتر پشتیبانی می‌شوند.
Example of hierarchy, the K8
تاریخچه
تاریخچه اولیه فناوری کش تقریبا مصادف با ابداع و استفاده از حافظه مجازی است. به خاطر قیمت بالای نیمه رساناها در دهه ۱۹۶۰ کامپیوترها به سمت استفاده از حافظه مجازی سوق پیدا کردند. در روزهای اولیه سرعت دسترسی به حافظه تنها مقدار کمی با رجیستر فرق داشت ولی در دهه ۱۹۸۰ با ساخت پردازنده‌های پرسرعت شکاف سرعت بین پردازنده و حافظه بسیار بیشتر شد که این موضوع باعث پدید آمدن حافظه‌های میانی از جمله کش شد.