计算机系统结构课程实验报告实验一存贮层次模拟器_第1页
计算机系统结构课程实验报告实验一存贮层次模拟器_第2页
计算机系统结构课程实验报告实验一存贮层次模拟器_第3页
计算机系统结构课程实验报告实验一存贮层次模拟器_第4页
计算机系统结构课程实验报告实验一存贮层次模拟器_第5页
已阅读5页,还剩7页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机系统结构实验报告册实验一:存贮层次模拟器【实验目的】使学生清楚认识虚拟存贮层次结构,熟练掌握常用的几种存储地址映象与变换方法,以及FIFO、 LRU等替换算法的工作全过程。要求用程序实现任意地址流在存储层次上的命中情况,实验结束后提交源程序和实验说明 书。【实验内容】在模拟器上实现在任意地址流下求出在cache 主存一辅存三层存贮层次上的命中率。【实验仪器设备】计算机(装有常用编程环境,如C、VC+等)【实验步骤】Cache一主存:映像方式可以选择全相联、直接映象、组相联方式;替换算法一般使用LRU 算法。要求Cache大小、主存容量、块大小以及组数等可以输入修改。求出命中率;显示替换的

2、全过程;任选一种高级语言来做。要有简洁、易于操作的界面。【实验仪器设备】计算机(装有常用编程环境,如C、VC+等) 【源程序】include include include struct CacheStructint blocknum;int count;void All_LinkLRU(CacheStruct cs,int bottom,int stream,int k,int result2020) int j=0,m=0,max=0,location=0,hitnum=0; coutendl;/coutvv”主存访问块流”是否替换是否命中Cache 块存放情况”vvendl;for(in

3、t i=0;ik;i+) if(jbottom)/Cache 块不满m=0;if(j=0)csj.blocknum=streami;csj.count=0;resultji=streami;/resultbottomi=0;cout块失 效tt;coutvv未命中 tt;for(int t=0;tbottom;t+)if(cst.blocknum!=-1)coutvvcst.blocknumvv;elsecoutvv空;coutvvendl;*/j+;/ continue;elsewhile(mvj & csm.blocknum!=streami)csm.count+;m+;if(m=j)/已

4、存在的未命中csj.blocknum=streami;csj.count=0;resultji=streami;/resultbottomi=0;/ resultbottom+1i=0;不需要/*coutvvstreamivvtt”;coutvv块失 效tt;coutvv未命中 tt;for(int t=0;tvbottom;t+)/resultbottom+1i=0;不需要 /*coutvvstreamivvtt”;if(cst.blocknum!=-1) coutcst.blocknum; elsecout空;coutendl;*/j+;/ continue;else/已存在的命中了csm

5、.count=0;m+;resultbottom+1i=0;/*coutstreamitt”;cout无替换tt;cout命中 tt;for(intt=0;tbottom;t+)if(cst.blocknum!=-1)coutcst.blocknum;elsecout空;coutendl;*/ if(m!=j) while(mj)csm.count+;m+; hitnum+;/ continue;else/Cache 块满了m=0;max=0;location=0;while(mmax)location=m;max=csm.count;m+;if(m=bottom)/未命中,所有块计数器都已加

