




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 计算机体系结构试验报告 专业班级学号:姓名:指导教师:雷向东一实验目的 通过模拟实现通道处理过程,掌握通道技术。 二、实验内容 结合数据结构的相关知识,编写通道处理过程模拟程序。 1 通道完成一次数据输入输出的过程需三步(如图一所示): (1) 在用户程序中使用访管指令进入管理程序,由CPU 通过管理程序组织一个通道程序,并启 动通道; (2) 通道处理机执行通道程序,完成指定的数据输入输出工作; (3) 通道程序结束后第二次调
2、用管理程序对输入输出请求进行处理每完成一次输入输出工作, CPU 只需要两次调用管理程序,大大减少了对用户程序的打扰。 图一 通道程序,管理程序和用户程序的执行时间关系 2 通道的主要功能(如图二所示): (1)接受CPU 发来的指令,选择一台指定的外围设备与通道相连接 (2)执行CPU 为通道组织的通道程序 (3)管理外围设备的有关地址 (4)管理主存缓冲区的地址 (5)控制外围设备与主存缓冲区间数据交换的个数 (6)
3、指定传送工作结束时要进行的操作 (7)检查外围设备的工作状态,是正常或故障 (8)在数据传输过程中完成必要的格式的变换 三设计思路及代码通道是一种简单的共享通道,主要为多台低速或中速的外围设备服务。它采用分时方式工作,依靠它与cpu之间的高速数据通路分时为多台设备服务。 如果通道上连接了多个外围设备,则此时通道上的各个设备轮流占用一个很短的时间片(通常小于100微秒)传输一个字节,或者说,不同的设备在他所分得的时间片内与通道在逻辑上建立传输连接,此方式也叫做字节交叉方式。与此同时,它还允许一个设备一次占用通道比较长的时间传输一组数据。或者说与
4、通道的连接可以根据需要维持到一组数据全部传送完成,这也称为成组方式。 本次试验主要模拟的是字节交叉方式程序源代码:import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.*;public class ChannelDeal extends Frame public static void main(String args) ChannelDeal lruc = new ChannelDeal();lruc.lauchFrame();Graphics g;
5、Image offScreenImage = null;Label jlabel1;Label jlabel2;TextArea jta1;TextField jtf2;TextField jtf3;Button jb_input;Button run;JScrollPane jsp;JTable jt;DefaultTableModel dtm;public void lauchFrame() this.setLayout(null);this.setBounds(100, 100, 600, 500);this.setBackground(Color.cyan);this.setVisib
6、le(true);jlabel1 = new Label("请选择设备:");jlabel2 = new Label("请输入设备内容:");jta1 = new TextArea();jtf2 = new TextField();jtf3 = new TextField();jb_input = new Button("输入"); run = new Button("运行通道管理器");jlabel1.setBounds(50, 50, 70, 20);jlabel2.setBounds(230, 50, 90,
7、 20);jta1.setBounds(50, 100, 500, 150);jtf2.setBounds(130, 50, 70, 20);jtf3.setBounds(330, 50, 90, 20);jb_input.setBounds(450, 50, 60, 20);run.setBounds(450, 260, 100, 20);this.add(jlabel1);this.add(jlabel2);this.add(jta1);this.add(jtf2);this.add(jtf3);this.add(jb_input);this.add(run);this.addWindow
8、Listener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););jb_input.addActionListener(new InputActionListener();run.addActionListener(new RunActionListener();g = this.getGraphics();new Thread(new PaintThread().start();Object title = "","设备","内容&qu
9、ot;,""dtm = new DefaultTableModel(title, 0);jt = new JTable(dtm);jsp = new JScrollPane(jt);jsp.setViewportView(jt);Panel p = new Panel();p.setBounds(290, 300, 225, 180);p.add(jsp);this.add(p);jta1.append("This is a channel dealing test.n");jta1.append("Please select the faci
10、fity.n");class InputActionListener implements ActionListener public void actionPerformed(ActionEvent e) if(jtf2.getText().equals("") Object options = "OK" ;JOptionPane.showOptionDialog(null, "你的输入存在“”,请按提示输入!", "警告", JOptionPane.DEFAULT_OPTION, JOptionPan
11、e.WARNING_MESSAGE,null, options, options0);dtm.addRow(new Object"", jtf2.getText(), jtf3.getText(), ""); jtf2.setText(""); jtf3.setText("");class RunActionListener implements ActionListener public void actionPerformed(ActionEvent e) new Thread(new TextAreaThre
12、ad().start();class Facility int x, y, width, height;Color color;String s;Boolean flag;public Facility(int x, int y,int width, int height, Color color, String s, Boolean flag) this.x = x;this.y = y;this.width = width;this.height = height;this.color = color;this.s = s;this.flag = flag;public void draw
13、(Graphics g) Color c = g.getColor();g.setColor(color);if(flag = true) g.fillRect(x, y, width, height); else if(flag = false) g.fillOval(x, y, width, height);g.setColor(Color.red);g.drawString(s, x, y+25);g.setColor(c);private class PaintThread implements Runnable public void run() while(true) repain
14、t();try Thread.sleep(500); catch (InterruptedException e) e.printStackTrace();public void paint(Graphics g) Facility f = new Facility(50, 300, 150, 180, Color.gray, "", true);/new一个矩形,表示设备管理器Facility f1 = new Facility(50, 300, 50, 50, Color.blue, "设备1", false);Facility f2 = new F
15、acility(100, 300, 50, 50, Color.cyan, "设备2", false);Facility f3 = new Facility(150, 300, 50, 50, Color.white, "设备3", false);Facility f4 = new Facility(50, 350, 50, 50, Color.black, "设备4", false);Facility f5 = new Facility(100, 350, 50, 50, Color.yellow, "设备5",
16、 false);Facility f6 = new Facility(150, 350, 50, 50, Color.orange, "设备6", false);f.draw(g);f1.draw(g);f2.draw(g);f3.draw(g);f4.draw(g);f5.draw(g);f6.draw(g);if(jt.getRowCount() >= 1) /被选中的设备用红色圆圈代替,现在处理第一个被选择的设备if(jt.getValueAt(0, 1).equals(f1.s) /当第一个被选中的设备是设备1时new Facility(50, 300, 50
17、, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(0, 1).equals(f2.s) /当第一个被选中的设备是设备2时new Facility(100, 300, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(0, 1).equals(f3.s) /当第一个被选中的设备是设备3时new Facility(150, 300, 50, 50, Color.red, "", false).draw
18、(g); else if(jt.getValueAt(0, 1).equals(f4.s) /当第一个被选中的设备是设备4时new Facility(50, 350, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(0, 1).equals(f5.s) /当第一个被选中的设备是设备5时new Facility(100, 350, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(0, 1).equals(f6.
19、s) /当第一个被选中的设备是设备6时new Facility(150, 350, 50, 50, Color.red, "", false).draw(g); if(jt.getRowCount() >= 2) /被选中的设备用红色圆圈代替,现在处理第二个被选择的设备if(jt.getValueAt(1, 1).equals(f1.s) /当第二个被选中的设备是设备1时new Facility(50, 300, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(1, 1).e
20、quals(f2.s) /当第二个被选中的设备是设备2时new Facility(100, 300, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(1, 1).equals(f3.s) /当第二个被选中的设备是设备3时new Facility(150, 300, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(1, 1).equals(f4.s) /当第二个被选中的设备是设备4时new Facility(5
21、0, 350, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(1, 1).equals(f5.s) /当第二个被选中的设备是设备5时new Facility(100, 350, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(1, 1).equals(f6.s) /当第二个被选中的设备是设备6时new Facility(150, 350, 50, 50, Color.red, "", f
22、alse).draw(g); if(jt.getRowCount() >= 3) /被选中的设备用红色圆圈代替,现在处理第三个被选择的设备if(jt.getValueAt(2, 1).equals(f1.s) /当第三个被选中的设备是设备1时new Facility(50, 300, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(2, 1).equals(f2.s) /当第三个被选中的设备是设备2时new Facility(100, 300, 50, 50, Color.red, "
23、", false).draw(g); else if(jt.getValueAt(2, 1).equals(f3.s) /当第三个被选中的设备是设备3时new Facility(150, 300, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(2, 1).equals(f4.s) /当第三个被选中的设备是设备4时new Facility(50, 350, 50, 50, Color.red, "", false).draw(g); else if(jt.getValue
24、At(2, 1).equals(f5.s) /当第三个被选中的设备是设备5时new Facility(100, 350, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(2, 1).equals(f6.s) /当第三个被选中的设备是设备6时new Facility(150, 350, 50, 50, Color.red, "", false).draw(g); if(jt.getRowCount() >= 4) /被选中的设备用红色圆圈代替,现在处理第四个被选择的设备if(j
25、t.getValueAt(3, 1).equals(f1.s) /当第四个被选中的设备是设备1时new Facility(50, 300, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(3, 1).equals(f2.s) /当第四个被选中的设备是设备2时new Facility(100, 300, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(3, 1).equals(f3.s) /当第四个被选中的设备
26、是设备3时new Facility(150, 300, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(3, 1).equals(f4.s) /当第四个被选中的设备是设备4时new Facility(50, 350, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(3, 1).equals(f5.s) /当第四个被选中的设备是设备5时new Facility(100, 350, 50, 50, Color.r
27、ed, "", false).draw(g); else if(jt.getValueAt(3, 1).equals(f6.s) /当第四个被选中的设备是设备6时new Facility(150, 350, 50, 50, Color.red, "", false).draw(g); if(jt.getRowCount() >= 5) /被选中的设备用红色圆圈代替,现在处理第五个被选择的设备if(jt.getValueAt(4, 1).equals(f1.s) /当第五个被选中的设备是设备1时new Facility(50, 300, 50, 50
28、, Color.red, "", false).draw(g); else if(jt.getValueAt(4, 1).equals(f2.s) /当第五个被选中的设备是设备2时new Facility(100, 300, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(4, 1).equals(f3.s) /当第五个被选中的设备是设备3时new Facility(150, 300, 50, 50, Color.red, "", false).draw(g);
29、 else if(jt.getValueAt(4, 1).equals(f4.s) /当第五个被选中的设备是设备4时new Facility(50, 350, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(4, 1).equals(f5.s) /当第五个被选中的设备是设备5时new Facility(100, 350, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(4, 1).equals(f6.s) /
30、当第五个被选中的设备是设备6时new Facility(150, 350, 50, 50, Color.red, "", false).draw(g);if(jt.getRowCount() >= 6) /被选中的设备用红色圆圈代替,现在处理第六个被选择的设备if(jt.getValueAt(5, 1).equals(f1.s) /当第六个被选中的设备是设备1时new Facility(50, 300, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(5, 1).equals
31、(f2.s) /当第六个被选中的设备是设备2时new Facility(100, 300, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(5, 1).equals(f3.s) /当第六个被选中的设备是设备3时new Facility(150, 300, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(5, 1).equals(f4.s) /当第六个被选中的设备是设备4时new Facility(50, 35
32、0, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(5, 1).equals(f5.s) /当第六个被选中的设备是设备5时new Facility(100, 350, 50, 50, Color.red, "", false).draw(g); else if(jt.getValueAt(5, 1).equals(f6.s) /当第六个被选中的设备是设备6时new Facility(150, 350, 50, 50, Color.red, "", false)
33、.draw(g); public void update(Graphics g) this.paint(g); class TextAreaThread implements Runnable ChannelDeal cd = new ChannelDeal(); public void run() for(int i=0; i<3; i+) jta1.setText("The CPU is doing something."); try Thread.sleep(500); catch(InterruptedException e) e.printStackTrac
34、e(); jta1.setText("The CPU is doing something."); try Thread.sleep(500); catch(InterruptedException e) e.printStackTrace(); jta1.append("n"); char buffer1 = null;char buffer2 = null;char buffer3 = null;char buffer4 = null;char buffer5 = null;char buffer6 = null;if(jt.getRowCount(
35、) = 1) /只选中一个设备时jta1.append("设备号:" + jt.getValueAt(0, 1) + " 内容:n"); try Thread.sleep(1000); catch(InterruptedException e) e.printStackTrace(); String s = (String) jt.getValueAt(0, 2);/s用于存放该设备的内容buffer1 = s.toCharArray();/buffer1存放内容的字符形式String s1 = ""for(int i=0; i<
36、;buffer1.length; i+) s1 = s1 + buffer1i;/s1一个字符一个字符的增加jta1.append("设备号:" + jt.getValueAt(0, 1) + " 内容:" + s1 + "n");try Thread.sleep(1000); catch(InterruptedException e) e.printStackTrace(); else if(jt.getRowCount() = 2) /选中两个设备时jta1.append("设备号:" + jt.getValu
37、eAt(0, 1) + " 内容:n");jta1.append("设备号:" + jt.getValueAt(1, 1) + " 内容:n"); try Thread.sleep(1000); catch(InterruptedException e) e.printStackTrace(); String s = (String) jt.getValueAt(0, 2);/s用于存放第一个设备的内容buffer1 = s.toCharArray();/buffer1存放第一个设备的内容的字符形式s = (String) jt.ge
38、tValueAt(1, 2);/s用于存放第二个设备的内容buffer2 = s.toCharArray();/buffer1存放第二个设备的内容的字符形式String s1 = ""String s2 = ""int size = 0;/size用于存放设备中最长内容的长度if(buffer1.length >= buffer2.length) size = buffer1.length;for(int i=0; i<size; i+) if(i < buffer1.length) s1 = s1 + buffer1i;/s1一个字符
39、一个字符的增加jta1.append("设备号:" + jt.getValueAt(0, 1) + " 内容:" + s1 + "n");jta1.append("设备号:" + jt.getValueAt(1, 1) + " 内容:" + s2 + "n");try Thread.sleep(1000); catch(InterruptedException e) e.printStackTrace(); if(i < buffer2.length) s2 = s2
40、+ buffer2i;/s2一个字符一个字符的增加 jta1.append("设备号:" + jt.getValueAt(0, 1) + " 内容:" + s1 + "n"); jta1.append("设备号:" + jt.getValueAt(1, 1) + " 内容:" + s2 + "n"); try Thread.sleep(1000); catch(InterruptedException e) e.printStackTrace(); else if(jt.ge
41、tRowCount() = 3) /选中三个设备时jta1.append("设备号:" + jt.getValueAt(0, 1) + " 内容:n");jta1.append("设备号:" + jt.getValueAt(1, 1) + " 内容:n");jta1.append("设备号:" + jt.getValueAt(2, 1) + " 内容:n"); try Thread.sleep(1000); catch(InterruptedException e) e.pr
42、intStackTrace(); String s = (String) jt.getValueAt(0, 2);/s用于存放第一个设备的内容buffer1 = s.toCharArray();/buffer1存放第一个设备的内容的字符形式s = (String) jt.getValueAt(1, 2);/s用于存放第二个设备的内容buffer2 = s.toCharArray();/buffer2存放第二个设备的内容的字符形式s = (String) jt.getValueAt(2, 2);/s用于存放第三个设备的内容buffer3 = s.toCharArray();/buffer3存放第
43、三个设备的内容的字符形式String s1 = ""String s2 = ""String s3 = ""int size = 0;/size用于存放设备中最长内容的长度if(buffer1.length>=buffer2.length && buffer1.length>=buffer3.length) size = buffer1.length; else if(buffer2.length>=buffer1.length && buffer2.length>=buffer
44、3.length) size = buffer2.length; else size = buffer3.length;for(int i=0; i<size; i+) if(i < buffer1.length) s1 = s1 + buffer1i;/s1一个字符一个字符的增加jta1.append("设备号:" + jt.getValueAt(0, 1) + " 内容:" + s1 + "n");jta1.append("设备号:" + jt.getValueAt(1, 1) + " 内
45、容:" + s2 + "n");jta1.append("设备号:" + jt.getValueAt(2, 1) + " 内容:" + s3 + "n");try Thread.sleep(1000); catch(InterruptedException e) e.printStackTrace(); if(i < buffer2.length) s2 = s2 + buffer2i;/s2一个字符一个字符的增加 jta1.append("设备号:" + jt.getValue
46、At(0, 1) + " 内容:" + s1 + "n"); jta1.append("设备号:" + jt.getValueAt(1, 1) + " 内容:" + s2 + "n"); jta1.append("设备号:" + jt.getValueAt(2, 1) + " 内容:" + s3 + "n"); try Thread.sleep(1000); catch(InterruptedException e) e.printSt
47、ackTrace(); if(i < buffer3.length) s3 = s3 + buffer3i;/s3一个字符一个字符的增加 jta1.append("设备号:" + jt.getValueAt(0, 1) + " 内容:" + s1 + "n"); jta1.append("设备号:" + jt.getValueAt(1, 1) + " 内容:" + s2 + "n"); jta1.append("设备号:" + jt.getValue
48、At(2, 1) + " 内容:" + s3 + "n"); try Thread.sleep(1000); catch(InterruptedException e) e.printStackTrace(); else if(jt.getRowCount() = 4) /选中四个设备时jta1.append("设备号:" + jt.getValueAt(0, 1) + " 内容:n");jta1.append("设备号:" + jt.getValueAt(1, 1) + " 内容:n
49、");jta1.append("设备号:" + jt.getValueAt(2, 1) + " 内容:n");jta1.append("设备号:" + jt.getValueAt(3, 1) + " 内容:n"); try Thread.sleep(1000); catch(InterruptedException e) e.printStackTrace(); String s = (String) jt.getValueAt(0, 2);/s用于存放第一个设备的内容buffer1 = s.toChar
50、Array();/buffer1存放第一个设备的内容的字符形式s = (String) jt.getValueAt(1, 2);/s用于存放第二个设备的内容buffer2 = s.toCharArray();/buffer2存放第二个设备的内容的字符形式s = (String) jt.getValueAt(2, 2);/s用于存放第三个设备的内容buffer3 = s.toCharArray();/buffer3存放第三个设备的内容的字符形式s = (String) jt.getValueAt(3, 2);/s用于存放第四个设备的内容buffer4 = s.toCharArray();/buf
51、fer4存放第四个设备的内容的字符形式String s1 = ""String s2 = ""String s3 = ""String s4 = ""int size = 0;/size用于存放设备中最长内容的长度if(buffer1.length>=buffer2.length && buffer1.length>=buffer3.length && buffer1.length>=buffer4.length) size = buffer1.length; el
52、se if(buffer2.length>=buffer1.length && buffer2.length>=buffer3.length && buffer2.length>=buffer4.length) size = buffer2.length; else if(buffer3.length>=buffer1.length && buffer3.length>=buffer2.length && buffer3.length>=buffer4.length)size = buffer3
53、.length; else size = buffer4.length;for(int i=0; i<size; i+) if(i < buffer1.length) s1 = s1 + buffer1i;/s1一个字符一个字符的增加jta1.append("设备号:" + jt.getValueAt(0, 1) + " 内容:" + s1 + "n");jta1.append("设备号:" + jt.getValueAt(1, 1) + " 内容:" + s2 + "n&
54、quot;);jta1.append("设备号:" + jt.getValueAt(2, 1) + " 内容:" + s3 + "n");jta1.append("设备号:" + jt.getValueAt(3, 1) + " 内容:" + s4 + "n");try Thread.sleep(1000); catch(InterruptedException e) e.printStackTrace(); if(i < buffer2.length) s2 = s2
55、+ buffer2i;/s2一个字符一个字符的增加 jta1.append("设备号:" + jt.getValueAt(0, 1) + " 内容:" + s1 + "n"); jta1.append("设备号:" + jt.getValueAt(1, 1) + " 内容:" + s2 + "n"); jta1.append("设备号:" + jt.getValueAt(2, 1) + " 内容:" + s3 + "n&quo
56、t;); jta1.append("设备号:" + jt.getValueAt(3, 1) + " 内容:" + s4 + "n"); try Thread.sleep(1000); catch(InterruptedException e) e.printStackTrace(); if(i < buffer3.length) s3 = s3 + buffer3i;/s3一个字符一个字符的增加 jta1.append("设备号:" + jt.getValueAt(0, 1) + " 内容:" + s1 + "n"); jta1.append("设备号:" + jt.getValueAt(1, 1) + " 内容:" + s2 + "n&qu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冠心病搭桥围手术期护理
- 四年级上册科学教学设计-3.4《弹簧测力计》 教科版
- 2025人才聘用合同不能取代劳动合同
- 8 和 9 的加、减法(教学设计)-2024-2025学年一年级上册数学人教版(2024)001
- 八年级历史下册 第五单元 国防建设与外交成就 第15课 钢铁长城教学实录 新人教版
- 2025家居用品购销合同协议书
- 2023二年级数学下册 六 田园小卫士-万以内的加减法(二)信息窗3 解决求比一个数多几的数是多少和求比一个数少几的数是多少的问题第1课时教学实录 青岛版六三制
- 2024秋八年级道德与法治上册 第一单元 学习文明礼仪 第1课 以礼相待 第3框《入乡随俗》教学实录 苏教版
- 2025年租房合同书范本定金版
- 七年级道德与法治下册 第一单元 青春时光第一课 青春的邀约第2框 成长的不仅仅是身体教学实录 新人教版
- 无底薪劳动合同范本(3篇)
- 金字塔原理(完整版)
- 认识自我 悦纳自我 课件- 高中生心理健康主题班会
- 部编版《道德与法治》五年级下册第12课《富起来到强起来》精品教案
- 企业安全生产一台账三清单
- 大型设备的吊装技术课件
- 各种网络安全设备巡检报告汇总
- 爱美的小公鸡(共22张)课件
- 丽声北极星分级绘本第三级下 A Long Wait课件
- 沥青路面工程施工监理细则
- 不稳定性心绞痛和非ST段抬高心肌梗死诊断与治疗指南(全文)
评论
0/150
提交评论