系统相关
首页 > 系统相关> > VMM物理内存、虚拟内存管理,偷页算法

VMM物理内存、虚拟内存管理,偷页算法

作者:互联网

复杂度3/5
机密度3/5

先总结一下上文。AIX VMM设计了独特的缓存文件数据管理模式,既将缓存的文件数据与对其它类型虚拟内存(例如,进程数据、进程堆栈等等)的管理集成到一起,文件数据缓存也通过页方式管理,如同进程的虚拟内存一样。AIX根据实际访问需要将页映射到物理内存: 如果应用程序访问/引用(reference,read or write)某个页面,而该页面并没有映射到实际内存中(不在PFT),那么系统将产生一个page fault缺页中断。为了解决缺页,AIX 内核会将所引用的页面加载到实际物理内存中的某个位置。如果所引用的页面是一个新的页面,也就是说,位于先前从未引用过的进程数据堆中的页面,那么“加载”所引用的页面过程只需要用零来填充一个实际物理内存位置(也就是说,提供一个填满零的页面)。如果所引用的分页是一个预先存在的页面(也就是说,文件中的某个页面、或者以前交换出paged out的某个页面),那么加载过程要从磁盘(换页空间paging space或者磁盘文件系统)中将该页面读入到实际物理内存中对应的位置。

在将页面加载到物理内存后,它将被标记为未被修改的。如果某个进程或者内核修改了该页面,那么该分页的状态将更改为已修改的。这使得AIX能跟踪页面加载到内存之后是否对其进行过修改,以决定今后换页操作时需要采取的动作:直接放弃或回写。

随着系统将更多的页面添加(分配)到物理内存中,物理内存中空闲页面的数目越来越少。当空闲页面数目达到某个较低的值时,AIX 内核就必须清空一些已被分配的物理内存,以便获得空闲页面供新分配使用。这个过程也称为page swap过程。

AIX VMM运行着一些后台守护进程,专门负责进行页面替换。其中页面替换守护进程称为 lrud(显示为 ps -k 的输出中的 lrud)。lrud 守护进程负责对物理内存页面进行扫描,回收某些页面以便为新物理内存分配腾出空间。lrud通过下面这样一个算法查找可释放的物理内存页:

另有一组与新物理内存分配有关的重要参数是minperm, maxperm和maxclient。这几个参数专门用来控制对文件系统进行映射(file cache)的内存的分配和清理策略。如果全部物理内存使用中用于文件映射的内存低于全部物理内存的minperm,那么将不释放文件映射内存;而如果用于文件映射的内存高于maxperm(jfs文件系统)或者maxclient(jfs2,veritas文件系统)时,则优先释放文件系统;当在此二者之间,则不区分内存使用内容,大家平等地依照lru算法进行清理;

与文件的物理内存映射机制有关,AIX系统存在这样一个现象:
当系统操作巨大文件时(例如生成备份文件),如果此文件保存在文件系统中,则会消耗大量的内存(与文件大小相等),直到占据全部可用物理内存(并非全部,具体与minperm,maxperm有关,暂不展开),很可能造成物理内存缺乏,而导致系统出现paging操作。因此,建议备份生成文件不要保存在文件系统上,或者分为多个文件依次操作,因为当aix关闭文件时,当时会将所有该文件映射的物理内存标志为free,也就是一次性释放了这些内存,降低了paging的可能。另一个方案是调整minperm为比较小,maxperm和maxclient为比较大的值。

标签:文件,VMM,lrud,AIX,偷页,内存,页面,虚拟内存,物理
来源: https://blog.csdn.net/weixin_42051187/article/details/116120483