cachelab(第二周)

Cache日志2
实验时间:2020.4.20
一、替换行方法
1、 updataLruNumber()函数(10%)
在这里插入图片描述
更新setBits组hitIndex行的Lru为最大值,用循环语句加判断语句将该组剩余行的Lru-1;
2、 findMinLruNumber()函数(10%)
在这里插入图片描述
遍历整个组,将Lru最小的行返回;
3、 isMiss()函数 (10%)
在这里插入图片描述
遍历整个组,如果满足命中条件则更新Lru并返回1,(调用updateLruNumber),否则返回0;
4、 updateCache()函数(10%)
在这里插入图片描述
在这里插入图片描述
遍历组,如果找到空位则加入,如果没有则说明组满,找到牺牲行并更新即可;
5、 检验LRU (20%)
运行脚本函数与输出组信息函数、putSets函数输出组信息:
在这里插入图片描述
检验LRU主函数与检验结果(cache模型为s1E2b2):
在这里插入图片描述
在这里插入图片描述 在这里插入图片描述
主函数直接调用check_Lru(&cache,1,1)与putSets()函数,结果分析:
s1E2b2说明模拟cache有2个组,每个组有两行,初始化后cache为空,因此执行check_Lru()函数时一定cold miss,不命中之后调用更新Lru的函数updateCache()将组 1第一个为空的行0的tag标记为1,valid置有效状态,Lru置最大值,改组剩余的行的Lru-1,验证正确;
二、处理脚本命令
1、loadData()函数 (10%)
在这里插入图片描述
如果有-v选项则按csim-ref的格式输出详细信息,首先判断是否命中,命中则hits++,否则未命中先令misses++再判断是否有牺牲,若有则evictions++;
2、storeData()函数与modifyData()函数 (5%)
在这里插入图片描述
S操作直接调用loadData即可,因为它们对cache的操作基本相同;
在这里插入图片描述
M操作相当于先执行L操作后执行S操作,因此只需要调用两次loaddtata即可;
3、getSet()函数与getTag()函数(10%)
在这里插入图片描述
上面两个的函数的实现方法确保了逻辑右移不会在符号位为1时导致出错;
4、主函数代码编写与结果分析(15%)
模仿cachelab-ppt中fscanf()的用法,忽略I操作,读取文件与处理命令的片段下右图:
在这里插入图片描述
在这里插入图片描述
用fscanf读取出操作符、地址与大小,调用setBits和tagBits函数得到组索引与标识号,对三个不同的操作符调用相应的函数;
csim、csim-ref运行结果如下:
在这里插入图片描述
在这里插入图片描述
比较csim和csim-ref在缓存模型s4E1b4上运行yi.trace文件的结果可以看出,csim.c文件实现的功能与标准功能相同,得到的结果也相同,模拟cache的搭建完成;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值