Я пытаюсь понять аппаратные кеши. У меня есть небольшое представление, но я хотел бы спросить здесь, правильно ли я понимаю.
Итак, я понимаю, что существует 3 типа сопоставления кешей: прямое, полностью ассоциативное и ассоциативное по множеству.
Я хотел бы знать, реализован ли тип сопоставления с помощью логических вентилей в оборудовании и специфичен, скажем, для какой-то компьютерной системы, и для изменения сопоставления потребуется изменить электрические соединения?
В настоящее время я понимаю, что в ОЗУ существует адрес памяти для ссылки на каждый блок памяти. Внутри блока есть слова, каждое слово содержит определенное количество байтов. Мы можем представить количество вариантов количеством битов. Так, например, 4096 ячеек памяти, каждая ячейка памяти содержит 16 байтов. Если бы мы обращались к каждому байту, тогда 2 ^ 12 * 2 ^ 4 = 2 ^ 16 Для ссылки на каждый байт потребуется 16-битный адрес памяти.
Кэш также имеет адрес памяти, действительный бит, тег и некоторые данные, способные хранить блок основной памяти из n слов и, следовательно, m байтов. Где m = n * i (байтов на слово)
Например, прямое отображение 1 блок основной памяти может находиться только в одном конкретном месте кеш-памяти. Когда ЦП запрашивает некоторые данные, используя 16-битную область памяти ОЗУ, он сначала проверяет наличие кеша. Как он узнает, что этот конкретный 16-битный адрес памяти может быть только в нескольких местах?
Я думаю, что между каждым адресом RAM и адресом кеша может быть какое-то электрическое соединение. Затем 16-битный адрес может быть разделен на части, например, сравнивать только левые 8 бит с каждым адресом кэш-памяти, затем, если совпадение, сравнивать байтовые биты, затем тегировать биты, затем действительный бит
Я правильно понимаю? Спасибо! Действительно признателен, если кто-нибудь прочитает этот длинный пост
хорошо, понял, я попробую там





Вы можете прочитать 3.3.1 Associativity в Что каждый программист должен знать о памяти от Ульриха Дреппера.
https://people.freebsd.org/~lstewart/articles/cpumemory.pdf#subsubsection.3.3.1
Название немного запоминающееся, но оно подробно объясняет все, что вы спрашиваете.
Короче:
Проблема caches - это количество сравнений. Если ваш cache содержит 100 блоков, вам необходимо выполнить 100 сравнений за один цикл. Вы можете уменьшить это число с введением sets. если конкретная область памяти может быть размещена только в слотах 1-10, вы уменьшаете количество сравнений до 10.
sets адресуются дополнительным битовым полем внутри адреса памяти, называемым индексом.
Так, например, ваш 16-битный (из вашего примера) можно разделить на:
[15:6] block-address; stored in the `cache` as the `tag` to identify the block
[5:4] index-bits; 2Bit-->4 sets
[3:0] block-offset; byte position inside the block
поэтому выбор метода зависит от доступности аппаратных ресурсов и времени доступа, которое вы хотите заархивировать. Это в значительной степени зашито, так как вы хотите уменьшить логику сравнения.
Есть несколько картографические функции, используемых для строк кэша карты с основной памятью
вы должны иметь некоторое представление об этих трех функциях сопоставления
Возможно, для ответа на этот вопрос лучше всего подойдет electronics.stackexchange.com, поскольку вопрос касается аппаратного обеспечения.