Skip to main content

Что такое когерентность памяти?

Когерентность памяти - это проблема, которая возникает в компьютере, когда процессор пытается посмотреть на сектор памяти. Эта проблема возникает только в многоядерных системах или компьютерах с несколькими центральными процессорами (ЦП). Когда несколько процессоров смотрят на один и тот же сектор памяти, и один обновляет сектор, другой может остаться со старой версией памяти компьютера. Чтобы устранить эту проблему, правила согласованности используются для обеспечения того, чтобы процессоры либо не обращались к одной и той же памяти, либо чтобы обновления были согласованы между ними. Существует несколько различных моделей согласованности, поэтому программисты и разработчики компьютеров должны знать точную используемую модель.

Проблема согласованности памяти возникает только на компьютерах, которые используют как минимум два ЦП из-за того, как они обращаются к памяти. Когда один ЦП обращается к сектору памяти, он может извлекать, использовать и изменять память без каких-либо конфликтов, потому что нет других аппаратных компонентов, конкурирующих за память. Если используются два процессора, то два процессора могут захватить один и тот же сектор памяти. Хотя нет проблем с двумя процессорами, совместно использующими память, проблема возникает, если один процессор обновляет память. Это оставляет второй ЦП с устаревшей памятью, которая, если ее не проверять, может привести к тому, что весь компьютер будет иметь две отдельные и конфликтующие версии памяти компьютера.

Существуют схемы программирования, созданные специально для исправления когерентности памяти, что может быть серьезной проблемой. Они все вместе известны как правила согласованности памяти, и существует множество версий. В целом, каждая версия сообщает нескольким процессорам, как правильно распределять память компьютера, не вызывая проблем с согласованием памяти. Это может быть сделано путем обновления обеих версий памяти при изменении одной версии или путем предотвращения одновременного доступа ЦП к одной и той же памяти.

Хотя использование правил согласованности помогает избежать проблемы согласованности памяти, возникает другая проблема. Каждый набор согласованности имеет различное программирование и разные правила, поэтому программистам, которые создают программы или пишут код, непосредственно работающий с процессорами, придется адаптировать кодирование к точным правилам согласованности. Если нет, то это может либо переопределить согласованность, либо вызвать серьезный конфликт между кодированием программиста и правилами согласованности, и компьютер может перестать функционировать.