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

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

ضرورت
-----

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

بافر ارائه شده توسط یک حافظه پنهان مزایای پهنای باند و تاخیر فراهم:

### تأخیر

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

### کارایی

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

عملیات
------

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

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

هنگامی که یک درخواست دهنده به حافظه پنهان (یک پردازنده، مرورگر وب، سیستم عامل) نیاز به دسترسی به داده‌هایی دارد که در فضای پشتیبان وجود داشته باشد، ابتدا حافظه پنهان را بررسی می‌کند. اگر یک ورودی با یک تگ متناظر با داده مورد نظر پیدا شود، داده‌ها در ورود به جای آن استفاده می‌شود. این وضعیت به عنوان عملیات موفق حافظه پنهان شناخته شده‌است. به عنوان مثال، یک برنامه مرورگر وب ممکن است حافظه محلی خود را بر روی دیسک بررسی کند تا ببینید آیا یک کپی محلی از محتویات یک صفحه وب در یک URL مشخص دارد. در این مثال، URL برچسب است و محتوای صفحه وب، داده‌ها هستند. درصد دسترسی‌های موفق در حافظه نهان، به عنوان **میزان** **ضربه** یا **نسبت ضربه** کش شناخته می‌شود.

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

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

### نوشتن قوانین

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

* Write-through: نوشتن همزمان در حافظه پنهان و فضای پشتیبان انجام می‌شود.
* *Write-back* (به آن write-behind نیز گفته می‌شود): در ابتدا، نوشتن تنها در حافظه نهان انجام می‌شود. نوشتن در فضای پشتیبان به تعویق می‌افتد تا محتوای اصلاح شده با یک بلوک حافظه نهان دیگر جایگزین شود.

یک حافظه نهان با استفاده از معماری write-back برای پیاده‌سازی پیچیده‌تر است، زیرا ردیابی هر یک از مکان‌هایی که در آن نوشته شده‌است لازم است و آن‌ها را به عنوان dirty برای نوشتن در فضای پشتیبانی نشان دهد. داده‌ها در این مکان‌ها فقط در زمانی که آن‌ها از حافظه پنهان خارج شده‌اند، به فضای پشتیبان بازگردانده می‌شوند، اثری که به عنوان lazy write *اشاره شده‌است*. به همین دلیل، عملیات خواندن ناموفق در حافظه پنهان از نوع write-back (که نیاز به جایگزینی یک بلوک با بلوک دیگر را دارد)، اغلب نیاز به دو دسترسی حافظه برای سرویس دهی دارد: یکی برای نوشتن داده‌های جایگزین از حافظه پنهان در فضای پشتیبان، و دیگری برای بازیابی اطلاعات مورد نیاز است.

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

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

* Write allocate (همچنین به عنوان *fetch on write شناخته می‌شود*): داده‌هایی که مکان نوشتن آن‌ها اشتباه بوده‌است، در حافظه پنهان و پس از یک عملیات نوشتن موفق، بارگیری می‌شود. در این رویکرد، نوشتن ناموفق شبیه خواندن ناموفق است.
* No-write allocate (همچنین به عنوان write-no-allocate یا write around شناخته می‌شود): داده‌هایی که مکان نوشتن آن‌ها اشتباه بوده‌است در حافظه نهان بارگذاری شده‌است، و به‌طور مستقیم در فضای پشتیبان نوشته شده‌است. در این رویکرد، داده‌ها فقط در حالت خواندن ناموفق در حافظه نهان بارگذاری می‌شوند.

هر دو سیاست write-through و write-back می‌توانند از هر یک از این سیاست‌های write-miss استفاده کنند، اما معمولاً به این ترتیب به یکدیگر متصل می‌شوند:

* یک حافظه پنهان از نوع write-back از نوشتن تخصیصی استفاده می‌کند، امیدوار است در همان مکان بنویسد (یا حتی بخواند)، که در حال حاضر در حافظه پنهان قرار دارد.
* یک حافظه پنهان از نوع write-through از نوشتن غیر تخصیصی استفاده می‌کند. در اینجا، نوشتن‌های بعدی هیچ مزیتی ندارند، زیرا هنوز هم باید به‌طور مستقیم در فضای پشتیبان نوشته شود.

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

نمونه‌هایی از حافظه‌های نهان سخت‌افزاری
---------------------------------------

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

