这几天做 C socket 有个朋友遇到问题,答应帮忙解决的,于是上网
找找相关资料,可惜实在是难找,郁闷上图书馆翻翻书,发现一本叫
《linux内核分析及编程》--倪继利 的书讲到了,呵呵happy;借回来looklook;
顺便把要用到的内容打出来发个文章,有需要的朋友可以看看;改资料虽然
简短,但我想会很有用;linux 下的C编程系统源码有着密切的关系,我想这
是编程的难度所在本来寒假是想学点C的,不知道这么搞的搞到java那里去了,
看来还是要花点时间学学C了,不然就完了;
呵呵,全是废话来的,看资料吧!linux下用C实现缓存分配和使用
kmem_cache_create 函数是给一个对象空间分配一个缓冲区,下面是它的例子(在kernel/fork.c中)
void _init proc_caches_init(void){
vm_area_cachep = kmem_cache_create(
"vm_area_struct",
sizeof(vm_area_struct),
SLAB_PANIC,NULL,NULL
);
}
kmem_cache_alloc 是从指定的缓冲区中分配一个对象,它的例子如下:
static inline int dup_mmap(struct mm_struct * mm,struct mm_struct *oldmm){
struct vm_area_struct *mpnt,*tmp,**pprev;
.
tmp = kmem_cache_alloc(vm_area_cachep,
SLAB_KERNAEL
);
.
}
kmalloc 函数是分析一个大小为 size 的内存块,下面是一个应用例子(在kernel/power/pm.c)
struct pm_dev *pm_register(pm_dev_t type,
unsigned long id,
pm_callback callback
)
{
//GEP_KERNEL表示正在运行的内核态的进程分配空间,可以陷入睡眠
struct pm_dev *dev = kmalloc (sizeof(struct pm_pev),GFP_KERNEL);
..
}
vmalloc 函数分配一段连续的 size 大小的虚拟内存,其对应物理页可不连续。下面是一个应用例
子(在security/selinux/ss/avtab.c中):
int avtab_init(struct avtab *h)
{
..
h->htable = vmalloc(sizeof(*(h->htable))*AVTAB_SIZE);
..
}
地震让大伙知道:居安思危,才是生存之道。
posted on 2007-04-07 22:53
小寻 阅读(889)
评论(0) 编辑 收藏 所属分类:
unix program