WikiDer > Протокол MOESI
В области вычислений MOESI - это полный согласованность кеша протокол, который включает в себя все возможные состояния, обычно используемые в других протоколах. Помимо четырех обычных Протокол MESI В разных состояниях есть пятое состояние «Принадлежит», представляющее данные, которые являются как измененными, так и совместно используемыми. Это позволяет избежать необходимости записывать измененные данные обратно в основную память перед их совместным использованием. Хотя в конечном итоге данные должны быть записаны обратно, обратная запись может быть отложена.
Чтобы это было возможно, должна быть возможна прямая передача данных из кэша в кэш, чтобы кэш с данными в измененном состоянии мог передавать эти данные другому считывателю, не передавая их в память.
Как обсуждалось в AMD64 Руководство программиста по архитектуре Vol. 2 'Системное программирование',[1] каждый строка кеша находится в одном из пяти состояний:
- Изменено
- Этот кеш имеет единственную действительную копию строки кэша, и в эту копию были внесены изменения.
- В собственности
- Этот кэш является одним из нескольких, в котором имеется действительная копия строки кэша, но он имеет исключительное право вносить в него изменения - другие кеши могут читать, но не записывать строку кэша. Когда этот кеш изменяет данные в строке кэша, он должен транслировать эти изменения всем другим кешам, разделяющим эту строку. Введение состояния Owned позволяет «грязное» совместное использование данных, т. Е. Модифицированный блок кеша может перемещаться по различным кешам без обновления основной памяти. Строка кэша может быть изменена в состояние Modified после признания недействительными всех общих копий или изменена на состояние Shared путем писать изменения обратно в основную память. Собственные строки кэша должны отвечать на шпионить запрос с данными.
- Эксклюзивный
- В этом кэше есть единственная копия строки, но строка чистая (без изменений).
- Общий
- Эта строка - одна из нескольких копий в системе. У этого кеша нет разрешения на изменение копии (другой кеш может находиться в состоянии «принадлежащий»). Другие процессоры в системе также могут хранить копии данных в общем состоянии. В отличие от протокола MESI, строка общего кэша может быть грязным в отношении памяти; если это так, то у некоторого кеша есть копия в состоянии Owned, и этот кеш отвечает за конечное обновление основной памяти. Если ни один кеш не удерживает строку в состоянии владения, копия памяти актуальна. Строка кэша не может быть записана, но может быть переведена в эксклюзивное или измененное состояние после аннулирования всех общих копий. (Если строка кэша ранее принадлежала, ответ недействительности укажет на это, и состояние станет измененным, поэтому обязательство в конечном итоге записать данные обратно в память не будет забыто.) Ее также можно отбросить (изменить на состояние Invalid. ) в любое время. Строки общего кэша могут не отвечать на запрос отслеживания с данными.
- Недействительным
- Этот блок недействителен; он должен быть получен, чтобы удовлетворить любую попытку доступа.
Для любой данной пары кешей допустимые состояния данной строки кэша следующие:
M | О | E | S | я | |
---|---|---|---|---|---|
M | |||||
О | |||||
E | |||||
S | |||||
я |
(Порядок, в котором обычно перечислены состояния, служит только для того, чтобы аббревиатура «MOESI» стала произносимой.)
Этот протокол, более сложная версия более простого Протокол MESI (но не в расширенном MESI - см. Согласованность кеша), избавляет от необходимости записывать грязную строку кэша обратно в основная память когда другой процессор пытается его прочитать. Вместо этого состояние Owned позволяет процессору передавать измененные данные непосредственно другому процессору. Это полезно, когда задержка связи и пропускная способность между двумя процессорами значительно лучше, чем с основной памятью. Примером могут служить многоядерные процессоры с кэшем второго уровня на ядро.
Хотя MOESI может быстро обмениваться грязными строками из кеша, он не может быстро передавать чистые строки из кеша. Если строка кэша чиста по отношению к памяти и находится в общем состоянии, то любой запрос отслеживания к этой строке кеша будет заполняться из памяти, а не из кеша.
Если процессор желает записать в строку собственного кэша, он должен уведомить другие процессоры, которые совместно используют эту строку кэша. В зависимости от реализации он может просто сказать им сделать свои копии недействительными (переместить свою собственную копию в состояние Modified), или он может сказать им обновить свои копии новым содержимым (оставив свою копию в состоянии Owned).
Смотрите также
использованная литература
- ^ "Руководство программиста по архитектуре AMD64, том 2" Системное программирование'" (PDF). Архивировано из оригинал (PDF) 19 июня 2017 г.. Получено 28 августа, 2015.