Однократная запись (связность кэша)
В когерентности кэша литературе по протоколам Write-Once был первым определенным протоколом MESI . Он имеет оптимизацию выполнения сквозной записи при первой записи и обратной записи при всех последующих операциях записи, что снижает общий трафик шины при последовательных операциях записи в память компьютера . Впервые он был описан Джеймсом Р. Гудманом в (1983). [1] Протоколы согласованности кэша являются важной проблемой в симметричных многопроцессорных системах, где каждый процессор поддерживает кэш памяти.
Штаты
[ редактировать ]В этом протоколе каждый блок локального кэша находится в одном из этих четырех состояний:
- Неверно : этот блок имеет несвязную копию памяти.
- Допустимо : этот блок имеет последовательную копию памяти. Данные могут быть доступны для общего доступа, но их содержимое не изменяется.
- Зарезервировано : блок является единственной копией памяти, но он по-прежнему связен. В случае замены блока обратная запись не требуется.
- Грязный : блок является единственной копией памяти и является бессвязным. Этот экземпляр был написан один или несколько раз. Это единственное состояние, которое генерирует обратную запись при замене блока в кэше.
Эти состояния имеют точно такое же значение, как и четыре состояния протокола MESI (они просто перечислены в обратном порядке), но это упрощенная форма, позволяющая избежать операции чтения для владения. Вместо этого вся аннулирование выполняется путем записи в основную память.
Для любой пары кэшей разрешенные состояния данной строки кэша следующие (сокращенно в порядке, указанном выше):
я | V | Р | Д | |
---|---|---|---|---|
я | ![]() |
![]() |
![]() |
![]() |
V | ![]() |
![]() |
![]() |
![]() |
Р | ![]() |
![]() |
![]() |
![]() |
Д | ![]() |
![]() |
![]() |
![]() |
Переходы
[ редактировать ]Протокол следует некоторым правилам перехода для каждого события:

- Попадание чтения : информация предоставляется текущим кэшем. Никакого изменения состояния.
- Промах чтения : данные считываются из основной памяти. Чтение отслеживается другими кэшами; если какая-либо из них имеет строку в состоянии «грязное» , чтение прерывается на время, достаточное для записи данных обратно в память, прежде чем ему будет разрешено продолжить. Любые копии в состояниях «Грязный» или «Зарезервировано» переводятся в состояние «Действительный» .
- Попадание при записи : если информация в кэше находится в состоянии «Грязно» или «Зарезервировано» , строка кэша обновляется на месте, и ее состояние устанавливается на «Грязно» без обновления памяти. Если информация находится в состоянии «Действительно» , выполняется операция сквозной записи, обновляющая блок и память, и состояние блока меняется на « Зарезервировано» . Другие кэши отслеживают запись и присваивают своим копиям значение Invalid .
- Промах записи : частичная запись строки кэша обрабатывается как промах чтения (если необходимо получить незаписанную часть строки кэша), за которым следует попадание записи. Это оставляет все остальные кэши в состоянии «Недействительно» , а текущий кэш — в состоянии « Зарезервировано» .
Это вариант протокола MESI, но в нем нет явной операции чтения для владения или широковещательной аннулирования, позволяющей перевести строку в кэш в эксклюзивном состоянии без выполнения записи в основную память. Вместо этого первая запись в строку действительного (также известного как Shared ) кэша выполняет запись в память, что неявно делает недействительными другие кэши. После этого строка находится в состоянии Reserved ( Exclusive ), и дальнейшие записи можно производить без обращения к основной памяти, оставляя строку кэша в состоянии Dirty ( Modified ).
Ссылки
[ редактировать ]- ^ Гудман, Джеймс Р. (1983). «Использование кэш-памяти для уменьшения трафика памяти процессора» . Новости компьютерной архитектуры ACM Sigarch . 11 (3): 124–131. дои : 10.1145/1067651.801647 .
- Арчибальд, Дж.; Баер, Дж. Л. (ноябрь 1986 г.). «Протоколы когерентности кэша: оценка с использованием многопроцессорной имитационной модели». АКМ Транс. Вычислить. Сист . 4 (4): 273–298. дои : 10.1145/6513.6514 . S2CID 713808 .
- Гудман, младший (1983). «Использование кэш-памяти для уменьшения трафика памяти процессора». Материалы 10-го ежегодного международного симпозиума по компьютерной архитектуре - ISCA '83 . Международный симпозиум по компьютерной архитектуре: Стокгольм, Швеция, 13–17 июня 1983 г., стр. 124–131. дои : 10.1145/800046.801647 . ISBN 0-89791-101-6 .