原文在这里
什么是页面置换算法
进程运行时,若其访问的页面不在内存而需将其调入,
但内存已无空闲空间时,就需要从内存中调出一页程序或数据,
送入磁盘的对换区,
选择调出页面的算法就称为页面置换算法。
几种页面置换算法
1.最佳置换算法:
最佳(Optimal, OPT)置换算法所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。但由于人们目前无法预知进程在内存下的若千页面中哪个是未来最长时间内不再被访问的,因而该算法无法实现。
最佳置换算法大概就是,已经知道了未来那些页需要使用,当发生页面置换时,
选择未来最晚被使用的页,将他换出内存。
2.先进先出置换算法FIFO:
见名知意,当发生页面置换时,选择最先进入内存的页面,将其换出。
性能较差。
3.最近最久未使用算法LRU
选择最近最长时间未访问过的页面予以淘汰,它认为过去一段时间内未访问过的页面,在最近的将来可能也不会被访问。该算法为每个页面设置一个访问字段,来记录页面自上次被访问以来所经历的时间,淘汰页面时选择现有页面中值最大的予以淘汰。
LRU的实现:为每一个内存中的页面加一个字段保存未访问的次数,
当发生页面置换时,
如果页已经存在,则存在的页次数变成0,其他页面次数加1,
如果不存在,选择次数最多的页面,将其换出,换入的页次数初始化为0。
LRU的性能接近OPT,实现困难。
4.时钟置换算法CLOCK
LRU性能好,但实现困难,
FIFO实现简单,但性能不好,
所以就有了CLOCK。
CLOCK算法:
给每一帧(页所在的内存)加一个使用位,当页加载到此帧时使用位设为1,
当该页再次被访问时,页的使用位页设为1,
当发生置换时,用于置换的候选帧集合看做一个循环缓冲区,并且有一个指针与此相关联。
当某一页被置换时,该指针指向缓冲区的下一帧。
当需要置换页时,操作系统扫描缓冲区,查找使用位被置为0的一帧,
当遇到使用位为1的帧时,操作系统将其使用位设为0,
如果这个过程开始前,缓冲区所有帧使用位都为0,则选择遇到的第一个帧置换,
如果所有帧的使用位都为1,则指针在缓冲区中完整的循环一周,把所有的使用位都置为0,
并留在最初的位置上,替换该帧中的页。
性能接近LRU。
大概就是,先考虑所有使用位是1还是0的情况,然后考虑普通情况,遇到0就将页换出。