我们来了解一个简单的进程调度算法,称为先进先出(First In First Out, FIFO)调度,有时候也被称为先到先服务(First Come First Served, FCFS)。这是一个比较简单且易于实现的算法。
0x1:例子我们假设现在有A、B和C三个进程,他们在大致相同的时间到达系统并且运行时间都为10s,但是因为FIFO必须将某个工作放在最前面,所以我们假设A比B早一点,B比C早一点,那当他们都进入进程队列之后,就是下面这样子:
A
B
C
NULL
NULL
NULL
0s
10s
20s
30s
40s
50s
这样一来,A会在10s的时候结束运行,B会在20s的时候结束运行,C会在30s的时候结束运行。这样我们应该都了解了在相同运行时长的时候FIFO如何工作。但是我们现在再来一个假设,假设这几个进程的运行时长不同,会发生什么呢?在这里我们假设A的运行时长为80s,B的运行时长为20s,C的运行时长为20s,那么在处理顺序和上文相同的情况下,我们的进程队列会是这样子的:
A
B
C
0s
20s
40s
60s
80s
100s
如果是这样子,B进程要在进入系统之后等待80s才得以运行,而C进程则要等待A和B都运行结束了也就是等待100s之后才能运行,想象一下,如果进程C是一个交互程序,你能忍受你点击了一个按钮或者其他操作之后要等待一段这么长的时间(实际上这个时间应该以毫秒为单位,但是为了我们更直观了解,我们在这里使用秒为单位),估计我们都会疯掉!所以这也展现出FIFO的缺点,就是如果有一个运行时间很长的进程的话,那么其他进程都要等待该进程结束之后才能运行,即使这些等待的进程运行时间很少,也依然要等待很长的时间!解决这一问题就要使用另外的调度算法,例如最短任务优先算法(Shortest Job First, SJF),但是这里我们只讲FIFO,所以不会涉及其它的东西。
0x2:最后如有错误,欢迎指正,再见!