2012-04-29 2 views
5

Приносим извинения, если это неправильный стек для этого; он просто казался самым близким к месту, которое могло бы помочь в компьютерной архитектуре. Для задачи домашних заданий в компьютерных системах я был задан вопрос:Direct Mapped Cache Hit/Miss

Consider three direct mapped caches X, Y, and Z each interpreting an 
8-bit address slightly differently according to the {tag:setIdx:byteOffset} 
format specified. For each address in the reference stream, indicate whether the 
access will hit (H) or miss (M) in each cache. 

        C1  C2  C3 
Address Formats: {2:2:4} {2:3:3} {2:4:2} 

Address References in Binary: 00000010, 00000100... 

Я должен сказать, является ли каждая из ссылок адреса приведет к наудачу, но я не знаю, с чего начать.

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

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

Спасибо за любые советы и подсказки.

ответ

3

Возьмите C1, например, он имеет 2 бита для setIdx и 4 бит для byteOffset.

Таким образом, этот кеш будет иметь 2^2 = 4 блока (00, 01, 10 и 11), и каждый блок будет иметь 2^4 = 16 байт.

Адрес ссылка теперь может быть разделен на формат C1: {00 00} 0010

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

Следующая ссылка {00 00 0100} будет искать блок «00», он видит, что тег также «00», у нас есть удар.

+0

Что байтовое смещение тогда? – KWJ2104

+0

смещение байта - как большой один блок. Например, используя ту же ссылку, что и выше, при условии, что C1 имеет {00 00 0010}, загруженный в блок {00}, этот блок содержит память {00 00 0000} до {00 00 1111}. Однако, если вы попытаетесь найти {01 00 0010}, это будет ошибкой, потому что тег отличается. (Также я предполагаю, что это однонаправленное ассоциативно-ассоциативное отображение) –

1

Я не думаю, что у вас был бы удар. Несмотря на то, что адрес 00 00 0100 будет искать один и тот же блок, он будет искать другой адрес в памяти. В прямом сопоставлении кеш-запросы являются причиной только попыткой доступа к одному и тому же адресу в памяти в том же блоке в последовательных инструкциях. Адрес в памяти задается байтом, а не номером блока. Прямой сопоставленный кэш будет заменять содержимое блока, пока он не пытается получить доступ к одному и тому же адресу в блоке. Если 00 00 0100 должно предшествовать очередному 00 00 0100, тогда в кеше с прямым отображением будет попадание.

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

Номер блока задается полу (Байт адреса/байт на блок) MOD (число блоков)

+0

Обычно кэши загружают весь блок на промах не только запрошенные байты. (Некоторые кэши используют секционирование, обеспечивая более одного допустимого бита на блок, но никакой основной процессор не предоставляет допустимый бит на каждый байт или даже на 4-байтовый кусок. Кроме того, с текущей DRAM минимальная длина пакета равна 4 - который может снизить производительность, поэтому интерфейс с 64-разрядным интерфейсом дает * минимальный * 32-байтовый перевод.) –

+0

@ PaulA.Clayton Можете ли вы также изучить этот вопрос кеширования? Http: // StackOverflow.ком/вопросы/30555623/как-много-бит-в-в-адрес поля-в-а-непосредственно отображенный-кэш – committedandroider