操作系统导论第七章

tags:

  • 操作系统导论

  • 第七章

categories:

  • 操作系统导论


操作系统导论第七章:进程调度

操作系统该如何决定切换进程?如何运行进程使得效率最大化?

more–>

调度指标

1、周转时间
T=TTT_{周转时间}=T_{完成时间}-T_{到达时间}
2、响应时间
T=TTT_{响应时间}=T_{第一次执行时间}-T_{到达时间}

先进先出(FIFO)调度原则

假设3个工作 a,b,c工作长度为10s,它们大致在相同时间到达(T=0T_{到达}=0)但是a比b稍微早一点点,b比c稍微早一点点。
那么平均周转时间是T=(10+20+30)/3=20T=(10+20+30)/3 = 20
但是假设a = 100,b和c仍然是10
那么平均周转时间是T=(100+110+120)/3=110T=(100+110+120)/3 = 110
可以看出,FIFO调度策略对周转时间不友好

最短任务优先 (SJF)##

仍然考虑a = 100,b和c仍然是10的情况
平均周转时间是T=(10+20+120)/3=50T=(10+20+120)/3 = 50
但是,如果abc不是同时到达,而是a先到达,那么平均周转时间和FIFO一样了。

最短完成时间优先(STCF)

为了解决这个问题,我们让最短完成时间的任务先运行,那么即使是a先到达,但在bc到达时切换到bc进程运行,这样平均周转时间就又恢复成50s。

轮转(RR)调度策略

前面都只是针对周转时间,但是响应时间如何(在一个好的交互系统,响应时间尤为重要,用户不会愿意等它前面的进程完成后才响应当前进行的操作)
这就引出了一种新的调度算法:轮转
RR在一个时间片内运行一个工作,然后切换到运行对了中的下一个任务,而不是运行一个程序直到结束。它反复执行,直到所有任务完成。

结合I/O

当进程请求I/O时,操作系统可以切换下一个进程,等进程I/O请求完成后,再切换回来,提升CPU使用效率。

课后作业

1、

SJF为最短任务优先原则,现在用这个策略调度长度为200的3个作业,由于作业长度一样(都为200),则假设a、b、b先后运行,那么各个响应周转时间应该如下:

操作系统导论第七章

-c测试:
操作系统导论第七章

与计算相符。

FIFO为先进先出策略,即先到的任务先运行,由于三个作业长度都为200,所以结果应该与SJF策略相同,-c测试:

一样。

2、

采用SJF策略调度,那么先后运行的任务是 100 200 300

假设它们为a b c 任务,那么各个时间计算如下:
操作系统导论第七章

操作系统导论第七章
采用FIFO策略,假设任务到达的先后顺序为 100 200 300

那么需要的各个时间应该与SJF调度是一样的。如果是 300 200 100,那么需要的时间不同:

操作系统导论第七章

3、

RR调度程序,即轮转调度,在一个时间片(time
slice,有时称为调度量子)内运行一个工作,然后切换到队列的下一个任务,即每个时间片切换一个不同的程序,反复执行,直到所有任务完成。时间片必须是时钟中断周期的倍数,因为它依靠时钟周期中断实现。

现在时间片为1,即每隔一秒切换一次,各个时间应该如下:(仍然假设各个任务为 a b c)
操作系统导论第七章

4、
1、在相同时间到达,运行相同时间的任务

2、在不同时间到达,但是任务的到达顺序是运行时间由短到长。

这两种类型的工作负载的周转时间都相同。

5、

每个工作的工作负载和量子长度相同时,SJF与RR提供相同的响应时间。

6、

SJF的其它工作(除了第一份工作,因为它是第一个运行,响应时间为0)响应时间会随着工作长度的增加而增加。

现在我假设三个工作(依然是 a b c),我将从100 200 300 开始不断的增加长度,使用模拟程序查看平均响应时间,得到结果如下:

操作系统导论第七章

可以看到,平均响应时间确实是随着工作长度的增加而增加。

7、

显然,随着量子长度的增加,RR的响应时间也会随着增加。

最坏情况:首先我们假设这N个工作的到达顺序为从最长的到最短的,假设它们的序号为1,2,3…N,量子长度为S

且最长的工作(序号为1)的工作长度为小于等于量子长度即

1<=S;

那么,这组工作的响应时间即是前N-1个工作长度的总合,即为

1+2+3+4+…+(N-1)

(注意这里的数字1,2,3,4表示的是工作的序号,不是工作长度,它们的工作长度顺序是1>2>3>4…)

即最坏情况下的响应时间是除了长度最短的工作所有工作长度的总合