LINUX 源代码分析-内存管理.doc

LINUX 源代码分析-内存管理.doc

ID:55550629

大小:197.50 KB

页数:46页

时间:2020-05-16

LINUX 源代码分析-内存管理.doc_第1页
LINUX 源代码分析-内存管理.doc_第2页
LINUX 源代码分析-内存管理.doc_第3页
LINUX 源代码分析-内存管理.doc_第4页
LINUX 源代码分析-内存管理.doc_第5页
资源描述:

《LINUX 源代码分析-内存管理.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、....................LINUX源代码分析..........-------------slab.c报告人:李娜混合973LINUX2.2.5版本内核内存管理操作系统管理系统所有的物理空间,现代大多数操作系统都采取多级管理,即页面级分配与内核内存分配。就LINUX2-2-5版本而言,页面级的分配是采用Buddy算法,而内核内存分配是采用面向对象的Slab分配原则。该分配原则高效,可以大大提高内存的利用率以及硬件cache级系统总线的利用率。它在Solaris2-4中已被采用。(见”UNIXKernel”

2、一书。)面向对象的Slab分配原则主要为以下几点:1.面向对象的思想:将被申请的空间视为对象,使用构造函数出始化对象,然后由用户使用对象(即所需的物理空间),当需要回收空间时,使用析构函数析构对象,在释放给系统。2.Slab块Slab块是内核内存分配与页面级分配的接口。每个slab块的大小都为页面大小的整数倍,由若干对象组成。系统一次分配给用户的内存为一个slab块,回收时也为一个slab块3.对象缓存区:每一类对象都有自己的缓存区。缓存区按slab块组建。缓存区的管理者纪录该类对象的所有信息,包括对象的大小,性质(如是

3、否用于dma操作),slab的各项参数及使用情况等。具体详见数据结构说明。4.着色机制:所谓着色机制是指,按照对象要求的对齐字节数,分配合适的着色区(即偏移量),以使该类对象有良好的地址分布,便于硬件操作,从而带来较高的硬件cache和系统总线使用率。具体实现如下:l重要的数据结构Økmem_bufctl_t说明:管理对象的数据类型/*Bufctl'sareusedforlinkingobjswithinaslab,identifyingwhatslabanobj*isin,andtheaddressoftheassoc

4、iatedobj(forsanitycheckingwithoff-slab*bufctls).Whatabufctlcontainsdependsuponthestateoftheobjand*theorganisationofthecache.*/typedefstructkmem_bufctl_s{union{structkmem_bufctl_s*buf_nextp;//用于空闲对象//(保存后继空闲对象)kmem_slab_t*buf_slabp;//用于活动的不规整对象//(保存所在slab块的指针)void

5、*buf_objp;//用于活动的规整对象//(保存该对象的地址)}u;}kmem_bufctl_t;Økmem_slab_t说明:用于管理slab块的数据类型typedefstructkmem_slab_s{structkmem_bufctl_s*s_freep;//指向第一个空闲对象structkmem_bufctl_s*s_index;//指向规整对象链表,//对象不规整时,为NULLunsignedlongs_magic;//用于判断该slab块是否已被销毁//由下面两个宏赋值//#defineSLAB_MAGI

6、C_ALLOC0xA5C32F2BUL//#defineSLAB_MAGIC_DESTROYED0xB2F23C5AULunsignedlongs_inuse;//活动对象的数目structkmem_slab_s*s_nextp;//用于双向链表structkmem_slab_s*s_prevp;void*s_mem;//该slab块中第一个对象的地址unsignedlongs_offset:SLAB_OFFSET_BITS,16//用于地址对齐s_dma:1;//是否用于dma操作}kmem_slab_t;Økmem_

7、cache_t说明:管理缓存区的数据类型structkmem_cache_s{kmem_slab_t*c_freep;//第一个部分空闲的slab块unsignedlongc_flags;//纪录缓存区的属性/*constantflags*/unsignedlongc_offset;//on_slab时为kmem_bufctl_t相对于//它所指的对象的偏移量//off_slab时为相邻两个对象之间的偏移量unsignedlongc_num;//每个slab块可容纳的对象数量unsignedlongc_magic;//用

8、于检错unsignedlongc_inuse;/*keptatzero*/kmem_slab_t*c_firstp;//缓存区中的第一个slab块kmem_slab_t*c_lastp;//最后一个slab块spinlock_tc_spinlock;//当访问可变成员变量时使用,//避免同时访问同一个变量unsign

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。