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

حافظه پنهان سی‌پی‌یو (به انگلیسی: CPU cache) حافظه‌ای است که توسط واحد پردازنده مرکزی رایانه برای کاهش زمان دسترسی به حافظه‌موقت (به انگلیسی: RAM) استفاده می‌شود. کش حافظه‌ای کوچک‌تر، سریع تر، و گرانتر از رم است که اطلاعات مورد نیازتر پردازنده را در خود ذخیره می‌کند. استفاده از کش تأخیر دسترسی را کاهش می‌دهد.
وقتی پردازنده می‌خواهد داده‌ای را از حافظه اصلی (حافظه‌موقت) بخواند ابتدا بررسی می‌کند که آن در کش موجود باشد در غیر این صورت به سراغ حافظهٔ اصلی می‌رود.
اکثر کامپیوترهای امروزی حداقل دو کش دارند:یک کش دستورات برای افزایش سرعت واکشی دستورات و یک کش داده برای افزایش سرعت خواندن و نوشتن (ذخیره) داده‌ها.

جزییات کار

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

شرکت پذیری

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

خطای کش

یک خطای کش به یک شکست در خواندن یا نوشتن داده در کش گویند، که باعث تأخیری بسیار بزرگ‌تر در دسترسی به حافظه اصلی می‌شود. سه نوع خطای کش وجود دارد:خطای خواندن دستور کش، خطای خواندن داده کش و خطای نوشتن داده کش. برای کاهش میزان خطای کش تلاش‌های بسیاری صورت گرفته‌است
اعم از مسایل مربوط به شرکت پذیری، سایز بلوک و غیره.

ترجمه آدرس

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

سلسله مراتب کش در یک پردازنده مدرن

پردازنده‌های مدرن کش‌های زیادی روی یک چیپ دارند.

کش اختصاصی

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

کش متهم

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

کش دنبال

کشی است که در پنتیوم۴ برای افزایش پهنای باند واکشی دستورات و کاهش مصرف انرژی مورد استفاده قرار گرفت.

کش‌های چند سطحی

مسئله دیگر ایجاد توازن بین تأخیر کش و نرخ برخورد آن است. کش‌های بزرگ‌تر دارای نرخ برخورد بیشتر هستند ولی تأخیر بیشتری نیز دارند. به همین خاطر اکثر کامیپوترهای امروزی از چند سطح کش استفاده می‌کنند که در آن کش‌های کوچک و سریع به وسیله کش‌های بزرگ‌تر ولی کندتر پشتیبانی می‌شوند.

تاریخچه

تاریخچه اولیه فناوری کش تقریباً مصادف با ابداع و استفاده از حافظه مجازی است. به خاطر قیمت بالای نیمه رساناها در دهه ۱۹۶۰ کامپیوترها به سمت استفاده از حافظه مجازی سوق پیدا کردند. در روزهای اولیه سرعت دسترسی به حافظه تنها مقدار کمی با رجیستر فرق داشت ولی در دهه ۱۹۸۰ با ساخت پردازنده‌های پرسرعت شکاف سرعت بین پردازنده و حافظه بسیار بیشتر شد که این موضوع باعث پدید آمدن حافظه‌های میانی از جمله کش شد.