隨筆 - 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 小尋 閱讀(905) 評論(0)  編輯  收藏 所屬分類: unix program
          主站蜘蛛池模板: 平乐县| 栖霞市| 岫岩| 琼海市| 吐鲁番市| 阆中市| 舟山市| 扬州市| 山西省| 建瓯市| 浦县| 沙雅县| 金华市| 泗水县| 怀宁县| 黑龙江省| 承德县| 逊克县| 昭苏县| 宁强县| 安徽省| 阿坝| 东乡族自治县| 都安| 广东省| 杭锦后旗| 杂多县| 泗洪县| 太白县| 济宁市| 玛沁县| 三门县| 裕民县| 大余县| 勐海县| 霞浦县| 东源县| 泸西县| 社会| 靖宇县| 青州市|