⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 processctrl.java

📁 操作系统进程调度算法java实现
💻 JAVA
字号:
package os;
import java.util.*;

import javax.swing.JTable;
public class ProcessCtrl {
	int policy;//进程调度策略  1代表先来先  2代表短作业优先 3代表高优级优先静态 4代表分时 5代表分时+高优先级优先动态
    LinkedList WaitQueue=new LinkedList();//等待队列
   LinkedList RunQueue=new LinkedList();//运行队列
    LinkedList WaitRunQueue=new LinkedList();//就绪队列
    LinkedList CompleteQueue=new LinkedList();//完成队列
   int ConsultTime;//程序消耗时间
   int ProcessID=1000;//进程ID
   int priority;//优先权
   int counter;//时间片
   /** Creates a new instance of ProcessCtrl */
   public ProcessCtrl() {
      
   }
   /**
    *创建一个新的进程
    */
    JTable createAProcess(int priority,int ConsultTime){
     
       this.priority=priority;
       this.ConsultTime=ConsultTime;
       this.counter=priority;
       this.ProcessID=createID();//生成ID
       Vector PCB=new Vector(4);//进程控制块 0对应进程ID 1对应进程优先级 2对应进程时间片 3对应进程消耗时间
        PCB.add(new Integer(ProcessID));
        PCB.add(new Integer(priority));
        PCB.add(new Integer(counter));
        PCB.add(new Integer(ConsultTime));
       //入就绪队列
       WaitRunQueue.add(PCB);
       //Vector v=(Vector)WaitRunQueue.getFirst();
       //Integer k=(Integer)v.get(0);
       //int m=k.intValue();
       //System.out.println(m);
      
       String [] headings=new String[]{"ID","优先级","时间片","消耗时间"};
       Object[][]data=new Object[WaitRunQueue.size()][4];
       for(int i=0;i<WaitRunQueue.size();i++){
        Vector v=(Vector)WaitRunQueue.get(i);
        
        data[i][0]=(Integer)v.get(0);
        data[i][1]=(Integer)v.get(1);
        data[i][2]=(Integer)v.get(2);
        data[i][3]=(Integer)v.get(3);
       }
        
       JTable table=new JTable(data,headings);
       return table;//返回填充过信息的表
     
   }
   
   
    JTable createAProcess(int ProcessID,int priority,int ConsultTime){
     
       this.priority=priority;
       this.ConsultTime=ConsultTime;
       this.counter=priority;
       this.ProcessID=ProcessID;//生成ID
       Vector PCB=new Vector(4);//进程控制块 0对应进程ID 1对应进程优先级 2对应进程时间片 3对应进程消耗时间
        PCB.add(new Integer(ProcessID));
        PCB.add(new Integer(priority));
        PCB.add(new Integer(counter));
        PCB.add(new Integer(ConsultTime));
       //入就绪队列
       WaitRunQueue.add(PCB);
       //Vector v=(Vector)WaitRunQueue.getFirst();
       //Integer k=(Integer)v.get(0);
       //int m=k.intValue();
       //System.out.println(m);
      
       String [] headings=new String[]{"ID","优先级","时间片","消耗时间"};
       Object[][]data=new Object[WaitRunQueue.size()][4];
       for(int i=0;i<WaitRunQueue.size();i++){
        Vector v=(Vector)WaitRunQueue.get(i);
        
        data[i][0]=(Integer)v.get(0);
        data[i][1]=(Integer)v.get(1);
        data[i][2]=(Integer)v.get(2);
        data[i][3]=(Integer)v.get(3);
       }
        
       JTable table=new JTable(data,headings);
       return table;//返回填充过信息的表
     
   }
   
   
    static int id=1000;
     static int createID(){//生成ID
     id=id+5;
     return id;
     
    }
    
    
     void goTOWaitQueue(Vector v){//入等待队列
      WaitQueue.add(v);

      
     }
    
     void WaitToRun(){//等待队列全部入就绪队列
      for(int i=0;i<WaitQueue.size();i++){
       WaitRunQueue.add((Vector)WaitQueue.remove(i));
      }
      
 
     }
    
