问题:需要将一个页面读入物理内存时,如果物理内存已满,如何挑选某个已经使用过的页面进行替换。
解决页面来回更换的问题。
页面更换目标:
- 降低随后发生缺页中断的次数。
- 选择的页面随后相当长时间内应该不会被访问。
- 优先选择没有被修改的页面,不会写回磁盘
分为公平算法、非公平算法两类。
公平算法:
- 对所有页面一视同仁。
- 随机算法:随机选择一个换出。
- 先来先出算法:更换最早进入内存的页面。
- 第二次机会算法:
- 改进先来先出算法,除了考虑先进入内存,还要考虑最近是否被访问过。
- 从最先进入内存的页面开始找,如果被访问过,则访问位清0,然后修改进入内存的时间为当前时间,给予第二次机会。
- 时钟算法:
- 挨个页面遍历
- 如果下一个页面没有被访问过,使用该页面。
- 如果下一个页面被访问过,则清除访问标志,遍历下一个。
公平并不好,因该考虑页面的特性,选择随后最长时间不会被访问的页面。
非公平算法:
- 最优更换:选择随后最长时间不会被访问的页面。这是个理论标杆。
- NRU(最近未使用):基于程序访问内存的空间局限性,选择一个最近一段时间没有被访问过的页面。
- LRU(最近最少使用):不止记录最近一段时间页面是否被访问,还要记录页面被访问的次数。选择使用频率最低的。这里的最近一段时间,就是定期清理访问标志的时间,如果不清理访问标志,访问标识将没有意义。
- 工作集算法:为页面增加一个信息,记录该页面最后一次被访问的时间。如果一个页面的最后访问时间与当前时间差T,则替换。
页面替换策略:
- 全局策略:替换算法应用于物理内存里面的所有页面。
- 局部策略:替换算法应用于进程的所有页面。
———————————————————————————————————————————
欢迎关注我的微博:大雄_RE。专注软件逆向,分享最新的好文章、好工具,追踪行业大佬的研究成果。