您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 操作系统实验报告 进程管理 java编写相关的界面
第1页共14页操作系统实验报告计算机学院(院、系)专业班组课学号20姓名Tracy实验日期教师评定实验一进程管理一、实验目的通过实验使学生进一步了解进程、进程状态、进程控制等基本概念。基本能达到下列具体的目标:1.理解进程PCB的概念,以及PCB如何实现、如何组织以及管理。2.复习数据结构中如何对链的操作,包括建链、删除、插入结点等,来实现进程的管理。二、实验内容1、建立一个结点,即PCB块包括用户标识域、状态域(执行、等待、就绪)、link域。2、建立三个队列(执行队列、就绪队列、等待队列)。3、根据进程状态转换实现对三个队列的具体操作。具体的驱动可以采用时间片算法或手动调度的形式完成三个状态之间的转换4、用java编写相关的界面。第2页共14页三、实验步骤1.通过java的awt和swing包进行相关界面的布局,相关代码为:Panelp1=newPanel(newFlowLayout(FlowLayout.LEFT));Panelp2=newPanel(newFlowLayout());//三个显示进程的文本框JTextFieldreadyList,runningList,waitingList,input;//三个进程的链表ArrayListProcessreList=newArrayListProcess();ArrayListProcessruList=newArrayListProcess();ArrayListProcesswaList=newArrayListProcess();IteratorProcessiterRunning,iterReady,iterWaiting;publicMyFrame(){this.setLayout(newBorderLayout());this.add(p1,BorderLayout.NORTH);this.add(p2,BorderLayout.CENTER);init();this.setTitle(进程三态转换);setBounds(300,300,500,300);setVisible(true);}voidinit(){Boxbox1=Box.createHorizontalBox();box1.add(newJLabel(进程就绪队列:));readyList=newJTextField(35);readyList.setEditable(false);box1.add(readyList);第3页共14页Boxbox2=Box.createHorizontalBox();box2.add(newJLabel(进程阻塞队列:));waitingList=newJTextField(35);waitingList.setEditable(false);box2.add(waitingList);Boxbox3=Box.createHorizontalBox();box3.add(newJLabel(进程运行队列:));runningList=newJTextField(35);runningList.setEditable(false);box3.add(runningList);BoxbaseBox1=Box.createVerticalBox();baseBox1.add(box1);baseBox1.add(Box.createVerticalStrut(10));baseBox1.add(box2);baseBox1.add(Box.createVerticalStrut(10));baseBox1.add(box3);p1.add(baseBox1);Buttonb1=newButton(执行—就绪);Buttonb2=newButton(就绪—执行);Buttonb3=newButton(执行—阻塞);Buttonb4=newButton(阻塞—就绪);Buttonexit=newButton(清空所有进程);this.add(exit,BorderLayout.SOUTH);b1.addActionListener(newreadyListener());b2.addActionListener(newrunningListener());b3.addActionListener(newwaitingListener());b4.addActionListener(newready2Listener());exit.addActionListener(newclearListener());Boxbox4=Box.createHorizontalBox();box4.add(b1);第4页共14页box4.add(b2);Boxbox5=Box.createHorizontalBox();box5.add(b3);box5.add(b4);Boxbox6=Box.createHorizontalBox();input=newJTextField(20);input.addActionListener(newinputListener());box6.add(newLabel(请输入进程名字,按回车确认));box6.add(input);BoxbaseBox2=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总体布局第5页共14页2.分别为“执行—》就绪”,“就绪—》执行”,“执行—》阻塞”,“阻塞—》就绪”四个按钮添加监听器,监听队列的三种状态。输入进程也要相关的监听器。输入进程名字的监听器主要代码:classinputListenerimplementsActionListener{Strings=;publicvoidactionPerformed(ActionEvente){if(input.getText().equals()){JOptionPane.showMessageDialog(null,请输入进程名字,警告对话框,JOptionPane.WARNING_MESSAGE);}else{ProcessnewPro=newProcess();newPro.setName(input.getText());reList.add(newPro);//把输入的进程放进就绪队列s=readyList.getText();readyList.setText(s+newPro.getName()+);input.setText();}}}第6页共14页当输入的进程名字为空时,弹出警告输入框:图2进程名字不能为空输入正确显示在就绪队列中(名字分别为:“第一个进程”,“第二个进程”,第三个进程):图3输入三个进程后第7页共14页就绪到执行状态的监听器主要代码:classrunningListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){iterReady=reList.iterator();iterRunning=ruList.iterator();Strings=;if(iterReady.hasNext()){//当就绪进程不为空而且没有进程运行时if(iterRunning.hasNext()==false){//把就绪的第一个进程变为运行状态ProcessnewPro=reList.remove(0);ruList.add(newPro);runningList.setText(newPro.getName());//重新输出就绪状态iterReady=reList.iterator();while(iterReady.hasNext()){ProcessPro=iterReady.next();s=s.concat(Pro.getName()).concat();}readyList.setText(s);}else{JOptionPane.showMessageDialog(null,已有进程运行中',不能进行该操作,警告对话框,JOptionPane.WARNING_MESSAGE);}}else{JOptionPane.showMessageDialog(null,没有任何进程在'就绪队列中',不能进行该操作,警告对话框,JOptionPane.WARNING_MESSAGE);第8页共14页}}}当就绪队列为空时:图4就绪态没有任何进程就绪队列有进程时,单机“就绪—》执行”按钮:图5就绪—》执行第9页共14页当有进程在运行时:图6已有进程运行执行到阻塞状态的监听器主要代码:classwaitingListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){iterRunning=ruList.iterator();iterWaiting=waList.iterator();if(iterRunning.hasNext()==false){JOptionPane.showMessageDialog(null,没有正在执行的进程,警告对话框,JOptionPane.WARNING_MESSAGE);}else{ProcessnewPro=ruList.remove(0);waList.add(newPro);runningList.setText();//重新读取阻塞的进程iterWaiting=waList.iterator();Strings=;while(iterWaiting.hasNext()){ProcessPro=iterWaiting.next();s=s.concat(Pro.getName()).concat();}waitingList.setText(s);}}}第10页共14页执行队列有进程执行是,单击“执行—》阻塞”:图7执行到阻塞状态执行队列没进程,弹出警告对话框:图8没有进程执行执行到就绪态监听器主要代码:classreadyListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){iterRunning=ruList.iterator();iterReady=reList.iterator();if(iterRunning.hasNext()==false){JOptionPane.showMessageDialog(null,没有正在执行的进程,警告对话框,JOptionPane.WARNING_MESSAGE);}else{第11页共14页ProcessnewPro=ruList.remove(0);reList.add(newPro);runningList.setText();//重新读取就绪的进程iterReady=reList.iterator();Strings=;while(iterReady.hasNext()){ProcessPro=iterReady.next();s=s.concat(Pro.getName()).concat();}readyList.setText(s);}}}没有进程在执行,弹出警告对话框:图9没有进程执行执行队列有进程执行是,单击“执行—》就绪”:图10执行到就绪第12页共14页阻塞到就绪态监听器主要代码:classready2ListenerimplementsActionListener{publ
本文标题:操作系统实验报告 进程管理 java编写相关的界面
链接地址:https://www.777doc.com/doc-4603284 .html