FIFO算法和LRU算法以及缺页

FIFO算法和LRU算法以及缺页

  1. 缺页:

    ​ 缺页是引入了虚拟内存后的一个概念。操作系统启动后,在内存中维护着一个虚拟地址表,进程需要的虚拟地址在虚拟地址表中记录。一个程序被加载运行时,只是加载了很少的一部分到内存,另外一部分在需要时再从磁盘载入。被加载到内存的部分标识为“驻留”,而未被加载到内存的部分标为“未驻留”。操作系统根据需要读取虚拟地址表,如果读到虚拟地址表中记录的地址被标为“未驻留”,表示这部分地址记录的程序代码未被加载到内存,需要从磁盘读入,则这种情况就表示"缺页"。这个时候,操作系统触发一个“缺页”的硬件陷阱,系统从磁盘换入这部分未“驻留”的代码。

    简单来说:下一个页面访问需要新写入内存就是缺页,下一个页面已经存在,不需要重新写入内存就是不缺页。

  2. 先进先出FIFO算法:

    • 原理:优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。
    • 缺点:FIFO算法还会产生当所分配的物理块数增大而页故障数不减反增的异常现象
  3. 最近最久未使用LRU算法:

    • 原理:根据前面页面的情况,将最久没访问的页面移除

题目:

在页式虚拟存储管理系统中,若某进程依次访问的页面的页号为4,3,2,1,4,3,5,4,3,2,1,5。分配3块主存块,请分别填写下表,并计算缺页次数和缺页率。

FIFO:

物理块从上向下依次写入页面

访问页面432143543215
物理块1444111555555
物理块233344444222
物理块32223333311
是否缺页YYYYYYYNNYYN

​ 缺页次数:9 缺页率:9/12

LRU:

访问页面432143543215
物理块1444111555222
物理块233344444411
物理块32223333335
是否缺页YYYYYYYNNYYY

缺页次数:10 缺页率:10/12

顺便说下最佳算法:

原理:通过对后面还没有访问的页面的情况进行判断,将后面最近的不会用上的页面移除

访问页面432143543215
物理块1444444444222
物理块233333333311
物理块32111555555
是否缺页YYYYNNYNNYYN

缺页次数:7 缺页率:7/12

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
FIFO算法LRU算法都是为了解决缓存淘汰问题而设计的。FIFO算法是一种按照元素插入顺序排序的数据结构,元素在数据结构中按照先进先出的顺序进行存储和访问。在实现缓存时,可以根据实际情况选择使用FIFO算法LRU算法,以达到最佳的缓存淘汰效果。 LRU(Least Recently Used)算法是一种常见的缓存淘汰算法,它的基本思想是“最近最少使用”。在缓存中,最近使用的数据会被优先淘汰,而最近未使用的数据则需要被淘汰以腾出缓存空间。为了实现这一功能,LRU算法通过定期淘汰最近最少使用的数据来保持缓存的最佳状态。LRU算法的核心思想是使用一个缓存数组,数组中的每个元素都存储了一个键值对。每个键值对表示缓存中的一个数据项,包含数据项的键和值。 FIFO算法LRU算法的区别在于,FIFO算法是按照元素插入顺序排序的,而LRU算法是按照元素最近使用的时间排序的。因此,当缓存中的数据项被频繁访问时,LRU算法的效果会更好,因为它会优先保留最近使用的数据项,而FIFO算法则无法做到这一点。 以下是一个使用Python实现LRU算法的例子: ```python from collections import OrderedDict class LRUCache: def __init__(self, capacity: int): self.cache = OrderedDict() self.capacity = capacity def get(self, key: int) -> int: if key not in self.cache: return -1 self.cache.move_to_end(key) return self.cache[key] def put(self, key: int, value: int) -> None: if key in self.cache: self.cache.move_to_end(key) self.cache[key] = value if len(self.cache) > self.capacity: self.cache.popitem(last=False) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aoiy_chun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值