انسجام حافظه نهان

چپ|بندانگشتی|400px|حافظه‌های نهان چندگانه در یک منبع مشترک
**انسجام [[حافظهٔ نهان]] (Cache Coherence)** در علوم رایانه به هم‌خوانی داده‌های ذخیره شده در حافظه‌های نهان محلی یک منبع مشترک گفته می‌شود.
در شرایطی که در یک سامانهٔ دارای حافظه مشترک چند خدمت‌گیرنده حافظه‌های نهان خود را دارا باشند، امکان بروز مشکل به خاطر ناهم‌خوانی داده‌ها وجود دارد. خصوصاً این حالت برای پردازنده‌ها در سامانه‌های چندپردازنده‌ای رخ می‌دهد. همان‌طور که در نمودار «حافظه‌های نهان چندگانه در یک منبع مشترک» دیده می‌شود، در صورتی که خدمت‌گیرندهٔ بالا از قبل یک کپی از بلوکی از حافظه را در اختیار داشته باشد و خدمت گیرندهٔ پایین آن را تغییر دهد، خدمت‌گیرندهٔ بالا مقدار نادرست داده را بدون اطلاع از نادرست بودن آن در اختیار دارد. هدف از انسجام حافظهٔ نهان مدیریت این گونه مشکلات و حفظ هم‌خوانی داده میان حافظه و حافظهٔ نهان است.

## تعریف
انسجام، چگونگی خواندن و نوشتن در یک محل حافظه را تعیین می‌کند. اگر شرایط زیر رعایت شود، انسجام حافظهٔ نهان حاصل می‌گردد:
# اگر دستور خواندن از مکان X حافظه پس از دستور نوشتن در همان مکان توسط پردازندهٔ P اجرا شود و در این میان توسط هیچ پردازندهٔ دیگری مقداری در X نوشته نشود، مکان X باید مقدار نوشته شده به‌وسیلهٔ P را برگرداند. این شرط مربوط به حفظ امنیت در سطح برنامه می‌باشد و حتی باید در معماری‌های تک‌پردازنده‌ای نیز رعایت گردد.
# اگر دستور خواندن از مکان X حافظه توسط پردازندهٔ P1 پس از دستور نوشتن در همان مکان به‌وسیلهٔ پردازندهٔ P2 اجرا شود و در بین این دو دسترسی مقدار دیگری توسط پردازنده‌ای دیگر در آن نوشته نشود، مکان X باید مقدار نوشته شده به‌وسیلهٔ P2 را برگرداند. این شرط مفهوم نمای منسجم حافظه را بازگو می‌کند. در صورتی که پردازنده‌ها بعد از اجرای دستور نوشتن توسط P2 مقدار پیشین را بخوانند، می‌توان گفت که حافظه غیرمنسجم است.
# باید برای نوشتن در یک مکان معین، ترتیب در نظر گرفته شود. به بیان دیگر اگر در مکان X توسط هر دو پردازندهٔ دلخواه به ترتیب مقادیر A و B نوشته می‌شود، پردازنده‌ها به هیچ وجه مجاز نیستند ابتدا آن مکان را به عنوان B و پس از آن به عنوان A بخوانند. مقادیر مکان X باید با همان ترتیب نوشته شده، یعنی A و سپس B، خوانده شود.

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

## ساز و کارهای انسجام حافظهٔ نهان
* **[[انسجام حافظه نهان بر مبنای دایرکتوری|انسجام نشانی‌محور]]** (Directory-based): در یک سامانهٔ نشانی‌محور داده‌ای که به اشتراک گذاشته می‌شود در یک نشانی مشترک قرار دارد که انسجام بین حافظه‌های نهان را حفظ می‌کند. این نشانی مانند یک فیلتر عمل می‌کند که پردازنده‌ها باید برای بار کردن یک وارده از حافظهٔ اصلی به حافظهٔ نهان خودشان، از آن مجوز بگیرند. هنگامی که یک وارده تغییر کند، این نشانی یا مقدار آن را در حافظه‌های نهان به روز می‌کند یا آن را غیرمعتبر اعلام می‌کند.
* **اسنوپینگ (Snooping)**: رویه‌ای است که طی آن حافظه‌های نهان پردازنده‌ها برای اطلاع از دسترسی‌ها به محلی از حافظه که کپی آن را در اختیار دارند، خطوط آدرس را زیر نظر می‌گیرند. هنگامی که ویرایشی در آن محل‌ها انجام گیرد، کنترل گر حافظهٔ نهان کپی دادهٔ مربوط به آن محل را در نزد خود غیرمعتبر اعلام می‌کند.
* **اسنارفینگ (Snarfing)**: در این شیوه کنترل گر حافظهٔ نهان خطوط آدرس و داده را زیر نظر دارد تا در صورتی که مکانی از حافظهٔ اصلی توسط پردازنده‌ای دیگر تغییر یافت، مقدار موجود نزد خود را به روز کند. هنگامی که ویرایشی در محلی که حافظهٔ نهان کپی دادهٔ آن را در اختیار دارد مشاهده شد، کنترل گر حافظهٔ نهان مقدار موجود نزد خود را به روز می‌کند.
* **انسجام توکن (Token Coherence)**: تکنیک‌های پیشین نیاز به دقت بالا در رد و بدل کردن پیغام‌ها و گذارهای ماشین حالت سامانه دارند و اتصالات میان پردازنده‌ها به پیچیدگی کار می‌افزاید. تکنیکی که در سال ۲۰۰۳ با عنوان انسجام توکن مطرح شد، به سادگی با شمارش و رد و بدل کرد توکن‌ها صحت انسجام حافظهٔ نهان را تضمین می‌کند. در این شیوه تعداد معینی توکن به هر بلوک اختصاص می‌یابد و هر پردازنده برای نوشتن در آن بلوک باید تمامی توکن‌ها را تصاحب کند، اما برای عمل خواندن تنها در اختیار داشتن یکی از آن‌ها کافی است. بدین ترتیب با شمارش و رد و بدل کردن توکن‌ها انسجام حافظهٔ نهان به دست می‌آید.
سامانه‌های اشتراک حافظهٔ توزیع‌شده این ساز و کارها را پیاده می‌کنند تا انسجام بین بلوک‌های حافظه را در سامانه‌های با اتصال سست (Loosely Coupled) حفظ کنند.

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

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

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

مدل‌ها و پروتکل‌های گوناگونی برای حفظ انسجام حافظه نهان معرفی شده‌اند که در این میان می‌توان از پروتکل‌های زیر نام برد:

MSI، MESI، MOSI، MOESI، MERSI، MESIF، write-once، Synapse، Berkeley، Firefly، Dragon protocol

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

## پانویس

## منابع

رده:انسجام حافظه نهان
رده:رایانش موازی
رده:رایانش همروند
رده:مدل‌های استحکام