3
A
回答
3
sk_buffs通常表示網絡分組。它們可以作爲特定進程寫入特定套接字的結果而生成,但它們也可以以其他方式存在。
當從網絡裝置接收到的分組,例如,它被放置在一個sk_buff中。當它通過堆棧時,它可能會被各種模塊和層(IP,ARP,UDP/TCP,以及「tap」設備等)處理。其中一些模塊可能需要對不是即時的數據包進行操作(例如:在tap設備上重新傳輸)。當然,來自數據包的數據也可能傳遞給從套接字讀取的進程。
A組分需要用於處理該分組數據當然可以簡單地創建所述分組緩衝器的副本,但如果沒有其他部件將修改它,這將是一種浪費。因此,遞增用戶數允許模塊對數據包進行「保留」,這樣它就不會被釋放 - 因此底層內存不會被重新用於某種其他目的 - 只要模塊仍然需要它。當sk_buff的用戶逐一完成使用時,它們遞減用戶計數,並且當它變爲零時,則釋放內存然後。
0
通常,在單核機器的情況下,只可以有一個「用戶」使用網絡緩衝器在任何時間,該「用戶」指的是在linux網絡基礎設施的不同的部分或功能。他們不能同時運行,所以這個「用戶」引用計數沒有用,我猜想沒有使用。
但在SMP機,其中不同的CPU可以運行的內核的不同部分的所有在同一時間,和同時同時讀取網絡緩衝區,該參考計數變得重要。當它仍然在使用中時,你不想修改它,但是系統的另一部分或者釋放它。但對於只讀操作,它可能是併發的,因此這個引用計數用於計算使用網絡緩衝區的「用戶」(或內核區域)數量。
相關問題
- 1. sk_buff copy&sk_buff clone
- 2. 在linux的sk_buff中,skb-> data是物理地址還是虛擬地址?
- 3. 訪問skb(skb-> data)時出錯
- 4. skb-> data_len,skb-> len,skb-> mac_len的值爲0是否正確?
- 5. 爲什麼沒有sk_buff有spin_lock或mutex
- 6. 如何到達struct sk_buff成員?
- 7. 如何找出sk_buff結構的大小?
- 8. 如何使多個用戶
- 9. Linux skb alloc失敗
- 10. sk_buff的IP地址
- 11. 複製skb->數據到多個描述符
- 12. 如何驗證多租戶網站中的用戶,當每個租戶在laravel中有多個用戶時
- 13. R如何找到有多少用戶只有一個值
- 14. 記錄如何屬於單個用戶,但也有多個「輔助」用戶?
- 15. 如何使用netfilter內核模塊從sk_buff讀取數據?
- 16. 如何讓使用R的用戶有多個輸入?
- 17. skb和Scatter聚集功能
- 18. 增加SKB的引用計數
- 19. 從sk_buff訪問MAC地址
- 20. 從struct sk_buff提取數據
- 21. 當使用網絡系統調用與sk_buff的一個KM
- 22. 如何在一個用戶帳戶下擁有多個〜/ .gitconfig實例?
- 23. 每個帳戶有多個信用卡
- 24. 如何進入多個用戶
- 25. 如何實現多個用戶cms?
- 26. Python:如何管理多個用戶?
- 27. Spring MVC如何處理多個用戶
- 28. 如何處理多個用戶的localStorage?
- 29. 會話如何跟蹤多個用戶
當其他層如IP/Link層處理數據包時,他們是否也增加了用戶數? 什麼是水龍頭設備?你能給出一個實際的例子,就像一個數據包是由Firefox生成的,並放在套接字寫入隊列中,然後哪個tap設備將獲取數據包? –
通常情況下,如果層需要保留數據包供以後使用(即用於延遲使用),則該層只會增加用戶數。請參閱http://en.wikipedia.org/wiki/TUN/TAP瞭解輕敲驅動程序的定義。這不是常態;大部分時間用戶數可能不會超過1. –
還應該指出,Firefox不會生成「數據包」;它會生成要通過TCP傳輸的數據。內核制定數據包(通常包括應用程序數據)。 sk_buffs不屬於任何進程;它們屬於內核。 –