📄 sys_process.java~1~
字号:
package design;
import java.util.*;
import design.*;
/**
* <p>Title: 操作系统课程设计</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author 胡波
* @version 1.0
*/
public class Sys_process extends Thread {
int sys_memory_size;
Sys_memory s_memory;
Sys_resource s_resource;
LinkedList running_List;
LinkedList waiting_List;
long sleepTime;
public void setSleepTime(long s){sleepTime=s;}
public long getSleepTime(){return sleepTime;}
public Sys_process(int memory_size,int[] total_resource) {
sys_memory_size=memory_size;
s_memory=new Sys_memory(memory_size);
s_resource=new Sys_resource(total_resource);
sleepTime=500;
}
public void run(){
while(true){
for(int i=0;i<=running_List.size()-1;i++){
process temp=(process)running_List.get(i);
if(temp.getState().toUpperCase().equals("RUNNING")){
if(temp.limit_time_end)
removeProcessFromRunningTable(i);
}
else if(temp.getState().toUpperCase().equals("BLOCKED")){
int[] p_r=temp.getResourceNoGetted();
int[] s_r=s_resource.resourceFree;
boolean run=true;
for(int j=1;j<=s_r.length-1;j++)
if(p_r[j]>s_r[j])
run=false;
if(run){
s_resource.addDistribute(temp.getResourceNoGetted(),temp.getResourceNeeded());
temp.addResource();
temp.start();
running_List.set(i,temp);
}
}
}
boolean xx=true;
while(xx&&waiting_List.size()!=0){
xx=false;
process temp=(process)waiting_List.get(0);
int t_m=temp.getMemorySize();
int[] t_r=temp.getResourceNeeded();
if(s_memory.canBeDistribute(t_m)&&s_resource.canBeAllDistribute(t_r)){
temp.distributeMemory(s_memory.distrubiteMemory(t_m));
s_resource.allDistrubite(t_r);
temp.allResource(t_r);
temp.start();
running_List.add(temp);
waiting_List.remove(0);
xx=true;
}
else if(s_memory.canBeDistribute(t_m)&&s_resource.canBeBestDistribute(t_r)){
temp.distributeMemory(s_memory.distrubiteMemory(t_m));
temp.bestResource(s_resource.bestDistrubire(t_r));
temp.setState("Blocked");
running_List.add(temp);
waiting_List.remove(0);
xx=true;
}
}
try{
sleep(sleepTime);
}
catch(Exception e){
e.printStackTrace();
}
}
}
public void addProcess(process p){//添加进程
waiting_List.addLast(p);
}
public void removeProcessFromRunningTable(int p){//从运行表删除进程
//process temp=new process((process)running_List.get(p));
process temp=(process)running_List.get(p);
s_resource.freeResource(temp.getResourceNeeded());
s_memory.free(temp.getMemoryStart());
//s_memory.free(temp.);
running_List.remove(p);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -