计算机体系结构试验2

  • 格式:pdf
  • 大小:236.99 KB
  • 文档页数:6

1 计算机系统结构课程计算机系统结构课程

实验报告

2010 2010 ——————2011 2011 2011 学年学年学年

第 2 2 学期学期学期

实验二:存贮层次模拟器

学时:学时:22学时

实验类型:(综合(综合//设计):设计 一、实验目的与要求 使学生清楚认识cache-主存层次结构,熟练掌握常用的几种存储地址映象与变换方法,以及FIFO、LRU等替换算法的工作全过程。等替换算法的工作全过程。 要求用程序实现任意地址流在存储层次上的命中情况,实验结束后提交源程序和实验说明书。书。 二、实验内容 在模拟器上实现在任意地址流下求出在在模拟器上实现在任意地址流下求出在 Cache Cache Cache—主存存贮层次上的命中率。—主存存贮层次上的命中率。—主存存贮层次上的命中率。 三、实验步骤 1.CacheCache—主存:—主存:映像方式可以选择全相联、直接映象、组相联方式;替换算法一般使用LRU算法。算法。 2.要求主存容量、.要求主存容量、CacheCache大小、块大小以及组数等可以输入修改。大小、块大小以及组数等可以输入修改。 3.求出命中率;显示替换的全过程;任选一种高级语言来做。.求出命中率;显示替换的全过程;任选一种高级语言来做。 4.要有简洁、易于操作的界面。.要有简洁、易于操作的界面。 四、代码 #include  #include  typedef struct CMemory4 { 

2 int gm;//组号组号组号 int bm; }; CMemory4 mem4[50]; typedef struct CCach4 { int gc; int bc; int cc; int bs; }; CCach4 cac4[50]; int a2[10][20],b2[10][20]; void inputmem2(int m_num,int group) //输入输入 { int i,t=0,nn=0; for(i=0;i=m_num) { break; } printf("第%d块",i); scanf("%d",&nn); mem4[i].bm=nn; mem4[i].gm=nn%group; i++; } } } void initcac2(int ilen,int group) // { int i=0,j=0; for(i;i

} float steadcac2(int tt,int c_num,int j,float h,int i,int g,int group) { float sc=h; int fi=1,fj;//判断是否装满的标记判断是否装满的标记判断是否装满的标记 for (int jj=0;jj

3 break; } } if(fi==0)// 未装满未装满 { cac4[fj].bc=tt;//装入Cache中 printf("块%d装入%d组%d块号\n",tt,g,cac4[fj].bs); } else //装满装满装满 { int m=0; for(m;m

4 { if(cac4[gt].bc==bm) { sc=sc+1;//命中命中 printf("块%d命中%d组%d块号!\n",bm,gc,cac4[gt].bs); } else { if(j==0) { gt=0; } else { gt++; } sc=steadcac2(bm,c_num,gt,sc,i,gc,group); } sm++; if(gt>=c_num/group) { gt=0; } break; } } } printf("命中率:H=%.2f\n",sc/sm); return 1; } void Flink()// { int m_num,c_num,group; printf("请输入内存大小:"); scanf("%d",&m_num); printf("请输入Cache大小:"); scanf("%d",&c_num); printf("请输入组数:"); scanf("%d",&group); inputmem2(m_num,group); 

5 initcac2(c_num,group); // compare2(m_num,c_num,group); } 结果截图:结果截图:

6 

五、实验总结 通过本次实验,能够清楚地认识虚拟存贮层次结构,掌握了常用的几种存储地址映象与变换方法。能够用程序实现任意地址流在存储层次上的命中情况,正确求得命中率,满足了实验要求,达到了实验目标,实验很成功。达到了实验目标,实验很成功。