内存管理学习之页面置换算法
在将页面算法置换算法之前,首先需要了解系统如何分配给每个进程内存空间,即为每个进程分配多少个页框驻留进程。分配到的页框称为驻留集。
有两种方法:固定驻留策略和动态驻留策略。
固定驻留策略指为每个进程分配固定的页框数,不能增减,也不能使用别的进程的空间
动态驻留策略指在进程活跃期间,系统可以根据进程的缺页率进行动态调整,进程的页框数可以增减。
这样就有两个问题:页框置换的范围,如何选择置换出内存的页框。
页框置换有局部置换和全局置换,局部置换仅限于本进程的空间中,全局置换则允许置换别的进程中的页框。
固定驻留策略必然导致局部置换,而全局置换必须使用动态驻留策略。
第一个问题解决,第二个问题则涉及到置换算法,坏的置换算法可能导致抖动,所谓抖动就是指一个经常使用的页面被经常调入和调出,导致系统效率低下。
置换算法有:最佳置换算法OPT、FIFO置换算法、最少使用页面置换算法、最近未使用页面置换算法、时钟页面置换算法等
OPT算法是理论算法,它将不再使用的页面换出,而实际中不能预知哪个页面不再使用,但是这个算法是最优算法,可以作为评测其他算法的性能。
FIFO算法:按照页面装进内存的时间进行置换,越老的页面最先被换出,不管该页面是否经常使用,这样就有可能导致缺页率增加,导致页面置换次数增加。
最少使用页面置换算法:按照上次使用时间进行排序,将离上次使用时间最长的页面换出,可以采用栈的数据结构,每次页面被访问将该页面号放在栈顶。
最近未使用页面置换算法:设置引用位R,每次调用将R=1,系统每个一段时间将R=0,当进行置换式检查哪个页面为零说明近期不会再使用,可以将其换出。
时钟页面置换算法:采用应用为R,当R=1说明被引用过,这种方法是FIFO的改进,根据装入内存时间和是否被引用过作为标准,首先从时间最长项检查,若R=0则置换出,若为1则检查下一项并将R=0。若全部R=1,则按照FIFO方法进行置换。
-------------------------------------------------------------------------
选择好置换的页面后,如何进行置换呢?
首先判断被置换的页面是否被修改过,若没有则可以直接擦出该页框,如修改过则必须首先保存到外存中,然后再读入新页面。
页面缓冲技术:不必先保存,因为每次都保存一个页面增加了IO操作,消耗过大。
缓冲技术可以将被修改过和未修改过的页面存在缓冲区,然后对被修改过的页面进行批量保存,减少了IO操作。未修改的页面进行缓冲是为了防止在近期内被调用,不必再从外存调入内存,若在一段时间内不被调用则批量消除。