- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LINUX 源代码分析
slab.c
报告人 : 李娜 混合 973 9730071
LINUX 2.2.5版本内核内存管理
操作系统管理系统所有的物理空间, 现代大多数操作系统都采取多级管理, 即页面级分配与内核内存分配。就LINUX2-2-5 版本而言,页面级的分配是采用Buddy 算法,而内核内存分配是采用面向对象的Slab分配原则。 该分配原则高效,可以大大提高内存的利用率以及硬件cache级系统总线的利用率。它在Solaris2-4中已被采用。 (见”UNIX Kernel” 一书。)
面向对象的Slab分配原则主要为以下几点:
面向对象的思想:
将被申请的空间视为对象,使用构造函数出始化对象,然后由用户使用对象(即所需的物理空间),当需要回收空间时,使用析构函数析构对象,在释放给系统。
Slab 块
Slab 块是内核内存分配与页面级分配的接口。每个slab块的大小都为页面大小的整数倍, 由若干对象组成。系统一次分配给用户的内存为一个slab块,回收时也为一个slab块
对象缓存区:
每一类对象都有自己的缓存区。缓存区按slab块组建。缓存区的管理者纪录该类对象的所有信息,包括对象的大小,性质(如是否用于dma操作),slab的各项参数及使用情况等。具体详见数据结构说明。
着色机制:
所谓着色机制是指,按照对象要求的对齐字节数,分配合适的着色区(即偏移量),以使该类对象有良好的地址分布,便于硬件操作,从而带来较高的硬件cache 和系统总线使用率。
具体实现如下:
重要的数据结构
kmem_bufctl_t
说明 : 管理对象的数据类型
/* Bufctls are used for linking objs within a slab, identifying what slab an obj
* is in, and the address of the associated obj (for sanity checking with off-slab
* bufctls). What a bufctl contains depends upon the state of the obj and
* the organisation of the cache.
*/
typedef struct kmem_bufctl_s {
union {
struct kmem_bufctl_s *buf_nextp; //用于空闲对象
// (保存后继空闲对象)
kmem_slab_t *buf_slabp; // 用于活动的不规整对象
// (保存所在slab块的指针)
void * buf_objp; //用于活动的规整对象
// (保存该对象的地址)
} u;
} kmem_bufctl_t;
kmem_slab_t
说明 : 用于管理 slab 块的数据类型
typedef struct kmem_slab_s {
struct kmem_bufctl_s *s_freep; //指向第一个空闲对象
struct kmem_bufctl_s *s_index; // 指向规整对象链表,
//对象不规整时, 为NULL
unsigned long s_magic; // 用于判断该slab块是否已被销毁
// 由下面两个宏赋值
// #define SLAB_MAGIC_ALLOC 0xA5C32F2BUL
// #define SLAB_MAGIC_DESTROYED 0xB2F23C5AUL
unsigned long s_inuse; // 活动对象的数目
struct kmem_slab_s *s_nextp; // 用于双向链表
struct kmem_slab_s *s_prevp;
void *s_mem; // 该slab块中第一个对象的地址
unsigned long s_offset: SLAB_OFFSET_B
您可能关注的文档
最近下载
- 【一建经济】21-JG-冲关宝典(中).pdf VIP
- 石油工程-岩石力学-试卷.pdf VIP
- 【一建经济】21-JG-冲关宝典(上).pdf VIP
- 教师的专业成长课件.pptx VIP
- 西师版小学综合实践活动方案五年级上册.pdf VIP
- 2024年四川省巴中市中考数学试卷(含答案).doc VIP
- 生成式人工智能在初中生物学教学中的应用探究.pdf VIP
- 《装配式混凝土建筑构件生产》课件——本课程学习方法.pptx VIP
- 精品解析:2023-2024学年北京市海淀区人教版五年级上册期末测试数学试卷(解析版).docx VIP
- 2011年数学建模B题国家一等奖2011年数学建模B题国家一等奖.pdf VIP
文档评论(0)