日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kmalloc/kfree,vmalloc/vfree函数用法和区别

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kmalloc/kfree,vmalloc/vfree函数用法和区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

kmalloc/kfree,vmalloc/vfree函數用法和區別

1.kmalloc

1>kmalloc內存分配和malloc相似,除非被阻塞否則他執行的速度非常快,而且不對獲得空間清零.

<?

tiger說明:在用kmalloc申請函數后,要對起清零

memset()函數對申請的內存進行清零。

>?

2>kamlloc函數原型:

#include<linux/slab.h>

Void *kmalloc(size_t size, int flags);

(1)第一個參數是要分配的塊的大小

(2)第二個參數是分配標志(flags),他提供了多種kmalloc的行為。

(3)第三個最常用的GFP_KERNEL

A.表示內存分配(最終總是調用get_free_pages來實現實際的分配;這就是GFP前綴的由來)是代表運行在內核空間的進程執行的。使用GFP_KERNEL容許kmalloc在分配空閑內存時候如果內存不足容許把當前進程睡眠以等待。因此這時分配函數必須是可重入的。如果在進程上下文之外如:中斷處理程序、tasklet以及內核定時器中這種情況下current進程不該睡眠,驅動程序該使用GFP_ATOMIC.

B.GFP_ATOMIC

用來從中斷處理和進程上下文之外的其他代碼中分配內存.?從不睡眠.

C.GFP_KERNEL

內核內存的正常分配.?可能睡眠.

D.GFP_USER

用來為用戶空間頁來分配內存;?它可能睡眠.

E.GFP_HIGHUSER

如同?GFP_USER,?但是從高端內存分配,?如果有.?高端內存在下一個子節描述.

F.GFP_NOFS,GFP_NOIO

這個標志功能如同?GFP_KERNEL,?但是它們增加限制到內核能做的來滿足請求.一個?GFP_NOFS?分配不允許進行任何文件系統調用,?而?GFP_NOIO?根本不允許任何?I/O?初始化.?它們主要地用在文件系統和虛擬內存代碼,?那里允許一個分配睡眠,?但是遞歸的文件系統調用會是一個壞注意.

上面列出的這些分配標志可以是下列標志的相或來作為參數,?這些標志改變這些分配如何進行:

__GFP_DMA

這個標志要求分配在能夠?DMA?的內存區.?確切的含義是平臺依賴的并且在下面章節來解釋.

__GFP_HIGHMEM

這個標志指示分配的內存可以位于高端內存.

__GFP_COLD

正常地,?內存分配器盡力返回"緩沖熱"的頁?--?可能在處理器緩沖中找到的頁.?相反,?這個標志請求一個"冷"頁,?它在一段時間沒被使用.?它對分配頁作?DMA?讀是有用的,?此時在處理器緩沖中出現是無用的.?一個完整的對如何分配?DMA?緩存的討論看"直接內存存取"一節在第?1?章.

__GFP_NOWARN

這個很少用到的標志阻止內核來發出警告(使用?printk ),?當一個分配無法滿足.

__GFP_HIGH

這個標志標識了一個高優先級請求,?它被允許來消耗甚至被內核保留給緊急狀況的最后的內存頁.

???__GFP_REPEAT

__GFP_NOFAIL

__GFP_NORETRY

這些標志修改分配器如何動作,?當它有困難滿足一個分配. __GFP_REPEAT?意思是"?更盡力些嘗試"?通過重復嘗試?--?但是分配可能仍然失敗. __GFP_NOFAIL?標志告訴分配器不要失敗;?它盡最大努力來滿足要求.?使用?__GFP_NOFAIL?是強烈不推薦的;?可能從不會有有效的理由在一個設備驅動中使用它.?最后, __GFP_NORETRY?告知分配器立即放棄如果得不到請求的內存.

???內存區段

