پروتکل MSI

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

## بررسی اجمالی
در MSI، هر بلوک موجود در حافظه پنهان می‌تواند یکی از سه حالت ممکن را داشته باشد:
* **M**odified: بلوک در حافظه نهان اصلاح شده‌است. داده‌های موجود در حافظه نهان با دیگر نسخه‌های موجود (به عنوان مثال حافظه) مغایرت خواهند داشت. حافظه پنهان با بلوک در حالت "M" وظیفه دارد هنگام خارج شدن، بلوک را در حافظه بنویسد.
* **S**hared: این بلوک اصلاح نشده‌است و حداقل در یک حافظه پنهان در حالت فقط خواندنی وجود دارد. حافظه پنهان می‌تواند داده‌ها را بدون ارسال به حافظه بیرون کند.
* **I**nvalid: این بلوک یا در حافظه نهان فعلی موجود نیست یا با درخواست گذرگاه فاقد اعتبار شده‌است، و اگر قرار است بلوک در حافظه پنهان ذخیره شود، باید از حافظه یا حافظه پنهان دیگر گرفته شود.

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

هنگامی که یک درخواست خواندن یک بلوک به یک حافظه نهان در حالت "M" یا "S" می‌رسد، حافظه پنهان داده‌ها را تهیه می‌کند. اگر بلوک در حافظه پنهان نباشد (در حالت"I")، باید تأیید کنید که خط بلوک در حالت "M" حافظه نهان دیگری نیز قرار ندارد. معماری‌های حافظه نهان مختلف این کار را متفاوت انجام می‌دهند. به عنوان مثال، معماری‌های گذرگاه معمولاً تعقیب انجام می‌دهند، به طوری که درخواست خواندن به همه حافظه‌های نهان پخش می‌شود. معماریهای دیگر شامل پوشه‌های حافظه نهان که دارای نماینده‌هایی (فهرست‌ها) هستند که می‌دانند که کدامین حافظه نهان آخرین نسخهٔ موردنظر را دارند. اگر حافظه پنهان دیگری در حالت "M" بلوک موردنظر را داشته باشد، باید اطلاعات را در حافظه بنویسد و به حالت "S" یا "I" برود. پس از بازگشت هر خط "M"، حافظه پنهان بلوک را از حافظه یا یک حافظه پنهان دیگر با داده‌های موجود در حالت "S" بدست می‌آورد. سپس حافظه پنهان می‌تواند داده‌ها را به درخواست کننده ارائه دهد. پس از تهیه داده‌ها، بلوک حافظه نهان در حالت "S" قرار دارد.

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

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

## ماشین حالت
بندانگشتی| نمودار حالت درخواست پردازنده پروتکل MSI.
درخواست پردازنده به حافظه نهان شامل موارد زیر است:
* PrRd: درخواست پردازنده برای خواندن بلوک حافظه نهان.
* PrWr: درخواست پردازنده برای نوشتن بلوک حافظه نهان.

بندانگشتی| نمودار حالت مبادلات گذرگاه برای پروتکل MSI.
علاوه بر این، درخواست طرف گذرگاه نیز وجود دارد. این موارد عبارتند از:
* BusRd: هنگامی که خطای خواندن در حافظه نهان پردازنده رخ می‌دهد، یک درخواست BusRd را از طریق گذرگاه ارسال می‌کند و انتظار دارد که در عوض بلوک حافظه نهان را دریافت کند.
* BusRdX: هنگامی که خطای نوشتن در حافظه نهان پردازنده رخ می‌دهد، درخواست BusRdX را از طریق گذرگاه می‌فرستد که بلوک حافظه نهان را برمی‌گرداند و بلوک موجود در حافظه‌های دیگر پردازنده‌ها را بی‌اعتبار کند.
* BusUpgr: وقتی درخواست نوشتن در حافظه نهان یک پردازنده موفقیت‌آمیز باشد، یک درخواست BusUpgr را برای گذرگاه می‌فرستد تا بلوک موجود در حافظه‌های دیگر پردازنده‌ها را باطل کند.
* Flush: درخواستی که نشان می‌دهد کل حافظه پنهان به حافظه نوشته شده‌است.

انتقال حالت‌ها:
* **Invalid:**
** در BusRd, PrRd صادر می‌شود و حالت را به **Shared** تغییر می‌دهد.
** در BusRdX, PrWr صادر می‌شود و حالت را به **Modified** تغییر می‌دهد.
** در BusRd، فرمان BusUpgr یا BusRdX یک بلوک نامعتبر را نامعتبر نگه می‌دارد.
* **Shared:**
** در PrRd، بلوک در حالت **Shared** باقی می‌ماند.
** در یک BusUpgr, PrWr صادر می‌شود و حالت را به **Modified** تغییر می‌دهد.
** در BusRd، بلوک در حالت **Shared** باقی می‌ماند.
** در BusRdX یا BusUpgr، بلوک به حالت **Invalid** تغییر می‌یابد.
* **Modified:**
** در PrRd یا PrWr، بلوک در حالت **Modified** باقی می‌ماند.
** در BusRd، بلوک حافظه نهان روی گذرگاه توزیع می‌شود و به حالت **Shared** تغییر می‌یابد.
** در BusRdX، بلوک حافظه نهان روی گذرگاه توزیع می‌شود و به حالت **Invalid** تغییر می‌یابد.

## موارد استفاده
این پروتکل مشابه با ماشین‌های ۴ بعدی SGI است.

## انواع
سیستم‌های مدرن از انواع پروتکل MSI برای کاهش ترافیک در اتصالات درونی انسجام یافته بهره می‌گیرند. این پروتکل MESI یک حالت "Exclusive" نیز برای کاهش ترافیک ناشی از نوشتن بلوک‌هایی که فقط بر روی یک حافظه نهان وجود دارند، افزوده‌است. پروتکل MOSI نیز یک حالت "Owned" نیز برای کاهش ترافیک نوشتن بلوک بر روی حافظه‌ها نهانی که قبلاً از حافظه نهان دیگری خوانده شده‌است، افزوده‌است. پروتکل MOESI هر دو مزیت را با هم داراست.

## جستارهای وابسته
پروتکل انسجام حافظه نهان

پروتکل MESI

پروتکل MOSI

پروتکل MOESI

پروتکل MESIF

## منابع

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