堆栈型替换算法
如题:2021年10月
分析
能理解堆栈,但这个概念几乎是想不起什么了。答案选A,书中有明确的解释。
基本知识
什么是堆栈型替换算法呢?P140有明确的定义
设A是长度为L的任意一个页地址流,t为已处理过t-1个页面的时间点,n为分配给该地址流的主存页数,Bt(n)表示在t时间点、在n页的主存中的页面集合,Lt表示t时间点已遇到过的地址流中相异页的页数。如果堆栈型替换算法满足:
n<Lt时,Bt(n)
⊂
\subset
⊂Bt(n+1)
n>=Lt时,Bt(n) = Bt(n+1)
公式到底在说些什么呢?
当分配的主存页数 小于 进入页数时,在某个时间点,主存中的页面集合 包含于 n+1页时主存页面集合;此时应该是n则发生了页数置换了,为什么还要出来个n+1页呢?假设多出来个n+1页来,这时主存的页面就不会发生置换了。所以这里主要是比较 多出一页即n+1页时的置换页面集合 是否包含 n页时页面集合。这主要是符合堆栈的入栈特征。从这个主要特点来看:LRU,属于堆栈型,因为此算法保存的是 **最近使用的页数 **,又总被包含于 n+1个最近使用的页面中。这点从lru的名字上就可以轻易判别出来。
下一个就很好理解了,当分配的主存页数 大于等于 进入页数时 ,增不增加分配的页,对于某一时刻的主存页数而言,没什么影响。
如何判断是不是堆栈替换算法:
LRU最近最少使用:肯定是了,前面已经分析了;实质是按访问时间排序,发生淘汰的时候,把访问时间最旧的淘汰掉。
LFU最近不经常使用,书中没有讲到,只是扩展了解下;按频次排序,一个数据被访问过,把它的频次+1,发生淘汰的时候,把频次低的淘汰掉。实质是对应的C选项。
本质:这两种算法,都是保存最近使用的页数,所以都属于堆栈替换算法。
PFF:页面失效频率法,根据各道程序在实际运行过程中页面失效率的情况,由操作系统动态调整分配给每道程序的主存页面数。在多道程序设计中,当一道程序的命中率低于某个限定值时就增加分配给该道程序的主存页面数,以提高它的命中率。而当命中率高于某个限定值时就减少分配给该道程序的主存页面数,把节省出来的主存页面分配给其它程序。从而使整个系统的总的命中率和主存利用率都得到提高。对应的答案D
显然也是,属于堆栈型替换算法的。
堆栈型替换算法特点
命中率随主存页数的增加只可能提高,至少不会下降。
扩展 页面替换算法
替换算法解决的问题
当主存已满,再调入辅存页面时,选择主存中哪个页作为被替换的页。
随机算法RAND
用软的或硬的随机数产生器产生主存的要被替换页的页号。反映不了程序局部性,命中率很低,已不使用。
先进先出算法FIFO
选择最早装入主存的页作为被替换的页。内存保存的是后进来的页面。不一定正确反映出程序的局部性。
最近最少使用lRU
选择近期最少访问的页数作为被替换页。内存保存的是近期访问的页面;比较正确地反映了程序的局部性。实际操作中,把近期最久未访问过的页作为被替换页,将多少转换为有无。
优化替换算法OPT
根据未来实际使用情况将未来的近期里不用的页替换出去,一定会有最的主存命中率。理想中的算法,可作为评价其他算法的标准。