b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

系统架构设计原则 slub分配器(2)

电脑杂谈  发布时间:2018-02-14 06:48:45  来源:网络整理

???

kmem_cache_node = &boot_kmem_cache_node;

kmem_cache = &boot_kmem_cache;

//申请slub缓冲区,管理数据放在临时结构中

create_boot_cache(kmem_cache_node, "kmem_cache_node",

sizeof(struct kmem_cache_node), SLAB_HWCACHE_ALIGN);

create_boot_cache(kmem_cache, "kmem_cache",

offsetof(struct kmem_cache, node) +

nr_node_ids * sizeof(struct kmem_cache_node *),

SLAB_HWCACHE_ALIGN);

//从刚才挂在临时结构的缓冲区中申请kmem_cache的kmem_cache,并将管理数据拷贝到新申请的内存中

kmem_cache = bootstrap(&boot_kmem_cache);

//从刚才挂在临时结构的缓冲区中申请kmem_cache_node的kmem_cache,并将管理数据拷贝到新申请的内存中

kmem_cache_node = bootstrap(&boot_kmem_cache_node);

???

}

1.2 创建kmalloc常规缓存

原则上系统会为每个2次幂大小的内存块申请一个缓存,但是内存块过小时,会产生很多碎片浪费,所以系统为96B和192B也各自创建了一个缓存。于是利用了一个size_index数组来帮助确定小于192B的内存块使用哪个缓存

void __init create_kmalloc_caches(unsigned long flags)

{

???

/*使用SLUB时KMALLOC_SHIFT_LOW=3,KMALLOC_SHIFT_HIGH=13

系统架构设计原则_业务架构设计_linux架构设计

也就是说使用kmalloc能够申请的最小内存是8B,最大内存是8KB

申请内存是向上对其2的n次幂,创建对应大小缓存保存在kmalloc_caches [n]*/

for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) {

if (!kmalloc_caches[i]) {

kmalloc_caches[i] = create_kmalloc_cache(NULL,

1 << i, flags);

}

/*

* Caches that are not of the two-to-the-power-of size.

* These have to be created immediately after the

* earlier power of two caches

*/

/*有两个例外,大小为64~96B和128B~192B,单独创建了两个缓存

保存在kmalloc_caches [1]和kmalloc_caches [2]*/

if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6)

kmalloc_caches[1] = create_kmalloc_cache(NULL, 96, flags);

if (KMALLOC_MIN_SIZE <= 64 && !kmalloc_caches[2] && i == 7)


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-76918-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 凯瑟琳泽塔琼斯
      凯瑟琳泽塔琼斯

      打完了把它拖到12海里以内来

    • 沈刚孙
      沈刚孙

    • 幽帝
      幽帝

      我没看懂MV前面写他粉丝怎么怎么欢迎

    热点图片
    拼命载入中...