1、valgrind安装:
通过下载安装包,并在linux系统中进行解压,然后在里面找到
运行configure可执行文件就可以进行安装
安装结束后通过valgrind --log-fd=1 --tool=lackey -v --trace-mem=yes ls -l指令检测,如果有图下结果就说明安装成功
实际上也可以通过linux自带的sudo apt-get valgrind install进行安装,也可以有同样的效果。
2、参考引用csim-ref模拟器使用命令行参数及使用方法:
·-v:可选详细标记,显示跟踪信息
·-s:SET索引位数(S=2^s是集合数,S是有多少组)
·-E:相联性 (每组行数)
·-b:块位数(B=2b是块大小,B是存储块的字节大小)
·-t:要重放的val研跟踪的名称
cache有2^s组,每组有E行,每行有三部分:(1)有效位vild(取0和1,1表示存储了有效信息,0表示没有,判断命中的时候使用)。(2)标记位t=m-(s+b),当cpu要读取某个地址的内容时,会将某个地址的第一个部分:标记位与他进行对比,匹配相等则命中,也就是锁定在某一行。(3)数据块B,B负责存储这个地址的内容,相当于字节数组,共有B-1个小块(从0开始),实际上b相当于数据块B的下标,但实际上没有啥作用
注意每个参数都必须要用到,必须要赋予初值,但-v可以没有
3、认识各项I、L、S、M操作含义,并运行在缓存模型上,能逐条分析trace文件操作且对LRU替换策略,能分析hit、miss、eviction结果产生过程
这里使用-v -s 4 -E 1 -b 4 -t traces/yi.trace
L表示数据加载,可能引发为几种情况:hit OR miss OR miss eviction。
S表示数据存储,可能引发与L相同,所以可直接在storeData函数中调用loadData函数
M表示数据修改(即数据加载后跟着数据存储),先调用load data然后store data,所以可能会出现 2次hit or miss hit or miss evition hit三种情况。
格式为:[空格]操作地址,大小
1)对地址0x10进行访问,0x10=000…00010000,块偏移量为最低四位,故组索引s=1,最开始的时候cache为空,所以第一次访问为miss
2)对地址0x20连续访问两次,0x20=000…00100000,组索引s=2,第一次访问为miss,然后第二次访问的时候有需要的内容且标记位相等,为hit
3)对地址0x22进行访问,0x22=000…00100100,组索引s=2,由于第二次已经将块放入,所以访问结果为hit
4)对地址0x18进行访问,0x18=000…00010100,组索引s=1;由于第一次已经将块放入,所以访问结果为hit
5)对地址0x110进行访问,0x110=000…000100010000,组索引s=1,操作4将块放入但是不相等,所以结果为miss,发生一次eviction
6)对地址0x210进行访问,0x210=000…001000010000,组索引s=1,操作5将块让入但是不相等,结果为miss,cache读取新的行,发生一次eviction
7)对地址0x12连续访问两次,0x12=000…00010010,组索引s=1,第一次访问结果为miss,因为操作6将块进行替换,cache重新读取,发生一次eviction,第二次为hit
总共hits=4,misses=5,evictions=3
4、编写get_Opt()函数,printhelpMenu()函数和checkOptarg()函数:
下面是get_Opt()函数,为了调用getopt函数,需要加上三个头文件,下面是主要部分:
解析命令行函数,命令汇总包含的关键字就只有s,E,b,v,其中qtoi是将字符转换为整数的函数
下面是printhelpMenu函数:
当输入的命令出错的时候,运行这个函数
下面是checkOptarg函数:
检查输入的命令是否合法,否则打印help
5、编写创建和释放部分代码的程序,初始化模拟缓存initCache()处理获取组数行数,分配组内存,分配行内存并清零有效位和Lru计数值:释放内存函数freeCache()(先行后组)
下面是initCach函数
建立三个结构体用来定义组行列的相关变量,这里要用到malloc函数,相当于后来的new语句,用来开辟空间,其中的数据是空间的大小
下面是freeCache函数
释放空间,这里要用到free函数,与malloc相匹配,用来清除空间
6、检验主函数代码编写和结果分析,要求有显示各组信息putsets()函数,能在错误输入命令行参数时输出帮助信息
这里就是简单的将整个我们建立的空间进行展示
下面是主函数和整个的结果
这里可以看到建立了16个组(s=4,2^4=16),每组有1行(E=1),每行的字节数不予考虑,partA第一阶段的工作完成
输入错误的时候就会输出 help
相关文章: