用Java完成操作系统实验进程控制

本文主要使用了Java来实现进程控制,一共有三种调度算法:先来先服务(FCFS)、短进程优先(SPF)和非抢占式优先级调度(HFP) 

进程类Process

主要包含了到达时间,实际执行时间,完成时间,周转时间,等待时间

class Process {
    private int id;
    private int arrivalTime;
    private int burstTime;
    private int completionTime;
    private int turnaroundTime;
    private double waitingTime;

    public int getPriority() {
        return Priority;
    }

    public void setPriority(int priority) {
        Priority = priority;
    }

    private int Priority;

    public Process(int id, int arrivalTime, int burstTime) {
        this.id = id;
        this.arrivalTime = arrivalTime;
        this.burstTime = burstTime;
    }

    public void setCompletionTime(int completionTime) {
        this.completionTime = completionTime;
    }

    public void calculateTurnaroundTime() {
        this.turnaroundTime = completionTime - arrivalTime;
    }

    public void calculateWaitingTime() {
        this.waitingTime = (double) turnaroundTime / burstTime;
    }

    public int getId() {
        return id;
    }

    public int getArrivalTime() {
        return arrivalTime;
    }

    public int getBurstTime() {
        return burstTime;
    }

    public int getCompletionTime() {
        return completionTime;
    }

    public int getTurnaroundTime() {
        return turnaroundTime;
    }

    public double getWaitingTime() {
        return waitingTime;
    }
}

 进程集类 ProcessBook

用于存储多个进程,并实现初始化进程集、添加进程、显示进程、各种排序算法和展示调度结果等功能

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;


class ProcessBook {
    private List<Process> processes;

    public ProcessBook() {
        this.processes = new ArrayList<>();
    }

    public void addProcess(Process process) {
        processes.add(process);
    }

    public void displayProcesses() {
        for (Process process : processes) {
            System.out.println("Process ID: " + process.getId() +
                    ", Arrival Time: " + process.getArrivalTime() +
                    ", Burst Time: " + process.getBurstTime());
        }
    }

    public void sortProcessesByArrivalTime() {
        Collections.sort(processes, Comparator.comparingInt(Process::getArrivalTime));
    }

    public void sortProcessesByBurstTime() {
        Collections.sort(processes, Comparator.comparingInt(Process::getBurstTime));
    }

    public void sortProcessesByPriority() {
        Collections.sort(processes, Comparator.comparingInt(Process::getPriority));
    }

    public void scheduleFCFS() {
        int completionTime = 0;
        for (Process process : processes) {
            completionTime += process.getBurstTime();
            process.setCompletionTime(completionTime);
            process.calculateTurnaroundTime();
            process.calculateWaitingTime();
        }
        displaySchedule("First-Come, First-Served (FCFS)");
    }

    public void scheduleSPF() {
        int currentTime = 0;
        for (Process process : processes) {
            currentTime += process.getArrivalTime();
            process.setCompletionTime(currentTime);
            process.calculateTurnaroundTime();
            process.calculateWaitingTime();
        }
        displaySchedule("Shortest Process First (SPF)");
    }

    public void scheduleHFP() {
        sortProcessesByPriority();
        int currentTime = 0;
        for (Process process : processes) {
            currentTime += process.getArrivalTime();
            process.setCompletionTime(currentTime);
            process.calculateTurnaroundTime();
            process.calculateWaitingTime();
        }
        displaySchedule("Highest Priority First (HFP)");
    }

    private void displaySchedule(String title) {
        System.out.println("\n" + title + " Schedule:");
        System.out.println("--------------------------------------------------");
        System.out.println("Process ID\tArrival Time\tBurst Time\tCompletion Time\tTurnaround Time\tWaiting Time");
        System.out.println("--------------------------------------------------");
        for (Process process : processes) {
            System.out.println(process.getId() +
                    "\t\t" + process.getArrivalTime() +
                    "\t\t" + process.getBurstTime() +
                    "\t\t" + process.getCompletionTime() +
                    "\t\t" + process.getTurnaroundTime() +
                    "\t\t" + process.getWaitingTime());
        }
        System.out.println("--------------------------------------------------");
    }
}

主函数,可以选择添加进程,展示进程,以及三种调度算法FCFS、SPF、HFP

import java.util.Scanner;

public class ProcessSchedule {public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    ProcessBook processBook = new ProcessBook();

