[an error occurred while processing this directive]
|
в случае идеального - полностью ассоциативного кэша - переходы никак не влияют
но в случае ограничения ассоциативности (упоминавшийся n-way кэш), получается так, что каждая ячейка памяти может быть положена в одну из n вариантов ячеек кэша
при этом кэш организован как бы линейно - то есть ячейки памяти, которые претендуют на сохранение в одной ячейке кэша стараются располагать как можно дальше друг от друга. Это делается для того, чтобы линейный код (наиболее вероятный) лучше сохранялся в кэше.
когда происходит переход, есть вероятность, что новые ячейки памяти будут претендовать на те, где лежит программа с других адресов. при этом часть кэша может остаться неиспользованной
наиболее просто когда n=1, то есть каждая ячейка памяти может сохранятся в одной предопределенной ячейке кэша. при этом ячейки расположенные на расстоянии кратном размеру кэша будут попадать в одну ячейку - то есть call-return будут попадать в одну ячейку, а остальной кэш использоватся не будет
при n больше 1 возникает потребность в LRU алгоритме (Last Resently Used) для обнаружения ячейке кэша, к которой обращались раньше всех среди n вариантов - эта ячейка заменяется
например "убить" 2-вэй кэш можно так
loop:
call A1
call A2
jmp loop
(A1 mod M)==(A2 mod M)==(loop mod M) - M размер кэша
E-mail: info@telesys.ru