Протокол MOESI

редактировать

(Подробное описание см. В разделе Протоколы согласованности кэша (примеры) )

В вычислениях MOESI - это протокол полной когерентности кеша, который охватывает все возможные состояния, обычно используемые в других протоколах. В дополнение к четырем общим состояниям протокола MESI существует пятое состояние «Собственные», представляющее данные, которые являются как измененными, так и совместно используемыми. Это позволяет избежать необходимости записывать измененные данные обратно в основную память перед их совместным использованием. Хотя в конечном итоге данные должны быть записаны обратно, обратная запись может быть отложена.

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

Как описано в Руководстве программиста по архитектуре AMD64 Vol. 2 ' Системное программирование ', каждая строка кэша находится в одном из пяти состояний:

Изменено
Этот кеш имеет единственную действительную копию строки кэша и внес изменения в эту копию.
В собственности
Этот кэш является одним из нескольких с действующей копией строки кэша, но имеет исключительное право вносить в него изменения - другие кеши могут читать, но не записывать строку кэша. Когда этот кеш изменяет данные в строке кэша, он должен транслировать эти изменения всем другим кешам, разделяющим эту строку. Введение состояния Owned позволяет «грязное» совместное использование данных, т. Е. Модифицированный блок кэша может перемещаться по различным кешам без обновления основной памяти. Строка кэша может быть изменена в состояние Modified после признания недействительными всех общих копий или изменена в состояние Shared путем записи изменений обратно в основную память. Собственные строки кэша должны отвечать на запрос отслеживания данными.
Эксклюзивный
В этом кэше есть единственная копия строки, но строка чистая (без изменений).
Общий
Эта строка - одна из нескольких копий в системе. У этого кеша нет разрешения на изменение копии (другой кеш может находиться в состоянии «принадлежащий»). Другие процессоры в системе также могут хранить копии данных в общем состоянии. В отличие от протокола MESI, строка общего кэша может быть загрязнена по отношению к памяти; если это так, то у некоторого кеша есть копия в состоянии Owned, и этот кеш отвечает за конечное обновление основной памяти. Если ни один кеш не удерживает строку в состоянии «Принадлежит», копия памяти актуальна. Строка кэша не может быть записана, но может быть переведена в исключительное или измененное состояние после аннулирования всех общих копий. (Если строка кэша ранее принадлежала, ответ недействительности укажет на это, и состояние станет измененным, поэтому обязательство в конечном итоге записать данные обратно в память не будет забыто.) Ее также можно отбросить (изменить на состояние Invalid.) в любое время. Строки общего кэша могут не отвечать на запрос отслеживания с данными.
Инвалид
Этот блок недействителен; он должен быть получен, чтобы удовлетворить любую попытку доступа.

Для любой данной пары кешей разрешенные состояния данной строки кэша следующие:

 M   О   E   S   я
 M Красный X N Красный X N Красный X N Красный X N Зеленая галочка Y
 О Красный X N Красный X N Красный X N Зеленая галочка Y Зеленая галочка Y
 E Красный X N Красный X N Красный X N Красный X N Зеленая галочка Y
 S Красный X N Зеленая галочка Y Красный X N Зеленая галочка Y Зеленая галочка Y
 я Зеленая галочка Y Зеленая галочка Y Зеленая галочка Y Зеленая галочка Y Зеленая галочка Y

(Порядок, в котором обычно перечислены состояния, служит только для того, чтобы аббревиатура «MOESI» стала произносимой.)

Этот протокол, более сложная версия более простого протокола MESI (но не в расширенном MESI - см. Когерентность кэша ), позволяет избежать необходимости записывать грязную строку кэша обратно в основную память, когда другой процессор пытается ее прочитать. Вместо этого состояние Owned позволяет процессору передавать измененные данные непосредственно другому процессору. Это полезно, когда задержка связи и пропускная способность между двумя процессорами значительно лучше, чем с основной памятью. Примером могут служить многоядерные процессоры с кэшем второго уровня на ядро.

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

Если процессор желает записать в строку собственного кэша, он должен уведомить другие процессоры, которые совместно используют эту строку кэша. В зависимости от реализации он может просто сказать им сделать свои копии недействительными (переместить свою копию в состояние Modified) или может сказать им обновить свои копии новым содержимым (оставив свою копию в состоянии Owned).

Смотрите также
Рекомендации
Последняя правка сделана 2023-12-31 10:56:56
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте