操作系统各种算法汇总【页面置换/缺页中断算法】【进程调度算法】【动态分区分配算法】【磁盘调度算法】

1 - 页面置换算法

页面置换又叫缺页中断算法,是为了解决:

在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法

  • 最佳置换法(OPT)
  • 先进先出置换法(FIFO)
  • 最近最久未使用置换法(LRU)
  • 时钟置换(CLOCK)

下面分别介绍

最佳置换(OPT)

每次选择淘汰的页面时以后永不使用的页面,或者是在最长时间内不会使用的页面,保证最低的缺页率

缺页率 = 缺页中断次数 / 访问页面总数

注意缺页中断次数≠页面置换次数,因为内存中还有空闲的内存块时,只发生了缺页中断,然后调入页,没有发生页面置换

但是只有在进程执行过程中预测不了下一次将要访问的页面是谁,所以该算法在实际应用上时实现不来的

先进先出置换法(FIFO)

每次置换出内存的页是进入内存时间最久的页

实现:内存页面根据调入内存的时间进行排序,进入内存时间最早的排在队首,这样每次只需要置换出队首页面,将置换进内存的页面排在最后

最近最久未使用置换法(LRU)

每次置换出内存的页面时最近最久没有使用到的页面

实现:和FIFO一样维护一个队列,但是排序规则不再是进入内存的时间了,每次页面访问后,若目标页面存在,将它排到队首,表示它是最近使用的一个页面,若目标页面不在内存中,将目标页面调入内存,排在队首(还表示它是最近使用的页面);将队尾页面(最不常使用)置换出内存

时钟置换(CLOCK)

使用链接指针将内存中的页面连成一个循环队列,为每个页面设置一个访问位。某页被访问后,访问位置1。淘汰页面时,检查页的访问位,若为0就置换出内存,若为1就将其置为0(不置换出内存),继续看下一个页面,直到第一轮扫描结束要是还没有置换出页面,就开始第二轮扫描(第二轮扫描一定会有被置0的页面存在,把它置换出去)

2 - 进程调度算法

无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。

常见的进程调度算法如下:

  • 先来先服务(FCFS)
  • 短作业优先(SJF)
  • 最短剩余时间优先(SRTN)
  • 时间片轮转
  • 高优先级优先
  • 多级反馈队列

下面分别介绍:

先来先服务(FCFS)

按照进程的请求顺序来调度CPU为为哪个进程服务

短作业优先(SJF)

非抢占式,每一次调度当前运行时间最短的进程(运行时间是估计出来的)。一个进程被调度后会一直执行完才会调度下一个

最短剩余时间优先(SRTN)

抢占式,一个新作业(进程请求CPU视为一个作业)到达时,与当前执行的作业比较剩余执行时间(也是估计的),谁最短就执行谁,说明当前进程有可能还没有执行完就挂起了

时间片轮转

所有就绪进程按照到达时间排队,每次调度队首的进程,分配给他一个时间片,时间片用完之后将该进程排在队尾(如果还没有执行完的话)

高优先级优先

每个进程分配优先级,每次调度优先级最高的进程

多级反馈队列

是时间片轮转与高优先级优先的结合

设置多个优先级队列,不同队列的优先级不同,不同队列的时间片也不同,如果进程在小时间片队列中没有完成作业,就把它排进时间片更大的队列中

3 - 动态分区分配算法

所谓动态分区分配,就是指内存在初始时不会划分区域,而是会在进程装入时,根据所要装入的进程大小动态地对内存空间进行划分,以提高内存空间利用率,降低碎片的大小

将空闲内存看做一张表的话,动态分区就是在不同的算法下按照某算法对应的规则从空闲内存表的一段取出来

  • 首次适应算法
  • 最佳适应算法
  • 最坏适应算法
  • 邻近适应算法

下面分别介绍:

首次适应算法

从低地址开始找,找到第一个满足大小的空闲分区

最佳适应算法

遍历空闲分区表,找到满足要求的最小的分区

最坏适应算法

遍历空闲分区表,找到满足要求的最大的空闲分区

邻近适应算法

每次分配内存都从上次查找结束的位置开始查找空闲分区表,找到第一个满足要求的空闲分区

4 - 磁盘调度算法

磁盘调度简言之,就是怎样移动磁头来寻找磁盘上的存储数据

常见的磁盘调度算法有:

  • 先来先服务
  • 最短寻道时间优先
  • 电梯扫描

下面分别介绍:

先来先服务

按照磁盘请求的顺序

最短寻道时间优先

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

电梯扫描

先按照一个方向(比如升序、降序)来晋城磁盘调度,直到该方向上没有未完成的磁盘请求,然后再做反方向的(注意一定是从峰值/谷值做的反方向)

Guess you like

Origin blog.csdn.net/weixin_44484715/article/details/118755703