Linux2.6为数据结构分配内存-slab
2016-06-13 00:00
302 查看
1.高速缓存描述符、slab描述符、数据结构对象之间的关系
slab描述符也可以在外面
不管slab描述符在哪里,空闲链接数组紧跟在slab描述符后面
第一张图跟2.6的不太一样,2.6中,所有箭头都是双向的,且没有不同各种类slab描述符的链接
建立一个缓冲的专用队列:
1.从cache_cache中分配一个kmem_cache_t结构的高速缓存描述符
2.进行一系列计算,以确定最佳的slab构成
3.设置各种参数
4.将kmem_cache_t结构链入cache_cache的next队列中
利用这个专用队列来为这个专用的数据结构分配空间
1.找到第一个含有空闲对象的slab
若找到,则分配一个空闲对象给数据结构
若未找到,则扩充该slab队列
扩充slab队列
1.计算下一块slab应有的着色区大小
2.分配若干连续的物理页面
3.建立slab的管理信息
4.设置用于具体对象的页面
5.将页面构造成slab
6.链入给定的slab队列
建立slab的管理信息
1.大对象--->分配一个slab_t
小对象--->留出一部分空间作为slab_t
2.向slab_t写入管理信息
释放一个数据结构对象
1.找到对象所在的slab
2.计算对象在链接数组中的编号
3.释放对象(只是修改数组指针)
真正的页面内存的释放,由kswapd定期地调用kmem_cache_reap来完成
普通高速缓存的管理类似于伙伴系统
同一数据结构可以有几个slab,组成一个slab队列。
同一数据结构由于大小相同,不同slab队列的对象很可能会映射到同一高速缓存行中。
为了提高命中率,同一数据结构的不同slab有不同的着色区,使它们能映射不同行中
slab描述符也可以在外面
不管slab描述符在哪里,空闲链接数组紧跟在slab描述符后面
第一张图跟2.6的不太一样,2.6中,所有箭头都是双向的,且没有不同各种类slab描述符的链接
建立一个缓冲的专用队列:
1.从cache_cache中分配一个kmem_cache_t结构的高速缓存描述符
2.进行一系列计算,以确定最佳的slab构成
3.设置各种参数
4.将kmem_cache_t结构链入cache_cache的next队列中
利用这个专用队列来为这个专用的数据结构分配空间
1.找到第一个含有空闲对象的slab
若找到,则分配一个空闲对象给数据结构
若未找到,则扩充该slab队列
扩充slab队列
1.计算下一块slab应有的着色区大小
2.分配若干连续的物理页面
3.建立slab的管理信息
4.设置用于具体对象的页面
5.将页面构造成slab
6.链入给定的slab队列
建立slab的管理信息
1.大对象--->分配一个slab_t
小对象--->留出一部分空间作为slab_t
2.向slab_t写入管理信息
释放一个数据结构对象
1.找到对象所在的slab
2.计算对象在链接数组中的编号
3.释放对象(只是修改数组指针)
真正的页面内存的释放,由kswapd定期地调用kmem_cache_reap来完成
普通高速缓存的管理类似于伙伴系统
同一数据结构可以有几个slab,组成一个slab队列。
同一数据结构由于大小相同,不同slab队列的对象很可能会映射到同一高速缓存行中。
为了提高命中率,同一数据结构的不同slab有不同的着色区,使它们能映射不同行中
相关文章推荐
- 算法导论-15-7-达到最高效益的调度
- 算法导论 第10章 10.4 有根树的表示
- 算法导论 第13章 红黑树
- 算法导论 第7章 快速排序
- 算法导论 第12章 二叉查找树
- 算法导论-24.2-有向无回路图中的单源最短路径
- 算法导论 第10章 10.1 栈和队列
- 算法导论 11.1-4 大数组的直接寻址表
- 算法导论-14-1-最大重叠点
- 算法导论-12-2-基数树
- 算法导论-14-2-Josephus排列
- 算法导论-8-3-排序不同长度的数据项
- 算法导论 10.4-2 O(n)时间 递归遍历二叉树
- 算法导论-9.3-3-快速排序-最坏时间O(nlgn)
- 算法导论-24.1-Bellman-Ford算法
- 算法导论-15-1-双调欧几里得旅行商问题
- 算法导论-13-3-AVL树
- 算法导论 第22章 图算法 22.2 广度优先搜索
- Accepted丶 Personal Training (数据结构 && STL) 【未完待续】
- 数据结构与算法之八 队列