иводу і зверненнях в основну пам'ять інших процесорів на шині генеруються спеціальні цикли опитування стану кеш-пам'ятей. Ці цикли опитують кеш-пам'яті на предмет зберігання в них рядки, якій належить адресу, використовуваний в операції, яка ініціювала цикли опитування стану. Можливий режим примусового переведення рядка в стан I, який задається сигналом INV. h3> 1.2.2.2. Фізично розподілена пам'ять
Прямолінійний підхід до підтримки когерентності кешей в мультипроцессорной системі, основна пам'ять якої розподілена по ВМ, полягає в тому, що при кожному промаху в кеш в будь-якому процесорі ініціюється запит необхідної рядки з того блоку пам'яті, в якому ця рядок розміщена. Надалі цей блок пам'яті буде по відношенню до цього рядка називатися резидентним. Запит передається через комутатор в модуль саморозміщуваних для рядка блоком пам'яті, з якого потім необхідна рядок через комутатор пересилається в модуль, в якому стався промах. Таким чином, зокрема, забезпечується початкове заповнення кешей. При цьому в кожному модулі для кожної резидентної рядка ведеться список модулів, в кешах яких цей рядок розміщується, або організується розподілений по ВМ список цих рядків. Рядок, розміщена в кеші більш ніж одного модуля, надалі буде називатися розділяється.
Власне когерентність кешей забезпечується наступним. При зверненні до кеш-пам'яті в ході операції запису даних, після самого запису, процесор зупиняється до тих пір поки не виконається послідовність дій: змінена рядок кешу пересилається в резидентну пам'ять модуля, потім, якщо рядок було розділяється, вона пересилається з резидентної пам'яті у всі модулі, зазначені в списку поділяють цю рядок. Після отримання підтверджень, що всі копії змінені, резидентний модуль пересилає в процесор, припинений після запису, дозвіл продовжувати обчислення.
Викладений алгоритм забезпечення когерентності хоча і є логічно працездатним, проте практично рідко застосовується через великі простоїв процесорів при операціях запису в кеш рядка. На практиці застосовують більш складні алгоритми, що забезпечують менші простої процесорів, наприклад, DASH, який полягає наступному. Кожен модуль пам'яті має для кожної рядка, резидентної в модулі, список модулів, в кешах яких розміщені копії рядків.
З кожним рядком у резидентном для неї модулі пов'язані три її можливих глобальних стану:
1) "некешірованная", якщо копія рядки чи не знаходиться в кеші якого-небудь іншого модуля, крім, можливо, резидентного для цього рядка;
2) "віддалено-розділена", якщо копії рядки розміщені в кешах інших модулів;
3) "віддалено-змінена", якщо рядок змінена операцією запису
в якому-небудь модулі.
Крім цього, кожен рядок кешу знаходиться в одному з трьох локальних станів:
1) "неможлива до використання";
2) "Колективна", еслі.есть неизмененная копія, яка, можливо, розмішається також в ...