抢占式多级反馈队列被抢占后返回下一队列还是回到原处
时间: 2023-12-06 20:03:06 浏览: 46
当抢占式多级反馈队列中的进程被抢占后,它会被移动到下一级队列,而不是回到原来的队列。这是因为抢占式多级反馈队列是一种动态调度算法,它根据进程的执行情况和优先级动态地调整进程所在的队列。如果一个进程被抢占了,它的执行情况显然不是很好,所以应该被移到下一级队列中,以便给其他优先级更高的进程更多的执行时间。如果把它放回原来的队列,那么它可能会再次被分配到CPU,这样会浪费系统资源,并且可能会降低系统的性能。因此,抢占式多级反馈队列中的进程被抢占后会被移动到下一级队列中。
相关问题
多级反馈队列抢占式java实现
可以使用Java中的PriorityQueue和Thread类来实现多级反馈队列抢占式调度算法。具体实现可以参考以下代码:
import java.util.PriorityQueue;
public class MultiLevelFeedbackQueue {
private PriorityQueue<Process> readyQueue;
private Thread currentThread;
private int timeSlice;
public MultiLevelFeedbackQueue(int timeSlice) {
readyQueue = new PriorityQueue<>();
currentThread = null;
this.timeSlice = timeSlice;
}
public void addProcess(Process process) {
readyQueue.add(process);
}
public void run() {
while (!readyQueue.isEmpty()) {
Process process = readyQueue.poll();
currentThread = new Thread(process);
currentThread.start();
try {
Thread.sleep(timeSlice);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (process.isAlive()) {
readyQueue.add(process);
}
}
}
}
class Process implements Runnable, Comparable<Process> {
private int priority;
private int timeLeft;
public Process(int priority, int timeLeft) {
this.priority = priority;
this.timeLeft = timeLeft;
}
@Override
public void run() {
while (timeLeft > 0) {
timeLeft--;
}
}
@Override
public int compareTo(Process o) {
return Integer.compare(priority, o.priority);
}
public boolean isAlive() {
return timeLeft > 0;
}
}
注意:以上代码仅供参考,实际应用中需要根据具体需求进行修改和完善。
非抢占式多级队列调度算法
抢占式多级队列调度算法和非抢占式多级队列调度算法的区别在于抢占式可以在任何时刻停止正在执行的进程并将CPU资源分配给更高优先级的进程,而非抢占式则不能在进程执行过程中将CPU资源转移给更高优先级的进程。在非抢占式多级队列调度算法中,每个进程都被分配到一个先后顺序的队列,根据进程优先级和时间片的大小来决定进程的调度。当一个进程完成时,进程管理器选择下一个就绪队列中优先级最高的进程来运行。