__GFP_DMA和__GFP_HIGHMEM的使用與平臺相關,Linux把內存分成3個區段:可用于DMA的內存、常規內存、以及高端內存。X86平臺上ISA設備DMA區段是內存的前16MB,而PCI設備無此限制。

內存區后面的機制在?mm/page_alloc.c?中實現,?而內存區的初始化在平臺特定的文件中,?常常在?arch?目錄樹的?mm/init.c。

3>kamlloc的使用方法:

Linux?處理內存分配通過創建一套固定大小的內存對象池.?分配請求被這樣來處理,?進入一個持有足夠大的對象的池子并且將整個內存塊遞交給請求者.?驅動開發者應當記住的一件事情是,?內核只能分配某些預定義的,?固定大小的字節數組.

如果你請求一個任意數量內存,?你可能得到稍微多于你請求的,?至多是?2?倍數量.?同樣,?程序員應當記住?kmalloc?能夠處理的最小分配是?32?或者?64?字節,?依賴系統的體系所使用的頁大小. kmalloc?能夠分配的內存塊的大小有一個上限.這個限制隨著體系和內核配置選項而變化.?如果你的代碼是要完全可移植,?它不能指望可以分配任何大于?128 KB.?如果你需要多于幾個?KB,?但是,?有個比kmalloc?更好的方法來獲得內存。在設備驅動程序或者內核模塊中動態開辟內存,不是用malloc,而是kmalloc ,vmalloc,或者用get_free_pages直接申請頁釋放內存用的是kfree,vfree,或free_pages. kmalloc函數返回的是虛擬地址(線性地址). kmalloc特殊之處在于它分配的內存是物理上連續的,這對于要進行DMA的設備十分重要.?而用vmalloc分配的內存只是線性地址連續,物理地址不一定連續,不能直接用于DMA.

  注意kmalloc最大只能開辟128k-1616個字節是被頁描述符結構占用了。kmalloc用法參見khg.

  內存映射的I/O口,寄存器或者是硬件設備的RAM(如顯存)一般占用F0000000以上的地址空間。在驅動程序中不能直接訪問,要通過kernel函數vremap獲得重新映射以后的地址。

  另外,很多硬件需要一塊比較大的連續內存用作DMA傳送。這塊內存需要一直駐留在內存,不能被交換到文件中去。但是kmalloc最多只能開辟大小為32XPAGE_SIZE的內存,一般的PAGE_SIZE=4kB,也就是128kB的大小的內存。

3.kmalloc和vmalloc的區別

??vmalloc()與?kmalloc()都可用于分配內存

??kmalloc()分配的內存處于3GB~high_memory之?間,這段內核空間與物理內存的映射一一對應

?vmalloc()分配的內存在?VMALLOC_START~4GB之間,這段非連續內?存區映射到物理內存也可能是非連續的

??在內核空間中調用kmalloc()分配連續物理空間,而調用vmalloc()分配非物理連續空間。

??把kmalloc()所分配內核空間中的地址稱為內核邏輯地址

??把vmalloc()分配的內核空間中的地址稱?為內核虛擬地址

??vmalloc()在分配過程中須更新內核頁表

總結:

1.kmalloc和vmalloc分配的是內核的內存,malloc分配的是用戶的內存

2.kmalloc保證分配的內存在物理上是連續的, kmalloc()分配的內存在0xBFFFFFFF-0xFFFFFFFF以上的內存中,driver一般是用它來完成對DS的分配,更適合于類似設備驅動的程序來使用;

3.vmalloc保證的是在虛擬地址空間上的連續,vmalloc()則是位于物理地址非連續,虛地址連續區,起始位置由VMALLOL_START來決定,一般作為交換區、模塊的分配。

3.kmalloc能分配的大小有限,vmalloc和malloc能分配的大小相對較大(因為vmalloc還可以處理交換空間)。

4.內存只有在要被DMA訪問的時候才需要物理上連續,vmalloc比kmalloc要慢

