计算机系统原理——cachelab (第一周)

cachelab工程以及valgrind下载:
pan.baidu.com/s/1XWH5Uq1jgtxdWoOx8vffkQ 码:7e8q

一、实验准备

1、安装64位Linux系统
2、准备实验文件
1)下载cachelab-handout.tar与valgrind-3.12.0.tar.bz2文件并将其复制到Ubuntu中
2)在命令行界面用tar xvf 指令解压文件
3、阅读相关资料cachelab-ppt.pptx以及cachelab.pdf文件了解相关内容实验内容

二、搭建环境与分析脚本

1、valgrind安装

handout 文件夹中的 traces 子文件夹中包含了一些 参考追迹文件 ,用于评估你在 Part A 中写的缓存模拟器是否正确。追迹文件由一个叫做 valgrind 的 Linux 程序生成。
1)sudo apt install valgrind
在这里插入图片描述
2)valgrind --version
在这里插入图片描述
valgrind-3.11.0版本安装成功
注:使用课程网站提供的valgrind-3.12.0版本安装时出现错误(在./configure与make指令之后的 make install指令执行出错),因此选择apt-get install valgrind二进制包安装;

2、学会PartA部分参考引用csim-ref模拟器使用命令行参数及使用方法

Usage:  ./csim-ref [-hv] -s <s> -E <E> -b <b> -t <tracefile>-h:可选参数,打印使用说明		
•  -v:可选参数,展示追踪信息
• -s <s>:缓存集下标的位数(S=2S) 
•  -b <b>:块的位数(B=2b,块大小)
•  -E <E>:结合性(缓存集缓存行数)   
• -t <tracefile>:用于追迹的 valgrind trace 文件。
使用方法如追踪yi.trace文件

在这里插入图片描述

3、认识yi.trace中各项操作含义,并运行在缓存模型上,逐条分析trace文件操作且对比LRU替换策略,分析hit、miss、eviction结果产生过程

1) yi.trace文件:
在这里插入图片描述
2) 使用csim-ref指令运行并-v展开追踪信息得到(上右图)
3) 每一行记录了一次或两次内存访问,每行的格式为:
[空格] 操作 地址,大小
“I”:表示指令加载,“L”:表示数据加载,“S”:数据存储;
“M”:数据修改(即在一次数据加载之后紧跟着一个数据存储)
“I”之前没有空格,而“M”,“L”,“S”前面要有空格。

4) 分析(加粗表示组索引s)
①L 10,数据加载:x10=0000…0001 0000,块偏移值为最低四位,故组索引s=1;
一开始的时候cache是空的,因此第一次访问的时候为miss;
②M 20,数据修改(加载与存储)0x20=000…0010 0000,组索引s=2;
所以第一次访问的时候没有内容,访问结果为miss,然后cache从低一级存储器读取内容,存储的时候结果为hit;
③L 22,数据加载:0x22=000…0010 0100,s=2;
由于操作②将该块存入高速缓存且标记位相等,故结果为hit;
④S 18,数据存储:0x18=000…0001 0100,组索引s=1;
由于之前的操作,该块已存入高速缓存且标记位都为1,故访问结果为hit
⑤L 110,数据加载:0x110=000…0001 0001 0000 故组索引s=1
操作④将该块存入高速缓存了但标记位不相等,故访问结果为miss,将块17装入17%4=1处,发生一次eviction;
⑥L 210,数据加载:0x210=000…0010 0001 0000,故组索引s=1;
这里标记位为2与标记位1不匹配,故访问结果为miss, cache读取新的行,发生一次eviction。
⑦M 12,数据修改:0x12=000…0001 0010,组索引s=1;
第一次访问结果为miss,因为在操作⑥的时候发生了一次行替换把该块驱逐了,即标记位不相等,cache重新读取该块,发生一次eviction,数据存储为hit。

三、创建与释放缓存

1、get_Opt函数体

getopt()函数,如果函数声明丢失,则在Unix命令行上自动解析元素,通常在循环中调用以检索参数,它的返回值存储在局部变量中,当getopt()返回-1时,没有更多的选项。
getopt函数解析命令行参数,argc、argv是调用main函数时传入的参数。传入的’-'开始的字符被解析为选项,getopt一次执行解析出一个option,如果循环执行,可以将argv中的全部option解析出来
在这里插入图片描述
在这里插入图片描述
解析输入参数,检查输入参数的合法性,用count数组计数器来保证四个s、E、b、t参数是必有的且仅有一个,用checkOptarg函数来检查输入的格式的正确性;

2、printHelpMenu函数体

在这里插入图片描述
模仿csim-ref的格式和内容;

3、checkOptarg函数体

csim 接受的参数中,-h, -v 是可选的,而其余参数都是缺一不可的,此外全部是非法参数;当缺少任意一个必要参数时或输入非法参数时,应当给出错误提示并打印使用帮助。但函数原型只有optarg,因此checkOptarg函数应是在get_Opt函数中使用且需要和get_Opt函数组合来检查输入的正确性;
optstring(getopt第三个参数)指定选项合法的选项,一个字符代表一个选项,在字符后面加一个’:'表示该选项带一个参数,若有参数,optarg指向该该参数;
在这里插入图片描述
因此optarg中是随在-s等后的数字,需要检查它是否缺失;若缺失则curOptarg不会是0-9;

4、initCache()函数体

初始化cache模拟缓存体;
在这里插入图片描述

5、freeCache()函数体

释放initCache函数体生成的内存
在这里插入图片描述

四、检验主函数编写与结果分析

到目前来说完成了模拟缓存的初始化、释放以及输入命令行参数的检查,接下来检验他们的正确性;

1、putSets()——输出初始化后的组的信息

在这里插入图片描述

2、main()

在这里插入图片描述
make clean -> make后检测./csim
-s没有s符号时会出现提示
在这里插入图片描述
在这里插入图片描述
输入正确时显示目前初始化的组的情况,初始化正确;

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值