计算机系统体系结构实验
- 格式:docx
- 大小:168.22 KB
- 文档页数:26
《计算机组织与体系结构》实验报告学号: XXX姓名:XXX班级:XXX指导教师:XXX时间: 2013年01月中国矿业大学计算机学院目录一基本运算器实验 (2)1、实验目的 (2)2、实验设备 (2)3、实验原理 (2)4、实验步骤 (3)5、实验结果 (5)5、实验体会 (5)二微程序控制实验 (6)1、实验目的 (6)2、实验设备 (6)3、实验原理 (6)4、实验步骤 (12)5、实验体会 (13)三CPU与简单模型机设计实验 (13)1、实验目的 (13)2、实验设备 (13)3、实验原理 (13)4、实验步骤 (18)5、实验流图 (21)6、实验体会 (25)实验一基本运算器实验1. 实验目的(1) 了解运算器的组成结构。
(2) 掌握运算器的工作原理。
2. 实验设备PC机一台,TD-CMA实验系统一套。
3.实验原理本实验的原理如下图所示:运算器内部含有三个独立运算部件,分别为算术、逻辑和移位运算部件,要处理的数据存于暂存器A和暂存器B,三个部件同时接受来自A和B的数据(有些处理器体系结构把移位运算器放于算术和逻辑运算部件之前,如ARM),各部件对操作数进行何种运算由控制信号S3…S0和CN来决定,任何时候,多路选择开关只选择三部件中一个部件的结果作为ALU的输出。
如果是影响进位的运算,还将置进位标志FC,在运算结果输出前,置ALU零标志。
ALU中所有模块集成在一片FPGA中。
逻辑运算部件由逻辑门构成,较为简单,而后面又有专门的算术运算部件设计实验,在此对这两个部件不再赘述。
移位运算采用的是桶形移位器,一般采用交叉开关矩阵来实现,交叉开关的原理如图1-1-2所示。
图中显示的是一个4X4的矩阵(系统中是一个8X8的矩阵)。
每一个输入都通过开关与一个输出相连,把沿对角线的开关导通,就可实现移位功能,即:(1) 对于逻辑左移或逻辑右移功能,将一条对角线的开关导通,这将所有的输入位与所使用的输出分别相连,而没有同任何输入相连的则输出连接0。
计算机系统结构实验报告实验目的:掌握计算机系统的基本结构和工作原理,了解计算机系统的组成部分及其相互关系。
实验仪器和材料:计算机硬件设备(主机、硬盘、内存、显卡等)、操作系统、实验指导书、实验报告模板。
实验原理:实验步骤:1.搭建计算机硬件设备,将主机、硬盘、内存、显卡等组装连接好。
2. 安装操作系统,如Windows、Linux等。
3.启动计算机,进入操作系统界面。
4.打开任务管理器,查看CPU的使用情况。
5.打开任务管理器,查看内存的使用情况。
6.运行一些应用程序,观察CPU和内存的使用情况。
7.尝试使用输入输出设备,如键盘、鼠标等。
实验结果:通过实验,我们可以观察到计算机系统的硬件部分和软件部分的工作情况。
通过任务管理器,我们可以查看到CPU的使用情况和内存的使用情况。
在运行应用程序时,我们可以观察到CPU和内存的使用情况的变化。
通过使用输入输出设备,我们可以与计算机进行交互操作。
实验分析:从实验结果可以看出,计算机系统的硬件部分和软件部分都是相互关联的。
CPU作为计算机的核心部件,负责执行各种指令,通过数据传输和计算来完成各种操作。
而内存则用于存储数据和程序,通过读写操作来完成对数据的处理。
硬盘则用于长期存储数据。
操作系统则是计算机系统的管理者,通过调度CPU和内存的使用来实现对计算机资源的分配。
结论:计算机系统是由硬件和软件部分组成的,其中硬件部分包括CPU、内存、硬盘等,软件部分包括操作系统、应用程序等。
计算机系统通过CPU 的运算和数据传输来实现各种操作。
通过实验,我们可以观察到计算机系统的工作情况,并深入了解计算机系统的组成和工作原理。
实验总结:通过本次实验,我们对计算机系统的基本结构和工作原理有了更深入的了解。
实验中,我们搭建了计算机硬件设备,安装了操作系统,并通过观察和分析实验结果,进一步认识到计算机系统的组成部分和各部分之间的相互关系。
通过操作输入输出设备,我们还实践了与计算机进行交互操作的过程。
计算机组成与体系结构实验计算机组成与体系结构是计算机科学与技术中的重要基础课程,旨在让学生深入了解计算机内部的工作原理和组成结构。
通过实验的方式,学生可以亲自动手操作和观察,加深对计算机组成与体系结构的理解与认识。
本文将就计算机组成与体系结构实验的重要性、实验的设计与操作、实验结果与分析等方面进行探讨,希望能对读者有所启发。
1. 实验的重要性计算机组成与体系结构实验作为一门重要的实践课程,具有以下几个方面的重要性。
1.1 增强理论知识的实践运用通过实验,学生能够将书本上的理论知识应用于实际操作中,增强对计算机组成与体系结构的认识和理解。
只有亲身操作和实践,才能真正理解计算机内部的工作原理。
1.2 培养问题解决能力在实验中,学生常常会遇到各种问题和挑战,需要通过分析和解决来完成实验任务。
这不仅能够培养学生的问题解决能力,还可以提高他们的创新思维和实践能力。
1.3 提升实验技能实验的设计与操作需要学生掌握一定的实验技能,例如使用计算机硬件设备、调试程序等。
通过实验,学生可以提升自己的实验技能,为以后的学习和工作打下坚实的基础。
2. 实验的设计与操作在进行计算机组成与体系结构实验时,需要根据实验目的和要求,合理设计实验方案,并按照以下步骤进行实验操作。
2.1 实验前的准备工作在开始实验之前,需要进行充分的准备工作。
首先,确认实验所需的硬件和软件设备是否齐备,并检查它们的工作状态。
其次,了解实验的背景和目的,明确实验要求和操作步骤。
最后,阅读相关的实验指导书或教材,熟悉实验的理论知识和实验的操作要点。
2.2 实验过程的操作按照实验指导书或教师的要求,进行实验的操作。
在实验过程中,要注意以下几个方面。
2.2.1 实验环境的设置根据实验要求,设置好实验环境和实验参数。
例如,可以使用特定的软件模拟实验环境,或连接相应的硬件设备来进行实验操作。
2.2.2 实验步骤的执行按照实验指导书或教师的要求,按照实验步骤进行操作。
计算机体系结构课程教学改革实践计算机体系结构是计算机科学与技术专业中的一门基础课程,其教学内容主要涵盖计算机硬件和软件之间的相互关系以及计算机系统的组成和工作原理。
近年来,随着计算机技术的不断发展和应用的广泛推广,计算机体系结构的教学也面临着许多新的挑战和问题。
为了更好地适应计算机行业的需求和培养高素质的计算机专业人才,需要对计算机体系结构课程的教学进行改革实践。
计算机体系结构教学应该注重理论与实践相结合。
传统的计算机体系结构课程主要侧重于理论知识的传授,对于学生的动手能力和实际操作能力培养较少关注。
实际上,计算机体系结构的学习需要通过实际操作和实验来加深理解和巩固知识。
在教学中应加大对实践环节的重视,通过实验操作、案例分析和项目实践等方式,引导学生将理论知识运用到实际问题中,增强学生的动手能力和实际操作能力。
计算机体系结构教学应注重培养学生的创新能力和问题解决能力。
计算机体系结构的学习需要学生具备良好的分析问题和解决问题的能力。
传统的计算机体系结构课程注重的是教授学生硬件设计和指令集结构等基本概念和知识,对于学生的创新能力和问题解决能力培养较少关注。
在教学中应引入一些实际问题和案例,鼓励学生进行讨论和思考,培养学生的创新能力和问题解决能力。
计算机体系结构教学应注重培养学生的团队合作精神和实际操作能力。
计算机体系结构的学习需要学生具备较强的团队合作能力,因为计算机体系结构的设计和实现往往需要多个人共同合作完成。
传统的计算机体系结构课程往往以个人为单位进行学习和评估,对于学生的团队合作能力培养较少关注。
在教学中应引入一些团队项目和实践活动,鼓励学生进行团队合作,培养学生的团队合作精神和实际操作能力。
计算机体系结构教学应注重实际应用和跨学科的融合。
计算机体系结构不仅仅是一个理论性的学科,更是与其他学科密切相关的工程学科。
在教学中应注重计算机体系结构与其他学科的融合,在教学内容和实践活动中引入一些实际应用和案例,使学生能够将所学知识应用到实际工程中,并能够与其他学科进行跨学科合作,提高学生的综合素质和创新能力。
WAR\WAW\BTB实验姓名:王宇航学号:09283020WAR\WAW\BTB实验一、实验目的:通过本实验,理解读后写、写后写数据相关以及转移目标缓冲方法。
二、实验内容:1、用WinMIPS64模拟器执行一段循环程序(习题3.4),采用BTB转移控制策略。
指出程序每次迭代所需的时钟周期数和程序执行所需的总时钟周期数。
2、设计产生WAR、WAW数据相关的程序段,并在WinMIPS64模拟器上执行。
三、实验环境操作系统:Windows 7 旗舰版处理器:Intel(R) Core(TM) i5 双核内存:2.00GB软件:winmips64模拟器四、实验过程:1、分析BTB转移控制策略(1)BTB转移控制策略BTB即分支目标缓冲区转移控制策略处理分支指令的作用是为了最大限度地减少分支指令造成的延迟。
其思想及实现方法为:BTB可以看成是用专门的硬件实现的一张表,表中的每一项至少有两个字段:执行过的成功分支指令的地址和预测的分支目标地址。
在每次取指令的同时,将指令地址与BTB中的所有项的第一个字段进行顺次比较。
若在BTB中存在和该指令地址匹配的项,则可以确定该指令确实是分支指令且上一次分支成功,据此预测这次执行也将分支成功,将该匹配项中的第二个字段中的地址送给PC寄存器,从分支目标处开始取指令。
若在BTB中不存在和该指令地址匹配的项,则把该指令当做普通的指令来执行。
若预测正确,则不会有任何分支延迟;若预测错误或者在BTB中不存在匹配的项,则会有至少两个时钟周期的延迟,因为需要花费一个时钟周期停止取指令来更新BTB中的项,再花费一个时钟周期来取新的指令。
(2)修改习题3.4的循环指令序列,使之可以在WinMIPS64模拟器上执行,修改后的指令序列如下:.data.textDADDI R2,R0,0DADDI R3,R0,396LOOP: LW R1,0(R2)DADDI R1,R1,1SW R1,0(R2)DADDI R2,R2,4DSUB R4,R3,R2BNEZ R4,LOOPNOP(3)将该程序导入WinMIPS64模拟器,在模拟器菜单栏的Configure下,选中“Enable Branch Target Buffer”选项,即采用BTB转移控制策略。
计算机系统体系结构层次的设计和研究1. 引言1.1 概述计算机系统体系结构的设计和研究是计算机科学领域中的一个重要研究方向。
随着计算机技术的不断发展,对于计算机系统体系结构的需求也日益增多。
计算机系统体系结构是指计算机硬件与软件之间的接口和组织方式,它决定了计算机系统的性能、功耗、可扩展性等关键方面。
1.2 文章结构本文将分为六个部分来探讨计算机系统体系结构层次的设计和研究。
首先在引言部分进行概述并介绍文章结构。
其后将首先解释什么是计算机系统体系结构,并讨论其层次结构以及设计和研究的重要性。
接下来,我们将深入探讨计算机系统体系结构中的三个关键层次:硬件层级、指令集架构(ISA)以及微体系结构(Microarchitecture)。
最后,文章将给出总结,并对未来计算机系统体系结构设计进行展望。
1.3 目的本文旨在阐述计算机系统体系结构层次设计和研究的重要性,帮助读者了解计算机系统体系结构在计算机领域中的作用和意义。
通过对每个层次的详细讨论,读者将了解到计算机系统体系结构设计所面临的挑战以及解决方案。
同时,本文也将展望未来计算机系统体系结构设计的可能发展方向,为读者提供对相关领域进行深入研究的启示。
2. 计算机系统体系结构层次的设计和研究2.1 什么是计算机系统体系结构计算机系统体系结构是指计算机硬件和软件之间相互关联的方式和规则,它定义了计算机系统的组织、功能、性能以及各个组成部分之间的交互方式。
它包括了硬件层级、指令集架构层级以及微体系结构层级。
2.2 计算机系统体系结构的层次结构计算机系统体系结构可以被分为三个主要的层次:硬件层级、指令集架构(ISA)层级和微体系结构层级。
- 硬件层级:在硬件层级中,我们关注计算机系统的物理组成部分,包括处理器、内存、输入输出设备等。
这一层次主要涉及底层技术和电子工程。
- 指令集架构(ISA)层级:在ISA层级中,我们定义了每个指令及其操作码,并规定了指令与对应硬件之间的接口。
计算机系统结构实验报告班级计算机2班实验日期2016.2.24实验成绩姓名殷凤学号22920132203917实验名称MIPS指令系统和MIPS体系结构实验目的要求实验目的及要求:了解和熟悉指令级模拟器;熟练掌握MIPSsim模拟器的操作和使用方法;熟悉MIPS指令系统及其特点,加深对MIPS指令操作语义的理解;熟悉MIPS体系结构。
实验器材:实验平台采用指令级和流水线操作级模拟器MIPSsim;计算机一台。
实验内容、步骤及结果1. 阅读MIPSsim模拟器的使用方法,然后了解MIPSsim的指令系统和汇编语言;2. 对照实验教程启动、配置MIPSsim.exe,参照使用说明,载入程序,多种执行方式查看结果;3. 补充实验的完成:a.求阶乘问题:解决方法:在代码最后加一句指令TEQ r0,r0思路:将自定义的整数存入一个整数寄存器r1,r2,“1”的值存入寄存器r3作为求阶乘时减一的用处,r2减一,与原值r1相乘结果存入r1,判断r2值是否已经减到0,是就运行结束,否则跳转继续r2减一与r1相乘,最后r1的内容就是最终结果。
结果截图:b.ALU运算求(X-Y)*2-(X+Y)/8问题:无思路:题目要求不可以使用乘除指令,则利用逻辑左移(SLL)一位实现乘2,利用逻辑右移(SRL)3实现除以8。
r1 r2中存放自定义的x y,r3中存放x-y的值,r4存放x+y的值,最后结果放在r5中。
结果截图:c.求补码问题:解决方法:把高32位和低32位之间base的差值4个字节事先存进寄存器r6问题:解决方法:改成LABLE1问题:如果是正数的话结果总是错误的解决方法:刚开始忘记判断正负了,如果是正数就直接存回存储器原来的位置,判断正负通过高32位(存在r2中)和十六进制数0x00…0080000000(寄存器r9)进行AND,如果结果等于0(与$r0比较),就为正数,否则就是负数。
思路:r1中放取字指令LW的base值,根据内存中的数据来决定,存储器中高32位数据取出来放进r2,低32位数据放进r3。
“计算机系统结构”校级精品课程建设的探索与实践摘要:精品课程的建设可以促进教学水平和教学质量的提高,本文通过对“计算机系统结构”校级精品课程建设的研究,对该课程的课程定位、教学模式、教学方法等做了有益的探索,提出创新教育、知识更新的思想。
关键词:精品课程;教学模式;创新教育精品课程建设是教育部启动的“高等学校教学质量与教学改革工程”中的一项重要内容,是提高教学质量进而提高人才培养质量的奠基性工作。
我校2008年开始启动“校级精品课程建设计划”,我院的“计算机系统结构”课程被评为首届校级精品课程。
下面就课程定位、教学体系建设、知识模块、教学模式、相关教学研究等方面介绍对该课程建设的探索与实践。
1课程的基本定位和教学目标在计算机专业人才需求越来越多的情况下,北京市对计算机硬件相关的技术人员也加大了需求量,在这样的形势下,我们建立了新的计算机硬件课程体系,对“计算机系统结构”课程的定位也越来越明确。
我校的计算机专业主要为北京市培养计算机应用型人才,学生的就业取向大多数是北京市的高新技术企业。
因此,我们从教学计划、教学大纲、教学平台、实验设计平台和工具等方面均做了改革和调整,以适应形势发展的需要。
具体措施为:(1) 通过“数字逻辑”解决数字逻辑电路的基本概念和原理;(2) 通过“数字系统设计”等课程让学生掌握现代的数字系统设计平台和工具(EDA、FPGA等),以及简单电子部件的设计技术;(3) 通过“计算机组成原理”解决计算机的基本组成原理与技术问题;(4) 通过“计算机接口技术”、“高档微机系统”课程使学生掌握微机应用系统设计和调试基本概念和方法,提高学生工程素质和设计、技术创新等方面的基本知识。
“计算机系统结构”课程的教学目标是使学生在计算机应用系统和分析设计中,理解软硬界面分配及如何最佳、最合理地分配硬件功能,即提高系统的性能价格比方面的知识;“嵌入式系统”等系列课程,让学生在“嵌入式系统”、“微机系统及接口”等面向应用的专业方向上进行学习和实践。
计算机体系结构实验报告第一篇:计算机体系结构概述计算机体系结构是计算机学科中的一个重要分支,它研究的是计算机的硬件组成和工作原理,包括计算机的处理器、存储器、输入输出设备、总线等。
计算机体系结构的研究可以帮助我们理解计算机的工作原理,优化计算机的性能,提升计算机的能力。
计算机体系结构可以分为两个方面:指令集体系结构和微体系结构。
其中,指令集体系结构是指计算机的操作系统能够直接识别和执行的指令集合,它们是应用程序的编程接口;而微体系结构是指通过硬件实现指令集合中的指令,在底层支持指令集合的操作。
指令集体系结构和微体系结构是密切相关的,因为指令集体系结构会影响微体系结构的设计和实现。
目前,计算机体系结构主要有三种类型:单处理器体系结构、多处理器体系结构和分布式计算体系结构。
其中,单处理器体系结构是指所有的指令和数据都存放在同一台计算机中,这种体系结构的优点是操作简单、易于管理,但是主频存在瓶颈,无法很好地发掘多核的性能优势;多处理器体系结构是指多个计算机共享同一块物理内存,因此可以方便地实现负载均衡和任务协作,但是存在通信延迟和数据一致性问题;分布式计算体系结构则是指通过互联网将多个计算机连接成一个网络,可以在全球范围内共享计算资源,但是通信成本和数据安全问题需要考虑。
总之,计算机体系结构是计算机学科中的重要分支,它研究计算机的硬件组成和工作原理,帮助我们理解计算机的工作原理,优化计算机性能,提升计算机能力。
第二篇:计算机指令集体系结构计算机指令集体系结构,简称ISA(Instruction Set Architecture),是指计算机能够识别和执行的指令集合。
ISA是计算机指令的编程接口,定义了一组指令和地址模式,以及寄存器和内存的组织方式,它是计算机软件和硬件协同工作的关键接口之一。
ISA可以分为两类:精简指令集体系结构(RISC,Reduced Instruction Set Computer)和复杂指令集体系结构(CISC,Complex Instruction Set Computer)。
计算机系统结构专业实习报告一、实习背景与目的随着信息技术的快速发展,计算机系统结构作为一门涵盖了计算机硬件和软件等多个方面的学科,在我国的高等教育体系中占据了重要的地位。
为了更好地将理论知识与实践相结合,提高自身综合素质和实际操作能力,我选择了计算机系统结构专业实习,以便为今后的学术研究和职业生涯打下坚实基础。
本次实习的主要目的是:1. 深入了解计算机系统结构的基本原理和组成部件;2. 熟悉各类计算机硬件设备的工作原理和性能指标;3. 掌握计算机系统组装、维护和调试的基本技能;4. 提高团队协作能力和沟通交流能力。
二、实习内容与过程1. 实习前的准备在实习开始前,我们参加了由指导老师举办的实习动员大会,了解了实习的要求、内容以及注意事项。
同时,我们还自学了相关教材和资料,为实习打下了理论知识基础。
2. 实习过程中的主要任务与收获实习过程中,我们主要完成了以下任务:1. 参观实验室和机房,了解各类计算机硬件设备及其功能;2. 学习计算机系统组装、维护和调试的基本技能;3. 参与实验室科研项目,协助导师进行数据分析和实验验证;4. 撰写实习日记和总结报告,记录实习过程中的所学所得。
具体收获如下:1. 熟悉了计算机系统结构的基本原理和组成部件,如CPU、内存、硬盘、显卡等;2. 掌握了计算机系统组装、维护和调试的基本技能,如安装操作系统、配置网络、排查故障等;3. 了解了实验室科研项目的工作流程,提高了科研素养;4. 增强了团队协作能力和沟通交流能力。
3. 实习中遇到的困难与解决方案在实习过程中,我们遇到了一些困难,如:1. 部分硬件设备的原理和操作较为复杂,一开始难以掌握;2. 实验室科研项目中的某些技术问题需要花费较长时间解决;3. 实习任务较重,时间紧张,难以兼顾学业与实习。
针对上述困难,我们采取了以下解决方案:1. 请教老师和同学,共同探讨,逐步掌握硬件设备的原理和操作;2. 利用课余时间深入学习相关技术,提高解决问题的能力;3. 合理安排时间,加强与团队成员的沟通,提高团队协作效率。
mips实验报告Title: MIPS实验报告Abstract:本实验报告旨在介绍MIPS(Microprocessor without Interlocked Pipeline Stages)架构及其在计算机体系结构课程中的应用。
通过实验,我们将了解MIPS指令集架构的基本原理和实现,以及如何使用MIPS模拟器进行程序设计和调试。
本报告将详细介绍MIPS架构的特点、指令集、寄存器组、内存模型等内容,并通过实验结果分析MIPS在计算机体系结构中的重要性和应用价值。
Introduction:MIPS(Microprocessor without Interlocked Pipeline Stages)是一种精简指令集计算机(RISC)架构,广泛应用于嵌入式系统和高性能计算领域。
在计算机体系结构课程中,学习MIPS架构可以帮助学生深入理解计算机的工作原理和指令级并行处理技术。
通过实验,学生可以通过模拟器编写和调试MIPS汇编程序,加深对计算机体系结构的理解。
MIPS Architecture:MIPS架构采用精简指令集(RISC)的设计理念,包括32位寄存器、固定长度的指令格式和简单的指令集。
MIPS架构的特点包括高性能、低功耗、易于实现和优化等优点,因此在嵌入式系统和高性能计算领域得到广泛应用。
MIPS指令集包括算术运算指令、逻辑运算指令、数据传输指令、控制流指令等,能够满足各种计算需求。
MIPS Simulator:为了方便学生学习和实验MIPS架构,通常会使用MIPS模拟器进行程序设计和调试。
MIPS模拟器可以模拟MIPS处理器的运行过程,包括指令执行、寄存器操作、内存访问等,帮助学生理解MIPS指令集的工作原理和实现过程。
通过MIPS模拟器,学生可以编写和调试MIPS汇编程序,加深对计算机体系结构的理解。
Experiment Results:通过实验,我们学习了MIPS架构的基本原理和实现,包括指令集、寄存器组、内存模型等内容。
实验三WinDLX流水线实验王宇航安全0901班09283020实验三WinDLX流水线实验1实验目的:通过本实验,加深对结构相关、数据相关和指令调度的理解,了解结构相关对CPU性能的影响,掌握如何使用定向技术来减少数据相关带来的暂停,了解指令调度技术对CPU性能改进的好处。
2实验内容:用WinDLX模拟器进行结构相关的分析1、生成structure.s程序。
用WinDLX模拟器运行该程序。
2、通过模拟,找出存在结构相关的指令对,以及导致结构相关的部件。
3、记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
用WinDLX模拟器分析数据相关1、生成data.s程序。
2、通过Configuration菜单中的选项,设定在不采用定向技术的情况下,用WinDLX模拟器运行程序data_d.s。
记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
3、在采用定向技术的情况下,用WinDLX模拟器再次运行程序data_d.s。
记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
用WinDLX模拟器分析指令调度1、生成sch-before.s及sch-after.s程序。
2、通过Configuration菜单中的选项,将除法单元数设置为3,将加法﹑乘法﹑除法的延迟设置为3个时钟周期。
3、用WinDLX模拟器运行调度前的程序sch-before.s。
记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。
4、用WinDLX模拟器运行调度后的程序sch-after.s,记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。
综合实验(习题3.4)在WinDLX上运行如下代码序列:LOOP: LW R1,0(R2)ADDI R1,R1,#1SW 0(R2),R1ADDI R2,R2,#4SUB R4,R3,R2BNEZ R4,LOOP其中:R3的初值是R2+396。
计算机系统结构实验报告实验名称:MIPS 指令系统和MIPS 体系结构专业年级:0xxxxxxx姓名:xxxxxx计算机系统结构实验报告班级xxxxxxxxxxx 实验日期xxxxxxxxxx 实验成绩姓名xxxxxxxx 学号230xxxxxxxxxx4实验名称Cache性能分析实验目的、要求及器材实验目的:1、加深对Cache的基本概念、基本组织结构以及基本工作原理的理解。
2、掌握Cache容量、相联度、块大小对Cache性能的影响3、掌握降低Cache不命中率的各种方法以及这些方法对提高Cache性能的好处。
4、理解LRU与随机法的基本思想以及它们对Cache性能的影响实验平台:采用Cache模拟器MyCache。
实验内容、步骤及结果首先要掌握 MaCache模拟器的使用方法。
1、Cache容量对不命中率的影响选择地址流文件,选择不同的Cache容量,执行模拟器,记录各种情况的不命中率。
表:地址流文件名: eg.din结论:Cache容量越大,不命中率越低.但增加到一定程度时命中率不变。
2、相联度对不命中率的影响表:64KB相联度 1 2 4 8 16 32 不命中率(%)0.89 0.53 0.47 0.45 0.44 0.44地址流文件: all.din图:64KB表:256KB相联度 1 2 4 8 16 32 不命中率(%)0.49 0.38 0.36 0.36 0.35 0.35地址流文件: all.din图:256KB结论:相联路数越多,则不命中率越低,同时,有个极限值,且该极限值随Cache容量大小的增加而减小。
3 Cache块大小对不命中率的影响块大小Cache容量2 8 32 128 51216 18.61 10.12 3.81 1.95 1.4232 14.22 7.59 2.84 1.26 0.8764 12.62 6.47 2.36 0.92 0.60128 12.98 6.35 2.31 0.76 0.47256 16.04 7.29 2.15 0.72 0.40地址流文件:ccl.din结论:不命中率随分块大小的增大先减小后增大,即存在一个最优的分块大小,且该最优分块随Cache容量的增大而增大。
华北电力大学实验报告||实验名称计算机网络体系结构实验课程名称计算机网络体系结构||专业班级:网络1202 学生姓名:学号:成绩:指导教师:李丽芬实验日期:2014.12.18RIPv2路由选择协议网络拓扑结构设计1.网络物理拓扑结构设计2.配置路由器IP地址,设置R1命令为例:RSR20>enableRSR20#configure terminalEnter configuration commands, one per line. End with CNTL/Z. RSR20(config)#hostname R1R1(config)#interface gi 0/0R1 (config-if)#ip address 196.1.1.6 255.255.255.0R1(config-if)#no shutdownR1(config-if)#endR1#configureR1(config)#interface S2 0/0R1 (config-if)#ip address 196.1.5.1 255.255.255.0R1(config-if)#no shutdownR1(config-if)#endR1#configureR1(config)#interface S3 0/0R1 (config-if)#ip address 196.1.6.1 255.255.255.0R1(config-if)#no shutdownR1(config-if)#end3.通过RIPv2路由选择协议建立局域网间的连接,配置R1命令为例:R1(config)#router ripR1(config-router)#network 196.1.1.0R1(config-router)#network 196.1.5.0R1(config-router)#network 196.1.6.0R1(config-router)#version 2R1(config-router)#exit4.查看验证局域网的连接OSPF路由选择协议网络拓扑结构设计1.网络物理拓扑结构设计2.配置路由器IP地址,设置R1命令为例:R1(config)#interface gi 0/1R1 (config-if)#ip address 196.1.9.1 255.255.255.0R1(config-if)#no shutdownR1(config-if)#end3.通过OSPF路由选择协议建立局域网间的连接,配置R1命令为例:R1(config)#router ospfR1(config-router)#network 196.1.1.0R1(config-router)#network 196.1.5.0R1(config-router)#network 196.1.6.0R1(config-router)#network 196.1.9.0R1(config-router)#version 2R1(config-router)#exit4.查看验证局域网的连接网络数据包的监听与分析1.在本机中建立web浏览器,在另外一台pc机上用wireshark捕获帧、报文。
「计算机体系结构实验室设备清单」计算机体系结构实验室是一个重要的学术研究和教学场所,用于进行计算机体系结构相关实验、项目研究和学生教学。
设备清单是实验室管理人员和教师必备的管理工具,可以帮助他们了解实验室设备的种类、数量和状态,以及设备的维护情况和更新需求。
以下是一个计算机体系结构实验室设备清单的例子,供参考。
1.主机类设备-高性能计算机集群:包括若干台计算节点、存储节点、网络设备等。
-图形工作站:用于图像处理和模拟实验。
-普通个人电脑:用于学生教学和实验。
-单板机:用于嵌入式系统开发和实验。
2.存储类设备-磁盘阵列:用于数据存储和备份。
-网络存储设备:用于共享存储和数据传输。
3.网络设备-路由器:用于网络通信和数据传输。
-交换机:用于实验室内部网络连接。
-防火墙:用于网络安全保护。
4.测试设备-逻辑分析仪:用于信号分析和故障排除。
-示波器:用于波形观测和信号分析。
-频谱分析仪:用于频谱分析和信号检测。
-测试仪器:用于测试计算机性能和指标。
5.实验设备-FPGA开发板:用于数字电路设计和实验。
-协议分析仪:用于网络协议分析和调试。
-多功能测试台:用于电子电路实验和测试。
6.软件工具-计算机模拟软件:用于模拟计算机体系结构。
-编程开发环境:用于程序开发和调试。
-仿真工具:用于电路设计和模拟实验。
7.其他设备-显示器:用于数据显示和实验结果展示。
-打印机:用于打印实验报告和文档。
-服务器:用于提供网络服务和存储服务。
以上是计算机体系结构实验室设备清单的一个示例,可以根据实验室的需求和资金预算进行适当的调整和补充。
同时,实验室管理人员和教师还需要定期检查设备的状态和维护情况,及时进行维修和更新,以确保实验室设备的正常运行和教学研究的顺利进行。
中南大学计算机系统体系结构题目:计算机系统体系结构姓名:班级:学号:日期:2014年11月20日1、实验一:对指令操作码进行霍夫曼编码一、实验目的1、了解和掌握指令编码的基本要求和基本原理。
二、实验内容1、使用编程工具编写一个程序,对一组指令进行霍夫曼编码,并输出最后的编码结果以及对指令码的长度进行评价。
与扩展操作码和等长编码进行比较。
问题描述以及问题分析:我们举例说明此问题,例如:最短编码长度为:H=0.45*1+0.30*2+0.15*3+0.05*4+0.03*5+0.01*6+0.01*6=-1.95.要对指令的操作码进行 HUFFMAN 编码,只要根据指令的各类操作码的出现概率构造HUFFMAN 树再进行 HUFFAM 编码。
此过程的难点构造 HUFFMAN 树,进行 HUFFAM 编码只要对你所生成的 HUFFMAN 树进行中序遍历即可完成编码工作。
三、关键代码及部分注释哈夫曼树重点在于如何排列权值大小不同的结点的顺序private int leafNum; //叶子结点个数private HaffmanNode[] hnodes; //哈夫曼树的结点数组public HaffManCode(double[] weight) //构造指定权值集合的哈夫曼树{ int n = weight.length; //n个叶子结点this.leafNum = n;this.hnodes = new HaffmanNode[2*n-1]; //n个叶子结点的哈夫曼树共有2n-1个结点for(int i=0; i<n; i++) //结点数组初始化有n个叶子结点this.hnodes[i] = new HaffmanNode(weight[i]);for(int i=0; i<n-1; i++) //构造n-1个2度结点,每循环一次,构造一个2度结点{double min1, min2;int x1, x2;min1 = min2 = Integer.MAX_VALUE; //选择最小和次最小权值,初值为最大权值 x1 = x2 = -1; //记录两个无父母的最小权值结点下标for(int j=0;j<n+i; j++) //查找两个无父母的最小权值结点{ if(hnodes[j].weight<min1 && hnodes[j].parent==-1){ min2 = min1;x2 = x1;min1 = hnodes[j].weight; //min1记下最小权值x1 = j; //x1记下最小权值结点的下标}else if(hnodes[j].weight<min2 && hnodes[j].parent==-1){min2 = hnodes[j].weight;x2 = j; //x2记下次最小权值结点的下标}}四、实验结果五、实验源代码1、HaffmanNode.javapackage feng;class HaffmanNode //哈夫曼树的结点类{ double weight; //权值int parent,left,right; //父母结点和左右孩子下标public HaffmanNode(double weight){this.weight = weight;this.parent=-1;this.left=-1;this.right=-1;}public HaffmanNode(){this(0);}public String toString(){return this.weight+" "+this.parent+" "+this.left+" "+this.right; }}2、HaffManCode.javapackage feng;public class HaffManCode{private int leafNum; //叶子结点个数private HaffmanNode[] hnodes; //哈夫曼树的结点数组public HaffManCode(double[] weight) //构造指定权值集合的哈夫曼树{int n = weight.length; //n个叶子结点this.leafNum = n;this.hnodes = new HaffmanNode[2*n-1]; //n个叶子结点的哈夫曼树共有2n-1个结点for(int i=0; i<n; i++) //结点数组初始化有n个叶子结点this.hnodes[i] = new HaffmanNode(weight[i]);for(int i=0; i<n-1; i++) //构造n-1个2度结点,每循环一次,构造一个2度结点 {double min1, min2;int x1, x2;min1 = min2 = Integer.MAX_VALUE; //选择最小和次最小权值,初值为最大权值x1 = x2 = -1; //记录两个无父母的最小权值结点下标for(int j=0; j<n+i; j++) //查找两个无父母的最小权值结点{if(hnodes[j].weight<min1 && hnodes[j].parent==-1){min2 = min1;x2 = x1;min1 = hnodes[j].weight; //min1记下最小权值x1 = j; //x1记下最小权值结点的下标}else if(hnodes[j].weight<min2 && hnodes[j].parent==-1){min2 = hnodes[j].weight;x2 = j; //x2记下次最小权值结点的下标}}hnodes[x1].parent = n+i; //将找出的两棵权值最小的子树合并为一棵子树hnodes[x2].parent = n+i;this.hnodes[n+i] = new HaffmanNode();hnodes[n+i].weight = hnodes[x1].weight+hnodes[x2].weight;hnodes[n+i].left = x1;hnodes[n+i].right = x2;}}public String toString(){String str="";for (int i=0; i<this.hnodes.length && hnodes[i]!=null; i++)str += " "+i+" "+this.hnodes[i].toString()+"\n";return str;}String[] code1 = null;public String[] haffmanCode() //返回当前哈夫曼树的哈夫曼编码{code1 = new String[this.leafNum];String[] code = new String[this.leafNum];for(int i=0; i<this.leafNum; i++) //求n个叶子结点的哈夫曼编码{code[i]="";int child = i;int parent = hnodes[child].parent;while (parent!=-1) //由叶结点向上直到根结点循环{if(hnodes[parent].left==child) {code[i]="0"+code[i]; //左孩子结点编码为0code1[i] = code[i];}else {code[i]="1"+code[i]; //右孩子结点编码为1code1[i] = code[i];}child = parent;parent = hnodes[child].parent;}}return code;}public double shortestLong() {int lng;double weight, shortestlong = 0;for(int i=0; i<this.leafNum; i++) {lng = code1[i].length();weight = hnodes[i].weight;shortestlong = shortestlong + lng*weight;}return shortestlong;}public static void main(String[] args){//int[] weight={186, 64, 13, 22, 32, 103, 21, 15, 47, 57, 1, 5, 32, 20}; //指定权值集合double[] weight={0.1, 0.2, 0.1, 0.3, 0.1, 0.2};HaffManCode htree = new HaffManCode(weight);System.out.println("指令权值父指左子右子\n"+htree.toString());String[] code = htree.haffmanCode();System.out.println("哈夫曼编码:");for (int i=0; i<code.length; i++) {System.out.println(code[i]);}System.out.println("最短编码长度为:" + htree.shortestLong());}}2、实验二:使用LRU方法更新Cache一.实验目的:1、了解和掌握寄存器分配和内存分配的有关技术。
二、实验内容:1、结合数据结构的相关知识,使用LRU的策略,对一组访问序列进行内部的Cache更新。
LRU置换算法是选择最近最久未使用的页面予以置换。
该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来经历的时间T,当须淘汰一个页面时,选择现有页面中T 值最大的,即最近最久没有访问的页面。
这是一个比较合理的置换算法。
举例说明此问题,例如:有一个CACHE采用组相连映象方式。
每组有四块,为了实现LRU置换算法,在快表中为每块设置一个2位计数器。
我们假设访问序列为“1,1,2,4,3,5,2,1,6,7,1,3”。
在访问CACHE的过程中,块的装入,置换及命中时,具体情况如下表所示:三、关键代码1、程序分情况讨论了,当一个cache装满的情况下,2个,3个4个装满的情况下,当输入访问序列的时候,自动进行识别,并进行相应的处理,这个就是当四个块都被装满的情况else {//四个cache块都装满的情况if(jtf2.getText().equals(jt.getValueAt(list-3, 1))) {//要访问的页面刚好在cache0中dtm.addRow(new Object[]{jtf2.getText(),jt.getValueAt(list-3, 1),jt.getValueAt(list-3, 2),jt.getValueAt(list-3, 3),jt.getValueAt(list-3, 4), "命中"});System.out.println(1);time1 = 0;time2++;time3++;time4++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");}四、实验结果:如果按照访问序列你“1,2,3,4,5,4,3,2,1”输入,结果如图:五、源代码及LRU算法1、源代码及注释:package keshe;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.*;import jdk.nashorn.internal.scripts.JO;public class LRUCache extends Frame {public static void main(String[] args) {JFrame.setDefaultLookAndFeelDecorated(true);LRUCache lruc = new LRUCache();uchFrame();}JLabel jlabel2;JTextField jtf2;JButton jb_input;JScrollPane jsp;JTable jt;DefaultTableModel dtm;static int list = 1, count = list - 1;int time1 = 0;int time2 = 0;int time3 = 0;int time4 = 0;public void lauchFrame() {this.setLayout(null);this.setBounds(100, 100, 540, 320);this.setBackground(Color.cyan);this.setVisible(true);jlabel2 = new JLabel("请输入第" + list + "个访问页面:");jtf2 = new JTextField();jb_input = new JButton("输入");jlabel2.setBounds(20, 50, 140, 20);jtf2.setBounds(155, 50, 50, 20);jb_input.setBounds(240, 50, 60, 20);this.add(jlabel2);this.add(jtf2);this.add(jb_input);this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});jb_input.addActionListener(new InputActionListener());Object[] title = {"访问序列","Cache块0", "Cache块1", "Cache块2", "Cache块3", "状态"};dtm = new DefaultTableModel(title, 0);jt = new JTable(dtm);jsp = new JScrollPane(jt);jsp.setBounds(50, 80, 440, 197);jsp.setBackground(Color.black);this.add(jsp);}class InputActionListener implements ActionListener {public void actionPerformed(ActionEvent e) {if(jtf2.getText().equals("")) {Object[] options = { "OK" };JOptionPane.showOptionDialog(null, "你的输入存在“”,请按提示输入!", "警告",JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,null, options, options[0]);}list++;if(count < 4) {//count记录装入cache块的页面数switch(count) {case 0://cache块中没有装入页面的情况dtm.addRow(new Object[]{jtf2.getText(), jtf2.getText(), "", "", "", "装入"});time2++;time3++;time4++;count++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");break;case 1://cache块中装入一个页面的情况if(jtf2.getText().equals(jt.getValueAt(list-3, 1))) {//要访问的页面刚好在cache0中dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1), "", "", "", "命中"});time2++;time3++;time4++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");} else {//要访问的页面不在cache块中dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1), jtf2.getText(), "", "", "装入"});time1++;time2 = 0;time3++;time4++;count++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");}break;case 2://cache块中装入两个页面的情况if(jtf2.getText().equals(jt.getValueAt(list-3, 1))) {//要访问的页面刚好在cache0中dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1),jt.getValueAt(list-3, 2), "", "", "命中"});time1 =0;time2++;time3++;time4++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");} else if(jtf2.getText().equals(jt.getValueAt(list-3, 2))) {//要访问的页面刚好在cache1中dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1),jt.getValueAt(list-3, 2), "", "", "命中"});time1++;time2 = 0;time3++;time4++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");} else {//要访问的页面不在cache块中dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1),jt.getValueAt(list-3, 2), jtf2.getText(), "", "装入"});time1++;time2++;time3 =0;time4++;count++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");}break;case 3://cache块中装入三个页面的情况if(jtf2.getText().equals(jt.getValueAt(list-3, 1))) {//要访问的页面刚好在cache0中dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1),jt.getValueAt(list-3, 2), jt.getValueAt(list-3, 3), "", "命中"});time1 = 0;time2++;time3++;time4++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");} else if(jtf2.getText().equals(jt.getValueAt(list-3, 2))) {//要访问的页面刚好在cache1中dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1),jt.getValueAt(list-3, 2), jt.getValueAt(list-3, 3), "", "命中"});time1++;time2 =0;time3++;time4++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");} else if(jtf2.getText().equals(jt.getValueAt(list-3, 3))) {//要访问的页面刚好在cache2中dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1),jt.getValueAt(list-3, 2), jt.getValueAt(list-3, 3), "", "命中"});time1++;time2++;time3 = 0;time4++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");}else {//要访问的页面不在cache块中dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1),jt.getValueAt(list-3, 2), jt.getValueAt(list-3, 3), jtf2.getText(), "装入"});time1++;time2++;time3++;time4 = 0;count++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");}break;}} else {//四个cache块都装满的情况if(jtf2.getText().equals(jt.getValueAt(list-3, 1))) {//要访问的页面刚好在cache0中dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1), jt.getValueAt(list-3, 2), jt.getValueAt(list-3, 3), jt.getValueAt(list-3, 4), "命中"});System.out.println(1);time1 = 0;time2++;time3++;time4++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");} else if(jtf2.getText().equals(jt.getValueAt(list-3, 2))) {//要访问的页面刚好在cache1中dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1), jt.getValueAt(list-3, 2), jt.getValueAt(list-3, 3), jt.getValueAt(list-3, 4), "命中"});System.out.println(2);time1++;time2 = 0;time3++;time4++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");} else if(jtf2.getText().equals(jt.getValueAt(list-3, 3))) {//要访问的页面刚好在cache2中dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1), jt.getValueAt(list-3, 2), jt.getValueAt(list-3, 3), jt.getValueAt(list-3, 4), "命中"});System.out.println(3);time1++;time2++;time3 = 0;time4++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");} else if(jtf2.getText().equals(jt.getValueAt(list-3, 4))) {//要访问的页面刚好在cache3中dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1), jt.getValueAt(list-3, 2), jt.getValueAt(list-3, 3), jt.getValueAt(list-3, 4), "命中"});System.out.println(4);time1++;time2++;time3++;time4 = 0;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");}else {//要访问的页面不在cache块中if(time1>time2 && time1>time3 && time1>time4) {//如果cache0的页面最长时间没有被访问,新页面置换cache0中页面dtm.addRow(new Object[]{jtf2.getText(), jtf2.getText(), jt.getValueAt(list-3, 2), jt.getValueAt(list-3, 3), jt.getValueAt(list-3, 4), "置换"});time1 = 0;time2++;time3++;time4++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");} else if(time2>time1 && time2>time3 && time2>time4) {//如果cache1的页面最长时间没有被访问,新页面置换cache1中页面dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1), jtf2.getText(), jt.getValueAt(list-3, 3), jt.getValueAt(list-3, 4), "置换"});time1++;time2 = 0;time3++;time4++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");} else if(time3>time1 && time3>time2 && time3>time4) {//如果cache2的页面最长时间没有被访问,新页面置换cache2中页面dtm.addRow(new Object[]{jtf2.getText(), jt.getValueAt(list-3, 1),jt.getValueAt(list-3, 2), jtf2.getText(), jt.getValueAt(list-3, 4), "置换"});time1++;time2++;time3 = 0;time4++;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");} else if(time4>time1 && time4>time2 && time4>time3) {//如果cache3的页面最长时间没有被访问,新页面置换cache3中页面dtm.addRow(new Object[]{jtf2.getText(), JO.getValueAt(list-3, 1),JO.getValueAt(list-3, 2), JO.getValueAt(list-3, 3), jtf2.getText(), "置换"});time1++;time2++;time3++;time4 = 0;jtf2.setText("");jlabel2.setText("请输入第" + list + "个访问页面:");}}}}}}2、LRU算法:// cache 更新算法,LRUvoid up_cache(){int i=0;while(i<n){ int j=0;//满么?while(j<m){if((cache[j].state==false)&&(walk_sort[i]!=cache[j].value)){cout<<"cache 有空闲块,不考虑是否要置换."<<endl;cout<<walk_sort[i]<<"被调入 cache...."<<endl;cache[j].value=walk_sort[i++];cache[j].state=true;cache[j].count=0;int kk=0;for (x=0;x<m;x++)cout<<"cache 块"<<x<<": "<<cache[x].value<<endl;cout<<endl;//更新其它 cache 块没使用时间while(kk<m){if(kk!=j&&cache[kk].value!=(-1))cache[kk].count++;kk++;}delay();break;}if(cache[j].value==walk_sort[i]){cout<<endl;cout<<walk_sort[i]<<"命中!!!"<<endl;for (x=0;x<m;x++)cout<<"cache 块"<<x<<": "<<cache[x].value<<endl;cout<<endl;int kk=0;i++;cache[j].count=0;//更新其它 cache 块没使用时间while(kk<m){if(kk!=j&&cache[kk].value!=(-1))cache[kk].count++;kk++;}}j++;}if(j==m){cout<<"cache 已经满了,考虑是否置换."<<endl;cout<<endl;int k=0;while(k<m){if(cache[k].value==walk_sort[i]){cout<<endl;cout<<walk_sort[i]<<"命中!!!"<<endl;for (x=0;x<m;x++)cout<<"cache 块"<<x<<": "<<cache[x].value<<endl;i++;cache[k].count=0;int kk=0;//更新其它 cache 块没使用时间while(kk<m){if(kk!=k)cache[kk].count++;kk++;}break;}k++;}if(k==m)//考虑置换那一块.{int ii=0;int t=0;//要替换的 cache 块号.int max=cache[ii].count;ii++;while(ii<m){if(cache[ii].count>max){max=cache[ii].count;t=ii;}ii++;}//置换cout<<cache[t].value<<"被"<<walk_sort[i]<<"在 cache 的"<<t<<"号块置换..."<<endl;cache[t].value=walk_sort[i++];cache[t].count=0;for (x=0;x<m;x++)cout<<"cache 块"<<x<<": "<<cache[x].value<<endl;int kk=0;//更新其它 cache 块没使用时间while(kk<m){if(kk!=t)cache[kk].count++;kk++;}delay();}}}}3、实验四:单功能流水线调度机构模拟一、实验目的:1、结合数据结构的相关知识,编写流水线调度模拟程序。