调度算法-时间片轮转+例题详解

时间片轮转RR进程调度算法

1.基本概念

在轮转(RR)法中,系统将所有的就绪进程按FCFS策略排成一个就绪队列。系统可设置每隔一定时间(如30 ms)便产生一次中断,去激活进程调度程序进行调度,把CPU分配给队首进程,并令其执行一个时间片。当它运行完毕后,又把处理机分配给就绪队列中新的队首进程,也让它执行一个时间片。
在RR调度算法中,应在何时进行进程的切换,可分为两种情况:① 若一个时间片尚未用完,正在运行的进程便已经完成,就立即激活调度程序,将它从就绪队列中删除,再调度就绪队列中队首的进程运行,并启动一个新的时间片。② 在一个时间片用完时,计时器中断处理程序被激活。如果进程尚未运行完毕,调度程序将把它送往就绪队列的末尾。

2.例题

q = 1和q = 4时进程的周转时间如下

在这里插入图片描述

解析如下:

以q=4为例,当进程A到达时间=0,服务时间=4,正好是一个时间片的时间q。所以完成时间=4,周转时间=完成时间-到达时间=4,带权周转时间=周转时间/提供服务的时间=4/4=1。
为了更好理解,我们看继续进程B:由于进程B在A执行一个时间片之后,所以B进程的等待时间=4,一个新的时间片到来,进行执行进程B,而进程B的服务时间为3,小于一个时间片,因此进程B可以在一个时间片内结束,而且可以提前激活调度程序。B进程的完成时间=等待时间+服务时间=4+3=7,周转时间=完成时间-到达时间=7-1=6,带权周转时间=周转时间/提供服务的时间=6/3=2。

调度算法-优先级调度算法+例题

  • 19
    点赞
  • 160
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
FCFS调度算法是一种先来先服务的进程调度算法,即按照进程到达的先后顺序进行调度。在该算法中,当一个进程到达后,如果CPU正在执行其他进程,则该进程需要等待前面的进程执行完毕后才能开始执行。下面是一个简单的Java实现示例: ```java import java.util.*; public class FCFS { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入进程数:"); int n = sc.nextInt(); int[] arrivalTime = new int[n]; // 进程到达时间 int[] burstTime = new int[n]; // 进程执行时间 int[] finishTime = new int[n]; // 进程完成时间 int[] turnAroundTime = new int[n]; // 周转时间 int[] waitingTime = new int[n]; // 等待时间 double avgTurnAroundTime = 0; // 平均周转时间 double avgWaitingTime = 0; // 平均等待时间 // 输入每个进程的到达时间和执行时间 for (int i = 0; i < n; i++) { System.out.print("请输入第" + (i + 1) + "个进程的到达时间和执行时间:"); arrivalTime[i] = sc.nextInt(); burstTime[i] = sc.nextInt(); } // 计算每个进程的完成时间、周转时间和等待时间 for (int i = 0; i < n; i++) { if (i == 0) { finishTime[i] = arrivalTime[i] + burstTime[i]; } else { finishTime[i] = Math.max(finishTime[i - 1], arrivalTime[i]) + burstTime[i]; } turnAroundTime[i] = finishTime[i] - arrivalTime[i]; waitingTime[i] = turnAroundTime[i] - burstTime[i]; avgTurnAroundTime += turnAroundTime[i]; avgWaitingTime += waitingTime[i]; } // 输出每个进程的完成时间、周转时间和等待时间 System.out.println("进程\t到达时间\t执行时间\t完成时间\t周转时间\t等待时间"); for (int i = 0; i < n; i++) { System.out.println((i + 1) + "\t" + arrivalTime[i] + "\t\t" + burstTime[i] + "\t\t" + finishTime[i] + "\t\t" + turnAroundTime[i] + "\t\t" + waitingTime[i]); } // 输出平均周转时间和平均等待时间 avgTurnAroundTime /= n; avgWaitingTime /= n; System.out.println("平均周转时间:" + avgTurnAroundTime); System.out.println("平均等待时间:" + avgWaitingTime); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Devour123

愿每一份用功都可以得到回报

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值