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("********************************");
        }
    }

}

posted on 2016-12-26 10:20  多情剑客无情剑26  阅读(3799)  评论(0编辑  收藏  举报