Cache یا حافظۀ پنهان چیست؟
کش؛ حافظهای بسیار کوچک و بسیار سریع در CPU میباشد که برای نگهداری دستورات در حال اجرا یا دستوراتی که میخواهیم اجرا کند، از آن استفاده میکنیم. بنا براین هر چه مقدار Cache در CPU بیشتر باشد، عملکرد سیستم سریعتر خواهد بود.
حافظۀ پنهان سیپییو، حافظهای است که توسط واحد پردازنده مرکزی کامپیوتر برای کاهش زمان دسترسی به حافظهموقت (Ram) استفاده میشود. کش حافظهای کوچکتر و سریعتر است که اطلاعات مورد نیازتر را در خود ذخیره میکند. استفاده از کش، تاخیر را کاهش میدهد. وقتی پردازنده میخواهد دادهای را بخواند، ابتدا چک میکند که آن در کش موجود باشد؛ در غیر این صورت به سراغ حافظه اصلی میرود. اکثر کامپیوترهای امروزی حداقل دو کش دارند: یک کش دستورات برای افزایش سرعت واکشی دستورات و یک کش داده برای افزایش سرعت خواندن و ذخیره دادهها.
از آنجایی که پردازنده بسیار سریعتر از حافظۀ سیستم عمل میکند، ممکن است، بخشی از وقت خود را صرف انتظار برای رسیدن اطلاعات از RAM کند که در این صورت، کارایی سیستم بسیار پایین میآید. برای غلبه بر این مشکل، در اکثر پردازندهها از حافظۀ بسیار سریع به نام Cache (نهان یا میانجی) در کنار CPU استفاده میشود که اطلاعات و تبادل سریع آنها با CPU را بر عهده دارد. از همین رو است که به خریداران توصیه میشود CPU با Cache بالا خریداری کنند و اصطلاحاً پردازندۀ تمام کش (Full Cache) بر روی سیستم خود ببندند.
حافظه پنهان، نهانگاه یا کش (Cache) بخشی از حافظه سریع که چند دستور بعدی را که باید توسط پردازنده پردازش شوند را مشخص میکند (برای افزایش سرعت) و دادههایی را ذخیره میکند که کامپیوتر بتواند به سرعت به آنها دسترسی داشته باشد. فایل کردن یا قرار دادن در حافظه پنهان.
حافظه پنهان، حافظهای سریع درون پردازنده مرکزی است که جهت صرفه جویی در زمان مراجعه به حافظه اصلی بکار میرود.
زمانی که پردازنده مرکزی به مکانی در حافظه اصلی نیاز داشته باشد، احتمالاً در آینده نزدیک، مجدداً به آن محل دسترسی خواهد داشت که به این اصل «همجواری زمانی» میگویند. همچنین اگر پردازنده مرکزی به مکانی در حافظه اصلی نیاز داشته باشد، احتمالاً در آینده نزدیک به مکانهای مجاور آن نیز نیاز خواهد داشت که به این اصل، «همجواری مکانی» میگویند.
بر این اساس حافظه نهانگاهی در زمان دسترسی به یک مکان حافظه مکانهای مجاور آن را نیز به درون پردازنده مرکزی میآورد تا در صورت نیاز سریعتر قابل دسترسی باشند و این اطلاعات را تا زمانی که مورد نیاز باشند، در پردازنده مرکزی حفظ میکند. چون با افزایش سرعت پردازنده مرکزی، زمان بیشتری را در حال انتظار پاسخ حافظه اصلی میگذراند. حجم حافظه پنهان نیز تأثیر زیادی در بهبود کارایی پردازنده مرکزی دارد.
برای آنکه حافظه پنهان تأثیر مثبتی در کارایی سیستم داشته باشد، میبایست جستجو درون آن در زمان بسیار کوتاهی انجام شود.
تاریخچه:
تاریخچه اولیه فناوری کش، تقریباً مصادف با ابداع و استفاده از حافظه مجازی است. به خاطر قیمت بالای نیمه رساناها در دهه ۱۹۶۰ کامپیوترها به سمت استفاده از حافظه مجازی سوق پیدا کردند. در روزهای اولیه، سرعت دسترسی به حافظه، تنها مقدار کمی با رجیستر فرق داشت؛ ولی در دهه ۱۹۸۰ با ساخت پردازندههای پرسرعت، شکاف سرعت بین پردازنده و حافظه، بسیار بیشتر شد که این موضوع باعث پدید آمدن حافظههای میانی از جمله کش شد.
جزییات کار:
وقتی پردازنده نیاز دارد که دادهای را بخواند یا بنویسد، ابتدا چک میکند که در کش موجود است یا نه، این کار به وسیله مقایسه آدرس مکان حافظه با همه تگهای موجود در کش که ممکن است حاوی آدرس باشد، صورت میپذیرد. اگر پردازنده آدرس مکان مورد نظر حافظه را در کش بیابد، میگوییم که یک برخورد کش رخ داده، در غیر این صورت گوییم که یک خطای کش روی داده است. در صورت برخورد پردازنده به سرعت دادهها را از خط کش میخواند یا مینویسد. نسبتی از دسترسیها که منجر به برخورد میشود را «نرخ برخورد» گویند و مقیاسی است برای اندازه گیری کارایی یک الگوریتم یا برنامه. در صورت بروز خطا، کش، مدخلی دیگر را در نظر میگیرد. اگر دادهای در کش نوشته شود، باید در حافظه اصلی نیز نوشته شود. زمان این نگارش به وسیله سیاست نگارش کنترل میشود.
ساختمان مدخل کش:
مداخل سطری کش معمولاً ساختاری این چنینی دارند:
بلوکهای داده حاوی دادههای واکشی شده از حافظه اصلی میباشند. بیت اعتبار مشخص میکند که مدخل مذکور داده معتبر دارد یا نه.
شرکت پذیری:
سیاست جایگزینی، تصمیم میگیرد که کجا در کش یک کپی از دادهای از حافظه اصلی خواهد رفت. اگر سیاست جایگزینی آزاد باشد که هر جایی در کش را انتخاب کند، کش «شرکت پذیر کامل» نامیده میشود. کشی که تنها یک جا را برای ذخیره داده دارد، کش «نقشه مستقیم» خوانده میشود. اگر هر آدرس حافظه بتواند در دو نقطه از کش ذخیره شود کش را «دو سویه شرکت پذیر» گویند.
خطای کش:
یک خطای کش به یک شکست در خواندن یا نوشتن داده در کش گویند، که باعث تاخیری بسیار بزرگتر در دسترسی به حافظه اصلی میشود. سه نوع خطای کش وجود دارد: خطای خواندن دستور کش، خطای خواندن داده کش و خطای نوشتن داده کش. برای کاهش میزان خطای کش تلاشهای بسیاری صورت گرفتهاست اعم از مسایل مربوط به شرکت پذیری، سایز بلوک و غیره.
ترجمه آدرس:
اکثر پردازندههای چند منظوره امروزی، نوعی از حافظه مجازی را پیاده سازی میکنند. برای ساده سازی هر برنامهای که روی ماشین در حال اجراست فضای آدرس ساده شده خود را میبیند که تنها شامل کد و داده آن برنامهاست. هر برنامه حافظه مجازی را صرف نظر از حافظه فیزیکی استفاده میکند. حافظه مجازی نیاز دارد که پردازنده آدرسهای مجازی تولید شده توسط برنامه را بر حافظه اصلی ترجمه کند.
سلسله مراتب کش در یک پردازنده مدرن:
پردازندههای مدرن کشهای زیادی روی یک چیپ دارند.
کش اختصاصی:
پردازندههای لوله کشی شده از طریق نقاط مختلف روی لوله کشی به حافظه دسترسی دارند. این پردازندهها از الگوریتم فون نیومن برای عمل استفاده میکنند که در هر یک از پنج مرحله یک کش اختصاصی دارند.
کش متهم:
یک کش متهم کشی است که بلوکهایی که توسط پردازنده واکشی شدهاند را نگه میدارد.
کش دنبال:
کشی است که در پنتیوم۴ برای افزایش پهنای باند واکشی دستورات و کاهش مصرف انرژی مورد استفاده قرار گرفت.
کشهای چند سطحی:
مساله دیگر ایجاد توازن بین تاخیر کش و نرخ برخورد آن است. کشهای بزرگتر دارای نرخ برخورد بیشتر هستند ولی تاخیر بیشتری نیز دارند. به همین خاطر اکثر کامیپوترهای امروزی از چند سطح کش استفاده میکنند که در آن کشهای کوچک و سریع به وسیله کشهای بزرگتر ولی کندتر پشتیبانی میشوند.