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

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

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

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

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

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

Література

  • Censier, L.M.; Feautrier, P. (December 1978). A New Solution to Coherence Problems in Multicache Systems (pdf). IEEE Transactions on Computers. IEEE. C-27 (12): 1112—1118. doi:10.1109/TC.1978.1675013. Процитовано 22 липня 2011.
  • Smith, Alan Jay (September 1982). Cache Memories (pdf). ACM Computing Surveys. ACM. 14 (3): 473—530. doi:10.1145/356887.356892. Процитовано 22 липня 2011.
  • Li, Kai; Hudak, Paul (November 1989). Memory coherence in shared virtual memory systems (pdf). Transactions on Computer Systems. ACM. 7 (4): 321—359. doi:10.1145/75104.75105. Процитовано 22 липня 2011.
  • Stenstrom, Per (June 1990). A survey of cache coherence schemes for multiprocessors (pdf). IEEE Computer. IEEE. 23 (6): 12—24. doi:10.1109/2.55497. Процитовано 22 липня 2011.