虚拟内存管理很重要的一个概念就是页面置换算法。地址映射过程中,若在页面中发现所要访问的页面不在内存中,则发生缺页中断 。
缺页中断 就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。 在这个时候,被内存映射的文件实际上成了一个分页交换文件。
当发生缺页中断时,如果当前内存中并没有空闲的页面,操作系统就必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。用来选择淘汰哪一页的规则叫做页面置换算法,可以把页面置换算法看成是淘汰页面的规则。
OPT 页面置换算法
最佳页面置换算法。
被淘汰页面是以后永不使用或最长时间内不再访问的页面。
理想情况,不可能实现,一般作为衡量其他置换算法的方法。
FIFO页面置换算法
先进先出页面置换算法。
总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面进行淘汰。
FIFO 算法还会产生当所分配的物理块数增大而页故障数不减反增的异常现象,称为 Belady 异常。只有FIFO算法可能出现Belady 异常,而 LRU 和 OPT 算法永远不会出现 Belady 异常。
LRU 页面置换算法
最近最久未使用页面置换算法。
策略:过去一段时间内未使用的页面,在最近的将来也不会被访问。
LRU(Least Currently Used)算法会让系统维护一个按最近一次访问时间排序的页面链表,链表首节点是最近刚刚使用过的页面,链表尾节点是最久未使用的页面。访问内存时,找到相应页面,并把它移到链表之首。缺页时,置换链表尾节点的页面。也就是说内存内使用越频繁的页面,被保留的时间也相对越长。
LFU 页面置换算法
最少使用页面置换算法。
策略:如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小
这种算法选择最近时期使用次数最少的页作为淘汰页。为每个页面配置一个计数器,一旦某页被访问,则将其计数器的值加1,在需要选择一页置换时,则将选择其计数器值最小的页面,即内存中访问次数最少的页面进行淘汰。