随笔 - 303  文章 - 883  trackbacks - 0
<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

欢迎光临! 
闲聊 QQ:1074961813

随笔分类(357)

我管理的群

公共blog

  • n维空间
  • Email : java3d@126.com 群 : 12999758

参与管理的论坛

好友的blog

我的其他blog

朋友的网站

搜索

  •  

最新评论

        这几天做 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 小寻 阅读(805) 评论(0)  编辑  收藏 所属分类: unix program

只有注册用户登录后才能发表评论。


网站导航: