Java_操作系統的先進先出調度算法,優先級調度算法



public class Process {
    private String name;//進程名字
    private int priority;//進程優先級,默認為5,1<=pri<=10
    public Process(String name) {
        super();
        this.name = name;
        priority = 5;
        System.out.println("--------------------------------");
        System.out.println("*****"+this.getName()+"已經生成!,優先級為"+this.getPriority()+"*****");
        System.out.println("********************************");
    }
    public Process(String name, int priority) {
        super();
        this.name = name;
        this.priority = priority;
        System.out.println("--------------------------------");
        System.out.println("*****"+this.getName()+"已經生成!,優先級為"+this.getPriority()+"*****");
        System.out.println("********************************");
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPriority() {
        return priority;
    }
    public void setPriority(int priority) {
        this.priority = priority;
    }
    
}

import java.util.Scanner;

public class FIFO {
    public int pageSize=3;
    public Scanner input = new Scanner(System.in);
    public String [] inPage= new String[pageSize];
    public int [] cmp= new int[pageSize];//存放當前頁面的優先級
    
    public static void main(String[] args) {
        new FIFO().fifo();
    }
    public void fifo(){
        System.out.println("假設最多一次可以容納為3個進程,進程默認優先級為5,輸入-1表示退出");
        int point=0;//類指針
        String [] prNames =new String[1024];
        int flag=0;
        while(!(prNames[flag]=input.next()).equals("-1")){
            Process p = new Process(prNames[flag]);
            int loca=find(prNames[flag]);
            if(flag<pageSize){
                inPage[flag]=p.getName();
                traverse();
            }else if(prNames[flag].equals(prNames[flag-1])){
                traverse();
                continue;
            }else if(loca!=-1){
                point=(point+1)%pageSize;
                traverse();
            }else if(loca==-1){
                inPage[point]=p.getName();
                traverse();
                point=(point+1)%pageSize;
            }
            flag++;
        }
    }
    public int find(String str){
        //如果返回-1說明沒有找到相同的元素
        int loca=-1;
        for(int i=0;i<inPage.length;i++)
        {
            if(str.equals(inPage[i]))
                loca=i;
        }
        return loca;
    }
    public void traverse(){
        int i=0;
        for (String str : inPage) {
            System.out.println("--------------------------------");
            System.out.println("第"+(i++)+"個頁面存放的是"+str+"進程");
            System.out.println("********************************");
        }
    }

}

import java.util.Scanner;

public class Priority {
    public int pageSize=3;
    public Scanner input = new Scanner(System.in);
    public String [] inPage= new String[pageSize];
    public int [] cmp= new int[pageSize];//存放當前頁面的優先級
    public String prName=null;
    public int tempPri;
    public static void main(String[] args) {
        new Priority().pri();
    }
    public void pri(){
        int flag=0;
        while(true){
            prName=input.next();
            tempPri=input.nextInt();
            Process p = new Process(prName,tempPri);
            int minPage=com(tempPri);
            if(flag<pageSize){
                inPage[flag]=p.getName();
                cmp[flag]=p.getPriority();
                traverse();
            }else if(minPage==-1){
                traverse();
                continue;
            }else if(minPage!=-1){
                inPage[minPage]=p.getName();
                cmp[minPage]=p.getPriority();
                traverse();
            }
            flag++;
        }
    }
    public int com(int t){
        int min=t;
        //如果minPage等於-1說明新來進程比當前的優先級都低
        int minPage=-1;
        for(int i=0;i<pageSize;i++){
            if(cmp[i]<min) {
                min=cmp[i];
                minPage=i;
            }
        }
        return minPage;
    }
    public void traverse(){
        int i=0;
        for (String str : inPage) {
            System.out.println("--------------------------------");
            System.out.println("第"+(i++)+"個頁面存放的是"+str+"進程");
            System.out.println("********************************");
        }
    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM