Python中的 "先到先得 "调度[FCFS]

455 阅读3分钟

什么是 "先到先得 "的安排?嗨,学习者今天我们将了解一个非常重要的主题的理论概念和代码实现,这个主题在操作系统中被称为先到先得的CPU调度

在进入代码实现之前,让我们先了解先到先得的意思。


先到先得的介绍

先到先得(FCFS)是操作系统中最容易和最简单的CPU调度算法,它按进程到达的顺序自动执行。

在这种类型的算法中,首先请求CPU的进程首先得到CPU以完成其执行。这种方法的性能很差,而且一般的等待时间相当长

让我们来看看一些现实生活中的例子

  1. 人们在排队等候购买娱乐部分的门票
  2. 在公共汽车站等待公共汽车的人

现在在CPU调度中,我们需要计算一些时间值,这些时间值列在下面:

  1. 退出时间:进程在完成执行后何时离开CPU。
  2. 周转时间:进程到达和退出的时间之差。
  3. 等待时间:进程的突发/执行时间和周转时间之间的差异。

除此以外,我们还可以计算出进程的平均等待时间。


先到先得的说明

让我们考虑这样一个情况:我们有4个具有不同到达和执行时间的进程。这些数据显示在下面的表格中:

进程ID到达时间爆发/执行时间
P104
P215
P325
P433

4个不同进程的到达时间和突发时间

现在我们需要计算不同的时间值,如退出时间、周转时间和等待时间。你可以看一下下面提到的时间图,分析和计算各种时间值。

FCFS时间图

这里进程的退出时间分别为4、9、14和17。进程的周转时间分别是4、8、12和14。

同样地,进程的等待时间分别为0,3,7,11。最后,我们必须计算出平均等待时间,其结果是5.25。

现在让我们来看看FCFS进程的代码实现。


在Python中实现FCFS

print("FIRST COME FIRST SERVE SCHEDULLING")
n= int(input("Enter number of processes : "))
d = dict()

for i in range(n):
    key = "P"+str(i+1)
    a = int(input("Enter arrival time of process"+str(i+1)+": "))
    b = int(input("Enter burst time of process"+str(i+1)+": "))
    l = []
    l.append(a)
    l.append(b)
    d[key] = l

d = sorted(d.items(), key=lambda item: item[1][0])

ET = []
for i in range(len(d)):
    # first process
    if(i==0):
        ET.append(d[i][1][1])

    # get prevET + newBT
    else:
        ET.append(ET[i-1] + d[i][1][1])

TAT = []
for i in range(len(d)):
    TAT.append(ET[i] - d[i][1][0])

WT = []
for i in range(len(d)):
    WT.append(TAT[i] - d[i][1][1])

avg_WT = 0
for i in WT:
    avg_WT +=i
avg_WT = (avg_WT/n)

print("Process | Arrival | Burst | Exit | Turn Around | Wait |")
for i in range(n):
      print("   ",d[i][0],"   |   ",d[i][1][0]," |    ",d[i][1][1]," |    ",ET[i],"  |    ",TAT[i],"  |   ",WT[i],"   |  ")
print("Average Waiting Time: ",avg_WT)

输出样本

FIRST COME FIRST SERVE SCHEDULLING

Enter number of processes : 4
Enter arrival time of process1: 1
Enter burst time of process1: 5
Enter arrival time of process2: 0
Enter burst time of process2: 4
Enter arrival time of process3: 3
Enter burst time of process3: 3
Enter arrival time of process4: 2
Enter burst time of process4: 5

Process | Arrival | Burst | Exit | Turn Around | Wait |
    P2    |    0  |     4  |     4   |     4   |    0    |  
    P1    |    1  |     5  |     9   |     8   |    3    |  
    P4    |    2  |     5  |     14   |     12   |    7    |  
    P3    |    3  |     3  |     17   |     14   |    11    |  
Average Waiting Time:  5.25


FCFS的优势和劣势

让我们来看看其中的一些优点

先到先得的优点

  1. 易于编程
  2. 最简单的CPU调度算法的形式

先到先得的缺点

  1. 平均等待时间很高
  2. 对分时系统来说不是一个理想的技术
  3. FCFS的效率不高

总结

我希望你现在已经清楚什么是FCFS CPU调度,以及如何在python编程语言的帮助下实现同样的调度。

希望你喜欢这个教程!谢谢你的阅读!学习愉快!😇