计算机系统结构课程实验报告实验一:存贮层次模拟器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机系统结构课程实验报告实验一:存贮层次模拟器计算机系统结构课程
实验报告
2012—2013 学年
第 1 学期
学生姓名: 学生班级: 2011179 学生学号: 2011179 指导教师: 孙全红教研室: 计算机系统结构教研室
2012年 10月 23日
实验一:存贮层次模拟器
一、实验目的与要求
使学生清楚认识虚拟存贮层次结构,熟练掌握常用的几种存储地址映象与变换方法,以及FIFO、LRU等替换算法的工作全过程。
要求用程序实现任意地址流在存储层次上的命中情况,实验结束后提交源程序和实验说明书。
二、实验内容
在模拟器上实现在任意地址流下求出在cache —主存—辅存三层存贮层次上的命中率。三、实验步骤
1(Cache—主存:映像方式可以选择全相联、直接映象、组相联方式;替换算法一般使用LRU
算法。
2(要求Cache大小、主存容量、块大小以及组数等可以输入修改。
3(求出命中率;显示替换的全过程;任选一种高级语言来做。
4(要有简洁、易于操作的界面。
四、程序源代码
# include
# include
# include
struct CacheStruct
{
int blocknum;
int count;
};
void All_LinkLRU(CacheStruct cs[],int bottom,int stream[],int k,int result[20][20])
{
int j=0,m=0,max=0,location=0,hitnum=0;
cout< //cout<<"主存访问块流"<<" "<<"是否替换"<<" "<<"是否命中"<<" "<<"Cache块存放情况"< for(int i=0;i { if(j { m=0; if(j==0) { cs[j].blocknum=stream[i]; cs[j].count=0; result[j][i]=stream[i]; //result[bottom][i]=0; //result[bottom+1][i]=0;不需要 /*cout< cout<<"块失效\t\t"; cout<<"未命中\t\t"; for(int t=0;t { if(cs[t].blocknum!=-1) cout< else cout<<"空 "; } cout< j++; // continue; } else { while(m cs[m].count++; m++; } if(m==j)//已存在的未命中 { cs[j].blocknum=stream[i]; cs[j].count=0; result[j][i]=stream[i]; //result[bottom][i]=0; // result[bottom+1][i]=0;不需要/*cout< cout<<"未命中\t\t"; for(int t=0;t if(cs[t].blocknum!=-1) cout< cout<<"空 "; } cout< j++; // continue; } else//已存在的命中了 { cs[m].count=0; m++; result[bottom+1][i]=0; /*cout< cout<<"命中\t\t"; for(int t=0;t if(cs[t].blocknum!=-1) cout< cout<<"空 "; } cout< if(m!=j) { while(m { cs[m].count++; m++; } } hitnum++; // continue; } } } else//Cache块满了 { m=0;max=0;location=0; while(m cs[m].count++; if(cs[m].count>max) { location=m; max=cs[m].count; } m++; } if(m==bottom)//未命中,所有块计数器都已加1,{ result[bottom][i]=cs[location].blocknum; /*cout< cout<<"替换块"< cs[location].blocknum=stream[i]; cs[location].count=0;