计算机系统结构课程实验报告实验一:存贮层次模拟器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档