免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11186 | 回复: 13

【z】FreeBSD 虚拟内存的浅析 [复制链接]

论坛徽章:
0
发表于 2008-04-09 19:27 |显示全部楼层
看到有人在问关于FreeBSD内存分配的问题,想起从bsdlover上看到得文章,于是转过来大家一起看看。

原文:http://www.bsdlover.cn/html/30/n-30.html

  以前实现操作系统通常把内存划分的很明确,例如内存通常包括Cache和Buffer以及自由内存(Free) 等等,角色明确。现代操作系统则在内存管理上不再那样分明,通常整个物理内存都当作Cache来用。

  操作系统中物理内存通常是分页管理的,而且由体系结构决定页面大小,例如在Intel i386类型的 CPU上,物理内存页的大小是4096字节。FreeBSD的
虚拟内存称为一种unified buffer cache的技术,字面意义就是cache和buffer是统一管理的。为了支持分页交换,每个进程的地址空间都有一个叫做vm_map 的链接表来管理,而且每个地址范围内的一项通常有一个叫做vm_object_t的类型来为程序需要某个页面时提供申请一个新页面后从某处加载保存的数据到该新页上,同时该新页被映射进进程的虚拟地址空间,每个页面的控制信息由一个叫做vm_page_t的结构类表示,一个页面某一个时刻只能归一个vm_object_t拥有, vm_object_t代表了内存与外部数据源之间的联系,当页面从硬盘换入时,它为页面提供数据,当页面需要拿作他用,vm_object_t又会把数据保存到硬盘某个地方。vm_object_t可以使用各种数据源,不一定是硬盘交换区,还可以是一个磁盘文件,也可以是一块显示卡中的内存区。

  为了反映系统动态地使用物理内存,FreeBSD在内核中建立一些页面队列,其中主要有active, inactive, cache, 和free四种队列。active是当前系统中在一定的时间内被持续使 用的页面,系统中有一个后台核心进程专门扫描active队列,当有发现好久没有使用某个页面时,内核就会把该页面移动到inactive队列。而cache队列中的页面是有些子系统释放某些页面,但是页面中的数据依然有效,将来还有可能再次使用其中的数据的页面,只是这些页面已经是“干净的”,不用再存盘,典型的是文件系统使用这种技术,用户关闭文件,但是文件系统有自己的cache管理,不一定就立即关闭文件,而将数据留在内存中,以便下次
使用时能迅速获得数据而不需要读盘。free的意思很明了,其中不包含数据也没有谁再与其有联系。无论上述是哪种页面,内核都可以随时那来作其他用途,只是使用的优先级别不一样,在内核需要一个新页时,free的页面被最先考虑,但是当数值小于一定量时,就会从cache类型的队列中找,cache中的页面被取出时,需要与原来的vm_object交互,或许要脱钩,当然没有申请free的页面来得快,但使用cache还是很快的,如果cache队列中没有了页面,就会去找inactive队列中的页面, inactive中的页面有可能是“Dirty”,在拿做其他用途时,不但要与原来的vm_object脱钩,而且还要因为是“Dirty”而要引起写盘,万不得已时active队列中的页面就会被拿作他用,这是系统会非常繁忙了。以上队列的实现是使用LRU算法。为了优化使用CPU的L2 cache,避免给同一个vm_object_t(通常代表一个数据实体)分配映射到同一个L2 cache 行上的页面,cache和free队列都有通常有好几个队列,分配是根据一定的算法轮流在这些队列上获取页面,这个机制成为page coloring。

  系统中还有另外一类页面,叫做wired, 意思是被挂起的,这些页面是不在上面讲的队列中的,因此它不能被交换到硬盘,这些页面多了会导致系统使用内存紧张,需要交换时可以活动的余地就会减少,导致系统性能下降。通常内核中的数据结构都使用wired页面,避免在内核使用自己的数据时发生缺页而导致不可预料的结果,通常是无法恢复故障而崩溃,负载较重的系统,wired页面会多一些。而除了内核使用的内存是wired以外,用户进程则几 乎全部使用上述四种队列种的页面,全是可以被丢弃而再重新恢复的那种类型。wired页面还可以由用户进程调用mlock系统调用锁定页面而引起的。

  总之,FreeBSD的虚拟内存是与文件系统和其他数据源浑然连成一体的,整个内存被视 做一个巨大的 cache, 充分加以利用,平常见到一个系统读过硬盘上很多文件或读过一个巨 大无比的文件,系统的 cache类型的页面就会很多,而free减少就是上边讲的机制所产生的 现象,这是一种优势,使得系统整体性能得到极大提高。

  常见一些朋友对FreeBSD 的内存管理迷惑不解,希望这篇文章能有所帮助,则不胜荣幸 。

论坛徽章:
0
发表于 2008-04-09 22:10 |显示全部楼层
原帖由 bestwc 于 2008-4-9 19:27 发表
看到有人在问关于FreeBSD内存分配的问题,想起从bsdlover上看到得文章,于是转过来大家一起看看。

原文:http://www.bsdlover.cn/html/30/n-30.html

  以前实现操作系统通常把内存划分的很明确,例如内 ...


小剑的文章?

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2008-04-09 22:46 |显示全部楼层
懂了不少。

论坛徽章:
0
发表于 2008-04-11 19:42 |显示全部楼层
从BSDLOVER上转的,不知道是不是剑版得文章。

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
发表于 2008-04-11 20:56 |显示全部楼层
也是我转载的,很早之前的,也不知道从哪扒拉来的了,呵呵

论坛徽章:
0
发表于 2008-04-11 22:57 |显示全部楼层
原文写得不错,就是题目起得笼统了点,

论坛徽章:
0
发表于 2008-04-13 10:27 |显示全部楼层
很好的解释

论坛徽章:
0
发表于 2008-04-13 17:09 |显示全部楼层
原帖由 雨丝风片 于 2008-4-11 22:57 发表
原文写得不错,就是题目起得笼统了点,


照雨兄的意思怎么着就不笼统了?

论坛徽章:
0
发表于 2008-04-13 19:27 |显示全部楼层
原帖由 bestwc 于 2008-4-13 17:09 发表


照雨兄的意思怎么着就不笼统了?


这篇文章更像是一篇个人学习笔记,而不是“浅析”FreeBSD虚拟内存系统的文章,
其主要内容是在讲页面替换算法,只是虚存系统的一部分而已。

论坛徽章:
0
发表于 2008-04-17 09:23 |显示全部楼层
原帖由 雨丝风片 于 2008-4-13 19:27 发表


这篇文章更像是一篇个人学习笔记,而不是“浅析”FreeBSD虚拟内存系统的文章,
其主要内容是在讲页面替换算法,只是虚存系统的一部分而已。


雨兄能否写一篇让我们大家增进理解!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP