计算机系统结构课程实验报告实验一:存贮层次模拟器
计算机体系结构实验报告
计算机体系结构实验报告实验目的:1.掌握计算机体系结构的基本概念和组成部分2.学会使用模拟器对计算机性能进行测试和优化3.理解计算机指令的执行过程和流水线工作原理4.掌握计算机性能指标的测量方法和分析技巧实验材料和工具:1.一台个人电脑2.计算机体系结构模拟器3.实验指导书和实验报告模板实验步骤:1.搭建计算机系统:根据实验指导书提供的指导,我们搭建了一个简单的计算机系统,包括中央处理器(CPU)、内存和输入输出设备。
2.编写测试程序:我们编写了一段简单的测试程序,用于测试计算机系统的性能。
3.运行测试程序:我们使用模拟器运行测试程序,并记录测试结果。
模拟器可以模拟计算机的执行过程,并提供各种性能指标的测量功能。
4.分析和优化:根据测试结果,我们对计算机系统的性能进行分析,并尝试优化系统设计和测试程序,以提高性能。
实验结果:通过测试程序的运行和性能指标的测量,我们得到了如下结果:1.计算机的时钟频率:根据模拟器显示的结果,我们得知计算机的时钟频率为1000MHz。
2. 指令执行时间:我们计算了测试程序的平均执行时间,得到了结果为5ms。
4.流水线效率:我们通过模拟器提供的流水线分析功能,得到了计算机流水线的平均效率为80%。
实验分析:根据测试结果1.提高时钟频率:通过增加时钟频率可以加快计算机的运行速度。
我们可以尝试调整计算机硬件的设计和制造工艺,提高时钟频率。
2.优化指令执行过程:我们可以通过优化指令的执行过程,减少执行时间。
例如,并行执行多个指令、增加指令缓存等。
3.提高流水线效率:流水线是提高计算机性能的关键技术,我们可以通过增加流水线级数和优化流水线结构,提高流水线效率。
4.增加并行计算能力:并行计算是提高计算机性能的重要途径,我们可以尝试增加计算机的并行计算能力,例如增加处理器核心的数量。
实验总结:通过本次实验,我们深入了解了计算机体系结构的工作原理和性能指标。
通过模拟器的使用,我们学会了对计算机性能进行测试和进行性能优化的方法。
北邮计算机系统结构实验报告-实验一到五-WINDLX模拟器
北京邮电大学实验报告课程名称计算机系统结构计算机学院03班王陈(11)目录实验一WINDLX模拟器安装及使用......................................... 错误!未定义书签。
·实验准备................................................................................ 错误!未定义书签。
·实验环境................................................................................ 错误!未定义书签。
·实验步骤................................................................................ 错误!未定义书签。
·实验内容及要求.................................................................... 错误!未定义书签。
·实验过程............................................................................. 错误!未定义书签。
·实验总结............................................................................. 错误!未定义书签。
实验二指令流水线相关性分析 ............................................... 错误!未定义书签。
·实验目的............................................................................. 错误!未定义书签。
计算机组成原理实验报告_存储系统设计实验
实验四存储系统设计实验一、实验目的本实训项目帮助大家理解计算机中重要部件—存储器,要求同学们掌握存储扩展的基本方法,能设计MIPS 寄存器堆、MIPS RAM 存储器。
能够利用所学习的cache 的基本原理设计直接相联、全相联,组相联映射的硬件cache。
二、实验原理、内容与步骤实验原理、实验内容参考:1、汉字字库存储芯片扩展设计实验1)设计原理该实验本质上是8个16K×32b 的ROM 存储系统。
现在需要把其中一个(1 号)16K×32b 的ROM 芯片用4个4K×32b 的芯片来替代,实际上就是存储器的字扩展问题。
a) 需要4 片4个4K×32b 芯片才可以扩展成16K×32b 的芯片。
b) 目标芯片16K个地址,地址线共14 条,备用芯片12 条地址线,高两位(分线器分开)用作片选,可以接到2-4 译码器的输入端。
c) 低12 位地址直接连4K×32b 的ROM 芯片的地址线。
4个芯片的32 位输出直接连到D1,因为同时只有一个芯片工作,因此不会冲突。
芯片内数据如何分配:a) 16K×32b 的ROM 的内部各自存储16K个地址,每个地址里存放4个字节数据。
地址范围都一样:0x0000~0x3FFF。
b) 4个4K×32b 的ROM,地址范围分别是也都一样:0x000~0xFFF,每个共有4K个地址,现在需要把16K×32b 的ROM 中的数据按照顺序每4个为一组分为三组,分别放到4个4K×32b 的ROM 中去。
HZK16_1 .txt 中的1~4096个数据放到0 号4K 的ROM 中,4097~8192 个数据放到 1 号4K 的ROM 中,8193~12288 个数据放到2 号4K 的ROM 中,12289~16384个数据放到3 号4K 的ROM 中。
c) 注意实际给的16K 数据,倒数第二个4K(8193~12288 个数据)中部分是0,最后4K(12289~16384 数据)全都是0。
系统结构 第一、二次试验报告
实验一熟悉模拟器WinDLX的使用一、实验目的1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点。
2. 加深对计算机流水线基本概念的理解。
3.了解DLX基本流水线各段的功能以及基本操作。
二、实验平台WinDLX模拟器三、实验任务用WinDLX模拟器执行下列两个程序:求阶乘程序求最大公倍数程序分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。
熟练掌握WinDLX的操作和使用。
1.用WinDLX模拟器执行求阶乘程序(1)用WinDLX模拟器执行求阶乘程序。
这个程序说明浮点指令的使用。
该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。
该程序中调用了中的输入子程序,这个子程序用于读入正整数。
(2)输入数据“3”,采用单步执行方法,完成程序并通过使用WinDLX,总结WinDLX的特点。
(3)注意观察变量说明语句所建立的数据区,理解WinDLX指令系统。
(4)分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。
熟练掌握WinDLX的操作和使用。
2.用WinDLX模拟器求最大公约数程序(1)用WinDLX模拟器执行程序。
该程序从标准输入读入两个整数,求他们的greatest common measure,然后将结果写到标准输出。
该程序中调用了中的输入子程序。
(2)给出两组数6、3和6、1,采用单步和连续混合执行的方法完成程序,注意中间过程和寄存器的变化情况,观察流水线工作情况。
然后单击主菜单上的execute/display dlx-i/o,观察结果。
(3 ) 分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。
实验结果:1、(1)导入和代码(2)单步执行流水线:寄存器的值:由图可知:PC寄存器中存放下一条要执行的语句的地址,IMAR中存放当前执行的语句的地址。
模拟储存技术实验报告
一、实验目的1. 了解模拟存储技术的概念和原理;2. 掌握模拟存储器的基本结构和功能;3. 通过实验验证模拟存储技术的性能特点;4. 分析模拟存储技术在现代计算机系统中的应用。
二、实验环境1. 实验平台:PC机2. 实验软件:C++ Builder3. 实验工具:Visual Studio三、实验原理模拟存储技术是一种在计算机系统中实现存储器虚拟化的技术。
通过模拟存储器,计算机可以实现对物理存储器的高效管理和利用。
模拟存储技术主要包括以下几种:1. 虚拟存储器:通过将物理内存和硬盘存储空间结合起来,实现大容量内存的模拟;2. 页面置换算法:根据页面访问的频率和顺序,选择合适的页面进行置换,以提高内存利用率;3. 快速缓存:通过将频繁访问的数据存储在快速缓存中,减少对物理内存的访问次数。
四、实验内容1. 模拟存储器的基本结构设计(1)设计模拟存储器的基本结构,包括物理内存、硬盘存储空间、虚拟内存和页面置换算法等模块;(2)实现模拟存储器的初始化、数据读写、页面置换等功能。
2. 页面置换算法的实现(1)实现三种页面置换算法:FIFO、LRU和OPT;(2)对每种算法进行性能分析,包括缺页率和页面命中率等指标。
3. 快速缓存的设计与实现(1)设计快速缓存的结构,包括缓存大小、替换策略等;(2)实现快速缓存的数据读写、替换等功能。
4. 模拟存储技术的应用实例(1)模拟一个简单的计算机系统,包括CPU、内存、硬盘等模块;(2)在计算机系统中应用模拟存储技术,实现虚拟内存和快速缓存等功能;(3)通过实验验证模拟存储技术在计算机系统中的应用效果。
五、实验步骤1. 设计模拟存储器的基本结构,实现初始化、数据读写、页面置换等功能;2. 实现三种页面置换算法:FIFO、LRU和OPT,并分析其性能;3. 设计快速缓存的结构,实现数据读写、替换等功能;4. 模拟一个简单的计算机系统,应用模拟存储技术,实现虚拟内存和快速缓存等功能;5. 对实验结果进行分析,总结模拟存储技术的性能特点和应用效果。
存贮模型的实验报告
一、实验目的1. 了解存贮模型的基本原理和类型;2. 掌握不同存贮模型的计算方法和应用;3. 分析存贮模型在实际问题中的应用效果。
二、实验内容1. 基础存贮模型2. 概率约束存贮模型3. 现金管理存贮模型4. 多重存贮模型三、实验方法1. 阅读相关理论书籍和文献,了解存贮模型的基本概念和原理;2. 利用计算机软件进行模型的构建和求解;3. 分析实验结果,验证模型的有效性。
四、实验步骤1. 基础存贮模型(1)根据实验需求,确定需求量、生产准备费、贮存费等参数;(2)利用软件构建基础存贮模型;(3)进行模型求解,计算总费用和每日平均费用;(4)分析结果,验证模型的有效性。
2. 概率约束存贮模型(1)根据实验需求,确定需求量、交货次数、交货时间等参数;(2)利用软件构建概率约束存贮模型;(3)进行模型求解,计算最优储备量;(4)分析结果,验证模型的有效性。
3. 现金管理存贮模型(1)根据实验需求,确定日净现金流、平均期限、现金兑换费用等参数;(2)利用软件构建现金管理存贮模型;(3)进行模型求解,确定最优现金储备策略;(4)分析结果,验证模型的有效性。
4. 多重存贮模型(1)根据实验需求,确定感觉记忆、短时记忆和长时记忆的参数;(2)利用软件构建多重存贮模型;(3)进行模型求解,分析信息在各个阶段的加工过程;(4)分析结果,验证模型的有效性。
五、实验结果与分析1. 基础存贮模型实验结果显示,在给定的参数条件下,模型计算出的总费用和每日平均费用与实际情况相符,验证了基础存贮模型的有效性。
2. 概率约束存贮模型实验结果显示,在给定的参数条件下,模型计算出的最优储备量与实际情况相符,验证了概率约束存贮模型的有效性。
3. 现金管理存贮模型实验结果显示,在给定的参数条件下,模型计算出的最优现金储备策略与实际情况相符,验证了现金管理存贮模型的有效性。
4. 多重存贮模型实验结果显示,模型能够较好地描述信息在感觉记忆、短时记忆和长时记忆三个阶段的加工过程,验证了多重存贮模型的有效性。
计算机网络体系结构实验报告-存储器实验
存储器实验报告一、实验箱实验部分1.实验目的:(1)理解随机静态存储的原理(2)熟悉实验箱的静态存储操作以及电路的搭建方式2.实验设备:TD-CMA实验箱3.实验过程(1)按照电路图连接好电路(2)进行实验操作:预备操作①时序与操作台单元的KK1、KK3置“运行”档,KK2置为“单步”档;②将CON单元的IOR开关置1(IN单元无输出,避免总线竞争),然后再打开电源开关,如果听到有长鸣的“嘀”声,说明总线竞争,需要立即关闭电源,检查连线;③按动CON单元CLR按钮,将运算器当前数据(例如:寄存器A、B及FC、FZ)清零;设置存储地址①关闭存储器读写数据信号:WR、RD;②设置数据送到存储器地址线:IOR置0;③IN单元D7…D0形成一个8位二进制数地址,设置地址输入控制信号LDAR,将选取一个指定的地址单元,按动ST产生T3脉冲,指定地址被放入地址寄存器(AR)中;向(从)指定的地址单元存(取)数据①存即写数据:IN单元D7…D0形成一个数据,设置数据写入控制信号IOR=1、WR=1、RD=0,按动ST产生T3脉冲,数据存入指定的存储单元中;②取即读数据:设置数据写入控制信号IOR=1、WR=0、RD=1,数据总线上的数据即为从指定的存储单元中取出的数据。
4.结果描述:(1)将8位数据存入指定的地址后,将WR置零,RD置1,可以看到数据显示。
(2)地址和数据的区别:地址和数据都为二进制数据,地址是了数据放置的位置,根据选择不同的地址可以看到存储在不同地址的不同数据。
(3)读写逻辑的转换过程:先选取地址,设定数据存入该地址,再选取地址读取数据、(4)位扩展和字扩展原理图如下:二、存储器仿真实验部分1.实验目的:(1) 理解存储器的功能。
(2) 掌握运用Proteus 软件设计ROM 和RAM 的方法。
(3) 基于Proteus 仿真工具掌握存储器与总线的连接及存储器地址空间映射的原理。
(4) 通过8 位字长的存储器电路,实现对ROM 和RAM 存储器的数据读写操作。
北邮计算机系统结构实验报告实验一到五WINDLX模拟器
北京邮电大学实验报告课程名称计算机系统结构计算机学院 201班王陈(2016110711)目录实验一 WINDLX模拟器安装及使用 (2)·实验准备............................................................................. 错误!未定义书签。
·实验环境............................................................................. 错误!未定义书签。
·实验步骤............................................................................. 错误!未定义书签。
·实验内容及要求................................................................. 错误!未定义书签。
·实验过程............................................................................. 错误!未定义书签。
.实验总结 (6)实验二指令流水线相关性分析 (6).实验目的 (7).实验环境 (7).实验步骤 (7)·实验过程............................................................................. 错误!未定义书签。
.实验总结 (12)实验三DLX处理器程序设计 (13).实验目的 (13)·实验环境............................................................................. 错误!未定义书签。
计算机系统结构实验报告
计算机系统结构实验报告计算机系统结构实验报告引言:计算机系统结构是计算机科学领域中的重要课题,它研究计算机硬件和软件之间的关系,以及如何优化计算机系统的性能和效率。
本实验报告旨在介绍我们小组在计算机系统结构实验中的设计和实现过程,以及所获得的实验结果和经验。
一、实验目的计算机系统结构实验的目的是通过设计和实现一个简单的计算机系统,加深对计算机硬件和软件之间关系的理解,以及掌握计算机系统的组成和工作原理。
具体目标包括:1. 理解计算机系统的层次结构和组成部分。
2. 理解指令集架构和微指令集架构的区别。
3. 设计和实现一个简单的计算机系统,包括处理器、存储器和输入输出设备。
4. 测试和验证计算机系统的功能和性能。
二、实验设计与实现1. 计算机系统结构设计我们设计了一个基于冯·诺依曼体系结构的计算机系统,包括中央处理器(CPU)、存储器和输入输出设备。
CPU由控制单元和算术逻辑单元组成,控制单元负责指令的解码和执行,算术逻辑单元负责数据的运算和逻辑操作。
存储器用于存储指令和数据,我们选择了静态随机存储器(SRAM)作为主存储器。
输入输出设备包括键盘、显示器和磁盘。
2. 指令集架构设计我们选择了经典的冯·诺依曼指令集架构作为基础,定义了一套简单的指令集,包括算术运算、逻辑运算和数据传输等指令。
我们还设计了一套微指令集架构,用于实现指令的执行过程。
微指令集中包含了各种控制信号和操作码,用于控制CPU的工作。
3. 硬件设计与实现我们使用硬件描述语言(HDL)进行硬件设计和实现。
通过使用HDL,我们可以描述和模拟计算机系统的各个组成部分,并进行功能验证和性能分析。
我们使用Verilog HDL进行设计和实现,借助Verilog仿真器进行功能验证。
4. 软件设计与实现除了硬件设计和实现,我们还编写了一些软件程序,用于测试和验证计算机系统的功能和性能。
我们编写了一些简单的程序,包括算术运算、逻辑运算和数据传输等,用于测试CPU的指令执行和数据处理能力。
计算机系统结构实验报告1
计算机系统结构实验报告册姓名:***学号:*********专业:计算机科学与技术班级:17602指导教师:***华北水利水电学院信息系系统结构教研室实验一存贮层次模拟器完成日期:学时:4学时【实验目的】1、使学生清楚认识虚拟存贮层次结构,熟练掌握常用的几种存储地址映象与变换方法,以及FIFO、LRU等替换算法的工作全过程。
2、要求用程序实现任意地址流在存储层次上的命中情况,实验结束后提交源程序和实验说明书。
【实验内容】在模拟器上实现在任意地址流下求出在 Cache—主存两层存贮层次上的命中率。
【实验步骤】1.Cache—主存:映像方式要实现全相联、直接映象、组相联方式三种方式,并选择每一种映像方式下输出结果;替换算法一般使用LRU算法。
3.要求主存容量、Cache大小、页大小、块大小以及组数等可以输入修改。
4.求出命中率;显示替换的全过程;任选一种高级语言来做。
5.要有简洁、易于操作的界面。
【实验仪器设备】计算机(装有常用编程环境,如C、VC++等)【源程序、实验结果及分析、实验心得及体会】1源程序:#include <iostream>#include <vector>#include <string>#include <fstream>using namespace std;int GroupFind(vector<pair<int,int> > vecStream,int nMainStore,int GroupLength){int i=0,j=0;int t=0;int n=nMainStore%vecStream.size();if(n==0)n+=vecStream.size();j=(n-1)/GroupLength;t=j*GroupLength;int k=vecStream[j*GroupLength].second;for(i=j*GroupLength;i<GroupLength*(j+1);i++){if(k<vecStream[i].second||vecStream[i].first==0)1{k=vecStream[i].second;t=i;}}return t;}int Connect(vector<int> nvec,int nLeafLength,int nCacheLength,int GroupLength,int nelect) {int i=0,j=0;;int nHitTarget=0;vector<vector<pair<int,int> > > leaf;vector<pair<int,int> > vecStream;pair<int,int> pNpiece;vector<string> vecstr;for(j=0;j<nCacheLength;j++){pNpiece.first=-1;pNpiece.second=0;vecStream.push_back(pNpiece);}for(i=0;i<nvec.size();i++){bool bflag=false;for(j=0;j<nCacheLength;j++){if(nvec[i]==vecStream[j].first){bflag=true;break;}}if(bflag==true){nHitTarget++;for(int t=0;t<nCacheLength;t++){vecStream[t].second++; }if (nelect==1){vecStream[j].second=1;}vecstr.push_back("命中");}else{int t;t=GroupFind(vecStream,nvec[i],GroupLength);for( int t1=0;t1<nCacheLength;t1++){vecStream[t1].second++; }if (vecStream[t].first==0){vecstr.push_back("调进");}else{vecstr.push_back("替换");}vecStream[t].second=1;vecStream[t].first=nvec[i]; }leaf.push_back(vecStream); }for (j=0;j<vecStream.size();j++)2{cout<<" ";for ( i=0;i<leaf.size();i++){cout.width(3);cout<<(leaf[i])[j].first-1<<" ";}cout<<endl;}for ( i=0;i<leaf.size();i++){cout.width(4);cout<<vecstr[i]<<" ";}cout<<endl;return nHitTarget;}int main(int argc, char* argv[]){int nHitTarget=0;int GroupLength=0;int nLeafLength,nCacheLength;vector<int> nvec;int ninput;int nelect;while (true){cout<<"请选择映射方式:LFU(1);FIFO(2)"<<endl;cin>>nelect;cout<<"请输入页的个数,cache大小,请输入组的大小:"<<endl;cin>>nLeafLength>>nCacheLength>>GroupLength;cout<<"请输入地址流以空格隔开,以-1未结束位:"<<endl;while(true){cin>>ninput;if(ninput==-1)break;else if(ninput<=nLeafLength){nvec.push_back(ninput+1);}elsecout<<"输入错误!"<<endl;}switch(nelect){case 1:case 2:nHitTarget= Connect(nvec,nLeafLength,nCacheLength,GroupLength,nelect);break;default:break;}cout<<endl;3cout<<"命中率为:"<<(float)nHitTarget/nvec.size()<<endl;system("pause");system("cls");nvec.clear();}return 0;}2实验结果及分析:3心得体会:通过这次实验清楚认识虚拟存贮层次结构,熟练掌握常用的几种存储地址映象与变换方法,以及FIFO、LRU等替换算法的工作全过程。
存储器实验报告总结
存储器实验报告总结存储器实验报告一、实验设计方案实验框图文字说明实验原理:实验原理框图如图实验原理图所示,原理框图中的地址计数器PC可以接收数据开关产生数据,该数据作为地址信息发送到总线;也可以自动加1计数(用于连续读/写操作)产生地址信息。
地址寄存器AR,存放即将访问的存储单元的地址。
两组发光二极管显示灯中一组显示存储单元地址;另一组显示写入存储单元的数据或从存储单元读出的数据。
写入存储器的数据是由二进制开关设置并发送到总线上的。
存储器芯片中有片选信号menmenab,其值为1时则RAM被选中,可以对其进行读/写操作,反之则RAM未被选中,不能对其进行读写操作。
存储器芯片还有两个读/写控制端(RD、WE);片选信号有效(menmenab=1)以及时钟信号到达的情况下,WE=1,RD=0,则存储器进行写操作;反之,WE=0,RD=1,则存储器进行读操作。
一、功能验证1:a)实验仿真波形图:b)参数设置End Time: 2usGrid Time: 40nsc)初始数值设置sw_bus:1Pc_bus:1menmenab:1we: 0rd:0Ldar:0Pcclr:1Pcld|pcen:00input[7..0]:00Arout[7..0]:00d)信号功能描述及属性sw_bus:作为使能端控制数据的输入。
Pc_bus:控制地址数据输出到总线和地址寄存器。
menmenab:存储芯片的片选信号。
we: 写操作控制信号。
rd:读操作控制信号。
Ldar:控制地址寄存器中的数据传入RAM的控制信号。
Pcclr:地址数据的清零信号,当其值为0时地址清零。
Pcld|pcen:01时,将总线上的数据传入PC,11时,pc=pc+1;地址计数自动加1。
input[7..0]:地址数据输入端。
Arout[7..0]:寄存器输入RAM的地址数据。
e)波形说明和操作步骤1)0-80ns:进行初始化Sw|pc_bus:11:数据输入到总线的开关关闭,进入地址寄存器的控制开关关闭。
北邮计算机系统结构实验报告实验一到五WINDLX模拟器
北京邮电大学实验报告课程名称计算机系统结构计算机学院 201班王陈(2016110711)目录实验一 WINDLX模拟器安装及使用 (2)·实验准备............................................................................. 错误!未定义书签。
·实验环境............................................................................. 错误!未定义书签。
·实验步骤............................................................................. 错误!未定义书签。
·实验内容及要求................................................................. 错误!未定义书签。
·实验过程............................................................................. 错误!未定义书签。
.实验总结 (6)实验二指令流水线相关性分析 (6).实验目的 (7).实验环境 (7).实验步骤 (7)·实验过程............................................................................. 错误!未定义书签。
.实验总结 (12)实验三DLX处理器程序设计 (13).实验目的 (13)·实验环境............................................................................. 错误!未定义书签。
计算机系统结构课程实验报告实验二:存贮层次模拟器
计算机系统结构课程实验报告2012—2013 学年第 1 学期学生姓名:学生班级:2011179学生学号:**********师:***教研室:计算机系统结构教研室2012年10月23日实验二:存贮层次模拟器一、实验目的与要求使学生清楚认识虚拟存贮层次结构,熟练掌握常用的几种存储地址映象与变换方法,以及FIFO、LRU等替换算法的工作全过程。
要求用程序实现任意地址流在存储层次上的命中情况,实验结束后提交源程序和实验说明书。
二、实验内容在模拟器上实现在任意地址流下求出在cache-主存—辅存三层存贮层次上的命中率。
三、实验步骤1.主存-辅存:映像方式可以选择组相联方式;替换算法可以使用LRU算法和FIFO算法。
2.要求主存容量、页大小以及组数等可以输入修改。
3.求出命中率;显示替换的全过程;任选一种高级语言来做。
4.要有简洁、易于操作的界面。
四、程序源代码#include<stdio.h>#include<string.h>#include <iostream.h>struct Fu{int gh;//组号int gnh;//组内块号int kd;//块内地址};Fu c[50];int count[50];//计数器int d[50];//地址流int Groupfind(int mainAddr,int FuSize,int bsINg){return mainAddr%FuSize/bsINg;}void InitFu(int bsINg,int FuSize){for(int i=0;i<FuSize;i++){c[i].kd=-1;//块内地址初始化为-1c[i].gnh=i%bsINg;//组内块号初始化为c[i].gh=i/bsINg;//组号count[i]=0;}int Find(int gh,int bsINg){int index=0+gh*bsINg;int max=count[index];for(int i=0+gh*bsINg;i<0+gh*bsINg+bsINg;i++){if(count[i]>max){max=count[i];index=i;}}return index;}int IsFull(int gh,int bsINg){for(int i=0+gh*bsINg;i<0+gh*bsINg+bsINg;i++){if(c[i].kd==-1)return i;}return -1;}void AddCount(int gh,int bsINg){for(int i=0+gh*bsINg;i<0+gh*bsINg+bsINg;i++)if (c[i].kd!=-1){count[i]++;}}int IsShoot(int mainAddr,int gh,int bsINg){for(int i=0+gh*bsINg;i<0+gh*bsINg+bsINg;i++)if (c[i].kd==mainAddr){return i;}return -1;}void LRU1(int mainAddr,int groups,int FuSize,char* src,int type,int bsINg,double &shoot)//kd地址流中的一个,int gh=Groupfind(mainAddr,FuSize,bsINg);//找到组号int i=-1;int j=-1;i=IsShoot(mainAddr,gh,bsINg);j=IsFull(gh,bsINg);if (i!=-1)//命中{//命中if(type==0){AddCount(gh,bsINg);count[i]=0;}c[i].kd=mainAddr;strcpy(src,"命中");shoot++;return;}if (j!=-1)//调进{AddCount(gh,bsINg);count[j]=0;c[j].kd=mainAddr;strcpy(src,"调进");return;}int k;k=Find(gh,bsINg);AddCount(gh,bsINg);count[k]=0;c[k].kd=mainAddr;strcpy(src,"替换");}void DisplayTitle(){cout<<"辅存-主存映像关系组相联方式"<<endl;}void Display(char* src,int cl){for (int i=0;i<cl;i++){cout<<c[i].kd<<"\t";cout<<src<<endl;}void DisplayHead(int cl){for (int i=0;i<cl;i++){cout<<i<<"\t";}cout<<endl;}void main(){char src[5];int type;int g,cl;int bsINg;int MainSize;int addr;int i=0;double shoot=0;DisplayTitle();cout<<"选择LRU(0)or FIFO(1):";cin>>type;cout<<"输入辅存大小:";cin>>MainSize;cout<<"输入主存大小:";cin>>cl;cout<<"输入组数:";cin>>g;bsINg=cl/g;cout<<"输入地址流(以-1结束):";cin>>addr;while(addr!=-1){d[i++]=addr;cin>>addr;}InitFu(g,cl);DisplayHead(cl);for (int j=0;j<i;j++){LRU1(d[j],g,cl,src,type,bsINg,shoot);Display(src,cl);cout<<"命中率:"<<shoot/i<<endl;}四、实验截图1、当替换算法采用FIFO,主存的组数为1,则结果如下图所示:2、当替换算法采用LRU,主存的组数为1,则结果如下图所示:3、当替换算法采用FIFO,主存的组数为2,则结果如下图所示:4、当替换算法采用FIFO,主存的组数为2,则结果如下图所示:五、实验总结通过本次实验我搞清楚了虚拟存贮层次结构,掌握了常用的几种存储地址映象与变换方法,以及FIFO、LRU等替换算法的工作全过程。
计算机组成原理存储器实验报告
计算机组成原理存储器实验报告
实验名称:计算机组成原理存储器实验
实验目的:通过实验验证存储器的基本原理,掌握存储器的基本操作方法。
实验原理:
计算机系统中的存储器是计算机系统中最基本的组成部分之一,也是最重要的组成部分之一。
存储器主要是用来储存计算机程序和数据的,计算机在执行程序时需要从存储器中读取指令和数据,将结果写回存储器中。
根据存储器的类型,存储器可以分为RAM和ROM两种类型。
RAM(Random Access Memory)是一种随机读写存储器,它能够随机存取任意地址的数据。
RAM又分为静态RAM(SRAM)和动态RAM (DRAM)两种类型。
其中,静态RAM(SRAM)是使用闪存电路实现的,其速度快、性能优异,但成本相对较高;而动态RAM(DRAM)是使用电容储存信息的,价格相对较低,但性能相对较差。
ROM(Read Only Memory)是只读存储器,它不能被随意修改,只能被读取。
ROM主要用来存储程序中需要固化的数据和指令,如BIOS和系统引导程序等。
实验步骤:
1. 打开计算机,将存储器连接到计算机主板上的插槽上。
2. 打开计算机并进入BIOS设置。
3. 在BIOS设置中进行存储器检测。
4. 在操作系统中查看存储器容量。
实验结果:
本次实验中,存储器检测结果显示正常,存储器容量为8GB,符合预期。
实验总结:
本次实验通过了解存储器的基本原理和操作方法,掌握了存储器
的检测和使用方法。
同时也深入了解了计算机系统中存储器的重要性和种类。
对于今后的计算机学习和使用将具有重要的帮助作用。
计算机系统结构第一,二次实验报告范文
班别:学号:姓名:袁凯琦1.实验一WINDLX模拟器安装及使用1.1实验类别:综合实验1.2实验目的:建立实验环境,了解WINDLX模拟器的结构及使用1.3实验设备环境:WinDLX要求的硬件平台是IBM PC兼容机,WinDLX是一个Windows应用程序,运行于Windows 3.0以上的操作系统。
1.4实验原理:WinDLX软件包中带有说明文件,供安装程序时候使用。
1.5要点与难点:软件包中还有WinDLX教程和联机帮助,可以通过它们进一步了解模拟器的使用方法和DLX处理器的原理。
大家在进行模拟实验以前应该仔细阅读这些文档。
1.6实验内容和要求:阅读模拟器Help文档和相关资料,利用Fact.s及Input.s代码熟悉模拟器的配置、各项工具使用、寄存器设置及指令系统。
1.7实验步骤:(1)WINDLX模拟器安装WinDLX是一个基于Windows的模拟器, 能够演示DLX流水线是如何工作的。
WinDLX 包含windlx.exe和windlx.hlp文件。
同时,还需要一些扩展名为.s的汇编代码文件。
按以下步骤在Windows下安装WinDLX: WinDLX创建目录,例如E:\WINDLX解压WinDLX软件包或拷贝所有的WinDLX文件(至少包含 windlx.exe, windlx.hlp)到这个WinDLX 目录。
(2)熟悉模拟器的配置启动和配置WinDLX: 双击WinDLX图标,将出现一个带有六个图标的主窗口,双击这些图标会弹出子窗口.(3)利用Fact.s及Input.s代码熟悉各工具的使用1)导入求阶乘程序fact.sFile--> Load code or Data,然后出现以下界面,双击fact.s,input.s(由于fact.s调用了input.s),点击Load键即可导入按F7,单步运行程序,通过观察各个窗口的信息,理解fact.s的运行情况显示的是各个寄存器的名称及内容PC:程序计数器;IMAR:指令内存地址寄存器;IR:指令寄存器;A,B:ALU操作数寄存器;BTA:分支地址寄存器;ALU:ALU输出寄存器,ALUI(伪)寄存器;FPSR:用来保存有关浮点数操作结果的信息;DMAR:数据内存地址寄存器;SDR:存数据寄存器,SDRI (伪)寄存器;LDR:去素聚寄存器,LDRI(伪)寄存器;R0~R31:32位通用寄存器,R0永远为0;F0~F31:浮点寄存器。
模拟攒机实验报告
模拟攒机实验报告篇一:模拟装机实验实验报告册课程名称:电脑组装与维护姓名:汤成林班级:112040801 学号:11204080120 日期:2013-10-13重庆理工大学计算机教学实验中心实验一模拟攒机篇二:攒机实验报告计算机系统装配与集成实习报告院系:信息工程学院班级:10级计算机科学与技术一班学号:2010551010 姓名:何树芬指导教师:王毅实习名称:计算机系统的装配与集成实习时间:2012年3月6日一.实习目的使学生更加了解计算机的基本结构及组成原理,掌握计算机系统的装配及调试方法,学会在dos下取消分区并重建分区,增强学生的动手实践能力,分析问题及解决问题的能力,养成良好的做事习惯。
二.实习要求及注意事项1.2. 3. 4. 5. 6. 7.实习之前弄清课程设计的基本原理和要求。
实习过程中,避免拿着设备到处走动,安放好自己的仪器。
在实习过程中,严禁带电操作。
在实验室要注意着装整洁,不能穿拖鞋,男生不能穿短裤,女生不能穿裙子。
在实验室严禁吃东西,保持实验室的清洁卫生。
安装完成后能正常使用,并且要求机器各部件的驱动无错误。
测试程序运行正常,独立完成实习后必须独立撰写实习报告。
三.实习器材完整的台式机一台、十字起一把、u 盘一个、光驱一台、win98系统盘一张、主板盘一张、驱动盘一张等等。
四.实习内容及过程1. 检测计算机的好坏(1)加上电源后开机,如果计算机有显示,说明主要部件没有问题。
(2)断电装上光驱然后通过光驱(系统盘)重启,利用fdisk软件对硬盘取消分区。
2. 拆卸计算机(1)关机,拔掉电源。
(2)拆卸主机以外的部件—显示器、键盘、鼠标,并将显示器放在桌子下面,螺丝放在键盘托盘上。
(3)放倒主机,拆卸电源、网卡、声卡、内存条、硬盘、光驱、风扇、cpu,cpu拿出来给老师看后立即放回主板上的插座上。
3. 安装计算机(1)安装风扇,接上风扇电源。
(2)安装内存条、网卡、声卡、硬盘、光驱,不要将多余的螺丝留在机箱内,以免造成短路损坏计算机。
储存原理实验报告总结(3篇)
第1篇一、实验背景随着计算机技术的飞速发展,存储器作为计算机系统的重要组成部分,其性能直接影响着计算机系统的整体性能。
为了深入了解存储器的原理及其在实际应用中的表现,我们进行了储存原理实验。
二、实验目的1. 理解存储器的基本概念、分类、组成及工作原理;2. 掌握存储器的读写操作过程;3. 了解不同类型存储器的优缺点;4. 分析存储器性能的影响因素。
三、实验内容1. 静态随机存储器(SRAM)实验(1)实验目的:掌握SRAM的读写操作过程,了解其优缺点。
(2)实验内容:通过实验,观察SRAM的读写过程,记录读写时序,分析读写速度。
(3)实验结果:SRAM读写速度快,但价格较高,功耗较大。
2. 动态随机存储器(DRAM)实验(1)实验目的:掌握DRAM的读写操作过程,了解其优缺点。
(2)实验内容:通过实验,观察DRAM的读写过程,记录读写时序,分析读写速度。
(3)实验结果:DRAM读写速度较SRAM慢,但价格低,功耗小。
3. 只读存储器(ROM)实验(1)实验目的:掌握ROM的读写操作过程,了解其优缺点。
(2)实验内容:通过实验,观察ROM的读写过程,记录读写时序,分析读写速度。
(3)实验结果:ROM只能读,不能写,读写速度较慢。
4. 固态硬盘(SSD)实验(1)实验目的:掌握SSD的读写操作过程,了解其优缺点。
(2)实验内容:通过实验,观察SSD的读写过程,记录读写时序,分析读写速度。
(3)实验结果:SSD读写速度快,功耗低,寿命长。
四、实验分析1. 不同类型存储器的读写速度:SRAM > SSD > DRAM > ROM。
其中,SRAM读写速度最快,但价格高、功耗大;ROM读写速度最慢,但成本较低。
2. 存储器性能的影响因素:存储器容量、读写速度、功耗、成本、可靠性等。
在实际应用中,需要根据具体需求选择合适的存储器。
3. 存储器发展趋势:随着计算机技术的不断发展,存储器性能不断提高,功耗不断降低,成本不断降低。
计算机体系结构cache模拟器实验报告
计算机体系结构——Cache模拟器实验实验报告姓名崔雪莹学号12281166班级计科1202班老师董岚2015年06月07日一、阅读分析附件模拟器代码 (4)1、关键参数 (4)2、关键算法 (5)二、课后习题 (8)1、习题内容 (8)2、题目分析 (8)3、计算及结果 (9)4、模拟器上实验结果检验 (11)三、整体分析 (15)1、三种映射方式对Cache效率的的影响 (15)2、block块大小与Cache容量对Cache效率的影响 (16)3、Cache容量与相连度对Cache效率的影响 (17)4、三种失效类型影响因素 (18)四、实验思考和感受 (21)1、关于模拟器的思考 (21)2、关于整个实验的思考 (22)一、阅读分析附件模拟器代码1、关键参数(1)用户可见参数:(用户通过命令行输入参数)参数名含义值备注choice映像方式选项1/2/31为直接映射,2为组相连映射,3为全相连映射cachesize Cache大小16/64/128/256 以字节为单位blocksize Block大小1/2/4 以字为单位assoc 相连度1/2/4/8/16 assoc路组相连(n-way)accesscount 请求次数待输出等于project.txt的值个数hitcount 命中次数待输出成功在Cache找到次数hitrate 命中率待输出HitRate= hitcount/accesscount misscount 未命中次数待输出没在Cache找到次数misscount = 1-hitcountmissrate 未命中率待输出MissRate= misscount/accesscount c1c ,c2c ,c3c 失效次数待输出分别为三种失效类型的次数(2)程序内部主要参数:(代码内部重要参数)参数名含义计算备注blockinbyte 块的字节大小=blocksize*4 每一个块占多少字节NOofblock 块个数=cachesize/blockinbyte Cache中多少个块NOofset 组个数=NOofblock/assoc 块分成了多少个组bytearray[]要访问的数据的字节地址=projec.txt中的值project.txt文件数据赋给了bytearray[]数组wordaddress[ ] 要访问的数据的字地址=bytearray[j]/4blocksize是字为单位的,就是说一个block占多少个字,所以数据也要求字地址blockaddress[] 数据的块地址=wordaddress[]/blocksize数据在第几块index索引位(组地址) =blockaddress[j]%NOofset若Noofset=2^m,则块地址低m位为索引位(组地址)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机系统结构课程实验报告实验一:存贮层次模拟器计算机系统结构课程实验报告2012—2013 学年第 1 学期学生姓名: 学生班级: 2011179 学生学号: 2011179 指导教师: 孙全红教研室: 计算机系统结构教研室2012年 10月 23日实验一:存贮层次模拟器一、实验目的与要求使学生清楚认识虚拟存贮层次结构,熟练掌握常用的几种存储地址映象与变换方法,以及FIFO、LRU等替换算法的工作全过程。
要求用程序实现任意地址流在存储层次上的命中情况,实验结束后提交源程序和实验说明书。
二、实验内容在模拟器上实现在任意地址流下求出在cache —主存—辅存三层存贮层次上的命中率。
三、实验步骤1(Cache—主存:映像方式可以选择全相联、直接映象、组相联方式;替换算法一般使用LRU算法。
2(要求Cache大小、主存容量、块大小以及组数等可以输入修改。
3(求出命中率;显示替换的全过程;任选一种高级语言来做。
4(要有简洁、易于操作的界面。
四、程序源代码# include <stdio.h># include <iostream.h># include <stdlib.h>struct CacheStruct{int blocknum;int count;};void All_LinkLRU(CacheStruct cs[],int bottom,int stream[],int k,int result[20][20]){int j=0,m=0,max=0,location=0,hitnum=0;cout<<endl;//cout<<"主存访问块流"<<" "<<"是否替换"<<" "<<"是否命中"<<""<<"Cache块存放情况"<<endl;for(int i=0;i<k;i++){if(j<bottom)//Cache块不满{m=0;if(j==0){cs[j].blocknum=stream[i];cs[j].count=0;result[j][i]=stream[i];//result[bottom][i]=0;//result[bottom+1][i]=0;不需要/*cout<<stream[i]<<"\t\t";cout<<"块失效\t\t";cout<<"未命中\t\t";for(int t=0;t<bottom;t++){if(cs[t].blocknum!=-1)cout<<cs[t].blocknum<<' ';elsecout<<"空 ";}cout<<endl;*/j++;// continue;}else{while(m<j && cs[m].blocknum!=stream[i]) {cs[m].count++;m++;}if(m==j)//已存在的未命中{cs[j].blocknum=stream[i];cs[j].count=0;result[j][i]=stream[i];//result[bottom][i]=0;// result[bottom+1][i]=0;不需要/*cout<<stream[i]<<"\t\t"; cout<<"块失效\t\t";cout<<"未命中\t\t";for(int t=0;t<bottom;t++) {if(cs[t].blocknum!=-1)cout<<cs[t].blocknum<<' '; elsecout<<"空 ";}cout<<endl;*/j++;// continue;}else//已存在的命中了{cs[m].count=0;m++;result[bottom+1][i]=0;/*cout<<stream[i]<<"\t\t"; cout<<"无替换\t\t";cout<<"命中\t\t";for(int t=0;t<bottom;t++) {if(cs[t].blocknum!=-1) cout<<cs[t].blocknum<<' '; elsecout<<"空 ";}cout<<endl;*/if(m!=j){while(m<j){cs[m].count++;m++;}}hitnum++;// continue;}}}else//Cache块满了{m=0;max=0;location=0;while(m<bottom && cs[m].blocknum!=stream[i]) {cs[m].count++;if(cs[m].count>max){location=m;max=cs[m].count;}m++;}if(m==bottom)//未命中,所有块计数器都已加1,{result[bottom][i]=cs[location].blocknum;/*cout<<stream[i]<<"\t\t";cout<<"替换块"<<cs[location].blocknum<<"\t\t"; cout<<"未命中\t\t";*/cs[location].blocknum=stream[i];cs[location].count=0;result[location][i]=stream[i]; /* for(int t=0;t<bottom;t++) {if(cs[t].blocknum!=-1)cout<<cs[t].blocknum<<' '; elsecout<<"空 ";}cout<<endl;*/}else//命中,{result[bottom+1][i]=0;/*cout<<stream[i]<<"\t\t"; cout<<"无替换\t\t";cout<<"命中\t\t";*/cs[m].count=0;m++;if(m!=bottom){while(m!=bottom){cs[m].count++;m++;}}/*for(int t=0;t<bottom;t++) {if(cs[t].blocknum!=-1)cout<<cs[t].blocknum<<' '; elsecout<<"空 ";}cout<<endl;*/hitnum++;}}if(i<k-1){for(int r=0;r<bottom;r++) result[r][i+1]=result[r][i]; }}cout<<"块地址流 ";for(int t=0;t<k;t++)cout<<stream[t]<<"\t";cout<<endl<<"\t";for(t=0;t<(bottom+2);t++){cout<<endl<<"\t";for(int s=0;s<k;s++){if(t<bottom){if(result[t][s]==-1)cout<<"空\t";elsecout<<result[t][s]<<"\t";}else if(t==bottom){if(result[t][s]!=-1)//块替换cout<<"替换块"<<result[t][s]<<"\t"; else{if(result[t+1][s]!=-1)//块命中cout<<"无替换\t";elsecout<<"块失效\t";}}else{if(result[t][s]!=-1)//命中cout<<"命中\t";elsecout<<"未命中\t";}}cout<<endl;}cout<<endl;if(hitnum!=0){cout<<"采用全相联地址映射方式访问Cache的命中率为:"<<hitnum<<'/'<<k<<endl;}else{cout<<"采用全相联地址映射方式访问Cache的命中率为:0"<<endl;}}void Direct_link(CacheStruct cs[],int bottom,int stream[],int k,int result[20][20]){// cout<<"主存访问块流"<<" "<<"是否替换"<<" "<<"是否命中"<<" "<<"Cache块存放情况"<<endl;int location=-1,hitnum=0,m=0;for(int i=0;i<k;i++){location=stream[i]%bottom;if(cs[location].blocknum!=-1)//若产生冲突{if(cs[location].blocknum==stream[i])//若命中{result[bottom+1][i]=0;/*cout<<stream[i]<<"\t\t";cout<<"无替换\t\t";cout<<"命中\t\t";for(int t=0;t<bottom;t++){if(cs[t].blocknum!=-1)cout<<cs[t].blocknum<<' ';elsecout<<"空 ";}cout<<endl;*/hitnum++;//continue;}else{result[bottom][i]=cs[location].blocknum;/* cout<<stream[i]<<"\t\t";cout<<"替换块"<<cs[location].blocknum<<"\t\t"; cout<<"未命中\t\t";*/cs[location].blocknum=stream[i];result[location][i]=stream[i];// cs[location].count=0;/*for(int t=0;t<bottom;t++){if(cs[t].blocknum!=-1)cout<<cs[t].blocknum<<' ';elsecout<<"空 ";}cout<<endl;*/}}else//不产生冲突,仅是页面失效{cs[location].blocknum=stream[i]; result[location][i]=stream[i]; /* cout<<stream[i]<<"\t\t";cout<<"块失效\t\t";cout<<"未命中\t\t";for(int t=0;t<bottom;t++){if(cs[t].blocknum!=-1)cout<<cs[t].blocknum<<' ';elsecout<<"空 ";}cout<<endl;*/}if(i<k-1){for(int r=0;r<bottom;r++)result[r][i+1]=result[r][i];}}cout<<"块地址流 ";for(int t=0;t<k;t++)cout<<stream[t]<<"\t";cout<<endl<<"\t";for(t=0;t<(bottom+2);t++){cout<<endl<<"\t";for(int s=0;s<k;s++){if(t<bottom){if(result[t][s]==-1)cout<<"空\t";elsecout<<result[t][s]<<"\t";}else if(t==bottom){if(result[t][s]!=-1)//块替换cout<<"替换块"<<result[t][s]<<"\t"; else{if(result[t+1][s]!=-1)//块命中cout<<"无替换\t";elsecout<<"块失效\t";}}else{if(result[t][s]!=-1)//命中cout<<"命中\t";elsecout<<"未命中\t";}}cout<<endl;}cout<<endl;if(hitnum!=0){cout<<"采用直接地址映射方式访问Cache的命中率为:"<<hitnum<<'/'<<k<<endl;}else{cout<<"采用直接地址映射方式访问Cache的命中率为:0"<<endl;}}void Group_link(CacheStruct cs[],int bottom,int stream[],int k,int Gblock,int result[20][20]){// 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;i<k;i++){Mgroupnum=stream[i]/Gblock;location=Mgroupnum%Cgroupnum;start=location*Gblock;end=start+Gblock-1;location=-1;find=0;m=-1;max=0;//以下实现组内全相联for(int j=start;j<=end;j++){if(find==0 && cs[j].blocknum==-1){location=j;find=1;}if(cs[j].blocknum!=-1)cs[j].count++;if(cs[j].count>max){max=cs[j].count;m=j;}if(cs[j].blocknum==stream[i]) break;}if(j<=end)//命中{result[bottom+1][i]=0;/*cout<<stream[i]<<"\t\t"; cout<<"无替换\t\t";cout<<"命中\t\t";*/cs[j].count=0;if(j<end){j++;while(j<=end){if(cs[j].blocknum!=-1)cs[j].count++;j++;}}/* for(int t=0;t<bottom;t++) {if(cs[t].blocknum!=-1)cout<<cs[t].blocknum<<' ';elsecout<<"空 ";}cout<<endl;*/hitnum++;}else//未命中{if(location!=-1)//Cache有空余块{result[location][i]=stream[i]; /*cout<<stream[i]<<"\t\t";cout<<"块失效\t\t";cout<<"未命中\t\t";*/cs[location].blocknum=stream[i]; cs[location].count=0;/*for(int t=0;t<bottom;t++){if(cs[t].blocknum!=-1)cout<<cs[t].blocknum<<' ';elsecout<<"空 ";}cout<<endl;*/}else//替换{result[bottom][i]=cs[m].blocknum;/* cout<<stream[i]<<"\t\t";cout<<"替换块"<<cs[m].blocknum<<"\t\t"; cout<<"未命中\t\t";*/cs[m].blocknum=stream[i];cs[m].count=0;result[m][i]=stream[i];/* for(int t=0;t<bottom;t++){if(cs[t].blocknum!=-1)cout<<cs[t].blocknum<<' ';elsecout<<"空 ";}cout<<endl;*/}}if(i<k-1){for(int r=0;r<bottom;r++) result[r][i+1]=result[r][i]; }}cout<<"块地址流 ";for(int t=0;t<k;t++)cout<<stream[t]<<"\t";cout<<endl<<"\t";for(t=0;t<(bottom+2);t++) {cout<<endl<<"\t";for(int s=0;s<k;s++){if(t<bottom){if(result[t][s]==-1)cout<<"空\t";elsecout<<result[t][s]<<"\t";}else if(t==bottom){if(result[t][s]!=-1)//块替换cout<<"替换块"<<result[t][s]<<"\t"; else{if(result[t+1][s]!=-1)//块命中cout<<"无替换\t";elsecout<<"块失效\t";}}else{if(result[t][s]!=-1)//命中cout<<"命中\t";elsecout<<"未命中\t";}}cout<<endl;}cout<<endl;if(hitnum!=0){cout<<"采用组相联地址映射方式访问Cache的命中率为:"<<hitnum<<'/'<<k<<endl;}else{cout<<"采用组相联地址映射方式访问Cache的命中率为:0"<<endl;}}void main(){CacheStruct cs[100];int result[20][20];int stream[100];intCvolumn=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=0;type=-1;t=-1;for(int i=0;i<100;i++){cs[i].blocknum=-1;cs[i].count=0;}cout<<"请依次输入主存空间大小(MB),Cache空间大小(KB),分块大小(KB):"; cin>>Mvolumn>>Cvolumn>>Blockvolumn;/*问题改进:1.界面输入输出方式2.容量之间的关系3.*/while((Mvolumn*1024)%Blockvolumn!=0 || Cvolumn%Blockvolumn!=0){cout<<"主存空间大小与Cache空间大小应是块大小的整数倍~";cout<<"请依次输入主存空间大小(MB),Cache空间大小(KB),分块大小(KB):"; cin>>Mvolumn>>Cvolumn>>Blockvolumn;}Mblocknum=(Mvolumn*1024)/Blockvolumn;Cblocknum=Cvolumn/Blockvolumn;cout<<"请输入CPU访问主存块流:(-1结束输入)";cin>>t;while(t!=-1){if(t<0 || t>=Mblocknum){/* cout<<"输入的主存块地址号有误~请重新输入:";cin>>t;while(t<0 || t>=Mblocknum ||t==-1){if(t==-1)break;else{cout<<"输入的主存块地址号有误~请重新输入:"; cin>>t;}}if(t!=-1){stream[k]=t;k++;cin>>t;}*/cout<<"已跳过输入错误的无效的块地址~"; cin>>t;}else{stream[k]=t;k++;cin>>t;}}//完成result数组的初始化for(i=0;i<20;i++){for(int j=0;j<20;j++){result[i][j]=-1;}}cout<<"请输入地址映射方式:(1.全相联 2.直接映射 3.组相联)";cin>>type;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<<"请输入主存分组数:";cin>>groupnum;while(Mblocknum%groupnum!=0 || Cblocknum%(Mblocknum/groupnum)!=0)//输入的组数不能被整除{cout<<"输入主存分组数有误~请依据主存与Cache分块数确定合适的分组数:";cin>>groupnum;}Group_link(cs,Cblocknum,stream,k,Mblocknum/groupnum,result);}}cout<<"还要继续输入块地址流吗,(Y or N)";cin>>ch;}// All_LinkLRU(cs,Cblocknum,stream,k);//Direct_link(cs,Cblocknum,stream,k);/* cout<<"请输入主存分组数:";cin>>groupnum;Group_link(cs,Cblocknum,stream,k,Mblocknum/groupnum);}四、实验截图采用全相联映射方式:采用组相联映射方式:采用直接相联映射方式:五、实验总结通过上机操作,我掌握了常用的几种存储地址映象与变换方法即全相联映象方式,直接映象方式和组相联映象方式,并且认识了虚拟存贮层次结构,而且了解了FIFO、LRU等替换算法的工作全过程。