操作系统中10种页面置换算法的总结

页面置换算法总结

当发生缺页中断时,操作系统必须将内存中选择一个页面置换出去为要调入的新页面腾出空间。

那究竟选择哪一个淘汰哪一个一面比较好呢?

1.      最优页面置换算法

选择最长时间内不会被访问的页面丢掉。越久越好。但是理论上不能实现。

2.      最近未使用页面置换算法(NRU)算法

找到最久没有使用的页面置换出去,页面被访问时设置R位,修改时设置M位,R位定期清0;

把页面分四类

0类.未被访问,未被修改的R=M=0

1类未被访问,被修改R=0,M=1

2类被访问,未被修改R=1,M=0

3类被访问,被修改R=1,M=1

系统从类类编号最小的非空类随机挑选一个置换

3.先进先出FIFO

维持一个保存当前所有页面的链表,新使用的插在链表尾,从头部淘汰老旧页面,使得最久进入的排在头部,

4 .第二次机会置换算法

改进版FIFO,淘汰旧页面时先从检查头部页面的R位,若为1,则说明此页面最近被使用过,置R=0,把它加到尾部去,重新设置其装入时间为当前时刻,继续搜寻,若为0,如果此页面被写过,把它写回磁盘再淘汰,若未被写,直接淘汰

5.时钟页面置换算法

维持一个保存所有页面的环形链表,一个指针指向最老页面,发生缺页中断时,检查指针指向页面,若R=0,则更新它,若R=1,清除R位,指针前移,继续搜索

6.最近最少使用页面置换算法LRU

找到最久没有使用过的置换之。需要特殊硬件实现(如利用一个n*n的矩阵)

7.最不常用算法NFU

为每个页面维持一个初值0的计数器,每次时钟中断,由操作系统扫描所有页面,把计数器加上当前的R位更新,这样每个计数器的值大概反映了被访问的频繁程度。缺页中断时,置换计数器数值最小的页面

8. 老化算法-改进的LRU

在R位加进之前,先把计数器值右移一位,把R位加到计数器最左边,

特点:每次时钟滴答只能记下一位,因此如果两个页面在同一个时钟滴答期间被访问是不能分出的,而且由于计数器是有限位数,假设是8位,如果很多页面在8个时钟滴答都未被访问的话,就都是全零位无法区分,但实际情况是,若已经这么久没有被访问了,该页面一般也不是很重要了

9.工作集页面置换算法

定义一个工作集:在过去t秒内被访问的页面的集合。

扫描所有页面,若R==1,说明在这个时钟滴答被访问了,它应该是工作集的一部分,把当前时间写入页表项的“上次使用时间“ 。若R==0,且生存时间(当前时间-上次使用时间)>t,置换它,如果<t,记住最小时间

10.工作集时钟页面置换算法

维持一个以页框为元素的循环表,形成一个环,每个表项包括上次使用时间,R位M位

缺页中断时,首先检查指针指向的页面,若R位==1,则说明它最近被访问了,把R位置为0,指针指向下一个位置,若R==0,若它的生存时间>t且此页面干净,置换之、

如果不干净,继续往前走。(因为可能前方存在旧的又干净的页面)。

页面置换算法小结:

1.      最优算法

不可能实现,可作为基准

2.       NRU算法

最近未使用算法,LRU粗糙的近似

3.      FIFO先进先出

通过维护一个页面的链表来记录页面被装入内存的顺序,淘汰最老的页面。但可能会置换重要的页面

4二次机会算法

FIFO‘较大改进,淘汰最老且最近没有使用过的页面

5时钟算法

二次机会的实现,避免移动链表元素

6.LRU算法

优秀但实现成本高

7. NFU算法

LRU近似,效率不高

8.老化算法

LRU的高效率实现

9.工作集算法

开销大

10.工作集时钟算法

有效

时间: 2024-07-30 00:42:00

操作系统中10种页面置换算法的总结的相关文章

三种页面置换算法的C++模拟

1 #include<iostream> 2 using namespace std; 3 int page[] = { 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1,-1 }; 4 void FIFO(); 5 void OPT(); 6 void RLU(); 7 bool inArray(int* a, int n, int p); 8 int main(void) { 9 FIFO(); 10 OPT(); 11 RLU(); 12 system(&q

操作系统之页面置换算法(最佳置换OPT,先进先出FIFO,最近最久未使用LRU)

