操作系统实验进程调度和内存管理java语言版本_第1页
操作系统实验进程调度和内存管理java语言版本_第2页
操作系统实验进程调度和内存管理java语言版本_第3页
操作系统实验进程调度和内存管理java语言版本_第4页
操作系统实验进程调度和内存管理java语言版本_第5页
已阅读5页,还剩45页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、源代码:第一个类: divDTOpublicclassdivDTOprivateintdivBase;privateintlength;privateintdivFlag;publicdivDTO(intdivBase,intlength,intdivFlag)this.divBase=divBase;this.divFlag=divFlag;this.length=length;publicdivDTO()publicvoidsetDivBase(intbase)this.divBase=base;publicintgetDivBase()returnthis.divBase;publicv

2、oidsetLength(intlength)this.length=length;publicintgetLength()returnthis.length;publicvoidsetDivFlag(intflag)this.divFlag=flag;publicintgetDivFalg()returnthis.divFlag;第二个类: PcbDTO publicclassPcbDTOstaticfinalintRunning=1;staticfinalintReady=2;staticfinalintWaiting=3;privateStringprocessName;privatei

3、ntrunTime;privateintprority;privateintprocessState;privateintbase;privateintlimit;privateintpcbFlag;publicPcbDTO(Stringname,inttime,intpro,intbase,intlimit)cessName=name;this.runTime=time;rity=pro;cessState=0;this.limit=limit;this.base=base;publicPcbDTO()this.pcbFlag=0;publicvoidsetProcessName(Strin

4、gname)cessName=name;publicStringgetProcessName()returnprocessName;publicvoidsetRunTime(inttime)this.runTime=time;publicintgetRunTime()returnthis.runTime;publicvoidsetPrority(intprority)rity=prority;publicintgetPrority()rity;publicvoidsetProcessState(intstate)cessState=state;publicStringgetProcessSta

5、te()Strings=newString();if(cessState=1)s=running;elseif(cessState=2)s=ready;elseif(cessState=3)s=waiting;returns;publicintgetBase()returnthis.base;publicvoidsetBase(intbase)this.base=base;publicvoidsetLimit(intlimit)this.limit=limit;publicintgetLimit()returnthis.limit;第三个类:主类importjavax.swing.*;impo

6、rtjava.util.*;importjava.awt.*;publicclassMainFrameprivateJListreadyList;privateJListwaitingList;privateJListjobList;privateJButtonsusButton;privateJButtonrelaxButton;privateJButtonstartButton;privateJButtonnewButton;privateJLabelnameLabel;privateJLabelprorityLabel;privateJLabeltimeLabel;privateJLab

7、eljobLabel;privateJLabelreadyLabel;privateJLabelwaitingLabel;privateJLabelrunningLabel;privateJLabelspaceLabel;privateJLabeldivLabel;privateJLabelallocLabel;privateJTablereadyTable;privateJTablerunningTable;privateJTabledivTable;privateJTableallocTable;privateJTextFieldnameText;privateJTextFieldtime

8、Text;privateJTextFieldspaceText;privateJComboBoxprorityCom;privateJPanelnewPanel;privateJPanelwaitingPanel;privateJPanelreadyPanel;VectorjobVectorName;VectorjobDtoVector;VectorwaitingVectorName;VectorwaitingDtoVector;PcbDTOreadyDtoArray;PcbDTOnewDtoArray;divDTOdivDtoArray;PcbDTOnewSort;Objectreadyda

9、ta;Objectrunningdata;Objectdivdata;Objectallocdata;intfirst;intend;intpoint;PcbDTOa;publicMainFrame()a=newPcbDTO();first=0;end=0;point=0;JFramejf=newJFrame( 进程调度 -ws);Containerc=jf.getContentPane();c.setLayout(null);/c.setBackground(Color.pink);newPanel=newJPanel();newPanel.setLayout(null);waitingPa

10、nel=newJPanel();waitingPanel.setLayout(null);/waitingPanel.setBackground(Color.pink);readyPanel=newJPanel();readyPanel.setLayout(null);susButton=newJButton(挂起 );relaxButton=newJButton(释放 );startButton=newJButton(开始 );newButton=newJButton( 新建进程 );nameLabel=newJLabel( 进程名 );prorityLabel=newJLabel(优先级

11、);timeLabel=newJLabel(运行时间 );jobLabel=newJLabel(后备队列 );readyLabel=newJLabel(就绪队列 );waitingLabel=newJLabel(等待队列 );runningLabel=newJLabel(运行进程 );spaceLabel=newJLabel( 需要空间 );divLabel=newJLabel(未分分区表 );allocLabel=newJLabel(内存分配表 );nameText=newJTextField();timeText=newJTextField();spaceText=newJTextFiel

