计算机系统基础实验——Cache的模拟

本文详细介绍了在NEMU系统中实现一个64KB、8-way set associative Cache的过程,包括其特性:64B的block大小,仅需valid bit作为标志位,采用随机替换算法,使用write through策略且不进行write allocate。通过分析主存地址结构,理解并设置了相应的参数,如cache行数、组数、标记位数等。在实现过程中,注意到了读写操作可能导致的数据不完整问题,并强调了对细节的重视。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验过程及要求

在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 = ((
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值