2022-02-28 Windows CPU调度算法(FCFS)

与进程有关的时间##

与过程有关的各种时间,如下图所示 -


cbac17f94f223a534e2a1e7624abb998_20190701114144_21467.png
  1. 到达时间
    进程进入就绪队列的时间称为到达时间。
  2. 突发时间
    CPU执行整个过程所需的总时间称为突发时间。 这不包括等待时间。 即使在执行之前计算一个过程的执行时间也是令人困惑的,因此基于突发时间的调度问题无法在现实中实现。
  3. 完成时间进程进入完成状态的时间或进程完成其执行的时间称为完成时间。
  4. 周转时间该过程从抵达到完成所花费的时间总量称为周转时间。
  5. 等待时间进程等待CPU分配的总时间称为等待时间。
  6. 响应时间到达时间和进程首次获取CPU的时间之间的差异称为响应时间。

操作系统CPU调度##

在像MS DOS这样的单编程系统中,当进程等待任何I/O操作完成时,CPU仍然是空闲的。 这是一个开销,因为它浪费时间并导致饥饿问题。 但是,在多程序系统中,CPU在进程的等待时间内不会保持空闲状态,而是开始执行其他进程。 操作系统必须定义CPU将被给予哪个进程。

在多程序系统中,操作系统调度CPU上的进程以获得最大的利用率,此过程称为CPU调度。 操作系统使用各种调度算法来调度过程。

这是短期调度程序的一项任务,用于调度CPU以查找作业池中存在的进程数量。 每当运行进程请求某个I/O操作时,短期调度程序就会保存进程的当前上下文(也称为PCB)并将其状态从运行状态更改为等待状态。 在此期间,进程处于等待状态; 短期调度程序从就绪队列中选择另一个进程并将CPU分配给此进程。 这个过程被称为上下文切换。

进程控制块中保存了什么?

操作系统在进程的生命周期中维护一个进程控制块。 进程终止或终止时,进程控制块将被删除。 有以下信息保存在过程控制块中,并随过程状态而变化。

5b673a361d3ad12f48eab9136819faef_20190701114144_80644.png

为什么需要调度?
在多道程序中,如果长期调度程序选择更多的I/O绑定进程,那么大多数时候CPU仍然是空闲的。 操作系统的任务是优化资源的利用。
如果大多数正在运行的进程将其状态从运行状态更改为等待状态,那么系统中可能始终存在死锁。 因此,为了减少这种开销,操作系统需要调度作业以获得CPU的最佳利用率并避免死锁的可能性。


操作系统调度算法###

操作系统使用各种算法来有效地调度处理器上的进程。
调度算法的目的

最大CPU利用率
公平分配CPU
最大吞吐量
最短周转时间
最短的等待时间
最短响应时间

有以下算法可用于计划作业。
1. 先来先服务
这是最简单的算法。 最短到达时间的过程将首先获得CPU。 到达时间越少,进程得到CPU的速度越快。 这是非抢先式的调度。
2. 轮循
在循环调度算法中,操作系统定义了一个时间片(片)。 所有的进程将以循环方式执行。 每个进程都会获得CPU一小段时间(称为时间片),然后返回就绪队列等待下一个回合。 这是一种抢先式调度。
3. 最短作业第一具有最短爆发时间的作业将首先获得CPU。 突发时间越短,进程得到CPU的速度越快
这是非抢先式的调度。
4. 首先剩余时间最短这是SJF的抢先形式。 在该算法中,操作系统根据执行的剩余时间安排作业
5. 基于优先级的调度
在这个算法中,优先级将被分配给每个进程。 优先级越高,进程得到CPU的速度越快。 如果两个进程的优先级相同,则会根据他们的到达时间进行安排。
6. 最高响应率下一个
在这种调度算法中,下一步将调度响应比率最高的进程。 这减少了系统中的饥饿。


操作系统FCFS调度####

先来先服务(FCFS)调度算法根据其到达时间简单地调度作业。 就绪队列中第一个工作将首先获得CPU。 工作到达时间越少,工作得到的CPU就越快。 如果第一个进程的突发时间是所有作业中最长的,则FCFS调度可能会导致饥饿问题。
FCFS的优势