حافظه‌های کوچک در 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 یک برنامه است که خروجی اجرای برنامه را مخفی می‌کند تا سرعت اجرا شدن را کم کند.

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

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

بافر در مقابل حافظه پنهان
-------------------------

معانی «بافر» و «حافظه نهان» کاملاً متفاوت نیستند؛ حتی در این میان، بین فرایند ذخیره‌سازی و فرایند قرار دادن در بافر تفاوت‌های اساسی وجود دارد.

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

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

* تعداد انتقال‌ها برای داده‌های مختلف را در میان فرایندهای ارتباطی کاهش می‌دهد که سربار را برای چندین انتقال کوچک بر روی انتقال کمتر و انتقال بیشتر، از بین می‌برد.
* واسطه ای برای برقراری ارتباط با فرایندهای غیرقابل انتقال از طریق یکدیگر می‌باشد.
* حداقل اندازه داده یا نمایندگی مورد نیاز توسط حداقل یکی از فرایندهای ارتباطی درگیر در انتقال را تضمین می‌کند.

با اجرای پیوسته به‌طور معمول، یک آیتم داده که برای اولین بار خوانده یا نوشته شده‌است، به‌طور مؤثری در بافر قرار می‌گیرد؛ و در مورد نوشتن، اغلب افزایش عملکرد برای برنامه از جایی که نوشته شده‌است منجر شد. علاوه بر این، بخشی از یک پروتکل ذخیره‌سازی که هر فرد می‌نویسد که به یک دسته از نوشتارها تعلق می‌گیرد، یک نوع عملیات قرار دادن در بافر است. بخشی از یک پروتکل ذخیره‌سازی که خواندن آن را به مجموعه ای از خواندن‌ها عوض می‌کند نیز یک شکل از بافر است، اگرچه این رویه می‌تواند بر عملکرد حداقلی از نشانه‌های اولیه تأثیر منفی داشته باشد (حتی اگر تأثیر مثبت بر عملکرد مجموع فرد خواند) در عمل، ذخیره‌سازی تقریباً همیشه شامل برخی از انواع بافر است، در حالی که سختگیرانه قرار دادن در بافر شامل ذخیره‌سازی نیست.

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

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

جستارهای وابسته
---------------

* حافظه نهان سی‌پی‌یو
* الگوریتم حافظه پنهان
* انسجام حافظه نهان
* معماری حافظه فقط پنهان
* حافظه نهان وب
* حافظه پنهان موتور جستجو

منابع
-----

1. ↑  «*حافظهٔ نهان*» [*رایانه و فنّاوری اطلاعات*] هم‌ارزِ «*cache memory, cache*»؛ منبع: گروه واژه‌گزینی. جواد میرشکاری، ویراستار. *دفتر پنجم*. فرهنگ واژه‌های مصوب فرهنگستان. تهران: انتشارات فرهنگستان زبان و ادب فارسی. شابک ۹۷۸-۹۶۴-۷۵۳۱-۷۶-۴ (ذیل سرواژهٔ *حافظهٔ نهان*)
2. ↑  "Cache". *Oxford Dictionaries*. Oxford Dictionaries. Archived from the original on 8 September 2016. Retrieved 2 August 2016.
3. ↑  "Cache". *Macquarie Dictionary*. Macmillan Publishers Group Australia 2015. Retrieved 21 July 2015.[*پیوند مرده*]
4. ↑  John L. Hennessy; David A. Patterson (16 September 2011). *Computer Architecture: A Quantitative Approach*. Elsevier. pp. B–12. ISBN 978-0-12-383872-8. Retrieved 25 March 2012.
5. ↑  "intel broad well core i7 with 128mb L4 cache".Mentions L4 cache. Combined with separate I-Cache and TLB, this brings the total 'number of caches (levels+functions) to 6
6. 1 2   S. Mittal, "نظرسنجی از تکنیک‌های مدیریت و جابجایی حافظه‌ها در GPUها "، JCSC، 23 (8)، 2014.
7. ↑  "qualcom Hexagon DSP SDK overview".
8. ↑  Frank Uyeda (2009). "Lecture 7: Memory Management" (PDF). *CSE 120: Principles of Operating Systems*. UC San Diego. Retrieved 2013-12-04.
9. ↑  Multiple (wiki). "Web application caching". *Docforge*. Archived from the original on 12 December 2019. Retrieved 2013-07-24.
10. ↑   `{{cite conference}}`: Empty citation (help)
11. ↑  Paul, S; Z Fei (1 February 2001). "Distributed caching with centralized control". *Computer Communications*. **24** (2): 256–268. doi:10.1016/S0140-3664(00)00322-4.
12. ↑  Khan, Iqbal (July 2009). "Distributed Caching On The Path To Scalability". **24** (7). `{{cite journal}}`: Cite journal requires `|journal=` (help)

