網卡發送和接收緩衝區是實際有空間,還是一個數字而已?
這個只是一個邏輯值,並不實際分配內存
這是網卡的級別的限制,超過了閥值,數據就不收發了
網卡的發送和接收緩衝區是所有連接共享?
是的,也有連接級別的發送和接收緩衝區的大小限制
通過sock_setopt來設置,這是tcp,udp中的隊列的大小
網卡驅動初始化的時候,會從內核中割出一塊內存iomap的,專門給驅動,malloc是分配不到的
但是網卡收到數據後,這個數據是拷貝到網卡驅動初始化的一片內存中,放到一個邏輯的數據結構中,如:隊列
網卡收包的過程也是拷貝,但是過程一般佔用的是DMA的時間
中斷的上半部會執行數據的拷貝嗎?
數據不會執行應用層的拷貝,但是DMA的拷貝還是會執行
如果不會,網卡數據收包越來越多,可能會被覆蓋,這個內存在驅動初始化的時候已經預分配了
中斷的下半部會幹什麼呢?
從上半部中的邏輯結構(隊列中)將數據取走,分發到協議棧的各個層次