Когерентность памяти
Когерентность памяти (англ. memory coherence) — свойство компьютерных систем, содержащих более одного процессора или ядра, имеющих доступ к одной области памяти, заключающееся в том, что изменённая одним ядром/процессором ячейка памяти принимает новое значение для остальных ядер/процессоров.
В однопроцессорных системах (более строго — в одноядерных) работу с памятью выполняет один процессорный узел: только один узел может читать данные из памяти или записывать данные в память. После записи нового значения в ячейку памяти, доступную по какому-либо адресу, при чтении данных из той же ячейки будет получено записанное значение (даже при наличии кэширования).
В многопроцессорных (многоядерных) системах несколько процессорных узлов работают одновременно и могут одновременно (параллельно) обращаться к одной ячейке памяти (для чтения или для записи). Узлы могут одновременно прочитать значение из одной ячейки памяти, могут сохранить прочитанное значение в своих кешах. Как только один из узлов запишет в ячейку новое значение, значения, сохранённые в локальной памяти других узлов, должны помечаться как устаревшие. Необходим механизм уведомления всех узлов о том, что значение, сохранённое в их кешах, устарело; такой механизм называется протоколом когерентности (англ. memory coherence protocol). Если в системе используется подобный протокол, то говорят, что система имеет «когерентную память» (англ. coherent memory).
Точная природа и смысл механизма когерентности определяются моделью консистентности/связанности, реализованной в протоколе. Для составления правильных «параллельных» программ программисты должны знать о том, какая именно модель/способ консистентности/связанности кеш-памяти используется в их системах.
Если протокол когерентности/синхронизации реализован аппаратно, для выяснения применяемой модели консистентности/связанности программисты могут использовать сниффинг (снупинг) шины, могут читать специальные таблицы-справочники (англ. directory-based). В качестве примера протокола когерентности можно привести протокол MSI (англ. modified, shared, invalid) (англ.) и его разновидности (MESI (англ.), MOSI (англ.), MOESI, MESIF).
См. также
Литература
- Censier, L.M.; Feautrier, P. A New Solution to Coherence Problems in Multicache Systems (англ.) // Журнал «IEEE Transactions on Computers» : journal. — Институт инженеров электротехники и электроники, 1978. — December (vol. C—27, no. 12). — P. 1112—1118. — doi:10.1109/TC.1978.1675013.
- Smith, Alan Jay. Cache Memories (неопр.) // Журнал «ACM Computing Surveys». — ACM, 1982. — September (т. 14, № 3). — С. 473—530. — doi:10.1145/356887.356892.
- Li, Kai; Hudak, Paul. Memory coherence in shared virtual memory systems (неопр.) // Журнал «Transactions on Computer Systems». — ACM, 1989. — November (т. 7, № 4). — С. 321—359. — doi:10.1145/75104.75105.
- Stenstrom, Per. A survey of cache coherence schemes for multiprocessors (англ.) // Журнал «IEEE Computer» : journal. — Институт инженеров электротехники и электроники, 1990. — June (vol. 23, no. 6). — P. 12—24. — doi:10.1109/2.55497.