Вопрос

могут ли L1 / L2 кэшировать строку, каждая из которых кэширует несколько копий слова данных основной памяти?

Это было полезно?

Решение

Вполне возможно, что основная память находится в кэше более одного раза.Очевидно, что это правда и обычное явление для многопроцессорных машин.Но даже на однопроцессорных машинах это может произойти.

Рассмотрим процессор Pentium, который имеет разделенный кэш команд / данных L1.Инструкции отправляются только в I-cache, данные - только в D-cache.Теперь, если ОС разрешает самоизменяющийся код, одна и та же память может быть загружена как в I-, так и в D-кэш, один раз как данные, один раз как инструкции.Теперь у вас есть эти данные дважды в кэше L1.Следовательно, процессор с такой архитектурой разделенного кэша должен использовать протокол согласованности кэша, чтобы избежать условий гонки / повреждения.

Другие советы

Нет - если он уже есть в кэше, MMU будет использовать его, а не создавать другую копию.

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

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

Все зависит от архитектуры кэша - гарантирует ли она что-либо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top