5.vmalloc使用的正確場合是分配一大塊,連續的,只在軟件中存在的,用于緩沖的內存區域。不能在微處理器之外使用。

6.vmalloc?中調用了?kmalloc?(GFP—KERNEL),因此也不能應用于原子上下文。

7.kmalloc和?kfree管理內核段內分配的內存,這是真實地址已知的實際物理內存塊。

8.vmalloc對應于vfree,分配連續的虛擬內存,但是物理上不一定連續。

9.kmalloc分配內存是基于slab,因此slab的一些特性包括著色,對齊等都具備,性能較好。物理地址和邏輯地址都是連續的

總結

以上是生活随笔為你收集整理的kmalloc/kfree,vmalloc/vfree函数用法和区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91社区视频| av拍拍拍 | 国产乱妇4p交换乱免费视频 | 在线黄色观看 | 日韩精品色呦呦 | 色姑娘久 | 免费簧片在线观看 | 91夫妻视频| 好吊妞视频这里只有精品 | 亚洲精品女人久久久 | 亚洲国产精品视频一区 | 91在线视频观看 | 免费看的av | 黄色网址链接 | 狠狠爱网站 | 免费欧美视频 | 亚洲欧美日韩在线一区 | 日韩一区电影 | 欧美又粗又大xxxxbbbb疯狂 | 免费在线一区二区 | 久久亚洲综合色 | 高h奶汁双性受1v1 | 一区二区三区成人 | 日本国产在线观看 | 97精品久久 | 福利小视频在线播放 | 国产精品情侣呻吟对白视频 | 91九色国产| 欧美性xxxxx| 欧美成人a∨高清免费观看 国产精品999视频 | 黑人黄色片 | 国产成人精品一区二区在线小狼 | 美女免费毛片 | 爽妇网国产精品 | 亚洲AV第二区国产精品 | 亚洲影院一区二区三区 | 一级少妇片| 亚洲视频自拍偷拍 | 亚洲精品亚洲人成人网 | 懂色av蜜臀av粉嫩av分 | 大黑人交交护士xxxxhd | 亚洲成人高清在线观看 | 免费看欧美大片 | 97人妻人人澡人人爽人人精品 | 国内精品在线观看视频 | 97人妻人人澡人人爽人人精品 | 国产区一区二区 | 偷拍综合网 | 日韩成人精品一区二区 | 成人一区二区三区仙踪林 | 91在线看视频 | 美腿丝袜一区二区三区 | a级片免费看 | 国产青草视频在线观看 | 特大黑人巨交吊性xxxx视频 | 天天躁日日躁狠狠躁av麻豆男男 | 欧美成人一区二区视频 | 大尺度在线观看 | 性歌舞团一区二区三区视频 | 国产精品免费看片 | 亚洲三级网| 日批视频免费在线观看 | 婷婷亚洲天堂 | 青青草视频国产 | 精品国产乱码久久久久久牛牛 | 人妻无码一区二区三区四区 | 欧美另类综合 | 国产麻豆91视频 | 精品国产大片大片大片 | 无套内谢少妇毛片 | a天堂中文字幕 | 97中文在线| 成人福利一区二区 | 国产第一草草影院 | 四虎影院免费视频 | 欧美一级夜夜爽 | 密色av| 久久免费一区 | 中文字幕人妻无码系列第三区 | 日本中文字幕免费 | 久久久天堂国产精品女人 | 91福利在线导航 | 国产又黄又湿 | 欧美精品乱码视频一二专区 | 伊人激情在线 | 干综合网| 婷婷久草 | 村姑电影在线播放免费观看 | 视频一区二区三区在线 | 爱情岛论坛成人 | 亚洲国产成人精品女人久久 | 欧美日韩在线一区二区三区 | 久久99日韩 | 一个人在线免费观看www | 美国三级视频 | 男人天堂黄色 | 日老女人视频 | 国产精品视频在线观看免费 | 女人夜夜春 |