Кэш контролируется аппаратным обеспечением кэширования прозрачно для процессора, поэтому, если мы используем переменные volatile в программе на C, как гарантируется, что моя программа каждый раз считывает данные с указанного фактического адреса памяти, но не кэша.
Я понимаю, что
-
Волатированное ключевое слово сообщает компилятору, что ссылки на переменные не должны быть оптимизированы и должны быть прочитаны как запрограммированные в коде.
-
Кэш контролируется аппаратным обеспечением кеша прозрачно, поэтому, когда процессор выдает адрес, он не знает, поступают ли данные из кеша или из памяти.
Итак, если у меня есть требование, чтобы каждый раз читать адрес памяти, как я могу убедиться, что его не отсылают из кеша, но из требуемого адреса?
Некоторые, как, эти два понятия плохо подходят друг другу. Просьба уточнить, как это делается.
(Представьте, что у нас есть политика обратной записи в кеше (если это необходимо для анализа проблемы))
Спасибо, Микроядро:)