资源预览内容
第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1 仲恺农业工程学院实验报告纸实验一进程管理一、实验目的通过实验使学生进一步了解进程、进程状态、进程控制等基本概念。基本能达到下列具体的目标:1、理解进程 PCB 的概念,以及 PCB 如何实现、如何组织以及管理。2、复习数据结构中如何对链的操作,包括建链、删除、插入结点等,来实现进程的管理。二、实验内容1、建立一个结点,即 PCB 块包括用户标识域、状态域(执行、等待、就绪)、link 域。2、建立三个队列(执行队列、就绪队列、等待队列)。3、根据进程状态转换实现对三个队列的具体操作。具体的驱动可以采用时间片算法或手动调度的形式完成三个状态之间的转换4、用 switch 选择语句选择状态。5、按照自己的设定能完成所有的状态转换的运行(包括创建和运行结束)。三、实验步骤1、复习进程管理三状态模型部分内容。2、预习 C+Builder或 VC+、Delphi、JBuilder线程编程。3、运行示例程序,进一步明确实验要求。可以采用控制台模式或窗口模式。4、上机编程、调试程序。四、主要代码1.通过 java 的 awt 和 swing 包进行相关界面的布局,相关代码为:Panel p1=new Panel(new FlowLayout(FlowLayout.LEFT);Panel p2=new Panel(new FlowLayout();名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 14 页 -2/三个显示进程的文本框JTextField readyList,runningList,waitingList,input;/三个进程的链表ArrayList reList=new ArrayList();ArrayList ruList=new ArrayList();ArrayList waList=new ArrayList();Iterator iterRunning,iterReady,iterWaiting;public MyFrame()this.setLayout(new BorderLayout();this.add(p1,BorderLayout.NORTH);this.add(p2,BorderLayout.CENTER);init();this.setTitle(进程三态转换 );setBounds(300,300,500,300);setVisible(true);void init()Box box1=Box.createHorizontalBox();box1.add(new JLabel(进程就绪队列:);readyList=new JTextField(35);readyList.setEditable(false);box1.add(readyList);Box box2=Box.createHorizontalBox();box2.add(new JLabel(进程阻塞队列:);waitingList=new JTextField(35);waitingList.setEditable(false);box2.add(waitingList);名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 14 页 -3 Box box3=Box.createHorizontalBox();box3.add(new JLabel(进程运行队列:);runningList=new JTextField(35);runningList.setEditable(false);box3.add(runningList);Box baseBox1=Box.createVerticalBox();baseBox1.add(box1);baseBox1.add(Box.createVerticalStrut(10);baseBox1.add(box2);baseBox1.add(Box.createVerticalStrut(10);baseBox1.add(box3);p1.add(baseBox1);Button b1=new Button(执行 就绪);Button b2=new Button(就绪 执行);Button b3=new Button(执行 阻塞);Button b4=new Button(阻塞 就绪);Button exit=new Button(清空所有进程 );this.add(exit,BorderLayout.SOUTH);b1.addActionListener(new readyListener();b2.addActionListener(new runningListener();b3.addActionListener(new waitingListener();b4.addActionListener(new ready2Listener();exit.addActionListener(new clearListener();Box box4=Box.createHorizontalBox();box4.add(b1);box4.add(b2);Box box5=Box.createHorizontalBox();box5.add(b3);box5.add(b4);Box box6=Box.createHorizontalBox();名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 14 页 -4 input=new JTextField(20);input.addActionListener(new inputListener();box6.add(new Label(请输入进程名字,按回车确认 );box6.add(input);Box baseBox2=Box.createVerticalBox();baseBox2.add(box6);baseBox2.add(Box.createVerticalStrut(10);baseBox2.add(box4);baseBox2.add(Box.createVerticalStrut(10);baseBox2.add(box5);p2.add(baseBox2);运行的总体界面如下图所示:图 1 总体布局2.分别为“执行就绪”,“就绪执行”,“执行阻塞”,“阻塞就绪”四个按钮添加监听器,监听队列的三种状态。输入进程也要相关的监听器。输入进程名字的监听器主要代码:名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 14 页 -5 class inputListener implements ActionListener String s=;publicvoid actionPerformed(ActionEvent e)if(input.getText().equals()JOptionPane.showMessageDialog(null,请输入进程名字,警告对话框 ,JOptionPane.WARNING_MESSAGE);else Process newPro=new Process();newPro.setName(input.getText();reList.add(newPro);/把输入的进程放进就绪队列s=readyList.getText();readyList.setText(s+newPro.getName()+);input.setText();当输入的进程名字为空时,弹出警告输入框:名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 14 页 -6 图 2 进程名字不能为空输入正确显示在就绪队列中(名字分别为:“第一个进程”,“第二个进程”,第三个进程):图 3 输入三个进程后名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 14 页 -7 就绪到执行状态的监听器主要代码:class runningListener implements ActionListener publicvoid actionPerformed(ActionEvent e)iterReady=reList.iterator();iterRunning=ruList.iterator();String s=;if(iterReady.hasNext()/当就绪进程不为空而且没有进程运行时if (iterRunning.hasNext()=false)/把就绪的第一个进程变为运行状态Process newPro=reList.remove(0);ruList.add(newPro);runningList.setText(newPro.getName();/重新输出就绪状态iterReady=reList.iterator();while(iterReady.hasNext()Process Pro=iterReady.next();s=s.concat(Pro.getName().concat();readyList.setText(s);else JOptionPane.showMessageDialog(null,已有进程运行中,不能进行该操作 ,警告对话框 ,JOptionPane.WARNING_MESSAGE);else JOptionPane.showMessageDialog(null,没有任何进程在 就绪队列中,不能进行该操作 ,警告对话框 ,名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 14 页 -8 JOptionPane.WARNING_MESSAGE);当就绪队列为空时:图 4 就绪态没有任何进程就绪队列有进程时,单机“就绪执行”按钮:图 5 就绪执行名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 14 页 -9 当有进程在运行时:图 6 已有进程运行执行到阻塞状态的监听器主要代码:class waitingListener implements ActionListener publicvoid actionPerformed(ActionEvent e)iterRunning=ruList.iterator();iterWaiting=waList.iterator();if(iterRunning.hasNext()=false)JOptionPane.showMessageDialog(null,没有正在执行的进程 ,警告对话框 ,JOptionPane.WARNING_MESSAGE);else Process newPro=ruList.remove(0);waList.add(newPro);runningList.setText();/重新读取阻塞的进程iterWaiting=waList.iterator();String s=;while(iterWaiting.hasNext()Process Pro=iterWaiting.next();s=s.concat(Pro.getName().concat();waitingList.setText(s);名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 14 页 -10 执行队列有进程执行是,单击“执行阻塞”:图 7 执行到阻塞状态执行队列没进程,弹出警告对话框:图 8 没有进程执行执行到就绪态监听器主要代码:class readyListener implements ActionListener publicvoid actionPerformed(ActionEvent e)iterRunning=ruList.iterator();iterReady=reList.iterator();if(iterRunning.hasNext()=false)JOptionPane.showMessageDialog(null,没有正在执行的进程 ,警告对话框 ,JOptionPane.WARNING_MESSAGE);
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号