Методы отображения кэша - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь понять аппаратные кэши.У меня есть небольшая идея, но я хотел бы спросить здесь, является ли мое понимание правильным или нет.

Итак, я понимаю, что существует 3 типа отображения кэша: прямой, полный ассоциативный и набор ассоциативный.

Я хотел бы знать, является ли тип отображения, реализованный с помощью аппаратных логических элементов, специфичным, скажем, для некоторой компьютерной системы, и для изменения отображения потребуется изменить электрические соединения?

В настоящее время я понимаю, что в оперативной памяти существует адрес памяти для ссылки на каждый блок памяти.Внутри блока содержатся слова, каждое слово содержит количество байтов.Мы можем представить количество вариантов с количеством битов.Так, например, 4096 ячеек памяти, каждая ячейка памяти содержит 16 байтов.Если бы мы ссылались на каждый байт, то 2 ^ 12 * 2 ^ 4 = 2 ^ 16 16-битный адрес памяти потребовался бы для ссылки на каждый байт.

Кэш также имеет адрес памяти, действительный бит,тег и некоторые данные, способные хранить блок основной памяти из n слов и, следовательно, m байтов.Где m = n * i (байт на слово)

Например, прямое отображение 1 блока основной памяти может быть только в одной конкретной ячейке памяти в кэше.Когда центральный процессор запрашивает некоторые данные, используя 16-разрядную ячейку памяти, он сначала проверяет наличие кэша.Откуда он знает, что этот конкретный 16-битный адрес памяти может быть только в нескольких местах?

По-моему, между каждым адресом ОЗУ и адресом кэша может быть какое-то электрическое соединение.Затем 16-битный адрес можно разделить на части, например, сравнить только левые 8 бит с каждым адресом кэш-памяти, затем, если сопоставить, сравнить битовые биты, то биты тегов и действительный бит

Верно ли мое понимание?Спасибо!Очень ценю, если кто-то прочитает этот длинный пост

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете прочитать 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

, поэтому выбор метода зависит от доступности аппаратных ресурсов и времени доступа, которое вы хотите заархивировать.Это в значительной степени аппаратно, так как вы хотите уменьшить логику сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...