简单
容易
先到先得

FCFS的缺点

调度方法是非抢先式的,该进程将运行到完成。
由于算法的非抢先性,可能会出现饥饿问题。
尽管实现起来很容易,但由于平均等待时间比其他调度算法更高,因此性能较差。

示例
我们来看一个FCFS调度算法的例子。 在下面的时间表中,有5个进程的进程ID为P0,P1,P2,P3和P4。 P0到达时间0,P1在时间1,P2在时间2,P3到达时间3,处理P4在时间4到达就绪队列。 下表给出了过程及其各自的到达时间和爆发时间。
周转时间和等待时间通过使用以下公式计算。

    Waiting Time = Turnaround time - Burst Time

平均等待时间通过将所有过程的各个等待时间相加并且将总和除以过程的总数来确定。

进程ID 到达时间 突发时间 完成时间 转换时间 等待时间
0 0 2 2 2 0
1 1 6 8 7 1
2 2 4 12 8 4
3 3 9 21 18 9
4 4 12 33 19 17

平均等待时间= 31/5
平均等待时间= 31/5


45352a3242979341c22ee5a0f50c9741_20190701114146_56730.png

操作系统FCFS护航效果###

如果第一个作业的爆发时间是最高的,FCFS可能会受到队列影响。 就像在现实生活中一样,如果队列在路上经过,那么其他人可能会被堵塞,直到完全通过。 这也可以在操作系统中进行模拟。
如果CPU在就绪队列的前端获得较高突发时间的进程,则较低突发时间的进程可能被阻塞,这意味着如果执行中的作业具有非常高的突发时间,则它们可能永远不会获得CPU。 这被称为队列效应或饥饿。


12f10373984511cf180f93f4e7f05572_20190701114146_36784.png

示例
在这个例子中,我们有3个进程被命名为P1,P2和P3。 进程P1的暴发时间最高。
下表中的周转时间和等待时间通过公式计算,

Turn Around Time = Completion Time - Arrival Time  
    Waiting Time = Turn Around Time - Burst Time

在第一种情况下,虽然流程P1到达队列中的第一个, 该过程的爆发时间是最高的。 由于调度算法,我们所遵循的是FCFS,因此CPU将首先执行Process P1。
在这个时间表中,系统的平均等待时间将非常高。 这是因为车队的影响。 其他进程P2,P3必须等待40个单位时间,尽管他们的爆发时间非常短。 这个时间表遭受饥饿。

进程ID 到达时间 突发时间 完成时间 转换时间 等待时间
1 0 40 40 40 0
2 1 3 43 42 39
2 2 4 12 8 4
3 3 9 21 18 9
3 1 1 44 43 42
7d9ae0555bbca8da5701245f2a699e9a_20190701114146_43311.png

平均等待时间= 81/3
在第二种情况下,如果进程P1本来就已经到达队列的最后,而其他过程P2和P3早于那么饥饿问题就不存在了。
以下示例显示了这两种情况的等待时间的偏差。 虽然时间表的长度是相同的,即44个单位,但是在这个时间表中等待时间将会减少

操作系统FCFS与开销###

在上面的例子中,我们假设所有的进程只是CPU绑定进程。但是也忽略了上下文切换时间。
然而,如果考虑调度器在上下文切换中花费的时间,则系统的平均等待时间将增加,这也影响系统的效率。
上下文切换始终是开销。以下示例描述如果在系统中考虑上下文切换时间,效率将受到影响。
示例
在下面的例子中,假设有五个进程:P1,P2,P3,P4,P5和P6。 他们的到达时间和爆发时间如下。

进程ID 到达时间 突发时间
1 0 3
2 1 2
3 2 1
4 3 4
5 4 5
6 5 2

如果系统的上下文切换时间为1个单位,那么系统的甘特图将按如下准备。
给定δ= 1个单位;


a6e6a26e659180e396c60ce78409c046_20190701114146_99646.png

在执行每个进程之后,系统将花费额外的1个单位时间(开销)来安排下一个过程。

Inefficiency= (6/23) X 100 %   
            Efficiencyͷ = (1-6/23) X 100 %

你可能感兴趣的:(2022-02-28 Windows CPU调度算法(FCFS))