易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux slab 分配器剖析之一:slab 的概念

      内存管理的目标是提供一种方法,为实现各种目的而在各个用户之间实现内存共享。内存管理方法应该实现以下两个功能:一是最小化管理内存所需的时间;二是最大化用于一般应用的可用内存(最小化管理开销)。内存管理实际上是一种关于权衡的零和游戏。您可以开发一种使用少量内存进行管理的算法,但是要花费更多时间来管理可用内存。也可以开发一个算法来有效快速地管理内存,但却要使用更多的内存。最终,特定应用程序的需求将促使对这种权衡作出选择。
一,普通内存管理与slab内存管理的对比
      之前的内存管理器都使用了一种基于堆的分配策略。在这种方法中,大块内存(称为堆)用来为用户定义的目的提供内存。当用户需要一块内存时,就请求给自己分配一定大小的内存。堆管理器会查看可用内存的情况(使用特定算法)并返回一块内存。搜索过程中使用的一些算法有 first-fit(在堆中搜索到的第一个满足请求的内存块)和 best-fit(使用堆中满足请求的最合适的内存块)。当用户使用完内存后,就将内存返回给堆。这种基于堆的分配策略的根本问题是碎片(fragmentation)。当内存块被分配后,它们会以不同的顺序在不同的时间返回。这样会在堆中留下一些洞,需要花一些时间才能有效地管理空闲内存。这种算法通常具有较高的内存使用效率(分配需要的内存),但是却需要花费更多时间来对堆进行管理。
      Linux 所使用的 slab 分配器的基础是 Jeff Bonwick 为 SunOS 操作系统首次引入的一种算法。Jeff 的分配器是围绕对象缓存进行的。在内核中,会为有限的对象集(例如文件描述符和其他常见结构)分配大量内存。Jeff 发现对内核中普通对象进行初始化所需的时间超过了对其进行分配和释放所需的时间。因此他的结论是不应该将内存释放回一个全局的内存池,而是将内存保持为针对特定目而初始化的状态。例如,如果内存被分配给了一个互斥锁,那么只需在为互斥锁首次分配内存时执行一次互斥锁初始化函数(mutex_init)即可。后续的内存分配不需要执行这个初始化函数,因为从上次释放和调用析构之后,它已经处于所需的状态中了。
      下图给出了 slab 结构的高层组织结构。在最高层是 cache_chain,这是一个 slab 缓存的链接列表。这对于 best-fit 算法非常有用,可以用来查找最适合所需要的分配大小的缓存(遍历列表)。cache_chain 的每个�


相关文档:

探索 Linux 内存模型

文章来源:http://www.ibm.com/developerworks/cn/linux/l-memmod/index.html
级别: 初级
Vikram Shukla (vikshukl@in.ibm.com), 软件工程师, IBM
2006 年 2 月 23 日
在这篇 Linux® 内存模型指南中,我们将学习如何构建和管理内存方面的基础知识。本指南介绍了内存控制单元、分页模型方面的内容,并详细介绍了物理 ......

linux环境下端口查询

置了网络服务之后,关注一下哪些端口在监听系统的网络接口这一点很重要。任何打开的端口都可能是入侵的证明。
要列举正在监听网络的端口,有两种基本方法。一种不太可靠的方法是通过键入 netstat -an 或 lsof -i
之类的命令来查询网络堆栈。这种方法之所以不太可靠是因为这些程序不连接网络上的机器,而是查看系统上在运 ......

Linux虚拟系统安装VMware Tools总结

一、VMware Tools安装手记(For Linux Guest OS)
为什么要装 VMware Tools?
因为它可以改善 Virtual Machine 的运行性能,而且可以让 Host OS 和 Guest OS
互通有无,这样我们就不用伤脑筋,要架设什么服务器,来沟通两个 OS,现在就让我们开始吧!
VMware Tools所在位置:VMware 安装路径 \VMware\VMware
Workstati ......

UBUNTU一句话技巧 Linux入门(给新手)

查看软件xxx安装内容
dpkg -L xxx
 
 
查找软件
apt-cache search 正则表达式
 
 
查找文件属于哪个包
dpkg -S filename           apt-file search filename
 
 
查询软件xxx依赖哪些包
apt-cache depends xxx
 
查询 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号