页替换算法

操作系统中使用页管理虚拟内存,在内存中分配一个页时,页替换算法决定哪个内存页被交换出(page out, swap out)写入磁盘,当缺页中断、无剩余页可分配、剩余页不满足分配、或者剩余页低于一个阈值时,页替换发生。

被选中作为替换页并交换出后的页被再次引用,它必须等待被交换入(page in, swap in)必须等待直到磁盘I/O结束,这个决定页替换算法的质量,等待交换入的时间越少,该算法越好。页替换算法判断有关硬件提供的页的限制信息,并尝试去猜测哪些页需要被替换,以最小化页分配缺失数量,同时平衡算法本身的主存和处理时间的成本。

在最优确定性算法已知的场景中,从竞争分析的角度看,页面替换问题是一种典型的在线算法问题[1]

历史

页面替换算法在20世纪60~70年代是一个研究的热点和争论区域,持续到LRU(least recently used)和working set算法出现。从这以后,传统算法做的一些基本假定被认作无效,对于页面替换算法的研究再次兴起。实际上,后来的研究跟随底层硬件和用户层软件行为因素,而这些因素已经对页面替换算法产生了影响。

  1. 主存大小呈数量极多次增长,在几G字节主存的情况下,要求算法预先判断每个内存帧变得越来越不重要。

  2. 存储级别变得更多,CPU幻存丢失是昂贵的代价,这个问题使得前一个问题变得恶化。

  3. 用户软件的本地化引用变得脆弱,面向对象语言技术广泛传播导致大量的小函数,使用复杂的数据结构,比如tree和hashmap,这一趋势导致混沌的存储引用模式,GC技术彻底的改变了应用程序使用存储器的模式。

因为操作系统架构的不同,页替换算法的需求也不尽相同,实际上,现代的操作系统具有统一的虚拟内存管理和文件系统缓存管理,因此需要页替换算法在用户进程虚拟空间和文件系统缓存中选择一个页,而这些页具有特定的属性,比如,可以被锁住,具有日志所需求的排序写功能。此外,因页替换算法的目标是最小话等待内存访问时间,页替换算法不得不被带入内核子系统的内存分配所要求的内存需求。因此,页替换算法在现在的操作系统中(Linux,FreeBSD,Solaris)倾向于工作在通用内核内存分配的顶层,而不是虚拟内存分配的更高层次。

[1] In computer science, an online algorithm is one that can process its input piece-by-piece in a serial fashion

你可能感兴趣的:(页替换算法)