中南大学计算机体系结构实验报告

上传人:第*** 文档编号:56889283 上传时间:2018-10-16 格式:DOCX 页数:16 大小:268.78KB
返回 下载 相关 举报
中南大学计算机体系结构实验报告_第1页
第1页 / 共16页
中南大学计算机体系结构实验报告_第2页
第2页 / 共16页
中南大学计算机体系结构实验报告_第3页
第3页 / 共16页
中南大学计算机体系结构实验报告_第4页
第4页 / 共16页
中南大学计算机体系结构实验报告_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《中南大学计算机体系结构实验报告》由会员分享,可在线阅读,更多相关《中南大学计算机体系结构实验报告(16页珍藏版)》请在金锄头文库上搜索。

1、计算机体系结构 课程设计 学院: 信息科学与工程学院 专业班级: 指导老师: 学号: 姓名: 目录目录 实验 1 对指令操作码进行霍夫曼编码.3 一、实验目的.3 二、实验内容.3 三、设计思路.4 四、关键代码.4 五、实验截图.5 六、源代码.5 实验 2 使用 LRU 方法更新 Cache8 一、实验目的.8 二、实验内容.8 三、设计思路.9 四、程序截图.9 五、实验代码.9 实验总结.16 参考文献.16 实验 1 对指令操作码进行霍夫曼编码 一、实验目的 了解和掌握指令编码的基本要求和基本原理 二、实验内容 1.使用编程工具编写一个程序,对一组指令进行霍夫曼编码,并输出最后的编码

2、结果 以及对指令码的长度进行评价。与扩展操作码和等长编码进行比较。 2. 问题描述以及问题分析 举例说明此问题,例如: P1P2P3P4P5P6P7 0.450.300.150.050.030.010.01 有一组指令的操作码共分七类,它们出现概率如 下表所示: 对此组指令进行 HUFFMAN 编码正如下图所示: 最后得到的 HUFFMAN 编码如下表所示: P1P2P3P4P5P6P7 010110111011110111110111111 最短编码长度为: H=0.45*1+0.30*2+0.15*3+0.05*4+0.03*5+0.01*6+0.01*6=-1.95. 要对指令的操作码进

3、行 HUFFMAN 编码,只要根据指令的各类操作码的出现概率构造 HUFFMAN 树再进行 HUFFAM 编码。此过程的难点构造 HUFFMAN 树,进行 HUFFAM 编 码只要对你所生成的 HUFFMAN 树进行中序遍历即可完成编码工作。 三、设计思路 观察上图 ,不难看出构造 HUFFMAN 树所要做的工作:1、先对各指令操作码的出现 概率进行排序,构造一个有序链表。2、再取出两个最小的概率节点相加,生成一个生的节 点加入到链表中,同时从两表中删除此两个节点。3、在对链表进行排序,链表是否只有一 个节点,是则 HUFFAN 树构造完毕,否则继续做 2 的操作。为此设计一个工作链表(链表

4、的元素时类,此类的功能相当结构。 ) 、HUFFMAN 树节点、HUFFMAN 编码表节点。 四、关键代码 哈夫曼树重点在于如何排列权值大小不同的结点的顺序 private int leafNum; /叶子结点个数 private HaffmanNode hnodes; /哈 夫曼树的结点数组 public HaffManCode(double weight) /构造指定权值集合的哈夫曼树 int n = weight.length; /n 个叶子结点 this.leafNum = n; this.hnodes = new HaffmanNode2*n-1; /n 个叶子结点的哈夫曼树共有 2

5、n-1 个结点 for(int i=0; i1) sort(nodes); Node node=newnew Node(); Node n1=nodes0; Node n2=nodes1; node.data=n1.data+n2.data; node.left=n1; node.right=n2; /改变节点数组长度 Node nodes2=newnew Nodenodes.length-1; forfor(intint i=2;i=nodesj.data) /交换节点对象 Node temp=nodesi; nodesi=nodesj; nodesj=temp; /* * 打印编码 * p

6、aramparam args */ publicpublic voidvoid printCode(Node node,String code) if if(node != nullnull) if if(node.left=nullnull printCode(node.left,code+“+0); printCode(node.right,code+“+1); publicpublic staticstatic voidvoid main(String args) String str=“add bate“; huffman hf=newnew huffman(str); hf.crea

7、tTree(); 实验 2 使用 LRU 方法更新 Cache 一、实验目的 了解和掌握寄存器分配和内存分配的有关技术。 二、实验内容 LRU 置换算法是选择最近最久未使用的页面予以置换。该算法赋予每个页面一个访问字 段,用来记录一个页面自上次被访问以来经历的时间 T,当须淘汰一个页面时,选择现有 页面中 T 值最大的,即最近最久没有访问的页面。这是一个比较合理的置换算法。 举例说 明此问题,例如: 有一个 CACHE 采用组相连映象方式。每组有四块,为了实现 LRU 置换 算法,在快表中为每块设置一个 2 位计数器。我们假设访问序列为“1,1,2,4,3,5,2,1,6,7,1,3” 。 在

8、访问 CACHE 的过程中,块的装入,置换及命中时,具体情况如下表所示: 三、设计思路 LRU 置换算法是选择最近最久未使用的页面予以置换。该算法赋予每个页面一个访问 字段,用来记录一个页面自上次被访问以来经历的时间 T,当须淘汰一个页面时,选择现 有 页面中 T 值最大的,即最近最久没有访问的页面。这是一个比较合理的置换算法。 四、程序截图 五、实验代码 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class lru extends F

9、rame public static void main(String args) JFrame.setDefaultLookAndFeelDecorated(true); lru lruc = new lru(); lruc.lauchFrame(); 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; i

10、nt 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

11、, 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 titl

12、e = “访问序列“,“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 vo

13、id actionPerformed(ActionEvent e) if(jtf2.getText().equals(“) Object options = “OK“ ; JOptionPane.showOptionDialog(null, “输入错误,请按提示输入!“, “警告“, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options0); list+; if(count time2 time1 = 0; time2+; time3+; time4+; jtf2.setText(“);

14、jlabel2.setText(“请输入第“ + list + “个访问页面:“); else if(time2time1 time1+; time2 = 0; time3+; time4+; jtf2.setText(“); jlabel2.setText(“请输入第“ + list + “个访问页面:“); else if(time3time1 time1+; time2+; time3 = 0; time4+; jtf2.setText(“); jlabel2.setText(“请输入第“ + list + “个访问页面:“); else if(time4time1 time1+; ti

15、me2+; time3+; time4 = 0; jtf2.setText(“); jlabel2.setText(“请输入第“ + list + “个访问页面:“); 实验总结 体系结构属于计算机整个的结构,涉及计算机的整个结构,从底层到高层,每层的原 理,结构及实现,是一门比较抽象的学科,通过这次的几个实验,让我对计算机的编码和 页面的替换算法有了更深层次的理解。 计算机是一门理论性很强的学科,但是实际的操作 又是必不可少的。实践可以加深对课程的理解,也能提高编程能力,总之,通过这次实验, 我学到了很多。 参考文献 1 郑纬民 汤志忠 计算机系统结构 清华大学出版社 2002 2 余腊生 计算机系统结构实验指导书 中南大学信息科学与工程学院制定

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号