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

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

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

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

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

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

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

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

Литература[править | править вики-текст]

Ссылки[править | править вики-текст]