分类: LINUX
2012-07-08 18:22:45
伙伴系统算法的基本内存区是页框,它适合于对大块内存的请求。但是对几十或者几百个字节的请求是不适合的。不可能为这种请求分配一个页框。正确的方法是:引入一种新的数据结构来描述如何在同一页框中如何分配小内存区。这就是SLAB分配器要完成的任务。
SLAB分配器最早出现于SUN公司的solaris2.4操作系统,它把对象分组放进高速缓存。每个高速缓存都是同种类型对象的一种储备。包含高速缓存的主内存区被分成多个SLAB。每个SLAB由一个或多个连续的页框组成。这些页框中既包含已经分配的对象,也包含空闲的对象。内核周期性的扫描高速缓存并释放空slab对应的页框。
高速缓存描述符是kmem_cache_t。
点击(此处)折叠或打开
未完待续
will_smile2u2013-04-22 10:55:21
xiebaoyou:内存这块可以看看《深入理解LINUX虚拟内存》,虽然是针对2.4的代码进行注释的,不过对理解内存也还是可以。对KSM这一块,没有分析过,不好推荐啊。
老师您好,有关于讲解slot结构(内存这块用到的)机制的书籍么?在网上搜了资料很少,
struct mm_slot {
struct hlist_node link;
struct list_head mm_list;
struct rmap_item *rmap_list;
struct mm_struct *mm;
};
这是其结构体,期待您的指导,谢谢!
will_smile2u2013-04-06 20:59:01
xiebaoyou:内存这块可以看看《深入理解LINUX虚拟内存》,虽然是针对2.4的代码进行注释的,不过对理解内存也还是可以。对KSM这一块,没有分析过,不好推荐啊。
谢谢老师啊,
回复 | 举报xiebaoyou2013-04-06 16:40:29
will_smile2u:有什么推荐的资料吗?就是想知道整体的架构,谢谢老师啊,
内存这块可以看看《深入理解LINUX虚拟内存》,虽然是针对2.4的代码进行注释的,不过对理解内存也还是可以。对KSM这一块,没有分析过,不好推荐啊。
回复 | 举报