31-05-2023
Когерентность памяти (англ. memory coherence) — свойство компьютерных систем, в которых два или более процессора или ядра имеют доступ к общей области памяти.
В однопроцессорных системах (более строго — в одноядерных) лишь один процессорный узел выполняет всю работу, следовательно, только он один может выполнять чтение и запись определённой области памяти. В результате, когда содержимое ячейки меняется, все последующие операции чтения по данному адресу получат обновлённое значение даже при наличии кэширования.
С другой стороны, в многопроцессорных (многоядерных) системах несколько процессорных узлов работают одновременно, поэтому возможна ситуация параллельного доступа к одной ячейке памяти. При условии, что ни один из них не меняет значение данной ячейки, они могут сводобно пользоваться ей совместно, кэшируя по своему усмотрению. Но как только один из них обновляет значение ячейки, данные в локальных кэшах других узлов могут оказаться устаревшими. Следовательно, необходим механизм уведомления всех узлов об изменении значения в общей памяти; такой механизм называется протоколом когерентности (англ. memory coherence protocol). Если подобный протокол применён, то говорят, что система имеет «когерентную память» (англ. coherent memory).
Точная природа и смысл механизма когерентности определяется моделью консистентности, реализованной в протоколе. Чтобы писать правильные параллельные программы, программисты должны быть в курсе того, какая именно модель консистентности применена в их системах.
При аппаратной реализации протокола когерентности можно использовать сниффинг (снупинг) шины (англ.), применять специальные таблицы-справочники (англ. directory-based). В качестве примера конкретного протокола можно привести MSI (англ. Modified/Shared/Invalid) и его разновидности MESI, MOSI и MOESI.
Это заготовка статьи о компьютерной технике. Вы можете помочь проекту, исправив и дополнив её. |
Когерентность памяти.