计算机系统结构实验报告册_第1页
计算机系统结构实验报告册_第2页
计算机系统结构实验报告册_第3页
计算机系统结构实验报告册_第4页
计算机系统结构实验报告册_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机系统结构实验报告册姓名: 孔艳艳 学号: 专业:计算机科学与技术班级: 指导教师: 孙全红 华北水利水电学院信息工程学院系统结构教研室实验一 存贮层次模拟器学时:4学时【实验目的】1、使学生清楚认识虚拟存贮层次结构,熟练掌握常用的几种存储地址映象与变换方法,以及FIFO、LRU等替换算法的工作全过程。2、要求用程序实现任意地址流在存储层次上的命中情况,实验结束后提交源程序和实验说明书。【实验内容】在模拟器上实现在任意地址流下求出在 Cache主存两层存贮层次上的命中率。【实验步骤】1Cache主存:映像方式要实现全相联、直接映象、组相联方式三种方式,并选择每一种映像方式下输出结果;替换算

2、法一般使用LRU算法。3要求主存容量、Cache大小、页大小、块大小以及组数等可以输入修改。4求出命中率;显示替换的全过程;任选一种高级语言来做。5要设计出简洁、易于操作的界面。【实验仪器设备】 计算机(装有常用编程环境,如C、VC+等)【源程序、实验结果及分析、实验心得及体会】 源程序: # include # include # include struct CacheStruct int blocknum; int count; ; void All_LinkLRU(CacheStruct cs,int bottom,int stream,int k,int result2020) in

3、t j=0,m=0,max=0,location=0,hitnum=0; coutendl; for(int i=0;ik;i+) if(jbottom)/Cache块不满 m=0; if(j=0) csj.blocknum=streami; csj.count=0; resultji=streami; j+; / continue; else while(mj & csm.blocknum!=streami) csm.count+; m+; if(m=j)/已存在的未命中 csj.blocknum=streami; csj.count=0; resultji=streami; j+;/ co

4、ntinue; else/已存在的命中了 csm.count=0; m+; resultbottom+1i=0; if(m!=j) while(mj) csm.count+; m+; hitnum+; / continue; else m=0;max=0;location=0; while(mmax) location=m; max=csm.count; m+; if(m=bottom)/未命中,所有块计数器都已加1, resultbottomi=cslocation.blocknum; cslocation.blocknum=streami; cslocation.count=0; resu

5、ltlocationi=streami; else resultbottom+1i=0; csm.count=0; m+; if(m!=bottom) while(m!=bottom) csm.count+; m+; hitnum+; 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(resu

6、ltts=-1) cout空t; else coutresulttst; else if(t=bottom) if(resultts!=-1)/块替换 cout替换块resulttst; else if(resultt+1s!=-1)/块命中 cout无替换t; else cout块失效t; else if(resultts!=-1)/命中 cout命中t; else cout未命中t; coutendl; coutendl; if(hitnum!=0) cout采用全相联地址映射方式访问Cache的命中率为:hitnum/kendl; else cout采用全相联地址映射方式访问Cache的

7、命中率为:0endl; void Direct_link(CacheStruct cs,int bottom,int stream,int k,int result2020) int location=-1,hitnum=0,m=0; for(int i=0;ik;i+) location=streami%bottom; if(cslocation.blocknum!=-1)/若产生冲突 if(cslocation.blocknum=streami)/若命中 resultbottom+1i=0; hitnum+; /continue; else resultbottomi=cslocation

8、.blocknum; cslocation.blocknum=streami; resultlocationi=streami; else/不产生冲突,仅是页面失效 cslocation.blocknum=streami; resultlocationi=streami; 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+)

9、if(tbottom) if(resultts=-1) cout空t; else coutresulttst; else if(t=bottom) if(resultts!=-1)/块替换 cout替换块resulttst; else if(resultt+1s!=-1)/块命中 cout无替换t; else cout块失效t; else if(resultts!=-1)/命中 cout命中t; else cout未命中t; coutendl; coutendl; if(hitnum!=0) cout采用直接地址映射方式访问Cache的命中率为:hitnum/kendl; else cout采

10、用直接地址映射方式访问Cache的命中率为:0endl; void Group_link(CacheStruct cs,int bottom,int stream,int k,int Gblock,int result2020) / cout主存访问块流 是否替换 是否命中 Cache块存放情况endl; int Cgroupnum=bottom/Gblock,Mgroupnum=0,location=-1; int start=-1,end=-1,max=0,m=-1,find=0,hitnum=0; for(int i=0;ik;i+) Mgroupnum=streami/Cgroupnu

11、m; 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.blocknum=streami) break; if(j=end)/命中 resultbottom+1i=0; csj.count=0; if(jend) j+; while(j=end) if(csj.blocknum!=-1) csj.count+; j

12、+; hitnum+; else/未命中 if(location!=-1)/Cache有空余块 resultlocationi=streami; cslocation.blocknum=streami; cslocation.count=0; else/替换 resultbottomi=csm.blocknum; csm.blocknum=streami; csm.count=0; resultmi=streami; if(ik-1) for(int r=0;rbottom;r+) resultri+1=resultri; cout块地址流 ; for(int t=0;tk;t+) couts

13、treamtt; coutendlt; for(t=0;t(bottom+2);t+) coutendlt; for(int s=0;sk;s+) if(tbottom) if(resultts=-1) cout空t; else coutresulttst; else if(t=bottom) if(resultts!=-1)/块替换 cout替换块resulttst; else if(resultt+1s!=-1)/块命中 cout无替换t; else cout块失效t; else if(resultts!=-1)/命中 cout命中t; else cout未命中t; coutendl; c

14、outendl; if(hitnum!=0) cout采用组相联地址映射方式访问Cache的命中率为:hitnum/kendl; else cout采用组相联地址映射方式访问Cache的命中率为:0endl; void main() CacheStruct cs100; int result2020;int stream100; int Cvolumn=0,Mvolumn=0,Blockvolumn=0,Mblocknum=0,Cblocknum=0,groupnum=0,k=0,type=-1,t=-1; char ch=y; while(ch=y|ch=Y) system(cls); k=

15、0;type=-1;t=-1; for(int i=0;i100;i+) csi.blocknum=-1; csi.count=0; coutMvolumnCvolumnBlockvolumn;while(Mvolumn*1024)%Blockvolumn!=0 | Cvolumn%Blockvolumn!=0) cout主存空间大小与Cache空间大小应是块大小的整数倍!; coutMvolumnCvolumnBlockvolumn; Mblocknum=(Mvolumn*1024)/Blockvolumn; Cblocknum=Cvolumn/Blockvolumn; coutt; whi

16、le(t!=-1) if(t=Mblocknum) coutt; else streamk=t; k+;cint; /完成result数组的初始化 for(i=0;i20;i+) for(int j=0;j20;j+) resultij=-1; couttype; switch(type) case 1:All_LinkLRU(cs,Cblocknum,stream,k,result);break; case 2:Direct_link(cs,Cblocknum,stream,k,result);break; case 3: coutgroupnum; while(Mblocknum%groupnum!=0 | C

温馨提示

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

评论

0/150

提交评论