Методы сопоставления кэша

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

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

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

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

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

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

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

Я правильно понимаю? Спасибо! Действительно признателен, если кто-нибудь прочитает этот длинный пост

Возможно, для ответа на этот вопрос лучше всего подойдет electronics.stackexchange.com, поскольку вопрос касается аппаратного обеспечения.

wooooooooosh 05.12.2018 05:46

хорошо, понял, я попробую там

WarriorJoe 05.12.2018 05:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
256
2

Ответы 2

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

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

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

  • Прямое отображение
  • Ассоциативное сопоставление
  • Наборно-ассоциативное сопоставление

вы должны иметь некоторое представление об этих трех функциях сопоставления

Другие вопросы по теме