Как сопоставить 32-битный адрес памяти, поступающий от ЦП, в локальную память в C - PullRequest
0 голосов
/ 08 мая 2020

Итак, у меня есть реализация кеша на меньшем уровне с использованием очередей, и у меня есть файл трассировки, который генерирует потоки чтения и записи способом, генерируемым ЦП, например. место чтения 0x20000064 (32-битный адрес). В моем main. c я реализовал глобальную память, используя массив определенных размеров c, чтобы имитировать поведение оперативной памяти. Однако проблема в том, что я декодирую 32-битный адрес, который обращается к памяти, чтобы получить теги и биты смещения для кеша, но индексы адресов массива начинаются с 0 до 1023, например, для int array [1024]. Как мне сопоставить здесь 32-битный адрес по адресу, например, я хочу, чтобы индексирование начиналось с 20000000 и до, скажем, 30000000, а не от 0 до 10000000. Что-то похоже на таблицу ha sh.

1 Ответ

1 голос
/ 08 мая 2020

Если я правильно понимаю, что вы пытаетесь сделать, вы захотите воспользоваться тем фактом, что большинство адресов памяти не используются. Адресное пространство современного процессора огромно, но я сомневаюсь, что тестовые данные, которые вы будете использовать для своего приложения, будут использовать больше, чем небольшую часть этого. Возможно, вы могли бы сначала понять размер страницы (например, 4096 байт), а затем создать ha sh базового адреса каждой страницы в массиве хранилища для этой страницы. Затем, когда вам нужно найти адрес, вы вычисляете базовый адрес страницы с помощью "address-address% page_size", просматриваете массив в вашем ha sh страниц, а затем желаемое значение находится в "(address% page_size) "внутри этого массива. Сложно сказать, что вы хотите от своего вопроса, но я надеюсь, что это предложение дает вам то, с чем можно поработать.

...