حافظه نهان (رایانش)

در رایانش، حافظه نهان (‎/kæʃ/‎ kash , یا ‎/ˈkeɪʃ/‎ kaysh در AUE) سخت‌افزار یا نرم‌افزاری است که اطلاعات را ذخیره می‌کند به طوری که درخواست‌های آینده برای داده‌ای می‌تواند سریع تر انجام شود؛ داده ذخیره شده در حافظه نهان ممکن است نتیجه محاسبات قبلی یا یک کپی از اطلاعات ذخیره شده در جای دیگر باشد. یک عملیات موفق در حافطه نهان هنگامی رخ می‌دهد که اطلاعات درخواست شده در حافظه موقت موجود باشد، در حالی که اگر آن اطلاعات در حافطه یافت نشود عملیات ناموفق است. عملیات موفق در حافظه پنهان برای خواندن داده از این حافظه به کار گرفته می‌شود، که سریع تر از جمع‌آوری یک نتیجه یا خواندن از یک حافظه کندتر است؛ بنابراین، درخواست‌های بیشتری که توسط حافظه پنهان ارائه پاسخ داده شود، باعث بالا رفتن سرعت سیستم عامل می‌شود.
برای مقرون به صرفه بودن و برای استفاده کارآمد از داده، حافظه‌های نهان باید نسبتاً کوچک باشند. با این وجود، حافظه‌های پنهان خود را در بسیاری از زمینه‌های محاسبات نشان داده‌اند، زیرا نرم‌افزارهای کاربردی رایج به مقادیر بالایی از داده با مرجع محلی دسترسی دارند. چنین روش‌های دسترسی نشان دهنده موقعیت مکانی زمانی است، که در آن داده‌هایی درخواست شده‌است که اخیراً درخواست شده‌است، و آدرس حافظه، جایی که اطلاعات درخواست شده‌است به صورت فیزیکی نزدیک به داده‌هایی که قبلاً درخواست شده‌اند، ذخیره شده‌است.

ضرورت

یک همبستگی ذاتی بین اندازه و سرعت وجود دارد (با توجه به این که یک منبع بزرگتر فضاهای فیزیکی بیشتری را فراهم می‌کند) اما همچنین یک تعادل بین تکنولوژی‌های گران‌قیمت (مانند SRAM) با کالاهای ارزان تری که به راحتی تولید انبوه می‌شوند (مانند DRAM یا سخت دیسک‌ها)وجود دارد.
بافر ارائه شده توسط یک حافظه پنهان مزایای پهنای باند و تاخیر فراهم:

تأخیر

یک منبع بزرگتر، تاخیر قابل ملاحظه ای برای دسترسی به اطلاعات دارد. مثلاً در پردازنده مدرن با فرکانس GHz 4، صدها چرخه ساعت برای رسیدن به DRAM طول می‌کشد. این امر با خواندن در بخش‌های بزرگ، با امید به آن که خواندن در آینده از نقاط نزدیک به آن باشد، کاهش یابد. پیش‌بینی یا پیشفرض صریح نیز ممکن است باعث شود که بتوان حدس زد در آینده چیزی که خوانده می‌شود از کجا می‌آید و در زمان‌های پیش رو به درخواست‌ها جواب داده شود؛ اگر به درستی انجام شود، تأخیر به‌طور کامل از بین می‌رود.

کارایی

استفاده از حافظه پنهان همچنین باعث می‌شود تا میزان تولید بیشتر از منابع زیرزمینی، با جمع‌آوری چندین انتقال fine grain به درخواست‌های بزرگتر و کارآمد تر انجام شود. در مورد مدارات DRAM، ممکن است با داشتن یک خط انتقال داده وسیع تر باشد. برای مثال، یک برنامه که به بایت‌ها را در یک فضای آدرس ۳۲ بیتی دسترسی دارد را در نظر بگیرید، اما توسط یک خط انتقال داده ۱۲۸ بیت بیرون از تراشه استفاده می‌شود؛ دسترسی‌های ذخیره نشده در حافظه پنهان اجازه می‌دهد تا ۱/۱۶ از کل پهنای باند مورد استفاده قرار گیرد، و ۸۰٪ از عملیات انتقال داده‌ها، به جای خود داده‌ها، مربوط به آدرس‌های حافظه خواهد بود. خواندن تکه‌های بزرگتر، کسری از پهنای باند مورد نیاز برای ارسال اطلاعات آدرس را کاهش می‌دهد.

عملیات

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

حافظه نهان در پردازنده

