借用bilibili王道的视频实例来帮助理解页面置换算法的过程:
随着页面的访问,opt算法是在内存块访问满后,对未来将要访问的页面进行预测,比较内存块现在存的页面中谁最远,在本例中7,0,1已经填满的情况下,通过比较7是最后访问的页面(最远)则将7淘汰,装入新的页面2.(可以粗略理解为谁离得远就淘汰谁)
但是在实际运行的过程中,只有在进程执行的时候才会知道接下来会访问到的是哪个页面,操作系统是无法进行提前预判页面访问序列的,因此最佳置换算法(opt)是无法实现的
先进先出算法正如它的名字一般,最先进来的页面最先淘汰,当内存块存储满了之后,淘汰最开始存储的页面,第二先存储的页面移到了第一的位置,也就是采用了一个链表结构,将头指针存放最先进来的页面尾指针存放最新(后)进来的页面,随着页面的淘汰,指针内容也不断发生改动与偏移(该算法只需要记住先进先出的特点即可)
在原理的理解上,该算法其实与opt算法较为相似,同样是比较远近,但是opt算法比较的是未来的页面,而LRU则是比较的之前已经访问过的页面,哪个页面距离当前位置最远(已经最久没有访问了,比如在本例中1,8,7,2存满之后继续访问时发现7是最久没有访问的,于是淘汰7)
该算法的特点就是将我们刚刚的表格式访问方法巧妙的转变了一下,以一个环形链表的方式对访问页面进行存储,但多了一个访问位,存储时对已经访问过的页面标1,未访问过的标0,而需要淘汰一个页面时,就按照这个环进行寻找,若访问位为0则淘汰,若均为1则全部置为0,再进行一次访问,淘汰(第一个碰到的)访问位为0的页面
LFU算法较其他算法比较特殊,需要比较最近访问页面的访问频率进行排序,将最低频(也就是排序为最后的)数据块中所存页面进行淘汰(在编程的过程中这些算法都可以采用链表结构便于操作)
(复习记录的篇章从此开启)