什么是 "先到先得 "的安排?嗨,学习者今天我们将了解一个非常重要的主题的理论概念和代码实现,这个主题在操作系统中被称为先到先得的CPU调度。
在进入代码实现之前,让我们先了解先到先得的意思。
先到先得的介绍
先到先得(FCFS)是操作系统中最容易和最简单的CPU调度算法,它按进程到达的顺序自动执行。
在这种类型的算法中,首先请求CPU的进程首先得到CPU以完成其执行。这种方法的性能很差,而且一般的等待时间相当长。
让我们来看看一些现实生活中的例子:
- 人们在排队等候购买娱乐部分的门票
- 在公共汽车站等待公共汽车的人
现在在CPU调度中,我们需要计算一些时间值,这些时间值列在下面:
- 退出时间:进程在完成执行后何时离开CPU。
- 周转时间:进程到达和退出的时间之差。
- 等待时间:进程的突发/执行时间和周转时间之间的差异。
除此以外,我们还可以计算出进程的平均等待时间。
先到先得的说明
让我们考虑这样一个情况:我们有4个具有不同到达和执行时间的进程。这些数据显示在下面的表格中:
| 进程ID | 到达时间 | 爆发/执行时间 |
| P1 | 0 | 4 |
| P2 | 1 | 5 |
| P3 | 2 | 5 |
| P4 | 3 | 3 |
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的优势和劣势
让我们来看看其中的一些优点
先到先得的优点
- 易于编程
- 最简单的CPU调度算法的形式
先到先得的缺点
- 平均等待时间很高
- 对分时系统来说不是一个理想的技术
- FCFS的效率不高
总结
我希望你现在已经清楚什么是FCFS CPU调度,以及如何在python编程语言的帮助下实现同样的调度。
希望你喜欢这个教程!谢谢你的阅读!学习愉快!😇