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

下载本文档

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

文档简介

源代码:第一个类:divDTOpublic class divDTOprivate int divBase;private int length;private int divFlag;public divDTO(int divBase,int length,int divFlag)this.divBase = divBase;this.divFlag = divFlag;this.length = length;public divDTO()public void setDivBase(int base)this.divBase = base;public int getDivBase()return this.divBase;public void setLength(int length)this.length = length;public int getLength()return this.length;public void setDivFlag(int flag)this.divFlag = flag;public int getDivFalg()return this.divFlag;2.第二个类:PcbDTOpublic class PcbDTOstatic final int Running = 1;static final int Ready = 2;static final int Waiting = 3;private String processName;private int runTime;private int prority;private int processState;private int base;private int limit;private int pcbFlag;public PcbDTO(String name, int time,int pro,int base,int limit)cessName = name;this.runTime = time;rity = pro;cessState = 0;this.limit = limit;this.base = base;public PcbDTO()this.pcbFlag = 0;public void setProcessName(String name)cessName = name;public String getProcessName()return processName;public void setRunTime(int time)this.runTime = time;public int getRunTime()return this.runTime;public void setPrority(int prority)rity = prority;public int getPrority()return rity;public void setProcessState(int state)cessState = state;public String getProcessState()String s = new String();if(cessState = 1)s = running;else if(cessState = 2)s = ready;else if(cessState = 3)s = waiting;return s;public int getBase()return this.base;public void setBase(int base)this.base = base;public void setLimit(int limit)this.limit = limit;public int getLimit()return this.limit;第三个类:主类import javax.swing.*;import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.event.*;public class MainFrameprivate JList readyList;private JList waitingList;private JList jobList;private JButton susButton;private JButton relaxButton;private JButton startButton;private JButton newButton;private JLabel nameLabel;private JLabel prorityLabel;private JLabel timeLabel;private JLabel jobLabel;private JLabel readyLabel;private JLabel waitingLabel;private JLabel runningLabel;private JLabel spaceLabel;private JLabel divLabel;private JLabel allocLabel;private JTable readyTable;private JTable runningTable;private JTable divTable;private JTable allocTable;private JTextField nameText;private JTextField timeText;private JTextField spaceText;private JComboBox prorityCom;private JPanel newPanel;private JPanel waitingPanel;private JPanel readyPanel;Vector jobVectorName;Vector jobDtoVector;Vector waitingVectorName;Vector waitingDtoVector;PcbDTO readyDtoArray;PcbDTO newDtoArray;divDTO divDtoArray;PcbDTO newSort;Object readydata;Object runningdata;Object divdata;Object allocdata;int first;int end;int point;PcbDTO a ;public MainFrame()a = new PcbDTO();first = 0;end = 0;point = 0;JFrame jf = new JFrame(进程调度-ws);Container c = jf.getContentPane();c.setLayout(null);/c.setBackground(Color.pink);newPanel = new JPanel();newPanel.setLayout(null);waitingPanel = new JPanel();waitingPanel.setLayout(null);/waitingPanel.setBackground(Color.pink);readyPanel = new JPanel();readyPanel.setLayout(null);susButton = new JButton(挂起);relaxButton = new JButton(释放);startButton = new JButton(开始);newButton = new JButton(新建进程);nameLabel = new JLabel(进程名);prorityLabel = new JLabel(优先级);timeLabel = new JLabel(运行时间);jobLabel = new JLabel(后备队列);readyLabel = new JLabel(就绪队列);waitingLabel = new JLabel(等待队列);runningLabel = new JLabel(运行进程);spaceLabel = new JLabel(需要空间);divLabel = new JLabel(未分分区表);allocLabel = new JLabel(内存分配表);nameText = new JTextField();timeText = new JTextField();spaceText = new JTextField();prorityCom = new JComboBox();prorityCom.setToolTipText(优先级);readyDtoArray = new PcbDTO6;newSort = new PcbDTO6;for(int i = 0; i 6;i+)newSorti = new PcbDTO();newDtoArray = new PcbDTO100;jobDtoVector = new Vector();jobVectorName = new Vector();waitingDtoVector = new Vector();waitingVectorName = new Vector();divDtoArray = new divDTO20;for(int i = 0; i 20; i+)divDtoArrayi = new divDTO();divDtoArrayi.setDivFlag(0);divDtoArray0.setDivFlag(1);divDtoArray0.setDivBase(20);divDtoArray0.setLength(180);readydata = new Object64;runningdata = new Object23;divdata = new Object203;allocdata = new Object203;String col1 = 进程,时间,优先级,状态;String col2 = 进程,时间,优先级;String col3 = 起址,长度,状态;String col4 = 起址,长度,占用进程; readyTable = new JTable(readydata,col1);/readyTable.setEnabled(false);runningTable = new JTable(runningdata,col2);runningTable.setRowHeight(22);runningTable.setEnabled(false);allocTable = new JTable(allocdata,col4);allocTable.setEnabled(false);divTable = new JTable(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);JScrollPane runningSP = new JScrollPane();JScrollPane readySP2 = new JScrollPane();JScrollPane divSP = new JScrollPane();JScrollPane allocSP = new JScrollPane();runningSP.getViewport().add(runningTable);readySP2.getViewport().add(readyTable);divSP.getViewport().add(divTable);allocSP.getViewport().add(allocTable);/int prorityArray = new int10;for(int i = 0;i readyDtoArraymax.getPrority()max = j;j = (j+1)%6;if(max=0)a = readyDtoArraymax;readyDtoArraymax = 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);readyTable.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(readyDtoArrayfirst.getRunTime()-1);if(0 != readyDtoArrayfirst.getPrority()readyDtoArrayfirst.setPrority(readyDtoArrayfirst.getPrority()-1);first = (first+1)%6;elseSystem.out.println(cpu等待中);else /*tryThread.sleep(2000);catch(InterruptedException e1)System.out.println(e1);*/System.out.println(到1);runningTable.setValueAt(,0,0);runningTable.setValueAt(,0,1);runningTable.setValueAt(,0,2);/如果运行时间为0则撤销进程,否则将进程重新添加到就绪队列中if( a.getRunTime()=0)/收回内存空间for(int i = 0;i =a.getBase()newSorti = newSorti+1;point-;/设置内存分配表的内容for(int i = 0; i point;i+)allocTable.setValueAt(String.valueOf(newSorti.getBase(),i,0);allocTable.setValueAt(String.valueOf(newSorti.getLimit(),i,1);allocTable.setValueAt(newSorti.getProcessName(),i,2); allocTable.setValueAt(,point,0);allocTable.setValueAt(,point,1);allocTable.setValueAt(,point,2);/把收回的内存加入到记录未分分区的数组int memoryEnd = 0;int location = 0;int up = -1;/int down = -1;for(int i = 0;i= 0&down = 0)divDtoArrayup.setLength(divDtoArrayup.getLength()+a.getLimit()+divDtoArraydown.getLength();divDtoArraydown.setDivFlag(0);for(int i = (down+1); i = 0&down 0)divDtoArrayup.setLength(divDtoArrayup.getLength()+a.getLimit();else if(up = 0)divDtoArraydown.setLength(divDtoArraydown.getLength()+a.getLimit();divDtoArraydown.setDivBase(a.getBase();else if(up 0&down 0)for(int i = 0; i a.getBase()|divDtoArrayi.getDivFalg()=0)location = i;break; for(int i = 20; i location;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); divDtoArraylocation.setLength(a.getLimit();/设置未分分区表的内容for(int i = 0; i 20;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(!jobDtoVector.isEmpty() int runLength = 0;PcbDTO jobToReady = (PcbDTO)jobDtoVector.elementAt(0);for(int i = 0; i = jobToReady.getLimit()runAllocFlag = i;break;if(runAllocFlag = 0)jobDtoVector.removeElementAt(0);jobVectorName.remove(jobVectorName.indexOf(jobToReady.getProcessName();jobList.setListData(jobVectorName);jobToReady.setProcessState(PcbDTO.Ready);jobToReady.setBase(divDtoArrayrunAllocFlag.getDivBase();runLength = divDtoArrayrunAllocFlag.getLength()- jobToReady.getLimit();if(runLength = 0)int i = runAllocFlag;divDtoArrayi.setDivFlag(0);for(; i 0)int c2 = divDtoArrayrunAllocFlag.getDivBase()+ jobToReady.getLimit();divDtoArrayrunAllocFlag.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 = jobToReady;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;int runi = 0;/用于记录当前新生成的PcbDTO对象应该插入到newSort中的位置for(; runi point; runi+)if(jobToReady.getBase() runi; i-)newSorti =

温馨提示

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

评论

0/150

提交评论