Когерентность памяти

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Когерентность памяти (англ. memory coherence) — свойство компьютерных систем, содержащих более одного процессора или ядра, имеющих доступ к одной области памяти, заключающееся в том, что изменённая одним ядром/процессором ячейка памяти принимает новое значение для остальных ядер/процессоров.

В однопроцессорных системах (более строго — в одноядерных) работу с памятью выполняет один процессорный узел: только один узел может читать данные из памяти или записывать данные в память. После записи нового значения в ячейку памяти, доступную по какому-либо адресу, при чтении данных из той же ячейки будет получено записанное значение (даже при наличии кэширования).

В многопроцессорных (многоядерных) системах несколько процессорных узлов работают одновременно и могут одновременно (параллельно) обращаться к одной ячейке памяти (для чтения или для записи). Узлы могут одновременно прочитать значение из одной ячейки памяти, могут сохранить прочитанное значение в своих кешах. Как только один из узлов запишет в ячейку новое значение, значения, сохранённые в локальной памяти других узлов, должны помечаться как устаревшие. Необходим механизм уведомления всех узлов о том, что значение, сохранённое в их кешах, устарело; такой механизм называется протоколом когерентности (англ. memory coherence protocol). Если в системе используется подобный протокол, то говорят, что система имеет «когерентную память» (англ. coherent memory).

Точная природа и смысл механизма когерентности определяются моделью консистентности/связанности, реализованной в протоколе. Для составления правильных «параллельных» программ программисты должны знать о том, какая именно модель/способ консистентности/связанности кеш-памяти используется в их системах.

Если протокол когерентности/синхронизации реализован аппаратно, для выяснения применяемой модели консистентности/связанности программисты могут использовать сниффинг (снупинг) шины (англ.), могут читать специальные таблицы-справочники (англ. directory-based). В качестве примера протокола когерентности можно привести протокол MSI (англ. modified, shared, invalid) (англ.) и его разновидности (MESI (англ.), MOSI (англ.), MOESI, MESIF).

См. также[править | править код]

Литература[править | править код]

  • Censier, L.M.; Feautrier, P. (Декабрь 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. Дата обращения 2011-07-22. Проверьте дату в |date= (справка на английском)
  • Smith, Alan Jay (Сентябрь 1982 года). “Cache Memories” (pdf). Журнал «ACM Computing Surveys». ACM. 14 (3): 473—530. DOI:10.1145/356887.356892. Дата обращения 2011-07-22. Проверьте дату в |date= (справка на английском)
  • Li, Kai; Hudak, Paul (Ноябрь 1989 года). “Memory coherence in shared virtual memory systems” (pdf). Журнал «Transactions on Computer Systems». ACM. 7 (4): 321—359. DOI:10.1145/75104.75105. Дата обращения 2011-07-22. Проверьте дату в |date= (справка на английском)
  • Stenstrom, Per (Июнь 1990 года). “A survey of cache coherence schemes for multiprocessors” (pdf). Журнал «IEEE Computer». IEEE. 23 (6): 12—24. DOI:10.1109/2.55497. Дата обращения 2011-07-22. Проверьте дату в |date= (справка на английском)

Ссылки[править | править код]