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

下载本文档

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

文档简介

1、计算机系统结构课程实验报告实验一:存贮层次模拟器讣算机系统结构课程实验报告20122013 学年第1学期学生姓名:学生班级:2011179学生学号:2011179指导教师: 孙全红教研室:计算机系统结构教研室2012 年 10 月 23 0实验一:存贮层次模拟器一、实验目的与要求使学生清楚认识虚拟存贮层次结构,熟练掌握常用的儿种存储地址映象与变换 方法,以及FIFO、LRU等替换算法的工作全过程。要求用程序实现任意地址流在存储层次上的命中情况,实验结束后提交源程序 和实验说明书。二、实验内容在模拟器上实现在任意地址流下求出在cache 主存一辅存三层存贮层次上的 命中率。三、实验步骤1 (Ca

2、che-主存:映像方式可以选择全相联、直接映象、组相联方式;替换算法 一般使用LRU算法。2(要求Cache大小、主存容量、块大小以及组数等可以输入修改。3(求出命中率;显示替换的全过程;任选一种高级语言来做。4(要有简洁、易于操作的界面。四、程序源代码# include # include # include struct CacheStructint blocknum;int count;void All_LinkLRU(CacheStruct cs,int bottom, int streamf, int k, int result2020)int j二0, m=0, max二0, lo

3、cation=0, hitnum二0;coutendl;/cout主存访问块流 是否替换是否命中Cache 块存放情况,endl;for (int i=0;ik;i+)辻(jbottom) /Cache 块不满m=0;辻(j=0)csj. blocknum=streamLi:csj countO;resultjji=streami;/resultbottom!i=0;/resultbottom+lZ Li=0;不需要/*coutstreamLiZ;coutz/ 块失效tt;cout,z 未命中tt;for (int t=0:tbottom;t+)if(cst blocknum!=-l)cout

4、cst blocknum,;elsecout,z 空”;coutendl :*/j+;/ continue;elsewhile(mj & csmblocknum!=streamLi-)m+;csm count+;辻(m二二j)/已存在的未命中csj blocknum=streami;csj count二0;resultjZi=streami;/resultbottom!ij=0;/ result bottom+1 i=0;不需要 /*coutstreamli,/tt/,;cout块失效COUt,/ 未命中for (int t=0:tbottom;t+)if(cst blocknum!=-l)c

5、outcst blocknum,;elsecout,/ 空”;coutendl ;*/j+;/ continue;else/已存在的命中了hitnum+;csm count二0;m+;resultbottom+1i=0;/*coutstreamiCOUt,Z 无替换ttcout,/ 命中for (int t=0:tbottom;t+)if(cst blocknum!=-l)coutcst blocknum, ; elsecout,/ 空”;coutendl ;*/if (m!=j)while(mj)csm count+;m+;/ continue;else/Cache 块满了ni=O;max二

6、0; location二0;while(mmax)location=m;max=csm_. count;m+;if(m-bottom)/未命中,所有块计数器都已加1,resultbottom._i_二cs-location, blocknum;/* coutstreamZiZcout,z替换块z/cslocation. blocknum,tt,/;COUt,/ 未命中tt;*/csElocation. blocknum=streamli;csElocation. count二0;result location i=streamij;/* for (int t=0:tbottom;t+)if (

7、cst blocknum!=-l)coutcst blocknum,;elsecout,/ 空”;coutendl ;*/else/命中,resultbottom+lZi二0;/*coutstreamLiZCOUt,Z 无替换ttCOUt,Z 命中csm count=0:m+;if(m!=bottom)while(m!=bottom)m+;csm count+;/*for(int t=0;tbottom;t+)if(cst. blocknum!=1) coutcs t. blocknum, elsecout,/空”;coutendl ;*/hitnum+;辻(ikl)for(int r=0:r

8、bottom;r+) resultrJi+1二:resulti; cout,z块地址流”、for(int t=0;tk;t+) coutstreamt; coutendl,/t,/ ;for(t=0;t(bottom+2);t+)coutendl,/t,/ ;for (int s二0;sk;s+)if (tbottom)if (result t s=T)coutz,空t;elsecoutresult telse if(t=bottom)if (result t s !=-l)/块替换coutz,替换块result t st; elseif (result t+lj s !二-1)块命中COUt

9、,Z 无替换t;elsecout,/ 块失效t;elseif (result t s !二-1)/命中cout,/ 命中t;elsecout,z 未命中t;coutendl;coutendl;if (hitnum!=0)cout,/釆用全相联地址映射方式访问Cache的命中率为:,hitnum, / kendl;elsecout,/采用全相联地址映射方式访问Cache的命中率为:0,endl;void Direct_link(CacheStruct cs, int bottom, int stream, int k, int result2020)/ cut主存访问块流 是否替换 是否命中“C

10、ache块存放情况,endl:int location二T, hitnum二0, nFO;for(int i=0;ik;i+)location=streamLi%bottom;辻(cslocation, blocknum!二T)/若产生冲突if (csElocation blocknum二二streamli)/若命中resultbottom+lZi二0;/*coutstreaniitt;cout无替换COUt,Z命中tt;for(int t二0;“bottom;t+)if(cst blocknum!=-l)coutcst blocknum,;elseCOUt,/空”;coutendl ;*/h

11、itnum+;/continue;elseresultbottomij=cslocation blocknum;cout,/替换块,cslocation. blocknumtt;cout,/ 未命中tt;*/csElocation blocknum=streamLi;result location i二streami;/ csElocation count二0;/*for(int t=0;tbottom;t+)if(cst blocknum!=-l)coutcst blocknum,;elsecout,/ 空”;coutendl ;*/else/不产生冲突,仅是页面失效csElocation.

12、 blocknum=stream_i; resultlocationi二streami一; /* coutstreamFiZ,/tt/: cout,z 块失效tt;coutz,未命中tt;for(int t=0;tbottom;t+)if(cst. blocknum!=1)coutcs t. blocknum,elsecout,/ 空”;coutendl ;*/辻(ik-l)for(int r=0:rbottom;r+) resultrji+1二resultri;cout,z块地址流“;for(int t=0;tk;t+) coutstreamt t; coutendl,/t,/ ;for(t

13、=0;t(bottom+2);t+)coutendl,/t,/ ;for (int s二0;sk;s+)if (tbottom)if (result t s=T)coutz,空t;elsecoutresult telse if(t=bottom)if (result t s !二-1)/块替换coutz,替换块result t s; elseif (result t+1 s !=-l)/块命中cout,z 无替换t;elsecout,/ 块失效t;elseif (result t s !=1)/命中cout,/ 命中t;elsecout,z 未命中t;coutendl;coutendl;if

14、(hitnum!=0)cout,/釆用直接地址映射方式访问Cache的命中率为:,hitnum, / kendl;elsecout,/采用直接地址映射方式访问Cache的命中率为:0endl;void Grouplink(CacheStruct cs, int bottom, int streaml, int k, intGblock, int result20_20)/ cout主存访问块流 是否替换 是否命中Cache块存放情况,endl:int Cgroupnum=bottom/Gblock, Mgroupnum=0, location二T;int start=-l, end二T, ma

15、x=0, m=-l, f ind=0, hitnum=0;for(int i=0;ik;i+)Mgr oupnum= streami/Gblock;location=Mgroupnum%Cgroupnum;start=location*Gblock;end=start+Gblock-l;location二T;find=0;m=-l;max=0;/以下实现组内全相联for (int j=start;jmax)max=csjj. count;m=j;if (csj. blocknumstreamLi)break;if (j=end) /命中resultbottom+lZi二0;/*coutstre

16、amicout无替换ttcout,?命中csj. count二0;if(jend)j+;while(j=end)if(csj. blocknum!=1)csj. count+;j+;/* for (int t=0:tbottom;t+)if (cst blocknum!=-l)coutcst blocknum,;elsecout,/ 空”;coutendl ;*/hitnum+;else/未命中if (location!=-l)/Cache 有空余块result location i二streami;/*coutstreamli,tt/,;coutz/ 块失效tt;coutz/ 未命中tt;

17、*/csElocation blocknum=streamri;csElocation count=0;/*for(int t=0;tbottom;t+)if(cst blocknum!=-l)coutcst blocknum,;elsecout,/空”;coutendl ;*/else/替换resultbottomi二csm blocknum;/* coutstreamLil,/tt/,;coutz,替换块,csm. blocknum,tt,/;coutz,未命中tt; */csm blocknum=streamLi;csm count二0;resultm.ri=streami;/* for

18、(int t二0;“bottom;t+)if(cst blocknum!=-l)coutcst blocknum,;elseCOUt,/空”;coutendl :*/辻(ik-l)for(int r=0:rbottom;r+) resultrji+1二resultri;cout,z块地址流“;for(int t=0;tk;t+)coutstreamt t;coutendl,/t,/ ;for(t=0;t(bottom+2);t+)coutendl,/t,/ ;for(int s=0;sk;s+)if(t Mblocknum二0, Cblocknum二0, groupnum二0 ,k=0, ty

19、pe二T, t二T;char ch二y;while (ch= y I ! ch=- Y)system(cls);k二0;type二T;t二T;for(int i二0;i100;i+)csi. blocknum=-l;csi.count二0;cout,/请依次输入主存空间大小(MB), Cache空间大小(KB),分块大小(KB):; cinMvolumnCvolumnBlockvolumn;/*问题改进:1.界面输入输出方式2. 容量之间的关系3.*/while(Mvolumn*1024)%Blockvolumn!=0 Cvolumn%Blockvolumn!=0)cout,z主存空间大小与C

20、ache空间大小应是块大小的整数倍;cout,/请依次输入主存空间大小(MB), Cache空间大小(KB),分块大小(KB): ”; cinMvolumnCvolumnBlockvolumn;Mblocknum二(Mvolumn*1024)/Blockvolumn;Cblocknum=Cvolumn/Blockvolumn;cout请输入CPU访问主存块流:(-1结束输入:r;cint;while(t!=-l)if(t=Mblocknum)/* COUt,Z输入的主存块地址号有误请重新输入:cint;while(t=Mblocknum j |t=T)if (t=l)break;elseCOU

21、t,Z输入的主存块地址号有误请重新输入:cint;if (t!=-l)streamk=t;k+;cint;*/COUt,Z已跳过输入错误的无效的块地址;cint;else streamkj=t;k+;cint;完成result数组的初始化for(i=0;i20;i+)for(int j=0;j20;j+)resultEiZ j二T;cout,z请输入地址映射方式:(1.全相联2.直接映射3.组相联)“;cintype;switch(type)case 1:All_LinkLRU(cs, Cblocknum, stream, k, result);break;case 2:Direct_link(cs, Cblocknum, stream, k, result) :break;case 3:cout,z请输入主存分组数:;cingroupnum;while(N!b 1 ocknum%groupnum!=0Cblocknum%(Mb 1 ocknum/groupnum) !=0)/输入的组数不能被整除coutz/输入主存分组数有误请依据主存与Cache分块数确定合适的分组数了;cingroupnum;Group_link(cs, Cblocknum, stream, k, 1

温馨提示

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

评论

0/150

提交评论