版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 集成电路数字化工厂架构搭建方案
- 前厅基础与服务管理 3
- 模拟教学:袋鼠式护理操作演练
- 摇臂钻安全操作规程
- 电子商务沙盘运营与管理(AI实践版) 实训工单汇 第1-8章 电子商务沙盘结构与流程认知 -第一轮、第二轮经营实战
- 残疾评定工具与量表介绍
- 公司督办事项办结单
- 2026年员工修车合同(1篇)
- 2026年眼镜店验光服务协议
- 特殊护理的质量控制
- 药品信用档案管理制度
- 2025-2030中医院行业市场深度分析及竞争格局与投资价值研究报告
- 企业管理 华为会议接待全流程手册SOP
- 水利工程监理实施细则范本(2025版水利部)
- 有关PLC的毕业论文
- 员工职位申请表(完整版2026年版)
- 矛盾纠纷排查化解课件
- 企业营销策划(数字教材版)课件 第七章 渠道策划
- 勘察阶段工作进度计划安排及措施
- 安全用电培训医院课件
- (标准)转让合同协议书挖机
评论
0/150
提交评论