حافظه‌های کوچک در CPU یا نزدیک آن می‌توانند سریعتر از حافظه اصلی که بزرگتر هستند، عمل کنند. اکثر پردازنده‌ها از دهه ۱۹۸۰ تا الان از یک یا چند حافظه پنهان استفاده می‌کنند، گاهی اوقات در سطوح آبشار؛ بالا پایان مدرن تعبیه شده، دسکتاپ و سرور ریزپردازنده ممکن است هر شش نوع از حافظه پنهان (بین سطوح و توابع) را داشته باشند، نمونه‌هایی از حافظه‌های پنهان با یک تابع خاص، D-cache و I-cache و بافر translation lookaside برای MMU هستند.

حافظه پنهان در پردازنده گرافیکی

واحدهای پردازش گرافیک (GPUs) در گذشته اغلب محدودیت‌های فقط خواندنی(texture caches) را داشتند و با توجه به اینکه بافت‌های swizelled textures را برای بهبود دوبعدی در حافظه پنهان قرار داده بودند، معرفی شدند. ناپدید شدن حافظه پنهان به شدت بر عملکرد تأثیر می‌گذارد، به عنوان مثال اگر Mipmapping استفاده نشد. ذخیره‌سازی برای انتقال داده‌های ۳۲ بیتی (و گسترده‌تر) برای داده‌های بافت بسیار مهم بود که اغلب کمی کمتر از ۴ بیت در هر پیکسل بود، نشان داده شده در الگوهای پیچیده با مختصات UV خودسرانه و تبدیل چشم‌انداز در نقشه‌برداری بافت معکوس.
به عنوان GPUهای پیشرفته (به ویژه با GPGPU محاسبه سایه‌ها) آن‌ها به‌طور مداوم گسترش می‌یابند و حافظه‌های پنهان را بیشتر می‌کنند، از جمله حافظه نهان پردازنده برای سایه زن، به نمایش گذاشتن عملکرد افزایشی مشترک با حافظه CPU. به عنوان مثال، GPUهای معماری GT200 دارای حافظه نهان L2 نیستند، در حالی که GPU Fermi دارای ۷۶۸ بایت حافظه پنهان در سطح بالا می‌باشد، GPU Kepler دارای ۱۵۳۶ بایت حافظه پنهان در سطح بالا می‌باشد، و GPU ماکسول دارای ۲۰۴۸ بایت حافظه نهان در سطح بالا می‌باشد. این حافظه‌های نهان برای پردازش اولیه بین رشته‌ها و عملیات اتمی، و رابط با یک MMU پردازنده ای انجام شده‌است.

DSPs

پردازنده‌های سیگنال دیجیتال در طول سال‌ها به‌طور کلی تعمیم داده شده‌اند. در طرح‌های اولیه از حافظه‌های Scratchpad که در آن‌ها DMA وجود دارد، استفاده می‌کنند، اما DSPهای مدرن مانند Qualcomm Hexagon اغلب مجموعه ای بسیار مشابه از حافظه‌های پنهان را در CPU (مانند معماری هاروارد اصلاح شده با L2 مشترک، تقسیم L1 I-cache و D-cache)شامل می‌شوند.

ترجمه در بافر

یک واحد مدیریت حافظه (MMU) که ورودی‌های جدول صفحه را از حافظه اصلی دریافت می‌کند، دارای حافظه نهان ویژه ای است که برای ثبت نتایج ترجمه آدرس مجازی به آدرس‌های فیزیکی استفاده می‌شود. این حافظه نهان ویژه، یک Buffer Lookaside)TLB) نامیده می‌شود.

حافظه نهان دیسک

در حالی که حافظه‌های نهان CPU به‌طور کلی توسط سخت‌افزار مدیریت می‌شود، نرم‌افزارهای مختلفی سایر حافظه‌های پنهان را مدیریت می‌کنند. صفحه حافظه نهان در حافظه اصلی، که نمونه ای از حافظه پنهان دیسک است، توسط هسته سیستم عامل مدیریت می‌شود.
در حالی که بافر دیسک، که بخشی یکپارچه از درایو هارد دیسک است، که گاهی به صورت گمراه‌کننده به عنوان «حافظه نهان دیسک» به آن اشاره می‌شود، توابع اصلی آن نوشتن ترتیبی و خواندن پیش فرض است. با توجه به اندازه کوچک بافر در مقایسه با ظرفیت درایو، عملیات تکراری موفق در حافطه نهان نسبتاً نادر هستند. با این حال، کنترلرهای دیسک سطح بالا اغلب دارای حافظه نهان درونی در بلوک داده‌های هارد دیسک خود هستند.
در نهایت، یک هارد دیسک محلی سریع، همچنین می‌تواند اطلاعات ذخیره شده بر روی دستگاه‌های ذخیره‌سازی اطلاعات با سرعت‌های پایین‌تر از قبیل سرورهای از راه دور (حافظه داخلی وب) یا درایوهای نوار محلی یا دستگاه‌های جیبی نوری را ذخیره کند؛ این طرح مفهوم اصلی مدیریت ذخیره‌سازی سلسله مراتبی است. همچنین، درایوهای حالت جامد فوری (SSD) سریع، می‌تواند به عنوان حافظه‌های نهان برای هارد دیسک‌های رسانه ای کوچکتر در حال چرخش استفاده شود، که به عنوان درایوهای ترکیبی یا درایوهای هیبریدی حالت جامد (SSHD) کار می‌کنند.

