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

Linux内核代码分析 slab.c by 刘亢


Linux内核代码分析 slab.c by 刘亢 liukang@bjut.edu.cn
slab.c来自linux内核2.4.22版,本文件按照GNU协议发布。
一、准备知识:
slab的概念:
提出的原因:由于操作系统在运行中会不断产生、使用、释放大量重复的对象,
所以对这样的重复对象的生成进行改进可以大大提高效率
最早由sun的工程师提出(1994年)并首先在sunos5.4上应用。
slab算法的基本思路:
分配:
if(对相对应的缓存区有空闲位置)
使用这个位置,不必再初始化;
else{
分配内存;
初始化对象;
}
释放:
在缓存中标记空闲,不做析构;
资源不足:
寻找未使用的对象空间;
按照要求对部分对象做析构;
释放对象占用的空间;
缓存区:每一个对象放在一个缓存区
slab:每个slab块都是页面大小的整数倍(有上限)
着色:字节数按照硬件的要求对齐,可以大大提高硬件缓存的利用率和效率。
slab块的两种管理模式:
on-slab 适用于小对象(小于1/8页),slab管理结构存放在slab块中。
off-slab适用于大对象,(大于等于1/8页),对象和slab块的管理结构都由cache_slabp中分配。
根据slab提出者的论文,slab不适合用在大对象上。
slab涉及的重要操作:
缓存区创建kmem_cache_create与销毁kmem_cache_destory
缓存区收缩kmem_cache_shrink与扩张kmem_cache_grow
对象分配kmem_cache_alloc与释放kmem_cache_free
内核态内存的申请kmalloc与释放kfree
二、涉及的重要数据结构:
typedef unsigned int kmem_bufctl_t:slab块中的管理结构
cache_size表:保存了不同大小(2^n)页面指向cache_cache的两种指针(dma和非dma)。
链表:最重要的是在管理slab结构中出现的3个链表,分别为完全使用的,部分使用的和完全没用过的slab。
结构体:见下面的代码分析。
三、代码分析:
每个颜色代表的含义:
红色:代码注释;
藕荷色:编译预处理需要处理的内容;
蓝色:C语言关键字、函数定义;
绿色:宏定义;
黑色:代码;
灰色:输出信息;
深蓝色:我给出的注解。
/*
* linux/mm/slab.c
* Written by Mark Hemment, 1996/97.
* (markhe@nextd.demon.co.uk)
*
* kmem_cache_destroy() + some cleanup - 1999 Andrea Arcangeli
*
* Major cleanup, different bufctl logic, per-cpu arrays
* (c) 2000 Manfred Spraul
*以上为版权信息
* An implementation of the Slab Allocator as described in outline in;
* UNIX Internals: The N


相关文档:

linux tasklet 2

http://hi.baidu.com/j_fo/blog/item/7412bb018deab109728da572.html
Linux内核 irq/soft irq/tasklet/同步
2009-10-08 21:22
1.中断处理程序结束之前,不允许产生相同的中断事件;(禁用PIC上该中断,但可以产生其他中断)
2.中断处理程序、软中断、tasklet既不可被抢占也不能被阻塞,最多发生中断嵌套;
3.执行中断 ......

[高性能技术] Linux2.6内核epoll介绍(0.1版本)

[高性能技术] Linux2.6内核epoll介绍(0.1版本)
转自: http://mechgouki.blogdriver.com/mechgouki/601157.html
[作者]:滕昱,2005/3/30,0.1版本
[版权声明]:此文档遵循GNU自由文档许可证(GNU Free Documentation License).任何人可以自由复制,分发,修改,不过如果方便,请注明出处和作者:)
(1)导言:
首先,我强烈建议 ......

linux kernel thread

http://hi.baidu.com/j_fo/blog/item/55f4014f1a226937aec3ab01.html
Linux Kernel Thread 的讨论
2007-05-14 11:45
kernel thread

Gearheads Written by Sreekrishnan Venkateswaran
   Thursday, 15 September 2005

Threads are programming abstractions used in concurrent processing. A ke ......

为什么Linux现在无法吸引年轻开发者

  Linux基金会执行董事Jim Zemlin声称Linux的市场地位十分稳固,尽管几位Linux内核的关键维护者已经头发花白。
  Linux Weekly News的主编Jonathan Corbet在上周举行的Linux基金会协作峰会上挑明了这一问题,他指出Linux内核团队的年龄一年比一年长,而年轻一代的开发者没有参与进来。为什么Linux现在无法吸引年轻开发 ......

linux 的 source命令

source命令(从 C Shell 而来)是bash shell的内置命令。点命令,就是一个点符号,(从Bourne Shell而来)是source的另一名称。这两个命令都以一个脚本为参数,该脚本将作为当前shell的环境执行,即不会启动一个新的子进程。所有在脚本中设置的变量将成为当前Shell的一部分。同样的,当前脚本中设置的变量也将作为脚本的环境,s ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号