Когеренція пам'яті

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

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

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

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

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

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

Література[ред.ред. код]