Прежде всего, это не спам с языковыми тегами, но этот вопрос не относится к одному языку в частности, и я думаю, что этот сайт обмена стеками является наиболее подходящим для моего вопроса.
Я работаю над кешем и памятью, пытаясь понять, как это работает. Чего я не понимаю, так это этого предложения (выделено жирным шрифтом, а не на картинке):
В архитектуре MIPS, поскольку слова выравниваются по четырем байтам, два младших бита игнорируются при выборе слова в блоке.
Итак, скажем, у меня есть два адреса:
[1........0]10
[1........0]00
^
|
same 30 bits for boths [31-12] for the tag and [11-2] for the index (see figure below)
Насколько я понимаю, первое приведет к MISS (предполагаю, что начальный кеш пуст). Таким образом, один слот в кеше будет заполнен данными, расположенными по этому адресу памяти.
Теперь мы взяли второй, так как он имеет те же 30 бит, это приведет к попаданию в кэш, потому что мы обращаемся к тому же слоту (из-за тех же 10 бит), а 20 бит адреса равны 20 бит, хранящихся в поле тега.
Таким образом, в результате у нас будут данные, расположенные в памяти [1........0]10
, а не [1........0]00
, что неверно!
Поэтому я предполагаю, что это связано с предложением, которое я цитирую выше. Может ли кто-нибудь объяснить мне, почему мои рассуждения неверны?
Кэш на рисунке:
lw
, и будет мультиплексор со смещением байта в качестве управляющего сигнала, когда я буду использоватьlb
для получения правильного байта? - person user2336315   schedule 15.12.2013