網卡驅動中的疑惑

網卡發送和接收緩衝區是實際有空間,還是一個數字而已?

    這個只是一個邏輯值,並不實際分配內存

    這是網卡的級別的限制,超過了閥值,數據就不收發了

 

網卡的發送和接收緩衝區是所有連接共享?

    是的,也有連接級別的發送和接收緩衝區的大小限制

    通過sock_setopt來設置,這是tcp,udp中的隊列的大小

 

 

網卡驅動初始化的時候,會從內核中割出一塊內存iomap的,專門給驅動,malloc是分配不到的

    但是網卡收到數據後,這個數據是拷貝到網卡驅動初始化的一片內存中,放到一個邏輯的數據結構中,如:隊列

    網卡收包的過程也是拷貝,但是過程一般佔用的是DMA的時間

 

中斷的上半部會執行數據的拷貝嗎?

    數據不會執行應用層的拷貝,但是DMA的拷貝還是會執行

    如果不會,網卡數據收包越來越多,可能會被覆蓋,這個內存在驅動初始化的時候已經預分配了

   

 

中斷的下半部會幹什麼呢?

從上半部中的邏輯結構(隊列中)將數據取走,分發到協議棧的各個層次

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章