虚拟页式存储管理——页面置换算法及其影响的缺页中断率

本文深入探讨了虚拟页式存储管理中的页面置换算法,包括FIFO、LRU、LFU、OPT、NRU、SC和Clock等。LRU基于程序局部性原理,选择最近最久未使用的页淘汰。LFU则根据访问频率选择淘汰页面。而理想页面置换算法OPT虽无法实现,但提供了理论上的最优解。文章还讨论了这些算法如何影响缺页中断率,并通过例题解析和结果展示进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

页面置换算法


先进先出置换算法(FIFO)

该算法淘汰最早进入主存的页面。最早进入的页面,不再使用的可能性比最近调入的页面要大。
特点:实现简单。只要把各调入主存的页按其进入主存的先后顺序练成一个队列即可,总是淘汰队首的那一页。

最近最久未使用算法(LRU)

该算法选择在最近一段时间内最久没有使用过的页淘汰掉。它依据的是程序局部性原理。最近最久未使用算法是利用一个特殊的栈来保存当前使用的各个页的页号。每当访问某页时,考察栈内是否有与此相同的页号,若有则将该页的页号从栈中抽出,再将它压入栈顶。

最近最不常使用算法(LFU)

该算法选择当前时间为止被访问次数最少的页置换。

其实现方法是为每页设置一个访问计数器,每当页面被访问时,该页面的访问计数器就加“1”;放生缺页时,淘汰计数器值最小的页,同时将所有计数器清“0”。

理想页面置换算法(OPT)

该算法置换主存中永远不需要的页,或移出最长时间不需要访问的页。

这个算法一般不可能实现,只具有理论意义。

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

第0类:没有被访问,没有被修改;
第1类:没有被访问,已被修改;
第2类:已被访问,没有被修改;
第3类:已被访问,已被修改。

第二次机会页面置换算法(SC)

寻找一个最近的时钟间隔以来没有被访问过的页面。

时钟页面置换算法(Clock)

将所有的页面保存在一个类似时钟面的环形链表中,一个表针指向最老的页面。

缺页中断率

缺页中断率=中断次数/页面访问总次数
影响缺页中断率的因素:
1 分配给程序的内存块数
2 页面的大小
3 程序编制方法
4 页面置换算法

例题

在一个页式虚拟存储管理系统中,一个程序的页面走向为6、0、1、2、0、3、0、4、2、3,分别采用OPT、FIFO和LRU算法进行计算。设分配给改程序的存储块数M=3,每调进一个新页就发生一次缺页中断,求缺页中断次数F和缺页率f。

结果

①最佳算法


F=6;f=60%.

②先进先出算法


F=9;f=90%.

③最近最久未使用算法


F=8;f=80%.


一个虚拟存储区和内存工作区,并使用下列算法计算访问命中. (1) 进先出的算法(FIFO) (2) 最近最少使用的算法(LRU) (3) 最佳淘汰算法(OPT)(4) 最少访问算法(LFU) (5) 最近最不经常使用算法(NUR) 命中=1-面失效次/地址流长度 本实验的程序计基本上按照实验内容进行。即首先用 srand()和 rand()函定 义和产生指令序列,然后将指令序列变换成相应的地址流,并针对不同的算法 计算出相应的命中。相关定义如下: 1 据结构 (1)面类型 typedef struct{ int pn,pfn,counter,time; }pl-type; 其中 pn 为号,pfn 为面号, counter 为一个周期内访问该面的次, time 为访问时间. (2) 面控制结构 pfc-struct{ int pn,pfn; struct pfc_struct *next;} typedef struct pfc_struct pfc_type; pfc_type pfc_struct[total_vp],*freepf_head,*busypf_head; pfc_type *busypf_tail; 其中 pfc[total_vp]定义用户进程控制结构, *freepf_head 为空面头的指针, *busypf_head 为忙面头的指针, *busypf_tail 为忙面尾的指针. 2.函定义 (1)Void initialize( ):初始化函,给每个相关的面赋值. (2)Void FIFO( ):计算使用 FIFO 算法时的命中. (3)Void LRU( ):计算使用 LRU 算法时的命中. (4)Void OPT( ):计算使用 OPT 算法时的命中. (5)Void LFU( ):计算使用 LFU 算法时的命中. (6)Void NUR( ):计算使用 NUR 算法时的命中. 3.变量定义 (1)int a[total_instruction]: 指令流据组.(2)int page[total_instruction]: 每条指令所属的号. (3)int offset[total_instruction]: 每装入 10 条指令后取模运算号偏移 值. (4)int total_pf: 用户进程的内存. (5)int disaffect: 面失效次.
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值