موضوع مقاله: آلودگی حافظه پنهان | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # آلودگی حافظه پنهان | مقدمه: آلودگی حافظه پنهان را توصیف می‌کند که در آن یک برنامه رایانه‌ای در حال اجرا، داده‌ها را به صورت غیر ضروری در حافظه نهان سی‌پی‌یو بارگذاری می‌کند، در نتیجه باعث می‌شود که سایر داده‌های مفید از حافظه پنهان به سطوح پایین‌تر سلسله‌مراتب حافظه انتقال داده شوند و عملکرد را تضعیف کنند. | ## بخش 1: آلودگی حافظه پنهان | به عنوان مثال، در یک پردازنده چندهسته‌ای، یک هسته ممکن است جایگزین بلوک‌های واکشی شده توسط هسته‌های دیگر در حافظه پنهان مشترک شود، یا بلوک‌های از پیش واکشی شده ممکن است جایگزین بلوک‌های واکشی شده -تقاضا از حافظه پنهان شوند. درست قبل از شروع حلقه، T[0] از حافظه به حافظه پنهان واکشی می‌شود و مقدار آن به روز می‌شود. با این حال، همان‌طور که حلقه اجرا می‌شود، چون تعداد عناصر داده‌ای که به حلقه ارجاع می‌دهند نیاز دارد که کل حافظه پنهان تا ظرفیت خود پر شود، بلوک کش حاوی T[0] باید خارج شود؛ بنابراین، دفعه بعد که برنامه از T[0] برای به روز رسانی درخواست می‌کند، کش از دست می‌رود و کنترل‌کننده کش باید از گذرگاه داده درخواست کند تا بلوک کش مربوطه را دوباره از حافظه اصلی بیاورد. تغییر الگوی دسترسی به داده‌ها با قرار دادن اولین به روز رسانی T[0] بین حلقه و به روز رسانی دوم می‌تواند ناکارآمدی را از بین ببرد: برای i در 0.. این را می‌توان با استفاده از دستورالعمل‌های ویژه کنترل کش، پشتیبانی از سیستم‌عامل یا پشتیبانی سخت‌افزاری به دست آورد. این بارهای آموزش ۱۲۸ ارزش گسترده‌ای از بلوک کش مربوطه را به عنوان به عنوان نامزد نخست برای اخراج بر نیاز به "هایی که اخیرا استفاده" یعنی کمی به یک ثبات و علائم اخراج یک بلوک از مجموعه ای کش آن است. | ## بخش 2: آلودگی حافظه پنهان | برای استفاده مناسب از آن دستورالعمل در زمینه مثال بالا، عناصر داده ارجاع شده توسط حلقه باید با استفاده از این دستورالعمل بارگذاری شوند. هنگامی که به این روش اجرا می‌شود، آلودگی حافظه پنهان رخ نمی‌دهد، زیرا اجرای چنین حلقه ای باعث خروج زودهنگام T[0] از حافظه پنهان نمی‌شود. از این امر اجتناب می‌شود، زیرا با پیشرفت حلقه، آدرس‌های عناصر در C به همان روش حافظه پنهان نگاشت می‌شوند، و داده‌های واقعی قدیمی‌تر (اما به عنوان «کمترین استفاده‌شده اخیر» علامت‌گذاری نشده‌اند) در راه (های دیگر) دست نخورده باقی می‌مانند). فقط قدیمی‌ترین داده‌ها (مرتبط با مثال ارائه‌شده) از حافظه پنهان خارج می‌شوند، که T[0] عضوی از آن نیست، زیرا به‌روزرسانی آن درست قبل از شروع حلقه اتفاق می‌افتد. به‌طور مشابه، با استفاده از پشتیبانی از سیستم عامل (OS)، صفحات موجود در حافظه اصلی که با آرایه داده C مطابقت دارند را می‌توان به عنوان «ممانعت از حافظه پنهان» یا به عبارت دیگر غیرقابل کش علامت گذاری کرد. به‌طور مشابه، در سطح سخت‌افزار، از طرح‌های دور زدن حافظه پنهان می‌توان استفاده کرد که داده‌های کم استفاده مجدد را بر اساس الگوی دسترسی برنامه شناسایی کرده و آنها را از حافظه پنهان دور می‌زند. | ## بخش 3: آلودگی حافظه پنهان | همچنین، حافظه پنهان مشترک را می‌توان برای جلوگیری از تداخل مخرب بین برنامه‌های در حال اجرا، پارتیشن‌بندی کرد. معاوضه در این راه حل‌ها این است که طرح‌های مبتنی بر سیستم عامل ممکن است تأخیر زیادی داشته باشند که ممکن است سود قابل دستیابی با جلوگیری از آلودگی حافظه پنهان را باطل کند (مگر اینکه منطقه حافظه در ابتدا غیرقابل کش بوده باشد)، در حالی که تکنیک‌های مبتنی بر سخت‌افزار ممکن است یک جهانی نداشته باشند. اهمیت روزافزون اهمیت کنترل آلودگی حافظه پنهان شده‌است زیرا جریمه‌های ناشی از به اصطلاح «دیوار حافظه» همچنان در حال افزایش است. سازندگان تراشه به ابداع ترفندهای جدید برای غلبه بر تأخیر نسبی حافظه به سی‌پی‌یو ادامه می‌دهند. آنها این کار را با افزایش اندازه حافظه پنهان و با ارائه راه‌های مفید برای مهندسان نرم‌افزار برای کنترل نحوه رسیدن و ماندن داده‌ها در سی‌پی‌یو انجام می‌دهند. کنترل آلودگی کش یکی از دستگاه‌های متعددی است که در دسترس برنامه‌نویس (عمدتاً جاسازی شده) است. | ## جمع‌بندی | با این حال، روش‌های دیگری نیز که بیشتر آنها اختصاصی بوده و بسیار سخت‌افزاری و کاربردی هستند نیز مورد استفاده قرار می‌گیرند.