Извините, если я сделал ошибку в публикации этого. Пожалуйста, дайте мне знать, если мне нужно что-то изменить.
Я получил домашнее задание по компьютерной архитектуре и пропустил этот вопрос. Объяснения моего профессора не имели для меня смысла, и я не согласен с тем, что он мне сказал, поэтому я спрашиваю, что вы, ребята, думаете.
Вот вопрос:
Компьютер использует 16-битные адреса памяти. Основная память - 512KB
, а кэш-память 1KB
с 32B
на блок. Учитывая каждую из следующих функций отображения, рассчитайте количество битов в каждом поле адреса памяти.
Вот как я работал над частью проблемы с прямым отображением:
Кэш-память: 1KB (2^10)
, 16-разрядные адреса памяти (1 word = 2B) -> 1024B/2B = 512 words
, 16 слов на блок (32B)
-> 512/16 = 32 cache memory blocks
.
Основная память: 512 KB (2^19)
, 16-разрядные адреса памяти (1 word = 2B) -> 524288B/2B = 256K words
, 16 слов на блок (32B) -> 256K/16 = 16384 or 16K
блоки основной памяти.
Я понимаю тэг слова как таковой: 32B
на блок позволяет 16 16-bit
адресов памяти на блок. Это (я считаю) поддерживает это: 1 word = 16 bits = 2 B -> 32B/2B = 16 words
в каждом блоке. Это равняется 2^4 = 4 bits
для определения, какое слово в блоке, оставляя 12 bits
для тега и битов блока в адресе памяти.
Теперь, чтобы отобразить блоки основной памяти 16K
непосредственно в блоки кэш-памяти 32
, необходимо, чтобы блоки основной памяти 512
были сопоставлены с каждым блоком кэш-памяти. Так 512/16K
блоков на 1/32
блоков.
Здесь я запутался. Разве это не требует 9
битов тега, как 2^9 = 512
(блоки основной памяти, возможно, отображаются в один блок кеш-памяти)?
Для битов блоков, которые указывают на конкретный блок в кэше, требуется 5 bits
. 2^5 = 32
, блоки в кеш-памяти.
Для этого потребуется 18 bits
в адресе памяти.
Вот ответ моего профессора на этот вопрос:
2^5 = 32 -> 5
Слово бит
(1KB)/(32B)
= 32 блока -> 5 битов блока
16 – 5 – 5 = 6
Бит тега
Я не понимал, что могу просто вычесть требуемые биты блока и слова, чтобы получить биты тега. Но это все еще не имеет смысла для меня. 2^6 = 64 blocks
за блок кеша. 64*32
дает 2048
. Я не могу обернуть голову вокруг этого. Может кто-нибудь помочь, пожалуйста?