12、d();prorityCom=newJComboBox();prorityCom.setToolTipText(优先级 );readyDtoArray=newPcbDTO6;newSort=newPcbDTO6;for(inti=0;i6;i+)newSorti=newPcbDTO();newDtoArray=newPcbDTO100;jobDtoVector=newVector();jobVectorName=newVector();waitingDtoVector=newVector();waitingVectorName=newVector();divDtoArray=newdivDTO

13、20;for(inti=0;i20;i+)divDtoArrayi=newdivDTO();divDtoArrayi.setDivFlag(0);divDtoArray0.setDivFlag(1);divDtoArray0.setDivBase(20);divDtoArray0.setLength(180);readydata=newObject64;runningdata=newObject23;divdata=newObject203;allocdata=newObject203;Stringcol1=进程 , 时间 , 优先级 , 状态 ;Stringcol2=进程 , 时间 , 优先

14、级 ;Stringcol3=起址 , 长度 , 状态 ;Stringcol4=起址 , 长度 , 占用进程 ;readyTable=newJTable(readydata,col1);/readyTable.setEnabled(false);runningTable=newJTable(runningdata,col2);runningTable.setRowHeight(22);runningTable.setEnabled(false);allocTable=newJTable(allocdata,col4);allocTable.setEnabled(false);divTable=n

15、ewJTable(divdata,col3);divTable.setEnabled(false);divTable.setValueAt(String.valueOf(20),0,0);divTable.setValueAt(String.valueOf(180),0,1);divTable.setValueAt(String.valueOf(1),0,2);JScrollPanerunningSP=newJScrollPane();JScrollPanereadySP2=newJScrollPane();JScrollPanedivSP=newJScrollPane();JScrollPa

