易截截图软件、单文件、免安装、纯绿色、仅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


相关文档:

[高性能技术] 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 tasklet 4

引用 2 楼 cokeliu 的回复:
谢谢! 请问是否每调用一次tasklet_schedule(B task); B task任务被加到链表上只会被执行一次?
是的,只被加一次
第一次tasklet_schedule(B task)给他一个状态TASK_STATE_SCHED
作标记,以后的tasklet_schedule(B task)会检查这个标记
http://os.inf.tu-dresden.de/l4env/doc/html/dde_linux ......

Linux中的工作队列 (2.6.0~2.6.19 and 2.6.20 ~ now)

http://blog.chinaunix.net/u2/69889/showart_971040.html
Linux中的工作队列
[前记]Linux自从2.6.20之后,工作队列发生了一些变化,目前从网络上搜索的资料一般都是介绍老版本的工作队列,很少见到对新版本的介绍。本文对新老版本都做了简要概述,并分别提供了简单的实作案例。
********************************** ......

Linux Load average负载详细解释

我们知道判断一个系统的负载可以使用top,uptime等命令去查看,它分别记录了一分钟、五分钟、以及十五分钟的系统平均负载。
  你可能对于 Linux 的负载均值(load averages)已有了充分的了解。负载均值在 uptime 或者 top 命令中可以看到,它们可能会显示成这个样子:
  
Shell代码
load average: 0.0 ......

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

  Linux基金会执行董事Jim Zemlin声称Linux的市场地位十分稳固,尽管几位Linux内核的关键维护者已经头发花白。
  Linux Weekly News的主编Jonathan Corbet在上周举行的Linux基金会协作峰会上挑明了这一问题,他指出Linux内核团队的年龄一年比一年长,而年轻一代的开发者没有参与进来。为什么Linux现在无法吸引年轻开发 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号