最佳置换算法opt
类似于cache
每次选择淘汰的页面将是以后永不使用的,或者在最长时间不会被访问的页面,这样可以保证最低的缺页率
缺页时未必发生页面置换,若还有可用的空闲内存块,就不用进行页面置换
缺页率=缺页中断发生次数/访问页面的总数
无法实现
先入先出置换算法fifo
每次选择淘汰的页面是最早进入内存的页面
Belady异常:当为进程分配的物理快数增大时,缺页次数不减反增的异常现象
只有fifo会产生belady异常,另外fifo虽然实现简单,但是该算法与进程实际运行时的规律不适应,因为最先进入的页面也有可能最常被访问,
因此算法性能很差
最近最久未使用置换算法lru
每次淘汰的页面是最久没有被使用的页面
在手动做题时,若要淘汰页面可以逆向检查此时在内存中有多少个页面号,在逆向扫描过程中最后一个出现的页号就是要淘汰的页面
实现困难开销大,需要专门的硬件支持
时钟置换算法clock
简单时钟置换算法
简单的CLOCK 算法实现方法:为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位置为1。当需要淘汰一个页面时,只需检查页的访问位。如果是0,就选择该页换出:如果是1,则将它置为0,暂不换出,继续检查下一个页面,若第一轮扫描中所有页面都是1,则将这些页面的访问位依次置为0后,再进行第二轮扫描(第二轮扫描中一定会有访问位为0的页面,因此简单的CLOCK算法选择一个淘汰页面最多会经过两轮扫描)
改进型时钟置换算法
简单时钟置换算法址考虑到一个页面是否被访问过,实际上如果淘汰的页面没有被修改过就不需要执行io操作写回外存
因此,除了考虑一个页面最近有没有被访问过之外,操作系统还需考虑页面有没有被修改过,在其他条件都想同时,应该优先淘汰没客源修改过的页面
我们在改进型时钟置换中新增一个修改位,修改位=0表示页面没有被修改过,修改位=1表示页面被修改过