1.时钟置换算法的工作原理
需要考虑有没有新的办法,既能有 LRU 算法这种效果,产生缺页次数比较少,同时实现的效率比较简洁和方便,有点类似于 FIFO,只需要维护一个简单 List 就 OK 了。为此提出一种基于时钟的页面置换算法。这是一个形象的比喻,因为它整个处理过程像对闹钟在做相应的操作,所以叫做 clock 页面置换算法。
本来为了精确地统计每页的访问时间,要搞一个链表或者堆栈,那链表或堆栈的顺序,就意味着访问时间的顺序,那精确地记录其实带来开销很大。第一要插到相应的位置,第二还需要查找。
那能不能用一种不太精确,但是能够近似地表明访问的先后顺序的状态呢?
在前面讲页表时候,一个页表项存的是这个页帧号,这个页表项的 index 是页号,页表项里面的内容很重要是页号,这样页帧号和页号就有对应关系了,知道页号,可以知道页帧号,就可以查对应的地址。
除了页帧号之外,还有一些 bit,这些位有很重要的含义。其中有一位叫访问位 access bit ,当程序访问这个页之后,它会把这个页表项中 bit 给置1,置1的过程是由硬件来完成,整个置1过程不需要软件参与,由硬件来完成。当 CPU 访问某个页时候