16、neallocSP=newJScrollPane();runningSP.getViewport().add(runningTable);readySP2.getViewport().add(readyTable);divSP.getViewport().add(divTable);allocSP.getViewport().add(allocTable);/intprorityArray=newint10;for(inti=0;ireadyDtoArraymax.getPrority()max=j;j=(j+1)%6;if(max=0)a=readyDtoArraymax;readyDtoA

17、rraymax=readyDtoArrayfirst;readyDtoArrayfirst=a;readyTable.setValueAt(readyDtoArraymax.getProcessName(),max,0);readyTable.setValueAt(readyDtoArraymax.getRunTime(),max,1);readyTable.setValueAt(readyDtoArraymax.getPrority(),max,2);readyTable.setValueAt(readyDtoArraymax.getProcessState(),max,3);readyTa

18、ble.setValueAt(,first,0);readyTable.setValueAt(,first,1);readyTable.setValueAt(,first,2);readyTable.setValueAt(,first,3);runningTable.setValueAt(a.getProcessName(),0,0);runningTable.setValueAt(a.getRunTime(),0,1);runningTable.setValueAt(a.getPrority(),0,2);readyDtoArrayfirst.setRunTime(readyDtoArray

19、first.getRunTime()-1);if(0!=readyDtoArrayfirst.getPrority()readyDtoArrayfirst.setPrority(readyDtoArrayfirst.getPrority()-1);first=(first+1)%6;else);else/*tryThread.sleep(2000);catch(InterruptedExceptione1)*/到 1); runningTable.setValueAt(,0,0); runningTable.setValueAt(,0,1); runningTable.setValueAt(,

20、0,2);/ 如果运行时间为 0 则撤销进程,否则将进程重新添加到就绪队列中if(a.getRunTime()=0)收回内存空间for(inti=0;i=a.getBase()newSorti=newSorti+1;point-;设置内存分配表的内容for(inti=0;ipoint;i+)allocTable.setValueAt(String.valueOf(newSorti.getBase(),i,0);allocTable.setValueAt(String.valueOf(newSorti.getLimit(),i,1);allocTable.setValueAt(newSorti.

21、getProcessName(),i,2);allocTable.setValueAt(,point,0);allocTable.setValueAt(,point,1);allocTable.setValueAt(,point,2);把收回的内存加入到记录未分分区的数组intmemoryEnd=0;intlocation=0;intup=-1;/intdown=-1;for(inti=0;i=0&down=0)divDtoArrayup.setLength(divDtoArrayup.getLength()+a.getLimit()+divDtoArraydown.getLength();d

22、ivDtoArraydown.setDivFlag(0);for(inti=(down+1);i=0&down0)divDtoArrayup.setLength(divDtoArrayup.getLength()+a.getLimit();elseif(up=0)divDtoArraydown.setLength(divDtoArraydown.getLength()+a.getLimit();divDtoArraydown.setDivBase(a.getBase();elseif(up0&down0)for(inti=0;ia.getBase()|divDtoArrayi.getDivFa

23、lg()=0)location=i;break;for(inti=20;ilocation;i-)if(divDtoArrayi-1.getDivFalg()=1)divDtoArrayi.setDivBase(divDtoArrayi-1.getDivBase();divDtoArrayi.setDivFlag(1);divDtoArrayi.setLength(divDtoArrayi-1.getLength();divDtoArraylocation.setDivBase(a.getBase();divDtoArraylocation.setDivFlag(1);divDtoArrayl

24、ocation.setLength(a.getLimit();设置未分分区表的内容for(inti=0;i20;i+)if(divDtoArrayi.getDivFalg()=1)divTable.setValueAt(String.valueOf(divDtoArrayi.getDivBase(),i,0);divTable.setValueAt(String.valueOf(divDtoArrayi.getLength(),i,1);divTable.setValueAt(String.valueOf(divDtoArrayi.getDivFalg(),i,2);if(!jobDtoVec

25、tor.isEmpty()intrunLength=0;PcbDTOjobToReady=(PcbDTO)jobDtoVector.elementAt(0);for(inti=0;i=jobToReady.getLimit()runAllocFlag=i;break;if(runAllocFlag=0)jobDtoVector.removeElementAt(0);jobVectorName.remove(jobVectorName.indexOf(jobToReady.getProcessName();jobList.setListData(jobVectorName);jobToReady

26、.setProcessState(PcbDTO.Ready);jobToReady.setBase(divDtoArrayrunAllocFlag.getDivBase();runLength=divDtoArrayrunAllocFlag.getLength()-jobToReady.getLimit();if(runLength=0)inti=runAllocFlag;divDtoArrayi.setDivFlag(0);for(;i0)intc2=divDtoArrayrunAllocFlag.getDivBase()+jobToReady.getLimit();divDtoArrayr

27、unAllocFlag.setDivBase(c2);divDtoArrayrunAllocFlag.setLength(runLength);divTable.setValueAt(String.valueOf(c2),runAllocFlag,0);divTable.setValueAt(String.valueOf(runLength),runAllocFlag,1);divTable.setValueAt(String.valueOf(divDtoArrayrunAllocFlag.getDivFalg(),runAllocFlag,2);readyDtoArrayend=jobToR

28、eady;readyTable.setValueAt(jobToReady.getProcessName(),end,0);readyTable.setValueAt(jobToReady.getRunTime(),end,1);readyTable.setValueAt(jobToReady.getPrority(),end,2);readyTable.setValueAt(jobToReady.getProcessState(),end,3);end=(end+1)%6;intruni=0;/用于记录当前新生成的PcbDTO对象应该插入到 newSort 中的位置for(;runipoin

29、t;runi+)if(jobToReady.getBase()runi;i-)newSorti=newSorti-1;allocTable.setValueAt(String.valueOf(newSorti.getBase(),i,0);allocTable.setValueAt(String.valueOf(newSorti.getLimit(),i,1);allocTable.setValueAt(newSorti.getProcessName(),i,2);插入新生成的对象newSortruni=jobToReady;allocTable.setValueAt(String.value

30、Of(jobToReady.getBase(),runi,0);allocTable.setValueAt(String.valueOf(jobToReady.getLimit(),runi,1);allocTable.setValueAt(jobToReady.getProcessName(),runi,2);point+;elsereadyDtoArrayend=a;readyTable.setValueAt(a.getProcessName(),end,0);readyTable.setValueAt(a.getRunTime(),end,1);readyTable.setValueAt

31、(a.getPrority(),end,2);readyTable.setValueAt(a.getProcessState(),end,3);end=(end+1)%6;/elseif(jb=newButton)intnewAllocFlag=-1;intnewLength=0;if(nameText.getText().trim().length()=0)JOptionPane.showMessageDialog(null,进程名不能为空! );elseif(timeText.getText().trim().length()=0)JOptionPane.showMessageDialog

32、(null,运行时间不能为空 );elseif(spaceText.getText().trim().length()=0)JOptionPane.showMessageDialog(null,空间不能为空 );elsetest.setRunTime(Integer.parseInt(timeText.getText();test.setLimit(Integer.parseInt(spaceText.getText();Strings=prorityCom.getSelectedItem().toString();test.setPrority(Integer.parseInt(s);test.setProcessName(nameText.getText().trim();newDtoArraycount=test;jobDtoVector.add(newDtoArraycount);jobVectorName.add(newDtoArraycount.getProcessName();jobList.setListData(jobVectorName);count+;nameText.setText();timeText.setText();spaceText.setText();PcbDTOb=(PcbDTO)jobDtoVector

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论