《2022年中南大学计算机体系结构实验报告 2.pdf》由会员分享,可在线阅读,更多相关《2022年中南大学计算机体系结构实验报告 2.pdf(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据分析程序页脚内容 1计算机体系结构课程设计学院:信息科学与工程学院专业班级:指导老师:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 32 页 -数据分析程序页脚内容 2学号:姓名:目录实验 1 对指令操作码进行霍夫曼编码.3一、实验目的.3二、实验内容.3三、设计思路.5四、关键代码.5五、实验截图.7六、源代码.7实验 2 使用 LRU 方法更新 Cache.14一、实验目的.14二、实验内容.14三、设计思路.15四、程序截图.16五、实验代码.16名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 32 页 -数据分析程序页脚内容 3实验总结.31参考文献.
2、31实验 1 对指令操作码进行霍夫曼编码一、实验目的了解和掌握指令编码的基本要求和基本原理二、实验内容1.使用编程工具编写一个程序,对一组指令进行霍夫曼编码,并输出最后的编码结果以及对指令码的长度进行评价。与扩展操作码和等长编码进行比较。2.问题描述以及问题分析举例说明此问题,例如:P1P2P3P4P5P6P70.0.0.0.0.0.0.名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 32 页 -数据分析程序页脚内容 445301505030101有一组指令的操作码共分七类,它们出现概率如下表所示:对此组指令进行HUFFMAN 编码正如下图所示:最后得到的 HUFFMAN 编码如
3、下表所示:P1P2P3P4P5P6P7010110111011110111110111111最短编码长度为:名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 32 页 -数据分析程序页脚内容 5H=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 树进行中序遍历即可完成编码工作。三、设计思路观察上图,不难看出
4、构造HUFFMAN 树所要做的工作:1、先对各指令操作码的出现概率进行排序,构造一个有序链表。2、再取出两个最小的概率节点相加,生成一个生的节点加入到链表中,同时从两表中删除此两个节点。3、在对链表进行排序,链表是否只有一个节点,是则HUFFAN 树构造完毕,否则继续做2 的操作。为此设计一个工作链表(链表的元素时类,此类的功能相当结构。)、HUFFMAN 树节点、HUFFMAN 编码表节点。四、关键代码哈夫曼树重点在于如何排列权值大小不同的结点的顺序private int leafNum;/叶子结点个数 private HaffmanNode hnodes;/哈夫曼树的结点数组public
5、HaffManCode(double weight)/构造指定权值集合的哈夫曼树 int n=weight.length;/n 个叶子结点 this.leafNum=n;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 32 页 -数据分析程序页脚内容 6 this.hnodes=new HaffmanNode2*n-1;/n 个叶子结点的哈夫曼树共有2n-1个结点 for(int i=0;in;i+)/结点数组初始化有n个叶子结点 this.hnodesi=new HaffmanNode(weighti);for(int i=0;in-1;i+)/构造 n-1个 2 度结点,每循
6、环一次,构造一个 2 度结点 double min1,min2;int x1,x2;min1=min2=Integer.MAX_VALUE;/选择最小和次最小权值,初值为最大权值 x1=x2=-1;/记录两个无父母的最小权值结点下标 for(int j=0;jn+i;j+)/查找两个无父母的最小权值结点 if(hnodesj.weightmin1&hnodesj.parent=-1)min2=min1;x2=x1;min1=hnodesj.weight;/min1 记下最小权值 x1=j;/x1记下最小权值结点的下标 else if(hnodesj.weightmin2&hnodesj.par
7、ent=-1)min2=hnodesj.weight;x2=j;/x2记下次最小权值结点的下标 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 32 页 -数据分析程序页脚内容 7五、实验截图六、源代码public class huffman private String str;public huffman(String str)this.str=str;名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 32 页 -数据分析程序页脚内容 8/*创建节点类*param args*/class NodeNode left;Node right;int data;char
8、c;String code=;/*节点数组(字符串类)*param args*/public void creatTree()/先去掉重复的字符串,若不存在将字符加在strRepeat 中名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 32 页 -数据分析程序页脚内容 9String strRepeat=;for(int i=0;i str.length();i+)char c=str.charAt(i);/判断是否存在if(strRepeat.indexOf(c)=-1)/找到字符位置并返回字符所在的位置strRepeat+=c;/统计字符出现的次数并建立节点Node node
9、s=new NodestrRepeat.length();/定义了一个 nodes 数组/存储节点的坐标值int s=0;for(int i=0;i1)sort(nodes);Node node=new Node();Node n1=nodes0;Node n2=nodes1;node.data=n1.data+n2.data;node.left=n1;node.right=n2;/改变节点数组长度Node nodes2=new Nodenodes.length-1;for(int i=2;inodes.length;i+)名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 32
10、页 -数据分析程序页脚内容 11nodes2i-2=nodesi;nodes2nodes2.length-1=node;nodes=nodes2;Node root=nodes0;printCode(root,);/*统计字符出现的次数get方法*/private int getCount(String str,char c)int count=0;for(int i=0;istr.length();i+)名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 32 页 -数据分析程序页脚内容 12if(c=str.charAt(i)count+;return count;/*冒泡排序
11、法*param nodes*/public void sort(Node nodes)for(int i=0;inodes.length;i+)for(int j=i+1;j=nodesj.data)/交换节点对象Node temp=nodesi;nodesi=nodesj;名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 32 页 -数据分析程序页脚内容 13nodesj=temp;/*打印编码*param args*/public void printCode(Node node,String code)if(node!=null)if(node.left=null&node
12、.right=null)System.out.println(node.c+.+node.data+的编码是:+code);printCode(node.left,code+0);printCode(node.right,code+1);名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 32 页 -数据分析程序页脚内容 14public staticvoid main(String args)String str=add bate;huffman hf=new huffman(str);hf.creatTree();实验 2 使用 LRU 方法更新 Cache一、实验目的了解和掌
13、握寄存器分配和内存分配的有关技术。二、实验内容LRU 置换算法是选择最近最久未使用的页面予以置换。该算法赋予每个页面一个访问字段,用来记名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 32 页 -数据分析程序页脚内容 15录一个页面自上次被访问以来经历的时间T,当须淘汰一个页面时,选择现有页面中 T值最大的,即最近最久没有访问的页面。这是一个比较合理的置换算法。举例说明此问题,例如:有一个 CACHE 采用组相连映象方式。每组有四块,为了实现LRU置换算法,在快表中为每块设置一个2 位计数器。我们假设访问序列为“1,1,2,4,3,5,2,1,6,7,1,3”。在访问 CACH
14、E的过程中,块的装入,置换及命中时,具体情况如下表所示:三、设计思路LRU 置换算法是选择最近最久未使用的页面予以置换。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来经历的时间T,当须淘汰一个页面时,选择现有页面中 T 值最大的,即最近最久没有访问的页面。这是一个比较合理的置换算法。名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 32 页 -数据分析程序页脚内容 16四、程序截图五、实验代码import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.tabl
15、e.*;public class lru extends Frame public staticvoid main(String args)JFrame.setDefaultLookAndFeelDecorated(true);名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 32 页 -数据分析程序页脚内容 17lru lruc=new lru();lruc.lauchFrame();JLabel jlabel2;JTextField jtf2;JButton jb_input;JScrollPane jsp;JTable jt;DefaultTableModel dtm;st
16、aticint list=1,count=list-1;int time1=0;int time2=0;int time3=0;int time4=0;public void lauchFrame()this.setLayout(null);名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 32 页 -数据分析程序页脚内容 18this.setBounds(100,100,540,320);/this.setBackground(Color.cyan);this.setVisible(true);jlabel2=new JLabel(请输入第 +list+个访问页面:);jtf2
17、=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);名师资料总结-精品资料欢迎下
18、载-名师精心整理-第 18 页,共 32 页 -数据分析程序页脚内容 19);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
19、);class InputActionListener implements ActionListener /没有输入值,提示publicvoid actionPerformed(ActionEvent e)if(jtf2.getText().equals()Object options=OK;JOptionPane.showOptionDialog(null,输入错误,请按提示输入!,警告,名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 32 页 -数据分析程序页脚内容 20JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESS
20、AGE,null,options,options0);list+;if(count time2&time1 time3&time1time4)/如果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),置换);名师资料总结-精品资料欢迎下载-名师精心整理-第 28 页,共 32 页 -数据分析程序页脚内容 29time1 =0;ti
21、me2+;time3+;time4+;jtf2.setText();jlabel2.setText(请输入第 +list+个访问页面:);elseif(time2time1&time2time3&time2time4)/如果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+;tim
22、e4+;jtf2.setText();jlabel2.setText(请输入第 +list+个访问页面:);elseif(time3time1&time3time2&time3time4)/如果cache2 的页面最长时间没有被访问,新页面置换cache2 中页面名师资料总结-精品资料欢迎下载-名师精心整理-第 29 页,共 32 页 -数据分析程序页脚内容 30dtm.addRow(new Object jtf2.getText(),jt.getValueAt(list-3,1),jt.getValueAt(list-3,2),jtf2.getText(),jt.getValueAt(lis
23、t-3,4),置换);time1+;time2+;time3=0;time4+;jtf2.setText();jlabel2.setText(请输入第 +list+个访问页面:);elseif(time4time1&time4time2&time4time3)/如果cache3 的页面最长时间没有被访问,新页面置换cache3 中页面dtm.addRow(new Object jtf2.getText(),jt.getValueAt(list-3,1),jt.getValueAt(list-3,2),jt.getValueAt(list-3,3),jtf2.getText(),置换);time
24、1+;time2+;time3+;time4=0;jtf2.setText();jlabel2.setText(请输入第 +list+个访问页面:);名师资料总结-精品资料欢迎下载-名师精心整理-第 30 页,共 32 页 -数据分析程序页脚内容 31实验总结体系结构属于计算机整个的结构,涉及计算机的整个结构,从底层到高层,每层的原理,结构及实现,是一门比较抽象的学科,通过这次的几个实验,让我对计算机的编码和页面的替换算法有了更深层次的理解。计算机是一门理论性很强的学科,但是实际的操作又是必不可少的。实践可以加深对课程的理解,也能提高编程能力,总之,通过这次实验,我学到了很多。参考文献1 郑纬民 汤志忠 计算机系统结构清华大学出版社2002 名师资料总结-精品资料欢迎下载-名师精心整理-第 31 页,共 32 页 -数据分析程序页脚内容 322 余腊生 计算机系统结构实验指导书中南大学信息科学与工程学院制定名师资料总结-精品资料欢迎下载-名师精心整理-第 32 页,共 32 页 -