Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_Obespechenie_soglasovannosti_kesh-pamyati_protsessorov.doc
Скачиваний:
3
Добавлен:
28.06.2024
Размер:
591.36 Кб
Скачать

Другие протоколы наблюдения сходные с mesi: msi, mosi, moesi, mesif.

Хотя MESI наиболее распространенный протокол, но используются и другие сходные протоколы.

Рис.7. Диаграмма MSI.

Протокол MSI – можно рассматривать как упрощен­ный вариант MESI, в котором отсутствует состояние “E” и, соответственно, вместо ситуаций RME и RMS есть ситуация RM (Read Miss) – кэш-промах при чтении (рис.7).

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

Следовательно, протокол MSI хотя и проще в работе, чем MESI, но больше нагружает шину, поэтому он встречается редко.

Если протоколы MESI и MSI применяются как в многопроцессорных системах, так и в системах с одним процессором, имеющим несколько кэшей, то протоколы MOSI, MOESI, MESIF предполагают, что обмен данными между кэшами выполняется быстрее, чем между кэшем и основной памятью. Такая архитектура характерна для однопроцессорных систем, где доступ к основной памяти выполняется через общую шину, а кэши связаны более быстрыми внутренними шинами.

Протокол MESIF, по сравнению с MESI, имеет дополнительное состояние F (Forwarded), которое является подтипом состояния S. Но среди всех копий строки в разных кэшах, только одна из них может иметь состояние F. Когда поступает запрос на чтение этой строки, то строка читается не из основной памяти, а только из того кэша, где она отмечена в состоянии F. Если оказывается, что нет копии в состоянии F, то будет включен механизм арбитража, который будет определять, из какого кэша следует считывать копию.

Для того чтобы гарантировать присутствие не более одной копии в состоянии F и чтобы увеличить вероятность присутствия хоть одной копии в состоянии F – этим состоянием помечается последняя по времени записанная копия, а та копия, с которой она писалась, переходит в состояние S. Т.о. алгоритм назначения напоминает эстафетную палочку – в F всегда оказывается та копия, которая была создана последней. Например, начинаем мы, с того, что в каком-то кэше лежит строка в Exclusive. При запросе копии другим кэшем – кэш-владелец E-строки отвечает на запрос вместо основной памяти, и одновременно меняет состояние своей строки на Shared. А вот новая копия, созданная по его ответу, будет как раз в состоянии F, на следующий запрос копии будет отвечать уже ее владелец. Ответив, он сбросит состояние своей строки на обычное S, а только что созданная копия в другом кэше станет новым F – и так далее...

Логика здесь такая: во-первых, статистически, последняя загруженная копия, скорее всего, будет и последней выгруженной. То есть такая передача ответственности позволяет как можно дольше избегать пропадания выделенной копии (пропадания за счет вытеснения). А во-вторых, передача ответственности позволяет балансировать нагрузку – дополнительные обязанности по ответу на запросы копии не висят постоянно на одном и том же кэше, а передаются от кэша к кэшу эстафетой.

Дополнительные бонусы возникают в случае NUMA архитектуры. В этом случае ответственная F-копия будет чаще оказываться в «территориально» более близком блоке кэша – более близком к тому, который следующим захочет получить копию.

Рис.8. Диаграмма MOSI.

Протокол MOSI (рис.8) и протокол MOESI являются усовершенствованием протоколов MSI и MESI, они разработаны с целью упрощения обработки чтения строки находящейся в другом кэше в состоянии M. Как было показано выше (см. рис.6), эта ситуация отрабатывается в несколько этапов, с двумя обращениями к основной памяти: один раз для записи в память, а второй – для чтения из памяти. Однако, строка может быть прочитана напрямую из того кэша, где она хранится в состоянии M, вообще без обращений к основной памяти.

Для этого, во-первых, функции M-состояния расширяются – кэш, который содержит строку в таком состоянии, должен отвечать на запросы получения копии этой строки. А во-вторых, вводится новое состояние O (Owned – личный, находящийся в собственности), которое означает «копия не синхронизирована с памятью, и существуют другие копии».

Отвечая на запрос чтения M-строки кэш, меняет состояние своей строки с M на O, а получивший копию кэш ставит ее в S.

Пока Owned строка существует, она продолжает отвечать на все запросы копии. Если процессор, владеющий этой строкой, снова решит ее модифицировать – состояние меняется снова на M, и широко рассылается запрос на аннулирование для всех Shared-копий.

Разумеется, любой запрос на вытеснение Owned-строки будет задержан на время сброса ее данных в основную память.

Таким образом, состояние O является подтипом состояния M и явно указывает на то, что кэши нескольких процессоров имеют достоверные копии строки, но основная память содержит недостоверную копию.