页面置换算法【进程调度】

页面置换算法【进程调度】

引1:为什么需要页面置换算法?

当CPU访问的页面不在物理内存时,会产生一个缺页中断,请求操作系统将所缺页调入到物理内存。
[图片]

上述第4步是找到了空闲页,如果没有找到呢?
找不到空闲页,就表示物理内存满了,就需要页面置换算法选择一个物理页,如果该物理页是脏页,则把它换出到磁盘,然后把该被置换出去的页表项状态改成无效的,最后把正在访问的页面装入到这个物理页。
页表项:
[图片]

  • 状态位:用于表示该页是否有效,也就是说是否在物理内存中,供程序访问时参考。
  • 访问字段:用于记录该页在一段时间被访问的次数,供页面置换算法选择出页面时参考。
  • 修改位:表示该页在调入内存后是否有被修改过,由于内存中的每一页都在磁盘上保留一份副本,因此,如果没有修改,在置换该页时就不需要将该页写回到磁盘上,以减少系统的开销;如果已经被修改,则将该页重写到磁盘上,以保证磁盘中所保留的始终是最新的副本。
  • 硬盘地址:用于指出该页在硬盘上的地址,通常是物理块号,供调入该页时使用。

引2:虚拟内存的整个管理流程*

[图片]

所以,页面置换算法功能就是,当出现缺页中断,需调入新页面而内存已满时,选择被置换的物理页面,也就是说选择一个物理页面换出到磁盘,然后把需要访问的页面换入到物理页。
其目的就是,尽可能减少页面的换入换出的次数。

1.最佳页面置换算法

[图片]

思路:置换在未来最长时间不访问的页面。
但是,实际系统中无法实现,因为程序访问页面时是动态的。

2.先进先出置换算法

既然无法知道页面下一次访问前所需要的等待时间,那我们可以选择在内存驻留时间很长的页面进行置换。
[图片]

3.最近最久未使用的置换算法LRU

LRU,发生缺页时,选择最长时间没有被访问的页面进行置换,也就是说该算法是假设已经很久没有使用的页面很有可能在未来较长的一段时间仍然不会被使用。
最优置换算法是通过未来的使用情况来推测要淘汰的页面,而LRU是通过历史的使用情况来推测要淘汰的页面。
[图片]

4.时钟页面置换算法

时钟页面置换算法既能优化置换的次数,也方便实现。
该算法思路就是,把所有页面都保存在一个类似钟面的环形链表中,一个表针指向最老的页面。
当发生缺页中断时,算法首先检查表针指向的页面:

  • 如果它的访问位是0就淘汰该页面,并把新的页面插入这个位置,然后把表针前移一个位置;
  • 如果访问位是1就清除访问位,并把表针前移一个位置,重复这个过程直到找到一个访问位为0的页面为止。
    [图片]

[图片]

5.最不常用算法

不是说这个算法不常用,而是这个算法名字叫最不常用。
当发生缺页中断时,选择访问次数最少得那个页面,并将其淘汰。

原文章(强烈推荐大佬作品):https://xiaolincoding.com/os/5_schedule/schedule.html#%E5%85%88%E8%BF%9B%E5%85%88%E5%87%BA%E7%BD%AE%E6%8D%A2%E7%AE%97%E6%B3%95

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大华Coding

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

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

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

打赏作者

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

抵扣说明:

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

余额充值