6、1,resultbottomi=cslocation.blocknum;/*coutstreamitt”;cout 替换块 cslocation.blocknumtt;cout未命中 tt;*/cslocation.blocknum=streami;cslocation.count=0;resultlocationi=streami;/*for(intt=0;tbottom;t+)if(cst.blocknum!=-1)coutcst.blocknum;elsecout空;coutendl;*/else 命中,cout块地址流for(int t=O;tk;t+)if(ik-l)(for(int

7、 r=0;rbottom;r+)result r i+1 =resultr i;else(if(resultts!=-l)/ 中 cout命中 t”;elsecout未命中 t”;result bottom+1 i=0;/*coutstreamitt;cout无替换 cout命中 tt;*/ csm.count=0;m+;if(m!=bottom) while(m !=bottom) (csm.count+; m+;/*for(intt=0;tbottom;t+)if(cs t .blocknum!=-1)coutcst.blocknumelsecout空 coutvvendl;*/ hitn

8、um+;coutstreamt t; coutendlt;for(t=0; t(bottom+2) ;t+)(coutendlt;for(int s=0;svk;s+)(if(tbottom)(if(resultts=-l)coutvv”空t”;elsecoutresult t st;else if(t=bottom)(if(resultt s !=-l)块替换 cout 替换块 resulttst;else(if(resultt+1 s !=-1)/ 块命中cout无替换 t;elsecout块失效elseif(cst.blocknum!=-1)coutendl;if(hitnum!=0)c

9、out 采用全相联地址映射方式访问Cache 的命中率为:hitnum/kendl;elsecout ”采用全相联地址映射方式访 问Cache的命中率为:0endl;void Direct_link(CacheStruct cs,int bottom,int stream,int k,int result2020) / cout 主存访问块流是否替换是否命中Cache 块存放情况”endl;int location=-1,hitnum=0,m=0;for(int i=0;ik;i+)location=streami%bottom;if(cslocation.blocknum!=-1)/ 若产

10、生冲突if(cslocation.blocknum=streami)/若 命中resultbottom+1i=0;/*coutstreamitt”;cout无替换tt; cout命中 tt;for(int t=0;tbottom;t+) if(cst.blocknum!=-1)coutcst.blocknum;cout空; coutendl;*/ hitnum+;/continue; elseresultbottomi=cslocation.blocknum;/* coutstreamitt;cout 替换块 cslocation.blocknumtt;cout未命中 tt;*/cslocat

11、ion.blocknum=streami;resultlocationi=streami;/ cslocation.count=0;/*for(intt=0;tbottom;t+)if(cst.blocknum!=-1)coutcst.blocknum;elsecout空; coutendl;*/else/不产生冲突,仅是页面失效cslocation.blocknum=streami;resultlocationi=streami;/* coutstreamitt; cout块失 效tt;cout未命中 tt;for(int t=0;tbottom;t+) coutcst.blocknum;e

12、lsecout空;coutendl;*/if(ik-1)for(int r=0;rbottom;r+)resultri+1=resultri;cout块地址流”;for(int t=0;tk;t+)coutstreamtt;coutendlt;for(t=0;t(bottom+2);t+)coutendlt;for(int s=0;sk;s+)if(tbottom)if(resultts=-1)cout空t;elsecoutresulttst;else if(t=bottom)if(resultts!=-1)块替换cout 替换块 resulttst;elseif(resultt+1s!=-1

13、)/t;elsecout块失效 t;elseif(resultts!=-1)/命 中cout命中 t;elsecout未命中 t;coutendl;coutendl;if(hitnum!=0)cout 采用直接地址映射方式访问Cache 的命中率为:hitnum/kendl;elsecout ”采用直接地址映射方式访问 Cache的命中率为:0endl;void Group_link(CacheStruct cs,int bottom,int stream,int k,int Gblock,int result2020) / cout主存访问块流”是否替换是否命中Cache 块存放情况”end

14、l;intCgroupnum=bottom/Gblock,Mgroupnum=0,locat ion=-1;intstart=-1,end=-1,max=0,m=-1,find=0,hitnum=0;for(int i=0;ik;i+)块命中Mgroupnum=streami/Gblock;location=Mgroupnum%Cgroupnum;start=location*Gblock;end=start+Gblock-1;location=-1;find=0;m=-1;max=0;以下实现组内全相联for(int j=start;jmax)max=csj.count;m=j;if(csj

15、.blocknum=streami)break;if(j=end)/命 中resultbottom+1i=0;/*coutvvstreamivvtt”;cout无替换tt;coutvv命中 tt;*/csj.count=0;if(jvend)j+;while(jv=end)if(csj.blocknum!=-1)csj.count+;j+;/* for(int t=0;tbottom;t+)if(cst.blocknum!=-1) coutvvcst.blocknumvv;else coutvv空; coutvvendl;*/ hitnum+;else/未 命中if(location!=-1)

16、/Cache 有空 余块 resultlocationi=streami; /*coutvvstreamivvtt”;coutvv块失 效tt;coutvv未命中 tt;*/ cslocation.blocknum=streami; cslocation.count=0;/*for(int t=0;tvbottom;t+)if(cst.blocknum!=-1) coutvvcst.blocknumvv; elsecoutvv空;coutvvendl;*/else/替 换resultbottomi=csm.blocknum;/* coutvvstreamivvtt;coutvv替换块vcsm.

17、blocknumvvtt;coutvv未命中 tt;*/ csm.blocknum=streami; csm.count=0;resultmi=streami;/* for(int t=0;tbottom;t+)if(cst.blocknum!=-1) coutvvcst.blocknumvv; elsecout空coutvvendl;*/if(ik-l)(for(int r=0;rbottom;r+) result ri+l =result r i;else(if(resultt s!=-1 )命中cout命中 t”;elsecout未命中 t”;coutvv”块地址流for(int t=O

18、;tk;t+) coutstreamtt;coutendlt;for(t=0;t(bottom+2);t+)(coutendlt;for(int s=0;svk;s+)(if(tbottom)(if(resultts-1) coutvv空t;elsecoutresulttst;else if(t=bottom)(if(resultts !=-l)块替换 cout替换块resulttst;else(if(resultt+1 s!=-1)/块命中cout无替换 t;elsecout块失效 t;coutendl;coutendl;if(hitnum!=O)(cout采用组相联地址映射方式访问Cach

19、e 的命中率为:vvhitnumvv,/,vvkvvendl;else(cout ”采用组相联地址映射方式访 问Cache的命中率为:0endl;void main()(CacheStruct cs100;int result 20 20;int stream 100;intC volumn=0 ,M volumn=0 ,B lockvolumn=0 ,Mbloc knum=0,Cblocknum=0,groupnum=0,k=0,type=- l,t=-l;char ch=y;while(ch=yllch=Y)(system(cls);k=O;type=-l;t=-l;for(int i=0

20、;i100;i+)(cs i.blocknum=-1;csi.count=0;coutMvolumnCvolumnBlockvolumn;/*问题改进:1.界面输入输出方式容量之间的关系3.*/while(Mvolumn*1024)%Blockvolumn!=0| Cvolumn%Blockvolumn!=0)cout”主存空间大小与Cache空间大小应是块大小的整数倍!”;coutMvolumnCvolumnBlockvolumn;Mblocknum=(Mvolumn*1024)/Blockvolumn;Cblocknum=Cvolumn/Blockvolumn;coutt;while(t!

21、=-1)if(t=Mblocknum)/* coutt;while(t=Mblocknum|t=-1)if(t=-1)break;else新输入:”;cint;if(t!=-1)streamk=t;k+;cint;*/coutt;elsestreamk=t;k+;cint;/完成result数组的初始化for(i=0;i20;i+)for(int j=0;jtype;switch(type)case1:All_LinkLRU(cs,Cblocknum,stream,k,result);b reak;case2:Direct_link(cs,Cblocknum,stream,k,result);brea k;coutgroupnum;while(Mblocknum%groupnum!=0 IICblocknum%(Mblocknum/groupnum)!=0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论