یکباره نویسی (انسجام حافظه پنهان)

در ادبیات پروتکل نویسی انسجام حافظه پنهان (Cache coherence) یکباره‌نویسی اولین پروتکل MESI بود که تعریف شد.در این اجرای بهینه سازی، نوشتن از راه اولین نوشتن و یک باز نویسی در تمام نوشتن‌های بعدی را داراست، که ترافیک کلی گذرگاه (Bus) را در نوشتن‌های متوالی به حافظه رایانه (Computer memory) کاهش می‌دهد. اولین بار توسط جیمز آر گودمن (James R. Goodman) در سال 1983 تعریف شد. پروتکل انسجام حافظه پنهان یک موضوع مهم در سیستم‌های چند پردازشی متقارن (Symmetric multiprocessing) هستند، برای هر CPU که یک حافظه پنهان (cache) را نگهداری می‌کند.

## حالت
در این پروتکل هر بلوک در حافظه پنهان محلی در یکی از این چهار حالت می‌باشد:

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

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

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

## انتقال
این پروتکل از قوانین انتقال برای هر رویداد پیروی می‌کند:

* **Read hit(RH)**: اطلاعات توسط حافظه پنهان عرضه می‌شود. بدون تغییر حالت.
* **Read miss(RM)**: داده از حافظه اصلی خوانده می‌شود. خوانده شده‌ها توسط بقیه حافظه‌های پنهان ردیابی (snooped) می‌شوند؛ اگر یکی از آن‌ها خط را در حالت کثیف (*Dirty*) داشته باشد، خواندن به اندازه کافی قطع می‎‌شود که قبل از ادامه دادن داده‌ها را به حافظه بازگرداند. هر کپی از حالت کثیف (*Dirty*) و رزرو شده (*Reserved*) روی حالت معتبر (*valid*) تنظیم می‌شود.
* **Write hit(WH)**: اگر اطلاعات در حافظه پنهان در حالت کثیف (*Dirty*) و رزرو شده (*Reserved*) باشند، خط حافظه پنهان در جای خود به‌روزرسانی می‌شود و وضعیت آن بدون به‌روزرسانی حافظه روی حالت کثیف (*Dirty*) تنظیم می‌شود. اگر اطلاعات در حالت معتبر (*valid*) باشد عملیات نوشتن از طریق به‌روزرسانی هر بلوک اجرا می‌شود و حافظه و وضعیت بلوک به حالت رزرو شده (*Reserved*) تغییر می‌کند. بقیه حافظه‌های پنهان نوشته را جست و جو می‌کنند و کپی‌های خود را در حالت نامعتبر (*invalid*) تنظیم می‌کنند.
* **Write miss(WM)**: نوشتن خط حافظه پنهان به‌عنوان یک RM (در صورت نیاز برای واکشی بخش نانوشته خط حافظه پنهان) و به دنبال آن یک WH استفاده می‌شود. با این کار همه حافظه‌های پنهان دیگر در حالت نامعتبر (*invalid*) و حافظه پنهان فعلی در رزرو شده (*Reserved*) باقی می‌ماند.

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

## منابع

# Goodman, James R. (1983). "Using cache memory to reduce processor-memory traffic". ACM Sigarch Computer Architecture News. 11 (3): 124–131. doi:10.1145/1067651.801647

* Archibald, J.; Baer, J. L. (November 1986). "Cache coherence protocols: Evaluation using a multiprocessor simulation model". ACM Trans. Comput. Syst. 4 (4): 273–298. doi:10.1145/6513.6514. S2CID 713808

* Goodman, J. R. (1983). "Using cache memory to reduce processor-memory traffic". Proceedings of the 10th annual international symposium on Computer architecture - ISCA '83. International Symposium on Computer Architecture: Stockholm, Sweden, June 13–17, 1983. pp. 124–131. doi:10.1145/800046.801647. ISBN 0-89791-101-6


رده:انسجام حافظه نهان