Отображение 512 КБ основной памяти в домашний вопрос размером 1 КБ - PullRequest
1 голос
/ 16 апреля 2019

Извините, если я сделал ошибку в публикации этого. Пожалуйста, дайте мне знать, если мне нужно что-то изменить.

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

Вот вопрос:

Компьютер использует 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. Я не могу обернуть голову вокруг этого. Может кто-нибудь помочь, пожалуйста?

1 Ответ

1 голос
/ 19 апреля 2019

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

Таким образом, кэш будет иметь несколько наборов (вроде как ячейка). И каждый набор будет иметь 1 строку кэша (содержащую 1 блок данных) или несколько строк кэша (каждая содержит 1 блок данных) (прямое отображение или отображение n-ассоциативности).

При отображении блоков основной памяти в кэш адрес основной памяти (16 бит) делится на 3 поля: тег , индексные биты и смещенные биты . Ячейка памяти занимает 1 байт, а блок состоит из нескольких ячеек

Смещенные биты используются для доступа к отдельным байтам блока памяти. Думайте об этом как о смещении в верхней части базового адреса блока, чтобы получить желаемый байт (я предполагаю, что ваша память должна быть адресуемой по байту , а не адресуемой по слову, поскольку нет смысла обращаться к 2B слово, как это было бы негибким) А вот ваш проф / учебник назвать его как слово бит. Следовательно, если блок имеет 32 байта, будет log2 (размер блока) = 5 бит , необходимых для доступа к отдельным ячейкам в отображаемом блоке.

Индексные биты (в кеше с прямым отображением также называются битами блоков, так как количество наборов совпадает с числом блоков в кеше) используется для идентификации того, какой набор / строка кеша / блок кеша, который основной блок памяти сопоставлен с кешем. В кеше 1 кБ / 32 б = 32 блока кеша. Поскольку используется прямое отображение, каждый набор содержит только 1 блок кэша, и, следовательно, в этом кэше будет 32 набора . Таким образом, для доступа к правильному набору в кеше необходимо 5 битов и, следовательно, индексных битов = 5 битов

Tag - это имя, чтобы определить, является ли блок данных в кеше правильным, который мы ищем один из основной памяти. Поскольку адрес основной памяти 16-битный, и мы уже знаем поля индекса и смещения, легко определить, что тегу потребуется 16 - 5 - 5 6 бит. То, как мы определяем тег, на самом деле не имеет значения, так как размер блока и размер кэша (и, следовательно, здесь указано количество наборов в кэше).

...