最近学习操作系统时,实验要求实现常见的三种页面置换算法,博主按照书上要求试着编写,实现了案例,并记录在博客随记中,以便后续自己复习并也给需要的同学分享参考一下!水平有限,若有错,请悄悄告诉博主!博主好立即改正. 最佳置换算法(optimal replacement,OPT)是从内存中选择今后不再访问的页面或者在最长一段时间后才需要访问的页面进行淘汰.如下例子: 1 #include <iostream> 2 #include <stdio.h> 3 #include <std

虚拟内存之页面置换算法

四种页面置换算法: 最佳(OPT,Optional) 最近最少使用(LRU,Least Recently Used) 先进先出(FIFO,First In First Out) 时钟(Clock) 一.最佳置换算法 OPT 策略选择置换下次访问距当前时间最长的那些页,可以看出该算法能导致最少的缺页中断,但是由于它要求操作系统必须知道将来的事件,显然这是不可能实现的.但它仍然能作为一种标准来衡量其他算法的性能. 二.最近最少使用算法 LRU 策略置换内存中上次使用距当前最远的页.根据局部性原理,这

C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)

目录 00 简介 01 算法概述 02 公用方法 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存的忙闲状态,为进程分配和释放内存.当主存的空间太小而无法装入所有的进程时,就需要在内存和硬盘之间进行调度操作. 多数操作系统只采用某种特定的页面置换算法进行置换,无法预先探测当前运行进程的页面访问模式,因此不能根据不同的页面访问模式,选用不同的页面置换算法.当然,如果能对不同的访问模式选取相应的页面置换算法,

操作系统之页面置换算法

在请求分页存储管理系统中,由于使用了虚拟存储管理技术,使得所有的进程页面不是一次性地全部调入内存,而是部分页面装入.这就有可能出现下面的情况:要访问的页面不在内存,这时系统产生缺页中断.操作系统在处理缺页中断时,要把所需页面从外存调入到内存中.如果这时内存中有空闲块,就可以直接调入该页面:如果这时内存中没有空闲块,就必须先淘汰一个已经在内存中的页面,腾出空间,再把所需的页面装入,即进行页面置换. 常见的页面置换算法有:先进先出法(FIFO).最佳置换法(OPT)和最近最少使用置换法(LRU).

页面置换算法-操作系统

操作系统中的页面置换算法 1.最佳置换算法(OPT) 这是理想算法,不可能实现的. 该算法是指,其所选择的淘汰页面,将是以后不再使用,或者未来最长时间内不再被访问的页面.这样来保证最低的缺页率. 例子: 假定系统为某进程分配了三个物理块,并考虑有以下的页面号引用串: 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 (1)进程运行时,先将7,0,1 三个页面装入内存. (2)当进程要访问页面2 时,将会产生缺页中断.此时OS根据最佳置换算法,将选择页面7 予以淘汰.

操作系统 页面置换算法LRU和FIFO

LRU(Least Recently Used)最少使用页面置换算法,顾名思义,就是替换掉最少使用的页面. FIFO(first in first out,先进先出)页面置换算法,这是的最早出现的置换算法.该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最长的页面给予淘汰. FIFO置换算法有这样一个奇怪现象:内存空间块数越多,缺页中断率可能相反的越高(缺页中断次数越高). LFU(Least Frequently Used)最近最少使用算法,它是基于“如果一个数据在最近一段时间内使用次

操作系统原理(二)——内存管理之页面置换算法

页面置换算法 1. 总述 为提高内存利用率,解决内存供不应求的问题,更加合理的使用内存,人们创造了分页式内存抽象.同时有一个虚拟内存的概念,是指将内存中暂时不需要的部分写入硬盘,看上去硬盘扩展了内存的容量,所以叫做“虚拟”内存.使用虚拟内存,应用程序可以使用比实际物理内存更大的内存空间.可以认为这个更大的内存空间就在硬盘上,只有将某一部分需要被用到时,才被写入真实内存:当它暂时不再被用到时,又被写回硬盘.分页式内存管理将物理内存分为等大的小块,每块大小通常为1K.2K.4K等,称为页帧:逻辑内存

操作系统页面置换算法(opt,lru,fifo,clock)实现

#include <iostream> #include<map> #include<set> #include <algorithm> #include<cstdio> #include<cstring> #include<cmath> #define N 200 using namespace std; int page[N];//页面引用号 int block[N];//物理块,内存 int dist[N][N];/