Cache的模拟
实验过程及要求
在NEMU中实现一个cache,性质如下:
1. cache block储存空间的大小为64B和cache储存空间的大小为64KB
字节(Byte)相当于一个字符,8位 = 1B
uint8_t block[64];
2. 8-way set associative
组相联映射的主要思想是,将cache分成大小相等的组,每个主存块被映射到cache固定组中的任意一行,也即采用组间模映射、组内全映射的方式。映射关系如下:cache组号 = 主存块号 mod cache组数
组相联方式下,主存地址呗划分为标记、cache组号和块内地址三个字段。
标记 | cache组号 | 块内地址 |
---|
假设cache共有2c行,被分成2q组,则每组有 2c/2q = 2c-q 行。设s = c - q,则cache映射方式称为2s路组相联映射。
若主存共有2m块,主存块大小占2b字节,按字节编址,则块内地址有b,为,cache组号有q位,标记和cache组号共m位,因而标记占t = m - q 位。
根据memory.c中#define MEM_SIZE_B 128 * 1024 * 1024
再根据实验要求,可知
c = 10
q = 7
m = 21
b = 6
t = 14
struct CacheLine
{
uint8_t valid_bit;
uint32_t tag;
uint8_t block[64];
};
//对地址的解析
uint8_t block = paddr % 64;
//uint8_t line = ((paddr / 64) % 128) * 8;
//由于一开始的思路line8位即可,但是后来改了思路之后,没有注意line的位数,最后导致调试了许久
uint32_t line = ((