Java 中的 FCFS 程序(带到达时间)

2024年9月10日 | 阅读 6 分钟

什么是 FCFS 调度算法?

先到先服务 (FCFS) 是一种非抢占式的 CPU 调度算法。它按照进程进入就绪队列的顺序进行调度。进程逐个执行直到完成。

什么是到达时间?

到达时间是指进程进入就绪队列的时间。

非抢占式:当一个进程终止或从运行状态转换为等待状态时,采用非抢占式调度。

先进先出 (FIFO),也称为先到先服务 (FCFS),是最简单的调度算法。FIFO 只是按照进程进入就绪队列的顺序将它们排队。

在这种调度方式中,先到的进程先执行,下一个进程只有在前一个进程完全执行完毕后才开始执行。

在此,我们假设所有进程的到达时间均为 0。

  • 完成时间:进程完成其执行的时间。
  • 周转时间:完成时间和到达时间之间的时间差。周转时间 = 完成时间 - 到达时间
  • 等待时间 (W.T):周转时间和执行时间之间的时间差。
  • 等待时间 = 周转时间 - 执行时间。

FCFS 实现

FCFS 算法

  • 输入进程及其执行时间 (bt)。
  • 计算所有进程的等待时间 (wt)。
  • 由于第一个进程不需要等待,所以第一个进程的等待时间为 0,即 wt[0] = 0。
  • 计算所有其他进程的等待时间,即对于进程 i -> wt[i] = bt[i-1] + wt[i-1]
  • 计算所有进程的周转时间 = 等待时间 + 执行时间。
  • 计算平均等待时间 = 总等待时间 / 进程数。
  • 类似地,计算平均周转时间 = 总周转时间 / 进程数。

给定 n 个进程及其执行时间,任务是使用 FCFS 调度算法计算平均等待时间和平均周转时间。

FCFS.java

输出

PID     AT      BT      CT      TAT     WT
0       0       10      10      10      0
1       10      5       15      5       0
2       15      8       23      8       0
Avg_turnaround:7.666666666666667
Avg_Waitingtime:0.0

服务时间:也称为执行时间,是指进程在 CPU 上完成其执行所需的时间量。它代表 CPU 花费在执行该特定进程指令上的时间。

等待时间:是指进程在获得 CPU 执行机会之前在就绪队列中等待的总时间。

FCFS 实现

  • 输入进程及其执行时间 (bt) 和到达时间 (at)
  • 计算所有其他进程的等待时间,即对于给定进程 i:wt[i] = (bt[0] + bt[1] +...... bt[i-1]) - at[i]
  • 现在计算所有进程的周转时间 = 等待时间 + 执行时间
  • 平均等待时间 = 总等待时间 / 进程数
  • 平均周转时间 = 总周转时间 / 进程数

让我们根据以下数据计算平均等待时间和周转时间。

进程执行时间到达时间等待时间周转时间完成时间
150055
29321114
36681420

FCFS.java

输出

Average waiting time = 3.33333
Average turnaround time = 10.0