Проблема с кешем L1 / 2 - PullRequest
       48

Проблема с кешем L1 / 2

1 голос
/ 19 мая 2009

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

Ответы [ 4 ]

1 голос
/ 19 мая 2009

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

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

0 голосов
/ 20 мая 2009

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

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

0 голосов
/ 19 мая 2009

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

0 голосов
/ 19 мая 2009

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

...