Когеренція пам'яті () — властивість комп'ютерних систем, в яких два або більше процесорів або ядер мають доступ до спільної області пам'яті.

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

З іншого боку, в багатопроцесорних (і багатоядерних) системах кілька процесорних вузлів працюють одночасно, тому можлива ситуація паралельного доступу до однієї комірки пам'яті. За умови, що жоден з них не змінює значення цієї комірки, вони можуть вільно користуватися нею спільно, кешуючи на свій розсуд. Але як тільки один з них оновлює значення комірки, дані у локальних кешах інших вузлів можуть виявитися застарілими. Отже, необхідний механізм повідомлення всіх вузлів про зміну значення в загальній пам'яті; такий механізм називається протоколом когеренції (). Якщо подібний протокол застосовано, то кажуть, що система має «когерентну пам'ять» ().

Точна природа і смисл механізму когеренції визначається моделлю консистентності, реалізованої в протоколі. Щоб писати правильні паралельні програми, програмісти повинні бути в курсі того, яка саме модель консистентності застосована в їхніх системах.

При апаратній реалізації протоколу когеренції можна використовувати сніффінг (снупінг) шини, застосовувати спеціальні таблиці-довідники (). Як приклад конкретного протоколу можна навести MSI () і його різновиди MESI, MOSI і MOESI.

Література