Когеренція пам'ятіКогеренція пам'яті (англ. memory coherence) — властивість комп'ютерних систем, в яких два або більше процесорів або ядер мають доступ до спільної області пам'яті. В однопроцесорних системах (більш строго — в одноядерних) лише один процесорний вузол виконує всю роботу, отже, тільки він один може виконувати читання і запис певної області пам'яті. В результаті, коли вміст комірки змінюється, всі наступні операції читання за цією адресою отримають оновлене значення навіть при наявності кешування. З іншого боку, в багатопроцесорних (і багатоядерних) системах кілька процесорних вузлів працюють одночасно, тому можлива ситуація паралельного доступу до однієї комірки пам'яті. За умови, що жоден з них не змінює значення цієї комірки, вони можуть вільно користуватися нею спільно, кешуючи на свій розсуд. Але як тільки один з них оновлює значення комірки, дані у локальних кешах інших вузлів можуть виявитися застарілими. Отже, необхідний механізм повідомлення всіх вузлів про зміну значення в загальній пам'яті; такий механізм називається протоколом когеренції (англ. memory coherence protocol). Якщо подібний протокол застосовано, то кажуть, що система має «когерентну пам'ять» (англ. coherent memory). Точна природа і смисл механізму когеренції визначається моделлю консистентності, реалізованої в протоколі. Щоб писати правильні паралельні програми, програмісти повинні бути в курсі того, яка саме модель консистентності застосована в їхніх системах. При апаратній реалізації протоколу когеренції можна використовувати сніффінг (снупінг) шини, застосовувати спеціальні таблиці-довідники (англ. directory-based). Як приклад конкретного протоколу можна навести MSI (англ. Modified/Shared/Invalid) і його різновиди MESI, MOSI і MOESI. Література
|