使用java编写非抢占式优先权调度算法
时间: 2024-05-25 14:06:12 浏览: 124
非抢占式优先级调度算法
3星 · 编辑精心推荐
非抢占式静态优先权调度算法是一种进程调度算法,它根据进程的静态优先级来决定进程的调度顺序。在Java中,可以使用以下步骤来实现非抢占式优先权调度算法:
1. 定义一个进程控制块(PCB)类,包含作业名、到达时间、服务时间、优先级、开始执行时间、完成时间、周转时间、带权周转时间等属性。
2. 创建一个进程队列,将所有进程按照到达时间从小到大排序。
3. 定义一个优先级比较器,用于将进程按照优先级从高到低排序。
4. 循环遍历进程队列,每次选择优先级最高的进程进行执行,直到所有进程都执行完毕。
下面是Java代码的一个简单实现:
```java
import java.util.*;
class PCB {
String threadName; // 作业名
int timeArrival; // 到达时间
int timeSever; // 服务时间
int priority; // 优先级
int timeStart; // 开始执行时间
int timeComplete; // 完成时间
int timeTurnaround; // 周转时间
double timeWeightedTurnaround; // 带权周转时间
public PCB(String threadName, int timeArrival, int timeSever, int priority) {
this.threadName = threadName;
this.timeArrival = timeArrival;
this.timeSever = timeSever;
this.priority = priority;
}
}
class PriorityComparator implements Comparator<PCB> {
public int compare(PCB p1, PCB p2) {
return p2.priority - p1.priority;
}
}
public class NonPreemptivePriorityScheduling {
public static void main(String[] args) {
List<PCB> processList = new ArrayList<PCB>();
processList.add(new PCB("P1", 0, 5, 3));
processList.add(new PCB("P2", 1, 3, 1));
processList.add(new PCB("P3", 2, 8, 2));
processList.add(new PCB("P4", 3, 6, 4));
Collections.sort(processList, new Comparator<PCB>() {
public int compare(PCB p1, PCB p2) {
return p1.timeArrival - p2.timeArrival;
}
});
int currentTime = 0;
for (PCB process : processList) {
process.timeStart = currentTime;
process.timeComplete = currentTime + process.timeSever;
process.timeTurnaround = process.timeComplete - process.timeArrival;
process.timeWeightedTurnaround = (double) process.timeTurnaround / process.timeSever;
currentTime = process.timeComplete;
}
Collections.sort(processList, new PriorityComparator());
System.out.println("作业名\t到达时间\t服务时间\t优先级\t开始时间\t完成时间\t周转时间\t带权周转时间");
for (PCB process : processList) {
System.out.println(process.threadName + "\t" + process.timeArrival + "\t\t" + process.timeSever + "\t\t" + process.priority + "\t\t" + process.timeStart + "\t\t" + process.timeComplete + "\t\t" + process.timeTurnaround + "\t\t" + process.timeWeightedTurnaround);
}
}
}
```
阅读全文