操作系统的作业,也不知道做的对不对,就是做了挺久,记录一下
实体类
package com.luffy.pojo;
// 进程动态优先级调度算法(进程实体类)
public class PID {
private String name;
private int uptime;
private int needTime;
private int priority;
private String state;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getUptime() {
return uptime;
}
public void setUptime(int uptime) {
this.uptime = uptime;
}
public int getNeedTime() {
return needTime;
}
public void setNeedTime(int needTime) {
this.needTime = needTime;
}
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority = priority;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
@Override
public String toString() {
return "PID{" +
"name='" + name + ''' +
", uptime=" + uptime +
", needTime=" + needTime +
", priority=" + priority +
", state='" + state + ''' +
'}';
}
}
主类
package com.luffy.java;
import com.luffy.pojo.PID;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
// 进程动态优先级调度算法
public class Demo_01 {
static int[] uptimes = {0,0,0,0,0};
static PID p1,p2,p3,p4,p5;
static List pidList = new ArrayList<>();
static int max;
static int runningTime = 1;
static boolean flag = true;
public static void main(String[] args) {
System.out.println("输入优先级调度输入名称和需要时间");
init();
System.out.println("all process have finished!");
}
//初始化数据
public static void init(){
Scanner scanner = new Scanner(System.in);
Random random = new Random();
pidList.add(p1 = new PID());
pidList.add(p2 = new PID());
pidList.add(p3 = new PID());
pidList.add(p4 = new PID());
pidList.add(p5 = new PID());
for(int i=0; i < 5; i++){
System.out.println("第" + (i+1) + "个cpu的name");
pidList.get(i).setName(scanner.next());
System.out.println("第" + (i+1) + "个cpu的needTime");
pidList.get(i).setNeedTime(scanner.nextInt());
pidList.get(i).setUptime(uptimes[i]);
pidList.get(i).setState("ready");
pidList.get(i).setPriority(random.nextInt(10)+40);
}
System.out.println();
System.out.println("初始数据:");
System.out.println("namettuptimettneedTimettpriorityttstate");
for(int i = 0; i < 5; i++){
System.out.println(pidList.get(i).getName()+ "ttt"
+ pidList.get(i).getUptime() + "ttt"
+ pidList.get(i).getNeedTime() + "tttt"
+ pidList.get(i).getPriority() + "tttt"
+ pidList.get(i).getState());
}
operation();
}
//运行
public static void operation(){
for(int i = 0; i < pidList.size(); i++){
if(pidList.get(i).getNeedTime() > 0){
pidList.get(i).setState("ready");
}
}
int judge = 0;
for(int i = 0 ; i < pidList.size(); i++){//将所有cup所需的时间加起来赋值给judge
judge = judge + pidList.get(i).getNeedTime();
}
if(judge <= 0){//判断所有cup所需的时间加起来还大不大于0,如果小于等于0就结束cup执行
flag = false;
}
while (flag){
//开始运行
sort();
}
}
//排序得出最大优先级
public static void sort(){
//给优先级最大值的时候,必须先判断cpu所需的时间大于0
for(int i = 0; i < pidList.size(); i++){
if(pidList.get(i).getNeedTime() > 0){
max = pidList.get(i).getPriority();
}
}
for(int i = 0; i < pidList.size(); i++){
if(max < pidList.get(i).getPriority() && pidList.get(i).getNeedTime() > 0){
max = pidList.get(i).getPriority();
}
}
System.out.println("runningTime = " + runningTime++);
execute();
}
//执行操作
public static void execute(){
for(int i=0; i < pidList.size(); i++){
if(pidList.get(i).getNeedTime() > 0){
if(max == pidList.get(i).getPriority()){
//操作优先级最高的cup
uptimes[i] = uptimes[i] + 1;
pidList.get(i).setUptime(uptimes[i]);
pidList.get(i).setNeedTime(pidList.get(i).getNeedTime()-1);
pidList.get(i).setPriority(pidList.get(i).getPriority()-3);
pidList.get(i).setState("running");
break;
}
}
}
System.out.println("namettuptimettneedTimettpriorityttstate");
printRun();
}
//运行打印
private static void printRun() {
for(int i = 0; i < 5; i++){
System.out.println(pidList.get(i).getName()+ "ttt"
+ pidList.get(i).getUptime() + "ttt"
+ pidList.get(i).getNeedTime() + "tttt"
+ pidList.get(i).getPriority() + "tttt"
+ pidList.get(i).getState());
//如果一个进程的所需时间为0了那么它的状态就为已完成
if(pidList.get(i).getNeedTime() <= 0){
pidList.get(i).setState("terminated");
}
}
operation();
}
}



