?? processctrl.java
字號:
package os;
import java.util.*;
import javax.swing.JTable;
public class ProcessCtrl {
int policy;//進程調(diào)度策略 1代表先來先 2代表短作業(yè)優(yōu)先 3代表高優(yōu)級優(yōu)先靜態(tài) 4代表分時 5代表分時+高優(yōu)先級優(yōu)先動態(tài)
LinkedList WaitQueue=new LinkedList();//等待隊列
LinkedList RunQueue=new LinkedList();//運行隊列
LinkedList WaitRunQueue=new LinkedList();//就緒隊列
LinkedList CompleteQueue=new LinkedList();//完成隊列
int ConsultTime;//程序消耗時間
int ProcessID=1000;//進程ID
int priority;//優(yōu)先權(quán)
int counter;//時間片
/** Creates a new instance of ProcessCtrl */
public ProcessCtrl() {
}
/**
*創(chuàng)建一個新的進程
*/
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對應進程優(yōu)先級 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","優(yōu)先級","時間片","消耗時間"};
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對應進程優(yōu)先級 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","優(yōu)先級","時間片","消耗時間"};
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","優(yōu)先級","時間片","消耗時間"};
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","優(yōu)先級","時間片","消耗時間"};
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","優(yōu)先級","時間片","消耗時間"};
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 + -