موضوع مقاله: حافظه نهان (رایانش) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # حافظه نهان (رایانش) | مقدمه: قاب| نمودار یک عمل حافظه پنهان در پردازنده حافظه نهان ( , یا در AUE) در رایانش، سخت‌افزار یا نرم‌افزاری است که اطلاعات را ذخیره می‌کند به طوری که درخواست‌های آینده برای داده‌ای می‌تواند سریع تر انجام شود؛ داده ذخیره شده در حافظه نهان ممکن است نتیجه محاسبات قبلی یا یک کپی از اطلاعات ذخیره شده در جای دیگر باشد. | ## بخش 1: حافظه نهان (رایانش) | یک عملیات موفق در حافظه نهان هنگامی رخ می‌دهد که اطلاعات درخواست شده در حافظه موقت موجود باشد، در حالی که اگر آن اطلاعات در حافظه یافت نشود عملیات ناموفق است. عملیات موفق در حافظه پنهان برای خواندن داده از این حافظه به کار گرفته می‌شود، که سریع تر از جمع‌آوری یک نتیجه یا خواندن از یک حافظه کندتر است؛ بنابراین، درخواست‌های بیشتری که توسط حافظه پنهان ارائه پاسخ داده شود، باعث بالا رفتن سرعت سیستم عامل می‌شود. برای مقرون به صرفه بودن و برای استفاده کارآمد از داده، حافظه‌های نهان باید نسبتاً کوچک باشند. با این وجود، حافظه‌های پنهان خود را در بسیاری از زمینه‌های محاسبات نشان داده‌اند، زیرا نرم‌افزارهای کاربردی رایج به مقادیر بالایی از داده با مرجع محلی دسترسی دارند. چنین روش‌های دسترسی نشان دهنده موقعیت مکانی زمانی است، که در آن داده‌هایی درخواست شده‌است که اخیراً درخواست شده‌است، و آدرس حافظه، جایی که اطلاعات درخواست شده‌است به صورت فیزیکی نزدیک به داده‌هایی که قبلاً درخواست شده‌اند، ذخیره شده‌است. بافر ارائه شده توسط یک حافظه پنهان مزایای پهنای باند و تاخیر فراهم: تأخیر یک منبع بزرگتر، تاخیر قابل ملاحظه ای برای دسترسی به اطلاعات دارد؛ مثلاً در پردازنده مدرن با فرکانس GHz 4، صدها چرخه ساعت برای رسیدن به DRAM طول می‌کشد. این امر با خواندن در بخش‌های بزرگ، با امید به آن که خواندن در آینده از نقاط نزدیک به آن باشد، کاهش یابد. پیش‌بینی یا پیشفرض صریح نیز ممکن است باعث شود که بتوان حدس زد در آینده چیزی که خوانده می‌شود از کجا می‌آید و در زمان‌های پیش رو به درخواست‌ها جواب داده شود؛ اگر به درستی انجام شود، تأخیر به‌طور کامل از بین می‌رود. برای مثال، یک برنامه که به بایت‌ها را در یک فضای آدرس ۳۲ بیتی دسترسی دارد را در نظر بگیرید، اما توسط یک خط انتقال داده ۱۲۸ بیت بیرون از تراشه استفاده می‌شود؛ دسترسی‌های ذخیره نشده در حافظه پنهان اجازه می‌دهد تا ۱/۱۶ از کل پهنای باند مورد استفاده قرار گیرد، و ۸۰٪ از عملیات انتقال داده‌ها، به جای خود داده‌ها، مربوط به آدرس‌های حافظه خواهد بود. خواندن تکه‌های بزرگتر، کسری از پهنای باند مورد نیاز برای ارسال اطلاعات آدرس را کاهش می‌دهد. عملیات سخت‌افزار پیاده‌سازی حافظه نهان به عنوان یک بلوک از حافظه برای ذخیره‌سازی موقت داده‌ای که احتمال استفاده مجدد از آن وجود دارد قرار گیرد. واحد پردازش مرکزی (CPU) و هارد دیسک (هارد دیسک) اغلب از حافظه پنهان استفاده می‌کنند، همانند مرورگرهای وب و سرورهای وب. هر ورودی مربوط به داده‌است، که یک کپی از داده‌های مشابه در برخی از فضاهای پشتیبان است. هر ورودی همچنین یک تگ دارد که هویت داده‌ها را در فضای پشتیبان تعیین می‌کند و مشخص می‌کند که کدام ورودی یک کپی است. هنگامی که یک درخواست دهنده به حافظه پنهان (یک پردازنده، مرورگر وب، سیستم عامل) نیاز به دسترسی به داده‌هایی دارد که در فضای پشتیبان وجود داشته باشد، ابتدا حافظه پنهان را بررسی می‌کند. اگر یک ورودی با یک تگ متناظر با داده مورد نظر پیدا شود، داده‌ها در ورود به جای آن استفاده می‌شود. به عنوان مثال، یک برنامه مرورگر وب ممکن است حافظه محلی خود را بر روی دیسک بررسی کند تا ببینید آیا یک کپی محلی از محتویات یک صفحه وب در یک URL مشخص دارد. درصد دسترسی‌های موفق در حافظه نهان، به عنوان میزان ضربه یا نسبت ضربه کش شناخته می‌شود. وضعیت دیگر، زمانی رخ می ذهد که حافظه پنهان بررسی می‌شود و حاوی هیچ ورودی با برچسب مورد نظر نیست، که این رویداد به عنوان عملیات ناموفق حافظه پنهان شناخته می‌شود. هنگامی که اطلاعات درخواست شده بازیابی می‌شود، به‌طور معمول در حافظه پنهان کپی می‌شود، که برای دسترسی بعدی آماده است. در طول عملیات ناموفق حافظه پنهان، برخی دیگر از موجودی حافظه پنهان قبلاً حذف شده‌اند تا اطلاعات جدید را بازیابی کند. الگوریتم جستجوی کاشف که برای انتخاب جایگزینی انتخاب شده‌است به عنوان سیاست جایگزینی شناخته می‌شود. یکی از سیاست‌های جایگزین محبوب «که اخیراً استفاده شده» (LRU) قدیمی‌ترین ورودی را جایگزین می‌کند است، ورودی که اخیراً نسبت به ورودی‌های دیگر دسترسی کمتری به آن شده‌است (به الگوریتم cache مراجعه کنید). الگوریتم‌های کارآمد تر ذخیره‌سازی، فرکانس عملیات موفق در حافظه پنهان در مقابل اندازه محتویات ذخیره شده، و همچنین تأخیر و کارایی برای هر دو حافظه پنهان و فضای پشتیبان را محاسبه می‌کنند. این عملیات برای مقادیر بالای داده، تاخیرهای طولانی‌تر و کارایی کندتر مانند کار با دیسک‌های سخت و شبکه‌ها خوب کار می‌کند، اما برای استفاده در یک حافظه CPU کارآمد نیست. زمان‌بندی این نوشتن توسط آنچه که به عنوان سیاست نوشتن شناخته می‌شود کنترل می‌شود. | ## بخش 2: حافظه نهان (رایانش) | نوشتن در فضای پشتیبان به تعویق می‌افتد تا محتوای اصلاح شده با یک بلوک حافظه نهان دیگر جایگزین شود. یک حافظه نهان با استفاده از معماری write-back برای پیاده‌سازی پیچیده‌تر است، زیرا ردیابی هر یک از مکان‌هایی که در آن نوشته شده‌است لازم است و آن‌ها را به عنوان dirty برای نوشتن در فضای پشتیبانی نشان دهد. داده‌ها در این مکان‌ها فقط در زمانی که آن‌ها از حافظه پنهان خارج شده‌اند، به فضای پشتیبان بازگردانده می‌شوند، اثری که به عنوان lazy write اشاره شده‌است. به همین دلیل، عملیات خواندن ناموفق در حافظه پنهان از نوع write-back (که نیاز به جایگزینی یک بلوک با بلوک دیگر را دارد)، اغلب نیاز به دو دسترسی حافظه برای سرویس دهی دارد: یکی برای نوشتن داده‌های جایگزین از حافظه پنهان در فضای پشتیبان، و دیگری برای بازیابی اطلاعات مورد نیاز است. درخواست دهنده ممکن است تغییرات زیادی در داده‌ها در حافظه پنهان ایجاد کند و سپس به حافظه پنهان برای نوشتن داده‌ها به صورت صریح اطلاع می‌دهد. از آنجاییکه هیچ اطلاعاتی در مورد عملیات نوشتن برای درخواست‌کننده بازگردانده نشده‌است، باید تصمیم‌گیری در مورد نوشتن ناموفق اتخاذ شود، چه داده‌ها در حافظه پنهان قرار بگیرند یا نگیرند. در این رویکرد، داده‌ها فقط در حالت خواندن ناموفق در حافظه نهان بارگذاری می‌شوند. در اینجا، نوشتن‌های بعدی هیچ مزیتی ندارند، زیرا هنوز هم باید به‌طور مستقیم در فضای پشتیبان نوشته شود. واحدهای دیگر غیر از حافظه پنهان ممکن است داده‌ها را در حافظه‌های پشتیبانی تغییر دهند، به این صورت که کپی داده در حافظه پنهان ممکن است از تاریخ گذشته یا کهنه شود. در عوض، هنگامی که درخواست‌کننده داده‌ها را در حافظه پنهان به روز می‌کند، کپی آن داده‌ها در سایر حافظه‌های پنهان منقضی می‌شود. پروتکل‌های ارتباطی بین مدیران حافظه پنهان که داده‌های سازگار را حفظ می‌کنند، به عنوان پروتکل‌های هماهنگی شناخته می‌شوند. نمونه‌هایی از حافظه‌های نهان سخت‌افزاری حافظه نهان در پردازنده حافظه‌های کوچک در CPU یا نزدیک آن می‌توانند سریعتر از حافظه اصلی که بزرگتر هستند، عمل کنند. اکثر پردازنده‌ها از دهه ۱۹۸۰ تا الان از یک یا چند حافظه پنهان استفاده می‌کنند، گاهی اوقات در سطوح آبشار؛ بالا پایان مدرن تعبیه شده، دسکتاپ و سرور ریزپردازنده ممکن است هر شش نوع از حافظه پنهان (بین سطوح و توابع) را داشته باشند،Mentions L4 cache. ذخیره‌سازی برای انتقال داده‌های ۳۲ بیتی (و گسترده‌تر) برای داده‌های بافت بسیار مهم بود که اغلب کمی کمتر از ۴ بیت در هر پیکسل بود، نشان داده شده در الگوهای پیچیده با مختصات UV خودسرانه و تبدیل چشم‌انداز در نقشه‌برداری بافت معکوس. به عنوان GPUهای پیشرفته (به ویژه با GPGPU محاسبه سایه‌ها) آن‌ها به‌طور مداوم گسترش می‌یابند و حافظه‌های پنهان را بیشتر می‌کنند، از جمله حافظه نهان پردازنده برای سایه زن، به نمایش گذاشتن عملکرد افزایشی مشترک با حافظه CPU. این حافظه‌های نهان برای پردازش اولیه بین رشته‌ها و عملیات اتمی، و رابط با یک MMU پردازنده ای انجام شده‌است. ترجمه در بافر یک واحد مدیریت حافظه (MMU) که ورودی‌های جدول صفحه را از حافظه اصلی دریافت می‌کند، دارای حافظه نهان ویژه ای است که برای ثبت نتایج ترجمه آدرس مجازی به آدرس‌های فیزیکی استفاده می‌شود. حافظه‌های نرم‌افزاری حافظه نهان دیسک در حالی که حافظه‌های نهان CPU به‌طور کلی توسط سخت‌افزار مدیریت می‌شود، نرم‌افزارهای مختلفی سایر حافظه‌های پنهان را مدیریت می‌کنند. صفحه حافظه نهان در حافظه اصلی، که نمونه ای از حافظه پنهان دیسک است، توسط هسته سیستم عامل مدیریت می‌شود. در حالی که بافر دیسک، که بخشی یکپارچه از درایو هارد دیسک است، که گاهی به صورت گمراه‌کننده به عنوان «حافظه نهان دیسک» به آن اشاره می‌شود، توابع اصلی آن نوشتن ترتیبی و خواندن پیش فرض است. با توجه به اندازه کوچک بافر در مقایسه با ظرفیت درایو، عملیات تکراری موفق در حافظه نهان نسبتاً نادر هستند. با این حال، کنترلرهای دیسک سطح بالا اغلب دارای حافظه نهان درونی در بلوک داده‌های هارد دیسک خود هستند. در نهایت، یک هارد دیسک محلی سریع، همچنین می‌تواند اطلاعات ذخیره شده بر روی دستگاه‌های ذخیره‌سازی اطلاعات با سرعت‌های پایین‌تر از قبیل سرورهای از راه دور (حافظه داخلی وب) یا درایوهای نوار محلی یا دستگاه‌های جیبی نوری را ذخیره کند؛ این طرح مفهوم اصلی مدیریت ذخیره‌سازی سلسله مراتبی است. همچنین، درایوهای حالت جامد فوری (SSD) سریع، می‌تواند به عنوان حافظه‌های نهان برای هارد دیسک‌های رسانه ای کوچکتر در حال چرخش استفاده شود، که به عنوان درایوهای ترکیبی یا درایوهای هیبریدی حالت جامد (SSHD) کار می‌کنند. حافظه نهان در وب مرورگرهای وب و سرورهای پروکسی وب از حافظه نهان در وب برای ذخیره پاسخ‌های قبلی از سرورهای وب مانند صفحات وب و تصاویر استفاده می‌کنند. حافظه نهان در وب میزان اطلاعاتی را که باید در سراسر شبکه منتقل شود را کاهش می‌دهد، زیرا اطلاعاتی که قبلاً در حافظه پنهان ذخیره شده‌است، اغلب می‌توانند دوباره استفاده شوند. | ## بخش 3: حافظه نهان (رایانش) | این کار باعث کاهش پهنای باند و پردازش‌های الزامای وب سرور می‌شود و به بهبود پاسخگویی برای کاربران وب کمک می‌کند. مرورگرهای وب یک درج حافظه داخلی را استفاده می‌کنند، اما برخی از ارائه دهندگان خدمات اینترنتی (ISPها) یا سازمان‌ها نیز از یک پروکسی سرور ذخیره‌سازی استفاده می‌کنند که یک حافظهٔ وب است که بین همه کاربران آن شبکه به اشتراک گذاشته شده‌است. به‌طور مشابه، معادلات غیر متمرکز وجود دارد که اجازه می‌دهد مجموعه‌ها یک کار مشابه برای ترافیک P2P انجام دهند، به عنوان مثال، Corelli. این تکنیک مربوط به روش طراحی الگوریتم برنامه‌ریزی پویا است که می‌تواند به عنوان یک روش ذخیره‌سازی نیز مورد توجه قرار گیرد. زمانی که صفحات وب از یک سرور وب به صورت موقت یا دائمی غیرقابل دسترسی هستند، این کار می‌تواند مفید باشد. به عنوان مثال، cacache یک برنامه است که خروجی اجرای برنامه را مخفی می‌کند تا سرعت اجرا شدن را کم کند. ذخیره‌سازی پایگاه داده می‌تواند به‌طور قابل ملاحظه ای توانایی گسترش برنامه‌های پایگاه داده را بهبود بخشد، به عنوان مثال در پردازش شاخص‌ها، لغات داده‌ها و زیر مجموعه‌های متداول از داده‌ها، می‌تواند مفید باشد. حافظه‌های نهان توزیع شده از میزبان‌های شبکه برای فراهم کردن مقیاس پذیری، قابلیت اطمینان و کارایی اسفاده می‌کنند. بافر در مقابل حافظه پنهان معانی «بافر» و «حافظه نهان» کاملاً متفاوت نیستند؛ حتی در این میان، بین فرایند ذخیره‌سازی و فرایند قرار دادن در بافر تفاوت‌های اساسی وجود دارد. اساساً، ذخیره‌سازی، عملکرد را برای انتقال داده‌ها که بارها منتقل می‌شوند، را افزایش می‌دهند. در حالی که یک سیستم ذخیره‌سازی ممکن است افزایش کارایی پس از انتقال اولیه (به‌طور معمول نوشتن) یک آیتم داده را متوجه شود، این افزایش عملکرد به دلیل قرار دادن در بافر هنگام ذخیره‌سازی می‌باشد. در خواندن از حافظه نهان، یک آیتم داده باید از محلی که در آنجا قرار دارد حداقل یک بار دریافت شده باشد تا در دفعات بعدی که این داده خوانده می‌شود، افزایش عملکرد به دلیل توانایی بارگیری از حافظه نهان (سریع تر) میانی به جای محل سکونت داده‌ها تحقق یابد. با استفاده از نوشتن در حافظه نهان، افزایش عملکرد درنوشتن یک آیتم داده را داریم، که ممکن است پس از نوشتن اولین آیتم داده بلافاصله در ذخیره‌سازی میانی، تحویل داده شود، و انتقال داده را به محل اقامت آن منتقل می‌کند و همچنین یک مرحله بعد یا مرحله دیگری به عنوان فرایند پس زمینه رخ می‌دهد. برخلاف قرار دادن دقیق در بافر، یک فرایند ذخیره‌سازی در حافظه نهان باید به یک پروتکل انطباق پنهان (به‌طور بالقوه توزیع شده) پایبند باشد تا حفظ یکپارچگی بین حافظه میان مدت حافظه پنهان و محل ذخیره‌سازی داده‌ها برقرار شود. قرار دادن در بافر، از سوی دیگر: تعداد انتقال‌ها برای داده‌های مختلف را در میان فرایندهای ارتباطی کاهش می‌دهد که سربار را برای چندین انتقال کوچک بر روی انتقال کمتر و انتقال بیشتر، از بین می‌برد. واسطه ای برای برقراری ارتباط با فرایندهای غیرقابل انتقال از طریق یکدیگر می‌باشد. حداقل اندازه داده یا نمایندگی مورد نیاز توسط حداقل یکی از فرایندهای ارتباطی درگیر در انتقال را تضمین می‌کند. با اجرای پیوسته به‌طور معمول، یک آیتم داده که برای اولین بار خوانده یا نوشته شده‌است، به‌طور مؤثری در بافر قرار می‌گیرد؛ و در مورد نوشتن، اغلب افزایش عملکرد برای برنامه از جایی که نوشته شده‌است منجر شد. علاوه بر این، بخشی از یک پروتکل ذخیره‌سازی که هر فرد می‌نویسد که به یک دسته از نوشتارها تعلق می‌گیرد، یک نوع عملیات قرار دادن در بافر است. بخشی از یک پروتکل ذخیره‌سازی که خواندن آن را به مجموعه ای از خواندن‌ها عوض می‌کند نیز یک شکل از بافر است، اگرچه این رویه می‌تواند بر عملکرد حداقلی از نشانه‌های اولیه تأثیر منفی داشته باشد (حتی اگر تأثیر مثبت بر عملکرد مجموع فرد خواند) در عمل، ذخیره‌سازی تقریباً همیشه شامل برخی از انواع بافر است، در حالی که سختگیرانه قرار دادن در بافر شامل ذخیره‌سازی نیست. بافر یک مکان حافظه موقت است که به‌طور سنتی مورد استفاده قرار می‌گیرد، زیرا دستورات پردازنده نمی‌تواند به‌طور مستقیم اطلاعات ذخیره شده در دستگاه‌های جانبی را پردازش کند؛ بنابراین، حافظه آدرس پذیر به عنوان یک مرحله میانی استفاده می‌شود. علاوه بر این، بافر ممکن است هنگامی که یک بلوک بزرگ از داده‌ها جمع‌آوری یا جدا (به عنوان مورد نیاز توسط یک دستگاه ذخیره‌سازی) شد، یا زمانی که داده‌ها ممکن است در یک سفارش متفاوت از آنچه که در آن تولید می‌شود تحویل داده. همچنین یک بافر کامل اطلاعات معمولاً به ترتیب (به عنوان مثال به هارد دیسک) منتقل می‌شود، به طوری که بافر خود گاهی اوقات عملکرد انتقال را افزایش می‌دهد یا تنوع یا تکان دهندگی از زمان تأخیر انتقال را کاهش می‌دهد به عنوان مخالف ذخیره‌سازی که در آن قصد کاهش دادن تأخیر است. این مزایا وجود دارد حتی اگر داده‌های بافر در یک بافر نوشته شده و یک بار از آن بخوانند. بخشی از افزایش به‌طور مشابه به این احتمال است که چندین انتقال کوچک به یک بلوک بزرگ ترکیب شود. اما عملکرد اصلی به دست می‌آید به این دلیل که شانس خوبی وجود دارد که داده‌های یکسان از چندین بار از حافظه پنهان خوانده شود یا اینکه داده‌های نوشته شده به زودی خوانده خواهند شد. | ## جمع‌بندی | Cache همچنین معمولاً یک لایه انتزاعی است که طراحی شده از نظر لایه همسایه نامرئی است.