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的搭建完成;
cachelab(第二周)
最新推荐文章于 2022-01-03 10:02:21 发布