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

Протокол mesi

Рассмотрим один из наиболее распространенных протоколов, обеспечивающих согласованную работу кэш-памяти нескольких микропроцессоров и основной памяти в мультипроцессорных системах, протокол MESI, который относится к группе протоколов наблюдения с аннулированием. Разберем его на примере системы, состоящей из микропроцессора МП 1 и прочих микропроцессоров {МП i}.

Этот протокол использует 4 признака состояния строки кэш-памяти микропроцес­сора, по первым буквам которых и называется протокол:

  • измененное состояние (Modified): информация, хранимая в кэш-памяти 1, достоверна только в этом кэше; она отсутствует в оперативной памяти и в кэш-памяти других микропроцессоров;

  • исключительная копия (Exclusive): информация, содержащаяся в кэше 1, содержится еще только в оперативной памяти;

  • разделяемая информация (Shared): информация, содержащаяся в кэше 1, содержится в кэш-памяти, по крайней мере, еще одного МП, а также в оперативной памяти;

  • недостоверная информация (Invalid): в строке кэш-памяти находится недостоверная информация.

Порядок перехода строки кэш-памяти из одного состояния в другое зависит от: текущего состояния строки, выполняемой операции (чтение или запись), результата обращения к строке (попадание или промах) и, наконец, от того является ли строка совместно используемой или нет. При работе МП 1 с точки зрения обеспечения когерентности памяти возможны следующие 7 ситуаций:

  • RH (Read Hit) – кэш-попадание при чтении;

  • WH (Write Hit) – кэш-попадание при записи;

  • RME (Read Miss Exclusive) – кэш-промах при чтении;

  • RMS (Read Miss Shared) – кэш-промах при чтении, но соответствующий блок есть в кэш-памяти другого микропроцессора;

  • WM (Write Miss) – кэш-промах при записи;

  • SHR (Snoop Hit Read) – обнаружение копии блока при прослушивании операции чтения другого кэша;

  • SHW (Snoop Hit Write) – обнаружение копии блока при прослушивании операции записи другого кэша.

Рис.1. Диаграмма MESI.

На рис. 1 приведена диаграмма основных переходов в зависимости от различных ситуаций. Каждой ситуации соответствует стрелка исходящая из какого-то состояния.

Естественно, что в каждом состоянии есть одни ситуации, но нет других, т.е. нет состояний, из которых исходил бы все 7, стрелок. Например, в состоянии «I» не может быть кэш-попаданий, (то нет RH и WH), и не может быть обнаружена копия блока (то нет SHR и SHW), т.е. есть только ситуации кэш-промаха – RME, RMS и WM.

Аналогично, для состояний «S», «E» и «M» нет ситуа­ций кэш-промаха (RME, RMS и WM), но есть ситуации кэш-попаданий (RH и WH) и снупинга (SHR и SHW). Ниже приводятся иллюстрации для нескольких ситуаций.

На рис.2a, чтение процессора 1 оказывается уникальным и создает ситуацию RME. На рис.2b, процессор i читает ту же строку x, для него создается ситуация RMS, а процессор 1 в результате наблюдения за шиной обнаруживает это и для него создается ситуация SHR. После того, кто бы не читал строку x, состояния S не изменятся.

Рис.2. Смена состояний в протоколе MESI при чтении: (a) для ПР1 ситуация RME, а для ПРi – ничего; (b) для ПРi ситуация RMS, а для ПР1 – SHR.

На рис.3а показана ситуация WH для процессора 1 без выхода на общую шину, таким образом ПР1 производит запись в строку кэша, меняет свое состояние, а остальные процессоры ничего не замечают. На рис.3b показана ситуация WH для ПР 1, но с выходом на общую шину, теперь все остальные процессоры замечают это и для них происходит ситуация SHW и они аннулируют свои копии.

Рис.3. Смена состояний в протоколе MESI при записи, для ПР1 ситуация WH: (a) без выхода на шину, остальные процессоры ничего не замечают; (b) с выходом на шину, тогда для остальных процессоров – ситуация SHW.

На рис.4 и рис.5 показана ситуация WM, т.е. ПР1 хочет записать данные в строку, которой нет в его кэше. Однако прежде чем записать данные в строку процессор должен считать эту строку в свой кэш и только потом модифицировать её. Но, прежде чем процессор сможет загрузить строку, он должен удостовериться, что в основной памяти действительно находится достоверная версия данных, то есть что в других кэшах отсутствует модифицированная копия данной строки.

Рис.4. Смена состояний в протоколе MESI при записи, для ПР1 ситуация WM: (a) нет копий в других процессорах; (b) есть копии они аннулируются – ситуация SHW.

Формируемая в данном случае последовательность операций носит название чтение с намерением модификации (Read With Intent To Modify – RWITM).

Если в кэшах других процессоров не было копий этой строки, то и доступ к основной памяти производится немедленно (рис.4a). Если же копия строки существовала в другом кэше и не имела состояния M (т.е. – E или S), то такая копия аннулируется, и доступ к основной памяти производится немедленно (рис.4b).

Если в одном из кэшей имеется копия нужной строки, находящаяся в состоянии M, то процессор, обладающий этой копией, прерывает RWITM-последовательность и переписывает строку в основную память, после чего меняет состояние строки в своем кэше на I (рис.5a). Если копия этой строки памяти была в каких-то других процессорах (кроме ПР1 и ПРi), то для них наступает ситуация SHW и все копии строки аннулируются. Затем RWITM-последовательность возобновляется и делается повторное обращение к основной памяти для считывания обновленной строки и строка изменяется в кэше ПР 1 (рис.5b).

Окончательным состоянием строки x в ПР 1 будет M, при этом ни в основной памяти, ни в других кэшах нет достоверной ее копии.

Рис.5. Этапы смены состояний в протоколе MESI при записи, для ПР1 ситуация WM, при условии, что в процессоре ПРi имеется копия нужной строки в состоянии M: (а) 1-й этап, чтение для ПР1блокируется, а ПРi выполняет запись строки в ОЗУ; (b) ПР1 выполняет чтение строки из ОЗУ и ее модификацию в своем кэше.

Обратите внимание, что если при кэш-промахе чтения процессором 1, оказалось, что соответствующий блок есть в кэш-памяти другого процессора ПРi, причем в состоянии М, то прежде чем ПР1 выполнит чтение, ПРi должен переписать модифицированную строку в основную память (рис.6a). При этом, ПРi переходит в состояние S, а все остальные процессоры, имеющие ту же строку, переходят в ситуацию SHW и сбрасываются в состояние I. На следующем этапе (рис.6.b), ПР1 спокойно читает строку из памяти и переходит в состояние S.

Рис.6. Этапы смены состояний в протоколе MESI при кэш-промахе чтения, но соответ­ствующий блок есть в кэш-памяти другого микропроцессора, причем модифицированный: (a) 1-й этап, чтение для ПР1блокируется, а ПРi выполняет запись строки в ОЗУ; (b) ПР1 выполняет чтение строки из ОЗУ.