设计一个有 N个进程共享的进程调度程序,采用最高优先数优先的调度算法

最高优先数优先

代码:

import java.util.Scanner;

public class PSA {
    private static int i;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入进程的数量:");
        int num = sc.nextInt();
        PCB pcb[]=new PCB[num];
        System.out.println("请输入"+pcb.length+"个进程的名称:");
        for(int i=0; i<pcb.length; i++) {
            pcb[i]=new PCB();
            pcb[i].name = sc.next();
        }
        System.out.println("请输入"+pcb.length+"个进程的优先级:");
        for(int i=0; i<pcb.length; i++) {
            pcb[i].priority = sc.nextInt();
        }
        System.out.println("请输入"+pcb.length+"个进程的需要运行时间:");
        for(int i=0; i<pcb.length; i++) {
            pcb[i].needtime = sc.nextFloat();
        }
        for (int i=0;i<pcb.length;i++) {
            System.out.println("进程:" + pcb[i].name + " 的优先级为:" + pcb[i].priority);
        }
        PSA(pcb);
    }
    
    public static void PSA(PCB[] pcb) {//高优先数优先调度
        for(int i=0;i<pcb.length-1;i++) {//按照优先数从大到小进入就绪队列
            for(int j=0;j<pcb.length-1-i;j++) {
                if(pcb[j].priority<pcb[j+1].priority) {
                    PCB temp=pcb[j];
                    pcb[j]=pcb[j+1];
                    pcb[j+1]=temp;
                }
            }
        }
        for(int i=0;i<pcb.length;i++) {
            System.out.println(pcb[i].name);
        }
        int Length=pcb.length;
        while(Length>0) {//就绪队列不为空
            pcb[0].runtime++;
            pcb[0].priority--;
            
            if(pcb[0].runtime<pcb[0].needtime){//当前进程没运行结束时
                System.out.println("进程" + pcb[0].name + "正在运行!已经运行"+pcb[0].runtime+"个时间片");
                for(int i=1;i<Length;i++) {//将已经运行完的进程插入到就绪队列中适当位置
                    if(pcb[0].priority<pcb[i].priority){
                        for(int j=0;j<i;j++){
                            PCB temp=pcb[0];
                            pcb[j]=pcb[j+1];
                            pcb[i]=temp;
                        }
                    }
                }
            }
            else{//运行结束
                System.out.println("进程" + pcb[0].name + "运行结束!一共运行了"+pcb[0].runtime+"个时间片");
                for(int i=0;i<Length-1;i++){
                    pcb[i]=pcb[i+1];
                }
                                Length--;
                pcb[Length-1]=null;
            }
    }
    }
}

pcb类

代码:

import java.util.LinkedList;

public class PCB {
    public String name;//进程名
    public boolean state= false;//状态
    public int priority;//优先数
    public float needtime;//需要运行时间
    public float runtime;//已经运行时间
    public float arrivetime;//到达时间
    public float starttime;//开始运行时间
    public float finishtime;//完成时间
    //public static LinkedList<PCB> link = new LinkedList<>();
    public float response;//响应比=1+等待时间/需要运行时间
    public float waittime;//等待时间
    public PCB() {
        this.priority = (int)(Math.random() * 5);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值