اطلاعات بیشتر
-------------

* "آنچه هر برنامه نویس باید در مورد حافظه بدانند" توسط Ulrich Drepper
* "ذخیره سازی در محیط توزیع شده"

| * ن
* ب
* و
فناوری‌های واحد پردازش مرکزی |
| --- |
| مدل‌های محاسبه | 
* ماشین تورینگ
	+ ماشین تورینگ جهانی
	+ ماشین پست-تورینگ
	+ ماشین تورینگ کوانتومی
* Belt machine
* ماشین پشته‌ای
* ماشین حالات متناهی
	+ with datapath
	+ ماشین حالت یو.ام.ال
	+ ماشین صف
* Register machines
	+ Counter
	+ Pointer
	+ Random-access
	+ ماشین برنامه ذخیره‌شده با دسترسی تصادفی

 |
| معماری رایانه | 
* ریزمعماری
* معماری فون نویمان
* معماری هاروارد
	+ modified
* معماری جریان داده
* Transport-triggered
* Cellular
* اندیان
* ذخیره‌سازی داده رایانه
	+ حافظه دسترسی غیریکپارچه
	+ HUMA
	+ Load/store
	+ معماری حافظه ثبات
* Cache hierarchy
* سلسله‌مراتب حافظه
	+ حافظه مجازی
	+ ذخیره‌سازی داده رایانه
* Heterogeneous
* Fabric
* چندپردازشی
* رایانش شناختی
* نورومورفیک

 |
| مجموعه دستورالعمل‌ها | 

|  |  |
| --- | --- |
| انواع | 
* رایانه با دستورهای پیچیده
* رایانه کم دستور
* Application-specific
* EDGE
	+ TRIPS
* کلمه دستورالعمل بسیار طولانی
	+ رایانش موازی صریح دستورالعمل‌ها
* MISC
* OISC
* NISC
* ZISC
* comparison
	+ حالت‌های آدرس‌دهی

 |

* اکس۸۶
* معماری آرم
* معماری میپس
* Power ISA
* اسپارک
* ایتانیوم
* Unicore
* MicroBlaze
* RISC-V
* others
 |
| Execution | 

|  |  |
| --- | --- |
| خط لوله | 
* حباب
* Operand forwarding
* Classic RISC pipeline

 |
| مخاطره‌ها | 
* وابستگی داده
* مخاطره
* مخاطره
* False sharing

 |
| خروج از دستور در حال اجرا | 
* Tomasulo algorithm
	+ Reservation station
	+ Re-order buffer
* تغییر نام ثبات

 |
| Speculative | 
* پیش‌بینی‌کننده پرش
* Memory dependence prediction

 |

 |
| رایانش موازی | 

|  |  |
| --- | --- |
| سطح | 
* موازی‌سازی بیتی
	+ Bit-serial
	+ کلمه
* دستورالعمل
* خط لوله (رایانه)
	+ Scalar
	+ سوپراسکالر
* Task
	+ ریسه
	+ فرایند
* Data
	+ پردازنده برداری
* Memory
* رایانش توزیع‌شده

 |
| چندریسمانی | 
* چندرشته زمانی
* چندریسمانی همزمان
	+ فراریسمانی
* Speculative
* پیش‌اجرایی
* چند وظیفه‌ای بدون قبضه‌ای

 |
| طبقه‌بندی فلین | 
* یک دستور یک داده
* یک دستور چند داده
	+ SWAR
* SIMT
* چند دستور یک داده
* چند دستور چند داده
	+ یک برنامه چند داده

 |

 |
| Processorperformance | 
* Transistor count
* Instructions per cycle (IPC)
	+ Cycles per instruction (CPI)
