Механизм когерентности обобщенного кольцевого гиперкуба

Страница: 4/6

Для управления режимом работы механизма поддержки когерентно­сти используется бит WT, состояние 1 которого задает режим сквозной (write-through) записи, а состояние 0 - режим обратной (write-back) записи в кэш-память.

Промах чтения в кэш-памяти заставляет вызвать строку из основной памяти и сопоставить ей состояние Е или S. Кэш-память заполняется только при промахах чтения. При промахе записи транзакция записи помещается в буфер и посылается в основную память при предоставле­нии шины.

Для поддержки когерентности строк кэш-памяти при операциях вво­да/вывода и обращениях в основную память других процессоров на шине генерируются специальные циклы опроса состояния кэш-памятей. Эти циклы опрашивают кэш-памяти на предмет хранения в них строки, ко­торой принадлежит адрес, используемый в операции, инициировавшей циклы опроса состояния. Возможен режим принудительного перевода строки в состояние I, который задается сигналом INV.

1.2.2.2. Физически распределенная память

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

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

Изложенный алгоритм обеспечения когерентности хотя и является логически работоспособным, однако практически редко применяется из-за больших простоев процессоров при операциях записи в кэш стро­ки. На практике применяют более сложные алгоритмы, обеспечиваю­щие меньшие простои процессоров, например, DASH, который заключается следующем. Каждый модуль памяти имеет для каждой строки, резидентной в мо­дуле, список модулей, в кэшах которых размещены копии строк.

С каждой строкой в резидентном для нее модуле связаны три ее воз­можных глобальных состояния:

1) "некэшированная", если копия строки не находится в кэше ка­кого-либо другого модуля, кроме, возможно, резидентного для этой строки;

2) "удаленно-разделенная", если копии строки размещены в кэшах других модулей;

3) "удаленно-измененная", если строка изменена операцией записи

в каком-либо модуле.

Кроме этого, каждая строка кэша находится в одном из трех локаль­ных состояний:

1) "невозможная к использованию";

2) "разделяемая", если.есть неизмененная копия, которая, возмож­но, размешается также в других кэшах;

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

Реферат опубликован: 9/03/2006