Я читаю о протоколе управления кэшем, как это описано в Intel Manual Vol.3(p11)
. Что неясно, так это отслеживание доступа к памяти. Вот его описание:
Начиная с процессоров семейства P6, если процессор обнаруживает (посредством отслеживания), что другой процессор пытается получить доступ к области памяти, которую он изменил в своем кэше, но не имеетвсе же записанные обратно в системную память, процессор отслеживания сообщит другому процессору (посредством сигнала HITM#
), что строка кэша удерживается в измененном состоянии, и будет предварительно выполнять неявную обратную запись измененных данных. Неявная обратная запись передается непосредственно начальному запрашивающему процессору и отслеживается контроллером памяти, чтобы обеспечить обновление системной памяти. Здесь процессор с действительными данными может передавать данные другим процессорам без фактической записи их в системную память;однако, контроллер памяти отвечает за отслеживание этой операции и обновление памяти.
Рассмотрим следующее состояние кэша (согласно MESI):
CPU1 CPU2 CPU3
Line1 M I -
CPU2
пишет в Line1
.
Вот как я вижу отслеживание:
CPU2
выполняет запись в память, которая кэшируется в Line1
. CPU1
обходит и находит запись, выполненную CPU2
. CPU1
сигнализирует другим CPU
с HITM#
, что Line1
находится в измененном состоянии CPU1
выполняет обратную запись Line1
данных ИЛИ , поскольку CPU1
имеет действительные данные в тот момент, когда данные будут передаваться как CPU2
, так и CPU3
, передавая Line1
в состояние Shared (S).
CPU2
выполняет фактическую запись, передавая Line1
в свой кэш в состоянии Modified (M) и Line1
в CPU1
иCPU3
в состоянии Invalid (I).
Таким образом, отслеживая доступ к памяти, можно избежать сохранения доступа к системной шине. когерентность кэша даже в том случае, если какой-либо процессор записывает в область памяти, которая находится в кэше в строке Invalid
. Это в основном то, что они имели в виду под слежкой?