* Instructions per second (IPS)
* فلاپس (FLOPS)
* تراکنش بر ثانیه (TPS)
* Synaptic updates per second (SUPS)
* Performance per watt (PPW)
* Cache performance metrics
* Computer performance by orders of magnitude

 |
| انواع | 
* واحد پردازش مرکزی (CPU)
* واحد پردازش گرافیکی (GPU)
	+ محاسبات همه‌منظوره بر روی واحد پردازش گرافیکی
* پردازنده برداری
* Barrel
* پردازش جریان
* Coprocessor
* مدارهای مجتمع با کاربرد خاص
* مدار مجتمع دیجیتال برنامه‌پذیر
* CPLD
* Multi-chip module (MCM)
* System in package (SiP)

|  |  |
| --- | --- |
| By application | 
* ریزپردازنده
* ریزکنترل‌گر
* Mobile
* Notebook
* Ultra-low-voltage
* ASIP

 |
| Systemson chip | 
* سامانه روی یک تراشه (SoC)
* Multiprocessor (MPSoC)
* Programmable (PSoC)
* شبکه درون یک تراشه (NoC)

 |
| شتاب‌دهنده سخت‌افزاری | 
* AI accelerator
* Vision processing unit (VPU)
* Physics processing unit (PPU)
* پردازشگر سیگنال دیجیتال (DSP)
* واحد پردازشی تنسور (TPU)
* Secure cryptoprocessor
* پردازنده‌های شبکه‌ای
* Baseband processor

 |

 |
| کلمه | 
* معماری ۱-بیتی
* بیت برش
* ۴-بیت
* ۸ بیتی
* ۱۶ بیتی
* ۳۲-بیت
* 48-bit
* 64-bit
* ۱۲۸-بیت
* 256-bit
* 512-bit
* کلمه (معماری رایانه)
	+ کلمه (معماری رایانه)

 |
| تعداد هسته | 
* Single-core
* پردازنده چندهسته‌ای
* Manycore
* Heterogeneous architecture

 |
| اجزاء | 
* واحد پردازش مرکزی
* حافظه نهان (رایانش)
	+ حافظه نهان سی‌پی‌یو
	+ الگوریتم حافظه پنهان
	+ انسجام حافظه نهان
* گذرگاه
* سرعت ریزپردازنده
* سیگنال ساعت
* خروج به ترتیب ورود

|  |  |
| --- | --- |
| Functional units | 
* واحد محاسبه و منطق (ALU)
* Address generation unit (AGU)
* واحد ممیز شناور (FPU)
* واحد مدیریت حافظه (MMU)
	+ Load–store unit
	+ تی‌ال‌بی (TLB)
* کنترلگر حافظه (IMC)

 |
| دروازه منطقی | 
* مدار ترکیبی
* مدارهای ترتیبی
* Glue
* دروازه منطقی
	+ دروازه‌های منطقی کوانتومی
	+ دروازه آرایه

 |
| ثبات سخت‌افزاری | 
* ثبات
* ثبات وضعیت
* ثبات پشته‌ای
* Register file
* Memory buffer
* شمارنده برنامه

 |
| واحد کنترل | 
* Instruction unit
* حافظه میانگیر
* Write buffer
* ریزبرنامه‌سازی تصویر رام
* شمارنده

 |
| دیتاپد | 
* تسهیم‌کننده
* تسهیم‌کننده
* جمع‌کننده
* ضرب‌کننده دودویی
	+ پردازنده چندبرابر
* رمزگشا
	+ Address decoder
	+ Sum addressed decoder
* شیفت دهنده بشکه‌ای

 |
| مدار الکترونیکی | 
* مدار مجتمع
	+ 3D
	+ Mixed-signal
	+ Power management
* مدار بولی
* الکترونیک دیجیتال
* الکترونیک آنالوگ
* Quantum
* کلید

 |

 |
| مدیریت نیرو | 
* PMU
* APM
* رابط قدرت و تنظیمات پیشرفته
* درجه‌بندی پویای بسامد
* Dynamic voltage scaling
* Clock gating
* Performance per watt (PPW)
* Race to sleep

 |
| مرتبط | 
* History of general-purpose CPUs
* Microprocessor chronology
* طراحی پردازنده
* الکترونیک دیجیتال
* ماژول امنیتی سخت‌افزاری
* Semiconductor device fabrication
* Tick–tock model

 |