发新话题
打印

关于slab的简单问题

关于slab的简单问题

  linux 2.4
在内核初始化slab的时候,首先初始化cache_cache:kmem_cache_init(),然后初始化通用cache: kmem_cache_sizes_init()
由于cache_cache是最高层次的slab队列,队列中每个slab载有若干个kmem_cache_t数据结构,而这个数据结构又是某缓冲队列slab的头部
是不是可以这么理解,就是通用缓冲队列和专用缓冲队列的头部都在cache_cache的slab队列中?即通用队列可以看做是专用队列的一个特例,通用队列和其他数据结构(如vm_area_struct)在cache_cache队列中的地位其实是一样的?
二者的功能不同,先有通用后有专用,创建方式不同,生命周期不同,地位不同。
又去翻了翻书,
通用缓存 :cache_size
专用缓存 :cache_cache
两者用途不同,顶层的数据结构也不同(前者是一个数组,后者是一个队列)
两者的创建方式不同
但是缓冲区的分配函数相同?(kmalloc和一般的专用缓存分配都是调用的kmem_cache_alloc())
即kmem_cache_alloc()函数的第一个参数决定了是在通用缓存里分配还是在专用缓存里分配?
如果是这样的话,我是不是可以理解为:
1 通用队列,专用队列是完全没什么关系的两套东西,只不过采用的技术类似(导致某些函数的调用相同?)
2 系统运行过程中,专用的缓冲区自己管理了一部分地址空间,剩下的地址空间才归kmalloc()分配,两者在逻辑上物理上都是隔离的?
还不明白的是
1"先有通用后有专用"是仅仅指创建的先后顺序吗?
2"生命周期不同"如何理解?
3"地位不同"如何理解?
理解----不理解----理解-------
不可以1、2那样理解:
"先有通用后有专用"是指创建的先后顺序,"生命周期不同"指专用的缓冲区一直保留,这是由于它的特殊用途决定的,自然地位不同不说了,同样是缓冲区,只不过是专用的规模由描述符结构决定的,通用的size是预先指定的,分配方式是通过分配函数体现的。
一定要找出适合自己的研究方法。
发新话题