Кэш и память

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

Я работаю над кешем и памятью, пытаясь понять, как это работает. Чего я не понимаю, так это этого предложения (выделено жирным шрифтом, а не на картинке):

В архитектуре 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, что неверно!

Поэтому я предполагаю, что это связано с предложением, которое я цитирую выше. Может ли кто-нибудь объяснить мне, почему мои рассуждения неверны?

Кэш на рисунке:

введите здесь описание изображения


person user2336315    schedule 15.12.2013    source источник
comment
Вы делаете доступ к одному байту или одному слову?   -  person Peter Lawrey    schedule 15.12.2013
comment
Вы игнорируете при выборе слова в блоке. Последние биты не всегда игнорируются, а только при определении того, что нужно кэшировать. Фактический доступ к памяти использует полный адрес.   -  person Kerrek SB    schedule 15.12.2013
comment
@PeterLawrey Если это одно слово, я понимаю, что это приведет к тому же, меня не должно волновать смещение в байтах. Верно ?   -  person user2336315    schedule 15.12.2013
comment
@KerrekSB Итак, последние два бита игнорируются, когда я, например, делаю lw, и будет мультиплексор со смещением байта в качестве управляющего сигнала, когда я буду использовать lb для получения правильного байта?   -  person user2336315    schedule 15.12.2013
comment
Последние два бита будут использоваться, когда размер блока больше одного слова. Таким образом, используя эти два бита, вы найдете смещение в записи кэша.   -  person Asterisk    schedule 15.12.2013
comment
Когда вы читаете 4 слова из xxxx010, вы на самом деле также читаете xxxxx011, xxxxx100, xxxxx101, так что это означает, что вы на самом деле касаетесь двух слов, а это может означать два чтения и даже два промаха кэша.   -  person Peter Lawrey    schedule 15.12.2013
comment
@PeterLawrey Думаю, я правильно понял. Имеет ли смысл мой ответ? Я думаю, это правильно.   -  person user2336315    schedule 17.12.2013


Ответы (1)


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

Это просто означает, что в памяти мои слова выровнены так:

введите здесь описание изображения

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

Эти два последних бита будут полезны для процессора, когда будет выполняться инструкция загрузки байта (lb), чтобы правильно сдвинуть данные, чтобы получить данные в правильной позиции байта.

person user2336315    schedule 17.12.2013