2021-07-23虚拟内存(四)页面置换算法

页面置换算法

1、页错误
TLB未命中,需要查看页表,这时会检查存在位,查看页面是在物理内存还是在磁盘上。页表在磁盘上,会发起页错误。进程进入阻塞状态,控制权交给操作系统。
1)若物理内存有足够的空间,直接将页面调入该空间。
2)若物理内存空间不足,则挑选一些物理内存中现有的表项替换出去,需要的页换进来。这一过程需要页面置换算法减少经常使用的页面的交换,提高物理内存的命中率。

2、硬件缓存的指标
缓存管理的时间AMAT = P(hit)* T(M) + P(miss)* T(D)
P(hit)——在缓存中找到数据的概率
P(miss)——在缓存中找不到数据的概率
T(M)——访问缓存的时间成本
T(D)——访问硬盘的时间成本

3、页面置换算法

  • 最优置换策略(OPT)
    将最远的将来才会访问的页面替换出去。
    由于无法预知未来,该算法不可实现,但是其效率可以用来衡量其他算法的效率。
  • 先进先出策略(FIFO)
    最放入内存的页面最先换出。
    实现简单。
    最先放入的页面可能是最多使用的,会降低命中率。
  • 随机策略
    随机将一个页面替换出去。
    命中率也是随机,难以预测。
  • 最近最少使用策略(LRU)
    将最近没有使用的页面替换出去。
    可以使用链表来实现:
    维护一个链表来记录各个进程最近使用的情况,
    将最近使用的节点放在链表的头部,
    需要将页面移出的时候,要删除链表尾部的节点
    同时在有新的进程进入程序,要新加节点的时候要看链表是否达到了最大的长度,否则可能会造成内存泄漏。
    由于LRU开销较大,一般不使用
    产生了一个问题:
    如何精确的记录历史的时间?
    1)额外增加一位来记录访问的历史
    2)增设时间字段,利用硬件获得最新访问的时间。
    查找到最先的时间成本较高,需要退而求次的寻找比较先的页面
  • 时钟算法(clock)
    这是近似LRU的算法
    使用循环链表,每个节点表示一个进程,设置一个访问位表示过去一段时间是否访问过。
    使用一个指针,当有页面需要替换出去的时候。按照一个方向移动指针,如果访问位为1(表示最近访问过)则将其设置为0,移动到访问位为0的页表将其替换出去。
    改进版本,额外设置dirty位,表示近期有无修改,将近期没有访问且没有修改的页面置换出去。否则将页面置换出去之前需要修改磁盘中的数据,造成额外的开销。
    (一直不理解磁盘上是否有相应的内存的备份)。

4、考虑局限性
1)不考虑局限性
最优置换算法效率领先,其他的一致。
2)考虑局限性
最优 > LRU > 其他

6、其他的相关策略
1)按需分页
进程需要多大的空间就为其分配多大的页面。
2)聚集
收集要写入磁盘的页面,一起写入磁盘。因为向磁盘中写入数据较慢,因此一次写入较多的数据比一次写入较少的数据更加有效。
3)抖动
运行所需的内存的大小 > 实际物理内存的大小
在运行的时候不停的将页面从物理内存置换到磁盘上面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值