自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

vanbreaker的专栏

谨以此记录下自己的每一点、每一滴、每一步

  • 博客(19)
  • 收藏
  • 关注

原创 Linux Slob分配器(三)--释放对象

水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7705792slob释放对象由函数slob_free()来完成,分为三种情况进行处理:slob中已有的空闲单元加上释放对象块的空闲单元正好等于一个空闲的page,那么将直接将该page释放回伙伴系统slob中已无空闲单元,那么这

2012-06-30 23:13:45 2950 1

原创 Linux Slob分配器(二)--分配对象

水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7705559             上节介绍了Slob分配器的相关概念和思想,这节来看Slob分配器是如何分配对象的。kmem_cache_alloc_node()函数用来分配一个专用缓存的对象: void *kmem_cache_all

2012-06-30 21:23:02 3865 2

原创 Linux Slob分配器(一)--概述

水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7705202     Slob分配器相较Slab和Slub分配器而言,最大的特点就是简洁,其总共的实现代码大概就600多行,因此其适用于嵌入式系统。不同于Slab和Slub,Slob分配器没有引入本地CPU高速缓存和本地节点的概念。Slob分配器同样使

2012-06-30 16:46:15 5841 1

原创 Linux Slub分配器(七)--销毁缓存

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7703147          Slub分配器在销毁缓存时,必须得考虑缓存的引用计数是否为0,因为在Slub分配器中,缓存可以被多种对象复用,因此必须当所有种类的对象都同意销毁缓存才能执行销毁工作。void kmem_cache_destroy(s

2012-06-29 17:06:41 2936 1

原创 Linux Slub分配器(六)--slab的分配与释放

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7702677        创建新的slab主要有两个工作,一个是从伙伴系统分配2^order个连续页框给该slab,然后就是划分slab中的对象。函数new_slab()用来创建一个新的slab.        static struct

2012-06-29 16:47:53 5352 1

原创 Linux Slub分配器(五)--释放对象

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7701910           释放对象和分配对象是一组对称的操作,同样分为两个路径:1.如果待释放的对象所属的slab位于本地CPU缓存中,也就是slab处于冻结状态,则可直接释放2.反之,待释放的对象所属的slab位于slab链表中,

2012-06-29 11:24:00 4057 1

原创 Linux Slub分配器(四)--分配对象

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7700482          对象的分配过程体现了内存管理器对内存对象的组织方式,相较Slab分配器,Slub在组织对象的方式上给人的感觉就是简洁精悍。Slub没有用任何的管理区数组来组织这些对象,而是巧妙的将对象之间联系的桥梁嵌入在对象自身之中,因

2012-06-28 21:19:47 4852 2

原创 Linux Slub分配器(三)--创建缓存

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7700338            Slub分配器创建缓存的过程和Slab差不多,主要的区别在于Slub分配器并不是直接创建一个新的缓存,而是先试图在已有的缓存中找到一个各方面属性和待创建缓存差不多的缓存,如果能找到的话则不会去创建新缓存,而是复用

2012-06-28 18:40:24 5770 14

原创 Linux Slub分配器(二)--初始化

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7695264       和slab分配器一样,分配器的初始化工作主要是初始化用于kmalloc的gerneral cache,Slub分配器的gerneral cache定义如下:struct kmem_cache kmalloc_cache

2012-06-27 11:28:52 4447 1

原创 Linux Slub分配器(一)--概述

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7694648          Slab分配器一直处于内核内存管理的核心地位,尽管如此,它还是拥有自身的缺点,最明显的两点就是复杂性和过多的管理数据造成的内存上的开销。针对这些问题,linux引入了slub分配器,slub分配器保留了slab分配器的所

2012-06-27 10:24:10 7899 5

原创 Linux Slab分配器(七)--销毁缓存

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7674601销毁缓存首先要保证的一点就是缓存当中所有的对象都是空闲的,也就是之前分配出去的对象都已经释放回来了,其主要的步骤如下1.将缓存从cache_chain链表中删除2.将本地高速缓存、alien高速缓存和共享本地高速缓存中的对象都释放回

2012-06-18 20:50:31 3921 4

原创 Linux Slab分配器(六)--创建slab和销毁slab

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7673372在满足以下两个条件时,slab分配器将为高速缓存创建新的slab1.请求分配对象,但本地高速缓存没有空闲对象可以分配,需要填充2.kmem_list3维护的链表中没有slab或者所有的slab都处于FULL链表中这时,调用cac

2012-06-18 15:41:22 5554 6

原创 Linux Slab分配器(五)--释放对象

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7671618缓存回收对象基于以下原则1.本地高速缓存的空间还可以容纳空闲对象,则直接将对象放回本地高速缓存2.本地高速缓存的空间已满,则按batchcount的值将对象从本地高速缓存转移到slab中,转移是基于先进先出的原则的,也就是转移ent

2012-06-17 21:16:49 4924 1

原创 Linux Slab分配器(四)--分配对象

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7671211    从一个缓存中分配对象总是遵循下面的原则:1.本地高速缓存中是否有空闲对象,如果有的话则从其中获取对象,这时分配的对象是最“热”的;2.如果本地高速缓存中没有对象,则从kmem_list3中的slab链表中寻找空闲对象

2012-06-17 17:19:39 4613 1

原创 Linux Slab分配器(三)--创建缓存

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7670272           创建新的缓存必须通过kmem_cache_create()函数来完成,原型如下struct kmem_cache *kmem_cache_create (const char *name, size_t s

2012-06-17 10:09:02 5477 1

原创 Linux Slab分配器(二)--初始化

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7666959            在前文中介绍了slab所涉及到的数据结构, slab分配器的初始化工作都是围绕这些数据结构来展开的,主要是针对以下两个问题: 1.创建kmem_cache高速缓存用来存储所有的cache描述符 2.创建arr

2012-06-15 16:39:58 6885 5

原创 Linux Slab分配器(一)--概述

水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7664296             slab分配器是Linux内存管理中非常重要和复杂的一部分,其工作是针对一些经常分配并释放的对象,如进程描述符等,这些对象的大小一般比较小,如果直接采用伙伴系统来进行分配和释放,不仅会造成大量的内碎片,而且处理速度

2012-06-14 23:28:21 28894 4

原创 Linux伙伴系统(五)--通过迁移类型分组来实现反碎片

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7626670       从2.6.32.25开始,linux在伙伴管理系统中引入迁移类型(migrate type)这么一个概念,用于避免系统在长期运行过程中产生碎片。关于迁移类型的一些概念在介绍伙伴系统的数据结构的时候有提到过(见>),不过考虑到它

2012-06-02 21:21:10 8011 3

原创 Linux伙伴系统(四)--释放页

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7624628             Linux内存释放函数之间的调用关系如下图所示               可以看到,落脚点是__free_pages()这个函数,它执行的工作的流程图如下图所示

2012-06-01 21:10:46 5671 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除