Я реализую кэш с прямым отображением, используя python, который является прямым отображением. Каждая строка в кеше содержит 4 байта. По какой-то причине у меня возникают проблемы с вытягиванием первых (в данном случае) 27 битов, а также последних 5 битов с помощью сдвига битов.
Я не уверен, что именно я делаю неправильно с точки зрения битшифтинга, но все, что я сделал, не дает мне желаемые биты, которые я хочу. Сейчас я делаю своего рода «жестко запрограммированное» решение, но преобразовываю целое число, хранящееся в кэше, в битовую строку и использую индексирование строки Python, чтобы получить только первые 27 бит, хотя я хочу знать, как это сделать с помощью сдвига битов.
def getTag(d_bytes):
b = bin(d_bytes)
b = b[2:]
return (b[0:27])
Это жестко закодированное решение, о котором я говорю.
Если значение в кеше
0b11010101010101010000100010001
Я хотел бы иметь тег:
110101010101010100001000 (первые 27 битов, как тег = (размер строки - индекс - смещение)
Индекс:
100 - следующие 3 бита, следующие за тегом
и смещение:
01 (последние два бита) - последние два бита