حافظه نهان در وب

مرورگرهای وب و سرورهای پروکسی وب از حافظه نهان در وب برای ذخیره پاسخ‌های قبلی از سرورهای وب مانند صفحات وب و تصاویر استفاده می‌کنند. حافظه نهان در وب میزان اطلاعاتی را که باید در سراسر شبکه منتقل شود را کاهش می‌دهد، زیرا اطلاعاتی که قبلاً در حافظه پنهان ذخیره شده‌است، اغلب می‌توانند دوباره استفاده شوند. این کار باعث کاهش پهنای باند و پردازش‌های الزامای وب سرور می‌شود و به بهبود پاسخگویی برای کاربران وب کمک می‌کند.
مرورگرهای وب یک درج حافظه داخلی را استفاده می‌کنند، اما برخی از ارائه دهندگان خدمات اینترنتی (ISPها) یا سازمان‌ها نیز از یک پروکسی سرور ذخیره‌سازی استفاده می‌کنند که یک حافظهٔ وب است که بین همه کاربران آن شبکه به اشتراک گذاشته شده‌است.
یکی دیگر از انواع حافظه پنهان، حافظه نهان از نوع P2P است، جایی که فایل‌های مورد نظر توسط برنامه‌های peer to peer در حافظه نهان یک ISP ذخیره می‌شوند تا سرعت انتقال P2P را افزایش دهند. به‌طور مشابه، معادلات غیر متمرکز وجود دارد که اجازه می‌دهد مجموعه‌ها یک کار مشابه برای ترافیک P2P انجام دهند، به عنوان مثال، Corelli.

تکنیک Memoization

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

انواع دیگر حافظه نهان

BIND DNS daemon یک نگاشت از نام دامنه به آدرس‌های IP را ذخیره می‌کند، مانند یک کتابخانه حل‌کننده عمل می‌کند.
عملیات Write-through در هنگام استفاده از شبکه‌های غیرقابل اعتماد (مثل شبکه اترنت) رایج است، زیرا پیچیدگی بسیار زیاد پروتکل انسجام بین تعدادی از حافظه‌های نهان از نوع write-back که ارتباطشان نامعتبر است، مورد نیاز است. به عنوان مثال، حافظه‌های نهان صفحه وب و سمت سرویس گیرنده سیستم فایل شبکه (مانند حافظه‌هایی که در NFS یا SMB هستند) معمولاً فقط خواندنی یا به‌طور ویژه write-through هستند که پروتکل شبکه را ساده و قابل اعتماد نگه می‌دارد.
موتورهای جستجو نیز غالباً صفحات وب خود را از طریق حافظه پنهان خود نشان می‌دهند. به عنوان مثال، Google یک پیوند "Cached" در کنار هر نتیجه جستجو ایجاد می‌کند. زمانی که صفحات وب از یک سرور وب به صورت موقت یا دائمی غیرقابل دسترسی هستند، این کار می‌تواند مفید باشد.
نوع دیگری از ذخیره‌سازی، ذخیره نتایج محاسبه شده‌است که به احتمال زیاد دوباره مورد نیاز است یا برای memoization استفاده می‌شود. به عنوان مثال، cacache یک برنامه است که خروجی اجرای برنامه را مخفی می‌کند تا سرعت اجرا شدن را کم کند.
ذخیره‌سازی پایگاه داده می‌تواند به‌طور قابل ملاحظه ای توانایی گسترش برنامه‌های پایگاه داده را بهبود بخشد، به عنوان مثال در پردازش شاخص‌ها، لغات داده‌ها و زیر مجموعه‌های متداول از داده‌ها، می‌تواند مفید باشد.
حافظه‌های نهان توزیع شده از میزبان‌های شبکه برای فراهم کردن مقیاس پذیری، قابلیت اطمینان و کارایی اسفاده می‌کنند. میزبان‌ها می‌توانند در مناطق مختلف جغرافیایی قرار بگیرند.