Проблема с кэшем L1 / 2
-
22-08-2019 - |
Вопрос
могут ли L1 / L2 кэшировать строку, каждая из которых кэширует несколько копий слова данных основной памяти?
Решение
Вполне возможно, что основная память находится в кэше более одного раза.Очевидно, что это правда и обычное явление для многопроцессорных машин.Но даже на однопроцессорных машинах это может произойти.
Рассмотрим процессор Pentium, который имеет разделенный кэш команд / данных L1.Инструкции отправляются только в I-cache, данные - только в D-cache.Теперь, если ОС разрешает самоизменяющийся код, одна и та же память может быть загружена как в I-, так и в D-кэш, один раз как данные, один раз как инструкции.Теперь у вас есть эти данные дважды в кэше L1.Следовательно, процессор с такой архитектурой разделенного кэша должен использовать протокол согласованности кэша, чтобы избежать условий гонки / повреждения.
Другие советы
Нет - если он уже есть в кэше, MMU будет использовать его, а не создавать другую копию.
Каждый кэш в основном хранит некоторое небольшое подмножество всей памяти.Когда процессору требуется слово из памяти, оно сначала переходит в кэш L1, затем в кэш L2 и так далее, прежде чем будет проверена основная память.Таким образом, конкретное слово памяти может находиться в L2 и в L1 одновременно, но оно не может быть сохранено два раза в L1, потому что в этом нет необходимости.
Да, это возможно.Копия L1 обновлена, но не была сброшена на L2.Это происходит только в том случае, если L1 и L2 являются неисключительными кэшами.Это очевидно для однопроцессоров, но еще более очевидно для мультипроцессоров, которые обычно имеют свои собственные кэши L1 для каждого ядра.
Все зависит от архитектуры кэша - гарантирует ли она что-либо.