2017-02-19 46 views
0

Существует ли какой-либо сценарий, когда одна процессорная (или одноядерная) система лишает законной силы ее кеш-строки?В каком случае однопроцессорная система сделает недействительным ее кеш?

Поскольку нет необходимости в согласованности, недействительность из других ядер не может быть и речи.

Есть ли поддержка аппаратного обеспечения для тайм-аута строки кэша?

Когда программа завершает работу, (как) строки, связанные с ней, недействительны? Я предполагаю, что ОС не будет знать реализацию кеша, поэтому она не будет признана недействительной.

+3

несколько ядер являются единственной причиной отказа в кэше. DMA (или более общее, каждое оборудование, которое записывает память) является другим. – mfro

ответ

2

Я могу думать о нескольких ситуациях.

  1. Если ваш кеш является «байтом записи», запись только делает недействительной строку кэша и обновляет основную память.

  2. Память ввода/вывода с памятью, поэтому ячейка памяти в кэше может быть изменена устройством ввода-вывода. Это похоже на упрощенную кэш-систему.

  3. Также, когда paged заменены, виртуальный в физический перевод в TLB недопустим, поэтому запись отмечена как недействительная. Соответственно, запись в кэш становится недействительной, так как физический адрес больше не соответствует кэшированной записи.

Существующая программа похожа на замену страницы, поэтому я думаю, что 3 вопроса отвечают на вопрос.

AFAIK, нет временных ордеров, хотя вы можете выдать команду invalidate позже в потоке команд.

+0

Звучит правильно. И, как упоминает @mfro, DMA попадает под пункт 2 ..? –

+0

Да, DMA и отображаемые в память входы/выходы различны, но по отношению к вопросу они имеют одинаковый эффект, то есть изменяют память без использования ЦП (кеша), зная об этом. –

2

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

Однако, я думаю, что наиболее распространенной причиной является некоторое состояние powerdowns/sleep CPU, которое может помещать некоторые компоненты в спящий режим (включая некоторые кеши), например, когда вы ожидаете какого-либо внешнего события.