系统相关
首页 > 系统相关> > 操作系统的调度算法—进程调度算法、页面置换算法、动态分区算法、磁盘调度算法(常问面试题)

操作系统的调度算法—进程调度算法、页面置换算法、动态分区算法、磁盘调度算法(常问面试题)

作者:互联网

8、调度算法

8.1、进程调度算法

1、先来先服务FCFS

​ 非抢占式调度算法,按照请求的顺序进行调度。有利于长作业,不利于短作业,短作业必须等长作业执行完毕才执行,长作业耗时又很长,这样会导致短作业等待时间过长。

2、短作业优先SJF

​ 非抢占式调度算法,按预估运行时间最短的顺序进行调度。作业有可能会饿死,处于一直等待短作业执行完毕的状态,要是一直一直有短作业来,长作业永远得不到调度。

3、最短剩余时间优先SRTN

​ 最短作业优先的抢占式版本,按照剩余运行时间的顺序进行调度,一个新作业到大,整个运行时间与当前进程的剩余时间做比较。要是新的进程需要时间更少,就挂起当前的进程,运行新的进程。

4、时间片轮转

​ 将所有就绪进程按照FCFS的原则排成一个队列,每次调度,把CPU的时间分给队首进程,该进程可以执行一个时间片。时间片用完了,计时器会发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,然后继续把CPU时间分配给队首进程。所以其实这个算法的效率跟时间片的大小有很大的关系:

5、优先级调度

​ 为每个进程分配一个优先级,按优先级进行调度。为了防止优先级低的进程永远等不到调度,可以随着时间的推移增加等待进程的优先级。

6、多级反馈队列

​ 一个进程需要执行100个时间片,要是采用时间片轮转调度算法,就需要交换100次。那多级队列是为这种需要连续执行多个时间片的进程考虑,会设置时间片大小不用的队列(比如:1,2,4,8,32),进程在第一个队列没有执行完,就会被移到下一个队列,这样一来需要执行100个时间片的进程,只需要交换7次了。同时,每个队列优先级也不同,最上面的优先级最高,所以只有上一个队列没有进程在排队,才能调度当前队列上的进程。所以可以把多级反馈队列这种算法,看作是时间片轮转调度和优先级调度算法的结合版。

在这里插入图片描述

8.2、页面置换算法

1、最佳置换算法OPT

​ 最佳置换算法(OPT,Optimal) :每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。最佳置换算法可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问序列。因此,最佳置换算法是无法实现的。

2、先进先出置换算法FIFO

​ 先进先出置换算法(FIFO) :每次选择淘汰的页面是最早进入内存的页面

3、最近最久未使用置换算法LRU

​ 最近最久未使用置换算法(LRU,least recently used) :每次淘汰的页面是最近最久未使用的页面。

4、时钟置换算法CLOCK

​ 最佳置换算法性OPT能最好,但无法实现;先进先出置换算法实现简单,但算法性能差;最近最久未使用置换算法性能好,是最接近OPT算法性能的,但是实现起来需要专门的硬件支持,算法开销大。所以操作系统的设计者尝试了很多算法,试图用比较小的开销接近LRU的性能,这类算法都是CLOCK算法的变体,因为算法要循环扫描缓冲区像时钟一样转动。所以叫clock算法。

​ 时钟置换算法是一种性能和开销较均衡的算法,又称CLOCK算法,或最近未用算法(NRU,Not Recently Used)。简单的CLOCK算法实现方法:为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位置为1。当需要淘汰-一个页面时,只需检查页的访问位。如果是0,就选择该页换出;如果是1,则将它置为0,暂不换出,继续检查下一个页面,若第- - ~轮扫描中所有页面都是1,则将这些页面的访问位依次置为0后,再进行第二轮扫描(第二轮扫描中一定会有访问位为0的页面,因此简单的CLOCK算法选择–个淘汰页面最多会经过两轮扫描) 。

在这里插入图片描述

5、改进型的时钟置换算法

​ 简单的时钟置换算法仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过,就不需要执行I/O操作写回外存。只有被淘汰的页面被修改过时,才需要写回外存。

​ 因此,除了考虑一个页面最近有没有被访问过之外,操作系统还应考虑页面有没有被修改过。在其他条件都相同时,应优先淘汰没有修改过的页面,避免I/O操作。这就是改进型的时钟置换算法的思想。修改位=0,表示页面没有被修改过;修改位=1,表示页面被修改过。为方便讨论,用(访问位,修改位)的形式表示各页面状态。如(1, 1)表示一个页面近期被访问过,且被修改过。

​ 改进型的Clock算法需要综合考虑某一内存页面的访问位和修改位来判断是否置换该页面。在实际编写算法过程中,同样可以用一个等长的整型数组来标识每个内存块的修改状态。访问位A和修改位M可以组成一下四种类型的页面。

6、总结
算法规则优缺点
OPT优先淘汰最长时间内不会被访问的页面缺页率最小,性能最好,但无法实现
FIFO优先淘汰最先进入内存的页面实现简单,但性能很差,可能出现Belady异常
LRU优先淘汰最近最久没访问的页面性能很好,但需要硬件支持,算法开销大
CLOCK循环扫描各页面,第一轮淘汰访问位=0,并将扫描过的页面访问位改为1.若第一轮没选中,则进行第二轮扫描实现简单,算法开销小,但未考虑页面是否被修改过
改进型CLOCK若用(访问位,修改位)的形式表述,则 第一轮:淘汰(0,0) 第二轮:淘汰(O,1),并将扫描过的页面访问位都置为0 第三轮:淘汰(O,0),第四轮淘汰(0,1)算法开销小,性能较稳定

8.3、动态分区算法

1、首次适应算法

在这里插入图片描述

2、最佳适应算法

在这里插入图片描述

3、最坏适应算法

在这里插入图片描述

4、邻近适应算法

在这里插入图片描述

5、总结

在这里插入图片描述

8.4、磁盘调度算法

​ 读写一个磁盘块的时间的影响因素有:

1、先来先服务

​ 按照磁盘请求的顺序进行调度。

​ 优点是公平和简单。缺点也很明显,因为未对寻道做任何优化,使平均寻道时间可能较长。

2、最短寻道时间优先

​ 优先调度与当前磁头所在磁道距离最近的磁道。

​ 虽然平均寻道时间比较低,但是不够公平。如果新到达的磁道请求总是比一个在等待的磁道请求近,那么在等待的磁道请求会一直等待下去,也就是出现饥饿现象。具体来说,两端的磁道请求更容易出现饥饿现象。

3、电梯扫描算法

​ 电梯总是保持一个方向运行,直到该方向没有请求为止,然后改变运行方向。

​ 电梯算法(扫描算法)和电梯的运行过程类似,总是按一个方向来进行磁盘调度,直到该方向上没有未完成的磁盘请求,然后改变方向。因为考虑了移动方向,因此所有的磁盘请求都会被满足,解决了 SSTF 的饥饿问题。

标签:面试题,调度,访问,算法,进程,空闲,页面
来源: https://blog.csdn.net/loytuls/article/details/123425776