     JTable getWaitRun(){//得到WaitRun队列视图
       String [] headings=new String[]{"ID","优先级","时间片","消耗时间"};
       Object[][]data=new Object[WaitRunQueue.size()][4];
      
       for(int i=0;i<WaitRunQueue.size();i++){

        Vector vv=(Vector)WaitRunQueue.get(i);
        
        data[i][0]=(Integer)vv.get(0);
        data[i][1]=(Integer)vv.get(1);
        data[i][2]=(Integer)vv.get(2);
        data[i][3]=(Integer)vv.get(3);
       }
        
       JTable table=new JTable(data,headings);
       return table;//返回填充过信息的表
     }
    
    
     JTable getWait(){//得到Wait队列视图
      String [] headings=new String[]{"ID","优先级","时间片","消耗时间"};
       Object[][]data=new Object[WaitQueue.size()][4];
       for(int i=0;i<WaitQueue.size();i++){
        Vector vv=(Vector)WaitQueue.get(i);
        
        data[i][0]=(Integer)vv.get(0);
        data[i][1]=(Integer)vv.get(1);
        data[i][2]=(Integer)vv.get(2);
        data[i][3]=(Integer)vv.get(3);
       }
        
       JTable table=new JTable(data,headings);
       return table;//返回填充过信息的表
      
     }
    
     JTable getComplete(){//得到Complete队列视图
      String [] headings=new String[]{"ID","优先级","时间片","消耗时间"};
       Object[][]data=new Object[CompleteQueue.size()][4];
       for(int i=0;i<CompleteQueue.size();i++){
        Vector vv=(Vector)CompleteQueue.get(i);
        
        data[i][0]=(Integer)vv.get(0);
        data[i][1]=(Integer)vv.get(1);
        data[i][2]=(Integer)vv.get(2);
        data[i][3]=(Integer)vv.get(3);
       }
        
       JTable table=new JTable(data,headings);
       return table;//返回填充过信息的表
      
     }
    
    
    
    
    Vector schedule(int policy){
     this.policy=policy;
     Vector v=new Vector();
     switch(policy){
     case 1: v=FirstDo();break;
     case 2:v=ShortWork();break;
     case 3:v=StaticPriority();break;
     case 4:v=DivideTime();break;
     //case 5:DivideAndDynamicPriority();break;

     }
     return v;  
    }
    boolean can=true;//返回是否还能再运行,队列为空停止运行
    boolean ifCanSchedule(){
     if(WaitRunQueue.size()>0) can=true;
     else can=false;
     return can;
    }
   
   
    Vector FirstDo(){
     Vector v=(Vector)WaitRunQueue.removeFirst();
     
   
     return v;
      
    }
   
   
   
    Vector ShortWork(){
     Integer temp1=new Integer("1000");
     int k=0;
     for(int i=0;i<WaitRunQueue.size();i++)
     {
      
      Vector v=(Vector)WaitRunQueue.get(i);
      Integer gg=(Integer)v.get(3);
      if(gg.compareTo(temp1)<0) {temp1=gg; k=i;}
      
     }
     
     return (Vector)WaitRunQueue.remove(k);
       
    }
   
   
    Vector StaticPriority(){
     Integer temp1=new Integer("0");
     int k=0;
     for(int i=0;i<WaitRunQueue.size();i++)
     {
      
      Vector v=(Vector)WaitRunQueue.get(i);
      Integer gg=(Integer)v.get(1);
      if(gg.compareTo(temp1)>0) {temp1=gg; k=i;}
      
     }
     
     return (Vector)WaitRunQueue.remove(k);
       
    }
   
    int DivideTemp=0;
    Vector DivideTime(){

      
      Vector v=(Vector)WaitRunQueue.getFirst();
      Integer ConsultTime=(Integer)v.get(3);
      Integer counter=(Integer)v.get(2);
      if(counter.compareTo(ConsultTime)>=0)
      {
       v.add(2,new Integer(0));
       v.add(3,new Integer(0));
       DivideTemp=1;
       return (Vector)WaitRunQueue.removeFirst();
       
      }
      
      
      else
      {
       
       int k=ConsultTime.intValue();
       int x=counter.intValue();
       v.add(3,new Integer(k-x));
       WaitRunQueue.add(v);
       DivideTemp=0;
       return (Vector)WaitRunQueue.removeFirst();
      }
     
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -