YaChudo

Протокол MSI

Переглядів: 0. Оновлено 06.11.2026.

У обчислювальній техніці протокол MSI — це базовий протокол когерентності кешу, який використовується в багатопроцесорних системах. Як і в інших протоколах когерентності кешу, літери в назві протоколу позначають можливі стани, у яких може перебувати рядок кешу.

Огляд

У протоколі MSI кожен блок, що міститься в кеші, може перебувати в одному з трьох можливих станів:

  • Modified (модифікований) — блок було змінено в кеші процесора. Дані в кеші більше не відповідають даним в основному сховищі (наприклад, оперативній пам'яті). Кеш, який містить блок у стані M, зобов'язаний записати його до основного сховища під час витіснення цього блоку з кешу.
  • Shared (спільний) — блок не був змінений і існує в режимі лише для читання принаймні в одному кеші. Кеш може витіснити цей блок без запису його до основного сховища.
  • Invalid (недійсний) — блок або відсутній у поточному кеші, або був позначений як недійсний внаслідок запиту по шині, і для збереження цього блоку в кеші його потрібно завантажити з пам'яті або з іншого кешу.[1]

Ці стани когерентності підтримуються завдяки взаємодії між кешами та основним сховищем. Кеші мають різні обов'язки під час читання або запису блоків, а також коли вони отримують інформацію про те, що інші кеші виконують операції читання або запису для певного блоку.

Коли до кешу надходить запит на читання блоку, що перебуває у стані M або S, кеш надає запитувані дані. Якщо блок відсутній у кеші (стан I), необхідно перевірити, що він не перебуває у стані M в іншому кеші. Різні архітектури кешування реалізують це по-різному. Наприклад, архітектури із загальною шиною часто використовують прослуховування шини (bus snooping), коли запит на читання транслюється до всіх кешів. Інші архітектури використовують каталоги кешу, що містять агенти (каталоги), які знають, у яких кешах востаннє зберігалися копії певного блоку. Якщо інший кеш містить цей блок у стані M, він повинен записати дані до основного сховища та перейти у стан S або I. Після запису будь-якого рядка зі станом M кеш отримує блок або з основного сховища, або з іншого кешу, який містить його у стані S. Після цього кеш може надати дані запитувачу. Після передавання даних блок кешу переходить у стан S.

Коли до кешу надходить запит на запис для блоку, що перебуває у стані M, кеш змінює дані локально. Якщо блок перебуває у стані S, кеш повинен повідомити всі інші кеші, які можуть містити цей блок у стані S, що вони мають витіснити його. Таке повідомлення може здійснюватися за допомогою прослуховування шини або каталогу, як описано вище. Після цього дані можна локально змінити. Якщо блок перебуває у стані I, кеш повинен повідомити всі інші кеші, які можуть містити цей блок у стані S або M, що вони мають витіснити його. Якщо блок перебуває в іншому кеші у стані M, той кеш повинен або записати дані до основного сховища, або передати їх кешу, який надіслав запит. Якщо на цей момент блок ще відсутній у локальному кеші, він зчитується з основного сховища перед модифікацією в кеші. Після зміни даних блок кешу переходить у стан M.

Для будь-якої заданої пари кешів допустимі стани певного рядка кешу є такими:

 M   S   I 
 M  Red X Red X Green tick
 S  Red X Green tick Green tick
 I  Green tick Green tick Green tick

Машина станів

Діаграма станів запитів процесора для протоколу MSI

Запити процесора до кешу включають:

  • PrRd — запит процесора на читання блоку кешу.
  • PrWr — запит процесора на запис до блоку кешу.
Діаграма станів транзакцій шини для протоколу MSI

Крім того, існують запити з боку шини:

  • BusRd — коли в кеші процесора виникає промах під час читання, він надсилає по шині запит BusRd і очікує отримати у відповідь блок кешу.
  • BusRdX — коли в кеші процесора виникає промах під час запису, він надсилає по шині запит BusRdX, у відповідь на який отримує блок кешу, а відповідний блок у кешах інших процесорів позначається як недійсний.
  • BusUpgr — коли в кеші процесора відбувається влучання під час запису, він надсилає по шині запит BusUpgr, щоб позначити відповідний блок у кешах інших процесорів як недійсний.
  • Flush — запит, який означає, що весь блок кешу записується назад до пам'яті.[2]

Переходи між станами:

  • Invalid (недійсний):
    • Після PrRd надсилається BusRd, а стан змінюється на Shared.
    • Після PrWr надсилається BusRdX, а стан змінюється на Modified.
    • Після BusRd, BusRdX або BusUpgr недійсний блок залишається у стані Invalid.
  • Shared (спільний):
    • Після PrRd блок залишається у стані Shared.
    • Після PrWr надсилається BusUpgr, а стан змінюється на Modified.
    • Після BusRd блок залишається у стані Shared.
    • Після BusRdX або BusUpgr блок переходить у стан Invalid.
  • Modified (модифікований):
    • Після PrRd або PrWr блок залишається у стані Modified.
    • Після BusRd блок кешу записується на шину (Flush), а стан змінюється на Shared.
    • Після BusRdX блок кешу записується на шину (Flush), а стан змінюється на Invalid.[2]
    • BusUpgr у цьому стані неможливий. Зверніть увагу, що якщо блок кешу перебуває у стані Modified в одному процесорі, то в усіх інших процесорах він обов'язково має перебувати у стані Invalid, оскільки стан Modified може належати або жодному, або лише одному процесору. Це фактично унеможливлює появу BusUpgr на шині, адже для нього потрібно, щоб блок перебував у стані Shared в одному з процесорів, який, як було показано вище, виконує PrWr.

Використання

Цей протокол подібний до протоколу, який використовувався в комп'ютері SGI 4D.[3]

Варіанти

Сучасні системи використовують різні варіанти протоколу MSI для зменшення обсягу трафіку в міжз'єднанні когерентності. Протокол MESI додає стан Exclusive («ексклюзивний»), щоб зменшити трафік, спричинений записом блоків, які існують лише в одному кеші. Протокол MOSI додає стан Owned («власний»), щоб зменшити трафік, пов'язаний із записом назад блоків, які читаються іншими кешами. Протокол MOESI поєднує обидва ці вдосконалення.

Див. також

Примітки

  1. ↑ Fuchsen, R. (1 жовтня 2010). How to address certification for multi-core based IMA platforms: Current status and potential solutions. 29th Digital Avionics Systems Conference. с. 5.E.3–1-5.E.3-11. doi:10.1109/DASC.2010.5655461. ISBN 978-1-4244-6616-0. S2CID 16461614.
  2. ↑ а б Solihin, Yan (2016). Fundamentals of Parallel Multicore Architecture. Chapman & Hall/CRC Computational Science Series.
  3. ↑ Suh, Taeweon (Грудень 2006). INTEGRATION AND EVALUATION OF CACHE COHERENCE PROTOCOLS FOR MULTIPROCESSOR SOCS (PDF).

Джерело: стаття у Вікіпедії та історія редагувань (автори).