内存管理之页面置换算法

       前面我们提到了关于内存管理的一些知识,交换技术和虚拟内存是两种常用的处理内存过载的办法。对于虚拟内存,进行换入换出的基本单位是页面。当进程访问的页面没有被映射到内存时,操作系统必须在内存中选择一个页面换出内存,以便为即将要换入的页面提供空间。并且如果被换出的页面被修改过,还需要重写到磁盘上。然后把需要映射的页面换入到内存中,并修改进程的页表,然后再重新执行失败的指令。那么在操作系统决定换出那个页面是有讲究的,这就是我们接下来要讨论主题。

       当发生缺页中断时,我们可以随机挑选一个页面进行置换,但如果每次都选择不经常使用的页面会提升系统的性能。如果选择一个经常被访问的页面来进行置换,可能​​在不久后进程又访问了该页面,该页面就又需要从磁盘中被置换回内存中,因此置换经常访问页面会造成一些不必要的性能开销(我们完全可以通过妥善的安排操作系统来避免这种不必要的开销)。接下来我们就展开讨论集中目前比较成熟的页面置换算法。需要指出的是,“页面置换"问题在计算机设计的其他领域也有应用。在多数计算机中会把最近使用的32字节或者64字节缓存在高速缓存中来提升性能。当高速缓存存满之后就会出现”页面置换“。在Web服务器中会缓存最近被访问的页面,数据库服务器会缓存最近访问的数据库记录所在的页面,当这些页面存满缓存空间后,如果还需要存入新的页面,就会出现”页面置换“ 。

  • 最优页面置换算法

       很容易想象的一种高效的页面置换算法是最优页面置换算法,虽然这个页面不可能实现。该算法是这样工作的:有些页面可能在接下来的几个指令就会被访问,而有些页面可能会经过1000/10000条指令后才会被访问,每个页面都有一个在下一次被访问时需要执行的指令数作为标记。很显然,标记数越大说明该页面越晚被访问到。当发生缺页中断,选择标记数最大的页面进行置换,因为这样的页面最晚被使用到。这个算法的想法是十分出色的,但不足在于无法实现,因为在发生缺页中断时,操作系统无法得知每个页面在多少条指令后会被访问到(在进程调度算法时也遇到类似的难题,对于最短作业优先调度算法,操作系统无法那个进程的执行时间最短)。虽然这个页面置换算法在实际系统中无法使用,但是用它作为参照来评价其他的页面置换算法的优劣是很有用的。

  • 最近未使用页面置换算法

       在前面介绍页表表项的结构时我们讲到有两个状态位对于操作系统进行页面置换时非常有帮助:访问位(R)和修改位(M)。当页面被访问时(读或写)修改访问位,当页面被修改(写)设置修改位。每次访问内存时都由硬件更新这些位。因此当某位被设置为1时,他就一直保持为1直到操作系统将它复位。可以利用M位(修改位)和R位(访问位)来构造一个简单的页面置换算法。当一个进程启动时,起初所有的页面都没有被访问,所有页面的M位和R位都为0。R位被周期性的清零(每个时钟周期清零)来区分最近一个时钟周期被访问的页面和未被访问的页面。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值