Bus snooping چیست؟ مکانیزمی است که به وسیله آن یک کنترل کننده انسجام (snooper) در حافظه کش (Snoopy Cache) تراکنشهای گذرگاه را نظارت یا زیر نظر دارد و هدف آن حفظ یکپارچگی کش در سیستمهای حافظه مشترک توزیع شده است. حافظه کش حاوی یک کنترل کننده هماهنگ (snooper) کش اسنوپی است. این طرح توسط راوی شانکار و گودمن در سال 1983 معرفی شد.
هنگامی که دادههای خاصی توسط چندین حافظه کش به اشتراک گذاشته میشود و یک پردازنده ارزش دادههای مشترک را تغییر میدهد، این تغییر باید به تمام کشهای دیگر که یک کپی از دادهها دارند، منتشر شود. این انتشار از نقض انسجام حافظه کش سیستم جلوگیری میکند. اعلان تغییر دادهها را میتوان با bus snooping انجام داد.
همه snoopها بر هر تراکنش در Bus نظارت میکنند. اگر تراکنشی که یک بلوک حافظه کش مشترک را تغییر میدهد در یک Bus ظاهر شود، همه snoopها بررسی میکنند که آیا حافظه کش آنها کپی یکسانی از بلوک مشترک دارد یا خیر. اگر یک کش دارای یک کپی از بلوک مشترک باشد، snoop مربوطه اقدامی را برای اطمینان از انسجام حافظه کش انجام میدهد. این عمل میتواند flush یا بیاعتبار کردن بلوک کش باشد. همچنین تغییر وضعیت بلوک کش بسته به پروتکل انسجام حافظه کش است.
انواع پروتکلهای snooping
از اصلیترین پروتکلهای snooping میتوان به دو مورد زیر اشاره کرد:
- نوشتن-بی اعتبار کردن (Write-invalidate)
- نوشتن-به روز کردن (Write-update)
نوشتن-بی اعتبار کردن (Write-invalidate)
هنگامی که یک پردازنده در یک بلوک حافظه کش مشترک مینویسد، تمام نسخههای به اشتراک گذاشته شده در حافظه کش دیگر از طریق گذرگاه باطل میشوند. این روش تضمین میکند که تنها یک کپی از یک داده میتواند منحصراً توسط یک پردازنده خوانده و نوشته شود. همه کپیهای دیگر در حافظه کش دیگر باطل میشوند. این رایجترین پروتکل snooping است. پروتکلهای MSI، MESI، MOSI، MOESI و MESIF از این دسته هستند.
پروتکلهای snooping Write-invalidate شامل موارد زیر هستند:
- پروتکل MSI:
این یک پروتکل اولیه انسجام حافظه کش است که در سیستم چند پردازندهای استفاده میشود. حروف نام پروتکل، حالتهای احتمالی را مشخص میکند که یک کش میتواند در آنها باشد. بنابراین، برای MSI هر بلوک میتواند یکی از حالتهای ممکن زیر را داشته باشد:
Modified (اصلاح شده): در این حالت بلوک کش اصلاح شده است، به عنوان مثال، دادههای موجود در حافظه پنهان با ذخیره پشتیبان (حافظه) ناسازگار است. بنابراین، وظیفه کش یک بلوک در وضعیت "Modified" این است که در هنگام تخلیه، بلوک را در ذخیره ساز پشتیبان بنویسد.
Shared (اشتراک گذاری شده): این بلوک اصلاح نشده است و حداقل در یکی از کشها وجود دارد. کش میتواند دادهها را استخراج کند بدون اینکه آنها را در ذخیرهساز پشتیبان بنویسد.
نامعتبر (Invalid): این بلوک نامعتبر است و اگر قرار است در این کش ذخیره شود، باید از حافظه یا حافظه پنهان دیگری واکشی شود.
- پروتکل MOSI:
این پروتکل توسعه یافته پروتکل MSI است و حالت زیر را به پروتکل MSI اضافه میکند:
Owned (متعلق): این نشان میدهد که پردازنده فعلی مالک این بلوک است و درخواست خدمات دیگر پردازندهها را برای بلوک پاسخ میدهد.
- پروتکل MESI:
پرکاربردترین پروتکل انسجام کش است. هر خط کش با یکی از حالت های زیر مشخص می شود:
Modified (اصلاح شده): این نشان میدهد که خط کش فقط در حافظه کش فعلی وجود دارد و درست نیست، یعنی مقدار آن با حافظه اصلی متفاوت است. حافظه کش باید قبل از خواندن هر نوع حافظه اصلی نامعتبر، دادهها را در حافظه اصلی بازنویسی کند.
Exclusive (انحصاری): این نشان میدهد که خط کش فقط در کش فعلی وجود دارد و درست است، یعنی مقدار آن با مقدار حافظه اصلی مطابقت دارد.
Shared (اشتراک گذاری شده): نشان میدهد که این خط کش ممکن است در کشهای دیگر نیز ذخیره شود.
Invalid (نامعتبر): نشان میدهد که این خط کش نامعتبر است.
- پروتکل MOESI:
این یک پروتکل انسجام کش کامل است که تمام حالتهای ممکن که معمولا در پروتکلهای دیگر استفاده میشود را در بر میگیرد. هر خط کش در یکی از حالتهای زیر است:
Modified (اصلاح شده): یک خط کش در این حالت جدیدترین و صحیحترین کپی داده را نگه میدارد در حالی که کپی در حافظه اصلی نادرست است و هیچ پردازنده دیگری کپی را نگه نمیدارد.
Owned(متعلق): این ممکن است شبیه به حالت اشتراکی باشد (که سایر پردازندهها میتوانند یک کپی از جدیدترین و صحیح ترین دادهها را نگه دارند) ولی برخلاف حالت اشتراکی، کپی در حافظه اصلی ممکن است نادرست باشد. فقط یک پردازنده میتواند دادهها را در حالت مالکیت نگه دارد در حالی که همه پردازندههای دیگر باید دادهها را در حالت اشتراکی نگه دارند.
Exclusive(انحصاری): کپی حافظه اصلی نیز جدیدترین و صحیحترین است، در حالی که هیچ کپی دیگری از دادهها را نگهداری نمیکند.
Shared (اشتراک گذاری شده): یک خط کش در این حالت جدیدترین و صحیح ترین کپی داده ها را نگه می دارد. سایر پردازندههای سیستم نیز ممکن است کپیهایی از دادهها را در حالت مشترک نگهداری کنند. کپی حافظه اصلی نیز جدیدترین و صحیحترین کپی از دادهها است، در صورتی که هیچ پردازنده دیگری آن را در حالت متعلق به خود نگه ندارد.
Invalid(نامعتبر): یک خط کش در این حالت یک کپی معتبر از دادهها را در خود نگه نمیدارد. کپیهای معتبر دادهها میتوانند در حافظه اصلی یا حافظه پنهان پردازنده دیگری باشند.
نوشتن-به روز کردن (Write-update)
هنگامی که یک پردازنده روی یک بلوک حافظه کش مشترک می نویسد، تمام کپی های مشترک سایر کشها از طریق Bus به روز می شوند. این روش نوشتن، یک داده را به تمام کش ها در سراسر یک Bus پخش می کند. این روش Bus snooping ترافیک Bus بیشتری نسبت به پروتکل Write-invalidate ایجاد میکند. به همین دلیل این روش غیر معمول است. پروتکل های Dragon و Firefly متعلق به این دسته هستند.
منبع: https://www.tutorialspoint.com/what-are-snoopy-cache-protocols-in-computer-architecture
مترجم: محبوبه سردشتیان