7.4.4.3.1. Организация кэш-памяти
В большинстве программ есть обращения к сегментам
программ, подпрограммам, спискам, буферам, расположенным в различных местах адресного
пространства, и к различным
стекам. Эффективная кэш-память должна поддерживать блоки данных, не являющиеся
непрерывными.
Полностью ассоциативная кэш-память. Полностью ассоциативная кэш-память
определяет, какие
блоки хранятся в ней в любой момент времени. В такой кэш-памяти не существует
однозначного соответствия между всеми адресами блоков, и поэтому в ней должны храниться полный
адрес каждого блока так же, как и сам блок. Когда процессору нужны данные из основной
памяти, то кэш-контроллер сравнивает адреса этих данных с каждым из адресов в кэш-памяти. Это относительно медленно и дорого и нарушает основной
принцип ограничения количества требуемых
сравнений адресов.
Кэш-память с прямым отображением. Каждый адрес в такой памяти
имеет две части.
Первая часть (поле кэш-индекса) содержит достаточно битов для того, чтобы определить место блока внутри
кэш-памяти. Вторая часть (поле тега) содержит достаточно битов для того, чтобы отличить отдельный блок от других блоков,
которые могут храниться в конкретном месте
кэш-памяти.
Большое количество сравнений адресов в полностью
ассоциативной кэш-памяти
объясняется тем, что любой блок из основной памяти может храниться в любом месте кэш-памяти. Именно
это заставляет проводить сравнения адресов всех блоков. С другой стороны, кэш-память с прямым
отображением уменьшает требуемое количество сравнений, позволяя каждому блоку из основной памяти
занимать только
одно место в кэш-памяти.
Кэш-память с прямым отображением имеет и свои
недостатки. Если процессор делает частые
запросы из двух мест, для которых области памяти отображены в одну и ту же кэш-память, то контроллер должен
часто обращаться к основной памяти,
поскольку только одна из этих областей может в данный момент времени находиться в кэш-памяти.
Ассоциативная по множеству
кэш-память. Эта кэш-память является компромиссом между полностью
ассоциативной кэш-памятью и кэш-памятью с прямым отображением. Ассоциативная по множеству кэш-память
имеет несколько групп блоков прямого
отображения, которые работают параллельно. Для каждого кэш-индекса существует несколько разрешенных мест
расположения блока, по одному на каждое
множество или группу. Блок поступающих данных может направляться в любое место для блока из своего множества.
Чрезмерно частое обращение к основной памяти, которое
является недостатком кэш-памяти
с прямым отображением, уменьшается, а процент кэш-попаданий увеличивается, поскольку
ассоциативная по множеству кэш-память имеет несколько мест для блоков с одинаковыми
кэш-индексами в их адрес. Ассоциативная по множеству кэш-память, однако, более
сложна, чем кэш-память с прямым отображением.
В двухканальной ассоциативной по множеству кэш-памяти
имеются два места, где
может храниться каждый блок. Контроллер должен сделать два сравнения для того, чтобы определить, в каком
из блоков находятся требуемые данные и есть ли они там вообще. Ассоциативная по множеству
кэш-память нуждается также в более широком поле тега и в большем пространстве статического
ОЗУ для хранения тегов. Кроме того, кэш-контроллер должен решить, какой блок кэш-памяти
перезаписать при исполнении блочной выборки, так как существует несколько мест,
в которых могут храниться данные из основной памяти. Наконец, когда информация
сохраняется в ассоциативной по множеству кэш-памяти, то требуется
дополнительная логика, которая должна решить, что должно быть сделано и в каком
блоке следует хранить эту информацию.