LRU(最近最少使⽤)算法:每次选择最⻓时间没有被使⽤的⻆⾊进⾏切换。这种策略基于你对⻆⾊的喜好,认为最近被使⽤过的⻆⾊很可能还会被使⽤,⽽最久未被使⽤的⻆⾊很可能不会再被使⽤。LRU算法可以有效地减少切换次数,但是实现起来⽐较复杂,需要记录每个⻆⾊的使⽤时间或者维护⼀个使⽤顺序的列表。
FIFO(先进先出)算法:每次选择最早进⼊内存的⻆⾊进⾏切换。这种策略很简单,只需要维护⼀个⻆⾊队列,每次淘汰队⾸的⻆⾊,然后把新的⻆⾊加⼊队尾。但是FIFO算法可能会淘汰⼀些经常被使⽤的⻆⾊,导致切换次数增加。⽽且FIFO算法有可能出现⻉拉迪异常(Belady anomaly),即当分配给内存的空间增加时,切换次数反⽽增加。
最佳⻚⾯置换算法(OPT)
置换在「未来」最⻓时间不访问的⻚⾯,但是实际系统中⽆法实现,因为程序访问⻚⾯时是动态的我们是⽆法预知每个⻚⾯在「下⼀次」访问前的等待时间,因此作为实际算法效率衡量标准。
时钟⻚⾯置换算法:把所有的⻚⾯都保存在⼀个类似钟⾯的「环形链表」中,⻚⾯包含⼀个访问位。当发⽣缺⻚中断时,顺时针遍历⻚⾯,如果访问位为1,将其改为0,继续遍历,直到访问到访问位为0⻚⾯,进⾏置换。
最不常⽤算法 :记录每个⻚⾯访问次数,当发⽣缺⻚中断时候,将访问次数最少的⻚⾯置换出去,此⽅法需要对每个⻚⾯访问次数统计,额外开销。