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

📄 sys_process.java~1~

📁 一个整体操作系统的主要功能的计算机模拟实现(含进程、内存与设备管理)
💻 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 + -