Есть концепция виртуальной памяти. Например для Process A есть Page Tables - он содержит соответствие адресу в памяти с точки зрения программы к физической памяти
а походить по TLB - сложно и дорого (по скорости)
И на каждое переключение задач его надо бы перезаполнять, память то разная
кэш содержит соответствие виртуального адреса к данным (упрощенно)
нужно чтобы часто используемые данные не тягать из памяти
к сожалнию быстро-дешево-много - выбери два.
кэш - быстро и дешево, память - дешево и много
И тут на сцену выходит Side-Channel Attacks
фактически это использование особенностей микроархитектуры чтобы получить что-то что не очень предполагается
Tempest - читать электромагнитное излучение чтобы получить какие-то данные
Разница во времени доступа - показывает где данные
в x86 - clflush который позволяет гарантировать что часть данных не в кэше
и делая cflush можно сказать что данные были в кэше
пример:
time = rdtsc(); // чтение счетчика
maccess(&data[0x300]) //
delta = rdtsc() - time
и можно сказать были ли данные по адресу в кше