非抢占式优先权调度
非抢占式静态优先权调度策略:静态优先权是在创建进程时确定的,且在进程的整个运行期间保持不变。一般地,优先权是利用某一范围内的一个整数来表示的,例如,0~255中的某一整数,当数值愈大时,其优先权愈低。
非抢占式优先权调度:系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成;或因发生某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一优先权最高的进程。
数据结构和符号说明
本调度算法的数据结构PCB共包含了四个公共变量``,四个私有变量timeStart、timeComplete、timeTurnaround、timeWeightedTurnaround
// 四个公共变量:作业名、到达时间、服务时间、优先级
String threadName; int timeArrival; int timeSever; int priority
// 四个私有变量:开始执行时间、完成时间、周转时间、带权周转时间
private int timeStart; private int timeComplete;
private int timeTurnaround; private double timeWeightedTurnaround;
在主类NPPS中有一个进程调度函数dispatch(PCB[] starr),一个根据到达时间进行排序的sort(PCB[] starr, int num)函数,以及一个根据优先级进行排序的函数sortPriority(PCB[] starr, int left, int right)。根据到达时间的sort函数只有在一开始时调用一次排序;根据优先级的sortPriority函数为了减少无意义调用从而节约时间资源,只有rightcount <= num && lastsortflag成立时才会进行一次排序,保证所有进程都进入等待状态并完成排序后不再重复调用浪费资源。
测试类Test包含一个主函数用于启动,以及一个专门用于接受输入进程信息的函数。并且输入的进程数组在测试类中定义,也能实现在NPPS类中的函数直接更改进程的信息。
流程图

源程序
PCB类
import java.text.DecimalFormat;
public class PCB {
/**
* 四个公共变量:作业名、到达时间、服务时间、优先级
*/
String threadName;
int timeArrival;
int timeSever;
int priority;
/**
* 四个私有变量:开始执行时间、完成时间、周转时间、带权周转时间
*/
private int timeStart;
private int timeComplete;
private int timeTurnaround;
private double timeWeightedTurnaround;
public PCB() {
}
public PCB(String threadName, int timeArrival, int timeSever, int priority) {
this.threadName = threadName;
this.timeArrival = timeArrival;
this.timeSever = timeSever;
this.priority = priority;
}
public void setTimeStart(int timeStart) {
//将由算法调度程序分配开始时间
this.timeStart = timeStart;
}
public int getTimeComplete() {
return timeComplete;
}
public int getTimeTurnaround() {
return timeTurnaround
Java实现非抢占式优先权调度算法

本文介绍了非抢占式静态优先权调度策略,即进程的优先权在创建时确定且不可改变。通过Java编程实现该算法,包括PCB类、NPPS类和Test类,详细阐述了数据结构、流程和运行结果。测试用例展示了不同进程的调度情况。
最低0.47元/天 解锁文章
2413





