2023-06-11
原文作者:奇小葩 原文地址:https://blog.csdn.net/u012489236/category_9614673.html

为了提高内存的利用率,解决内存供不应求的问题,更加合理的使用内存,引出了虚拟内存的概念。系统将内存暂时不需要的部分写入到硬盘,实现了对于扩展内存容量,所以叫虚拟内存,使得应用程序可以使用比实际物理内存更大的内存空间。前面我们了解了在进程运行过程中,当内存中存在空闲页的时候,系统如何实现这个虚拟内存管理的软硬件实现方式。如果内存中没有空闲页,那么就需要页面的调出,算法的好坏直接影响到系统的性能,本章的主要内容就是基于页面置换算法,其主要内容包括

  • 置换算法的功能和目标
  • 有哪些页面置换算法,各个算法的优缺点
  • linux采用什么样的内存置换算法

1. 页面置换算法

当出现缺页异常,需调入新页面而内存已满时,置换算法选择被置换的物理页面,其主要的目的是以尽可能减少页面的调入调出次数,把未来不再访问或短期内不访问的页面调出,以提高系统的性能。

1.1 局部页面置换算法

局部页面置换的选择范围仅限于当前进程占用的物理页面内,其主要由最优算法、先进先出算法、最近最久未使用算法,其基本的原理和特性如下图

202306111239539771.png

1.2 全局页面置换算法

在局部算法里面并没有考虑各个进程之间的访存差异,全局置换算法为进程分配可变数目的物理页面。常驻集是指进程在运行时,当前时刻实际驻留在内存当中的页面集合。而工作集是进行再运行过程所固有的特征。置换算法的工作就是在进程的工作集的前提下,确定常驻集的大小以及相应页面。

对于全局置换算法,其又可以分为工作集置换算法和缺页率置换算法,其原理如下图

202306111239549962.png

1.3 页面锁定

采用虚拟存储技术后,会产生缺页机制,缺页机制又会带来系统的开销,那么就会使得进程运行的时间变得越来越不确定,那么操作系统就导入了页面锁定技术,给每一个页增加一个页面锁定位。通过设置相应的锁定位,不让操作系统将操作系统使用的页面置换出内存,避免产生由交换过程带来的不确定性延迟,如以下的

  • 1.操作系统核心代码
  • 2.关键数据结构
  • 3.I/O缓冲区

2. linux的页面置换算法

对于虚拟页式存储系统的工作的最佳状态,发生缺页的时候,系统中有大量的空闲页表,使得系统中保存一定数目的空闲页框。对于该问题,linux设计了一个分页的守护进程,多数的时候休眠,可定期唤醒以检查内存状态,其需要定时做以下操作

  • 如果空闲页框过少,分页守护进程通过预定的页面置换算法选择页面换出内存
  • 如果页面装入内存后被修改,则将他们写回磁盘,分页守护进程可保证所有的空闲页是干净的

对于本章的页面置换的算法,linux采用的是守护进程和缓冲技术来解决该问题,在后期的swap技术进项详细分析,本文只是大致了解了对于页面置换算法的一些基本的算法和特性,对于应该换出哪个页,何时进行页换入和换出,怎么进行页换入和换出机制,需要在swap章节进行详细分析。

阅读全文