首页 > 搜索 > 进程模拟轮转调度算法,Java 实现-

进程模拟轮转调度算法,Java 实现-

互联网 2020-10-24 20:04:08
在线算命,八字测算命理

时间片轮转(Round-Robin)调度算法是操作系统一种比较公平的进程调度的方式,这种方式使得就绪队列上的所有进程在每次轮转时都可以运行相同的一个时间片。

基本原理

算法实现原理是,按进程到达顺序(FCFS 原则)将进程依次加入就绪队列当中,然后将 CPU 分配给位于队首的进程,确定一个时间片,让该进程执行一个时间片。当该进程执行时间到时,该进程可能已经执行完毕(可能在时间片未到时就以及执行完毕),或者未执行完毕,如果是前者只需将进程弹出队列即可,如果是后者则将该进程加入队尾,并将 CPU 分配给新的队首进程,如此循环。

进程切换时机

进程在执行时分为两种情况

在该时间片内进程执行完毕,这种情况调度程序将立即把该进程弹出队列,并把 CPU 分配给新的队首进程在该时间片内进程未执行完毕,调度程序将立即中断该进程执行,把该进程加入队尾,并将 CPU 分配给新的队首进程时间片大小的确定

在 RR 算法中,时间片的大小直接影响了系统的性能。

时间片过小,有利于短作业,但是会频繁地切换进程,增加了系统的开销,影响性能。时间片过大,算法退化成 FCFS 算法,如果某个短作业进程之前的进程都是长作业,将导致后面的短作业进程长时间等待。有关的计算周转时间 = 进程完成时间 - 进程到达时间带权周转时间 = 进程周转时间 / 进程实际运行时间平均周转时间 = (进程1周转时间 + ... + 进程n周转时间)/ n平均带权周转时间 = (进程1带权周转时间 + ... + 进程n带权周转时间)/ n实现package cn.vecrates.operatingSystem;import java.util.*;import java.util.concurrent.LinkedBlockingQueue;public class RR {private int mProcessCount; //进程数private Queue mReadyQueue; //就绪队列,存放“待运行的进程private Queue mUnreachQueue; //存放“到达时间未到的进程”private int mTimeSlice; //时间片private Queue mExecutedQueue; //执行完毕的进程队列private double mTotalWholeTime = 0.0;private double mTotalWeightWholeTime = 0.0;private RR(int processCount, Queue processQueue, int timeSlice) {this.mProcessCount = processCount;this.mUnreachQueue = processQueue;mReadyQueue = new LinkedBlockingQueue();this.mTimeSlice = timeSlice;mExecutedQueue = new LinkedList();}/** * RR 算法实现 */public void RRAlgorithm() {mReadyQueue.add(mUnreachQueue.poll());Process currProcess = mReadyQueue.poll();//第一个进程执行int currTime = executeProcess(currProcess, 0);while(!mReadyQueue.isEmpty() || !mUnreachQueue.isEmpty()) {//把所有“到达时间”达到的进程加入运行队列头部while(!mUnreachQueue.isEmpty()) {if(mUnreachQueue.peek().getArrivalTime()0) mReadyQueue.add(currProcess);//运行队列不为空时if(!mReadyQueue.isEmpty()) {currProcess = mReadyQueue.poll();currTime = executeProcess(currProcess, currTime);} else {//当前没有进程执行,但还有进程为到达,时间直接跳转到到达时间currTime = mUnreachQueue.peek().getArrivalTime();}}}private int executeProcess(Process currProcess, int currTime) {if(currProcess.getRemainServiceTime() - mTimeSlice
免责声明:非本网注明原创的信息,皆为程序自动获取互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件12小时内删除。

相关阅读

一周热门

查看更多