    while (true) {
        System.out.println("\nProcess Scheduling Simulation Menu:");
        System.out.println("1. Add Process");
        System.out.println("2. Display Processes");
        System.out.println("3. Schedule using FCFS");
        System.out.println("4. Schedule using SPF");
        System.out.println("5. Schedule using HFP");
        System.out.println("0. Exit");

        System.out.print("\nEnter your choice: ");
        int choice = scanner.nextInt();

        switch (choice) {
            case 1:
                System.out.print("Enter Process ID: ");
                int id = scanner.nextInt();
                System.out.print("Enter Arrival Time: ");
                int arrivalTime = scanner.nextInt();
                System.out.print("Enter Burst Time: ");
                int burstTime = scanner.nextInt();

                Process process = new Process(id, arrivalTime, burstTime);
                processBook.addProcess(process);
                break;
            case 2:
                processBook.displayProcesses();
                break;
            case 3:
                processBook.sortProcessesByArrivalTime();
                processBook.scheduleFCFS();
                break;
            case 4:
                processBook.sortProcessesByBurstTime();
                processBook.scheduleSPF();
                break;
            case 5:
                processBook.scheduleHFP();
                break;
            case 0:
                System.out.println("Exiting...");
                System.exit(0);
            default:
                System.out.println("Invalid choice! Please try again.");
        }
    }
}

}

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
进程管理是操作系统中的一个重要组成部分,Java作为一种面向对象的编程语言,也可以用于实现进程管理。下面是一个简单的Java进程管理实验示例: ```java package os.test1; import java.util.*; public class Algorithm { private PCB min=null; //满足运行条件的进程 private int num=0; //一批进程周转时间和 private int start=0; //更新系统开始时间 private double nums=0; //一批带权周转时间 private int count=0; //统计一批进程进程个数 private static Create create=new Create(); //实例化,以方便创建和增加进程 // 进程调度算法 public void algorithm() { ArrayList<PCB> list=create.getList(); while(list.size()>0) { for(int i=0;i<list.size();i++) { PCB pcb=list.get(i); if(pcb.getArriveTime()<=start) { if(min==null) { min=pcb; }else { if(min.getPriority()>pcb.getPriority()) { min=pcb; } } } } if(min!=null) { min.setStartTime(start); start+=min.getNeedTime(); min.setFinishTime(start); min.setTurnaroundTime(min.getFinishTime()-min.getArriveTime()); min.setWeightTurnaroundTime(min.getTurnaroundTime()/min.getNeedTime()); num+=min.getTurnaroundTime(); nums+=min.getWeightTurnaroundTime(); count++; list.remove(min); min=null; }else { start++; } } } // 输出结果 public void printResult() { System.out.println("进程名\t到达时间\t需要时间\t优先级\t开始时间\t完成时间\t周转时间\t带权周转时间"); ArrayList<PCB> list=create.getList(); for(int i=0;i<list.size();i++) { PCB pcb=list.get(i); System.out.println(pcb.getName()+"\t"+pcb.getArriveTime()+"\t"+pcb.getNeedTime()+"\t"+pcb.getPriority()+"\t"+pcb.getStartTime()+"\t"+pcb.getFinishTime()+"\t"+pcb.getTurnaroundTime()+"\t"+pcb.getWeightTurnaroundTime()); } System.out.println("平均周转时间:"+num/count); System.out.println("平均带权周转时间:"+nums/count); } public static void main(String[] args) { Algorithm algorithm=new Algorithm(); algorithm.algorithm(); algorithm.printResult(); } } class Create { private ArrayList<PCB> list=new ArrayList<PCB>(); public Create() { PCB pcb1=new PCB("P1",0,5,3); PCB pcb2=new PCB("P2",1,3,2); PCB pcb3=new PCB("P3",2,4,1); PCB pcb4=new PCB("P4",3,2,4); PCB pcb5=new PCB("P5",4,4,5); list.add(pcb1); list.add(pcb2); list.add(pcb3); list.add(pcb4); list.add(pcb5); } public ArrayList<PCB> getList() { return list; } } class PCB { private String name; //进程名 private int arriveTime; //到达时间 private int needTime; //需要时间 private int priority; //优先级 private int startTime; //开始时间 private int finishTime; //完成时间 private int turnaroundTime; //周转时间 private double weightTurnaroundTime; //带权周转时间 public PCB(String name,int arriveTime,int needTime,int priority) { this.name=name; this.arriveTime=arriveTime; this.needTime=needTime; this.priority=priority; } public String getName() { return name; } public int getArriveTime() { return arriveTime; } public int getNeedTime() { return needTime; } public int getPriority() { return priority; } public int getStartTime() { return startTime; } public void setStartTime(int startTime) { this.startTime=startTime; } public int getFinishTime() { return finishTime; } public void setFinishTime(int finishTime) { this.finishTime=finishTime; } public int getTurnaroundTime() { return turnaroundTime; } public void setTurnaroundTime(int turnaroundTime) { this.turnaroundTime=turnaroundTime; } public double getWeightTurnaroundTime() { return weightTurnaroundTime; } public void setWeightTurnaroundTime(double weightTurnaroundTime) { this.weightTurnaroundTime=weightTurnaroundTime; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值