FIFO,LRU算法

在一个采用页式虚拟存储管理的系统中,有一用户作业,它依次要访问的页面序列是1,2,3,4,1,2,5,1,2,3,4,5.假定分配给该作业的页数为3且作业初始时未装载页面,那么采用FIFO调度算法产生的缺页中断数为多少,采用LRU调度算法产生的缺页中断数为多少?
 FIFO算法:(First In First Out),先进先出,首先想到的数据结构应当是队列,但是我们这里最好是用vector,因为调页过程中需要遍历队列检查该页是否已存在,当算法的存储结构是队列或栈,但实现过程中需要经常遍历全队列或全栈的内容时,最好用vector。
           访问序列:1,2,3,4,1,2,5,1,2,3,4,5
                   1,2,3先调入内存,内存结构:3      2      1    缺页次数:3  
                   4调入内存,1调出,  内存结构:4      3      2    缺页次数:4
                   1调入内存,2调出,  内存结构:1      4      3    缺页次数:5
                   2调入内存,3调出,  内存结构:2      1      4    缺页次数:6
                   5调入内存,4调出,  内存结构:5      2      1    缺页次数:7
                   1存在,内存结构不改变
                   2存在,内存结构不改变
                   3调入内存,1调出,  内存结构:3      5      2    缺页次数:8
                   4调入内存,2调出,  内存结构:4      3      5    缺页次数:9
                   5存在,内存结构不改变
            共缺页9次,缺页中断率 = 缺页中断次数 / 总访问页数 = 9 / 12    
LRU算法:最近最少使用(Least Recently Used),先看一下调页过程
           访问序列:1,2,3,4,1,2,5,1,2,3,4,5
                1,2,3先调入内存,内存结构:3      2      1    缺页次数:3  
                4调入内存,1调出,  内存结构:4      3      2    缺页次数:4
                1调入内存,2调出,  内存结构:1      4      3    缺页次数:5
                2调入内存,3调出,  内存结构:2      1      4    缺页次数:6
                5调入内存,4调出,  内存结构:5      2      1    缺页次数:7
           到这一步其实和FIFO并没有区别
              1调入内存,由于内存中存在1,故没有缺页中断,但由于1最近被访问过,所以要将其位置调换,
              使它最后一个被淘汰,内存结构:1      5      2
              2调入内存,没有缺页中断,但内存位置要变化,内存结构:2      1      5
                  3调入内存,5调出,  内存结构:3      2      1    缺页次数:8
                  4调入内存,1调出,  内存结构:4      3      2    缺页次数:9
                  5调入内存,2调出,  内存结构:5      4      3    缺页次数:10
           共缺页10次,缺页中断率:10/12
算法总结:数据结构应该还是一个队列,开始内存页面不满时按序把页面填入,之后如果调入的页不存在,则按照先进先出顺序,淘汰队头页面,如果调入的页存在,则将该页换至页尾,该页之后的元素前移。

FIFO (First-In-First-Out) 算法LRU (Least Recently Used) 算法都是计算机科学用于缓存管理和淘汰策略的常用算法。 **FIFO算法**: FIFO 是一种“先进先出”(First In, First Out)的策略。在这种情况下,当缓存满时,新插入的数据会替换掉最早进入缓存的数据。这是最直观的缓存淘汰策略,因为最先到达的数据如果有访问需求,但又被新的数据挤出,可能会导致数据丢失或访问延迟。 **LRU算法**: LRU 则是“最近最少使用”(Least Recently Used)的策略。当缓存已满且需要添加新数据时,会选择最近最少使用的数据进行淘汰,即最近一段时间内没有被访问过的数据。这种策略假设如果一个数据不再被频繁访问,那么在未来可能也不太需要,所以倾向于保持最近活跃的数据。 **主要区别**: 1. **淘汰依据**:FIFO 依据数据的进入时间,而 LRU 依据数据的访问时间。 2. **预测能力**:LRU 更具有前瞻性,因为它考虑了数据的最近使用情况,认为“最近没用的将来也可能不会用”,而 FIFO 则更依赖历史记录。 3. **实现复杂度**:FIFO 实现相对简单,只需要维护一个队列即可;LRU 的实现相对复杂,通常需要额外的数据结构如哈希表和双向链表,以便快速找到最近最少使用的元素。 **相关问题--:** 1. 在什么场景下,FIFO 算法更适合使用? 2. LRU 算法则适用于哪些类型的应用? 3. 当内存资源有限时,选择 LRU 还是 FIFO,哪种策略效率更高?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值