关闭

Linux的页面回收与反向映射机制(上)

发表于:2011-3-24 09:54

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:黄晓晨 冯瑞    来源:51Testing软件测试网采编

  操作系统管理内存中的物理页面,同时也担任着内存分配的职责。应用程序可以通过内存分配函数向操作系统申请物理页面;在使用完这些物理页面之后,应用程序可以通过相应的内存释放函数释放这些物理页面。但是,对于内存中的某些物理页面来说,页面的使用者并不会主动释放它们,如果这些物理页面一直被占用而得不到释放,那么无论计算机上可用的物理内存有多少,物理内存迟早都有被用完的时候。所以,对于无法被主动释放的物理页面来说,操作系统就需要提供相应的功能去释放它们,Linux 中提供页面回收算法这样一种机制进行页面回收。

  一般来说,用于页缓存的物理页面无法被页面的使用者主动释放,因为它们不知道这些页面何时应该被释放。Linux 中页缓存存在的最大好处就是可以让程序从缓存中快速获取数据,从而提升系统的性能。在系统负载不重的情况下,Linux 操作系统会分配较多的物理页面用于页缓存,从而提高程序的运行效率;但是在系统负载较重的情况下,Linux 操作系统就可能会适当回收用于缓存的页面,并减少用于缓存的页面的分配,从而满足系统中优先级更高的内存分配请求。对于用户进程来说,Linux 操作系统可以在它需要的时候为它分配物理内存,但是当用户进程不再需要这些物理页面的时候,如果用户进程不主动释放占用的页面,Linux 操作系统也不会强制用户进程去释放这些物理页面。基于上述这些情况,当内存中可用的物理页面越来越少,并最终导致内存的使用捉襟见肘的时候,为了保证系统的顺利运行,Linux 操作系统就会根据一定的算法去回收那些长期被占用并且没有得到有效使用的物理页面。

  由操作系统内核本身使用的物理页面不在 Linux 操作系统进行页面回收的考虑范围之内,这是因为与用户进程相比,内核不需要占用非常多的内存,回收内核占用的物理页面会显著增加内核代码的复杂性,潜在收益非常低。

  如何进行页面回收

  哪些页面可以被回收

  内存中并非所有物理页面都是可以进行回收的,总的来说,以下这些种物理页面可以被 Linux 操作系统回收:

  ● 文件读写操作过程中用于缓冲数据的页面

  ● 用户地址空间中用于文件内存映射的页面

  ● 匿名页面:进程用户模式下的堆栈或者是使用 mmap 匿名映射的内存区

  ● 特殊的用于 slab 分配器的缓存,比如用于缓存文件目录结构 dentry 的 cache,以及用于缓存索引节点 inode 的 cache

  在页面被操作系统回收之前,所有与之关联的进程页表项必须要断开与该页面之间的映射关系。对于匿名页面来说,在页面被回收之前,匿名页面中的内容首先需要先被交换到交换区中去;如果要回收的页面是"脏"页面,那么该页面在被回收之前需要先将页面中的数据写回。

  除此之外,其他的页面要么不可以被回收,要么根本不必进行回收。比如,内核占用的页面不会被回收;映射到内核空间中的页面也不会被回收;内核在执行的过程中动态生成的页面需要永驻内存;被锁住的页面不能被回收;而没有被占用的物理页面则根本不需要被回收。

  进行页面回收的时机

  Linux 操作系统使用如下这两种机制检查系统内存的使用情况,从而确定可用的内存是否太少从而需要进行页面回收。

  ○ 周期性的检查:这是由后台运行的守护进程 kswapd 完成的。该进程定期检查当前系统的内存使用情况,当发现系统内空闲的物理页面数目少于特定的阈值时,该进程就会发起页面回收的操作。

  ○ “内存严重不足”事件的触发:在某些情况下,比如,操作系统忽然需要通过伙伴系统为用户进程分配一大块内存,或者需要创建一个很大的缓冲区,而当时系统中的内存没有办法提供足够多的物理内存以满足这种内存请求,这时候,操作系统就必须尽快进行页面回收操作,以便释放出一些内存空间从而满足上述的内存请求。这种页面回收方式也被称作“直接页面回收”。

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号