我知道当你从NIC接收数据时,有一个环形缓冲区,NIC DMA数据进入其中,并且有些NIC支持多个环形缓冲区。但我想知道环形缓冲区存储在哪里,在哪个结构中,或者我应该在编写网络驱动程序时手动分配环形缓冲区?
环形缓冲区存储在哪里,是什么样的,如果给我源代码更好,非常感谢。
参考:https://www.researchgate.net/figure/The-shared-ring-buffers-FIFO- Between-NIC-and-the-device-driver_fig1_341642118 核心信息:
它是由网络驱动程序创建的,使用内核的fifo数据结构,并且它的内存是通过内核的方法分配的,因此位于内核的数据段中。
内核(没有网络驱动程序)调用网络驱动程序来拉起网卡(硬件),网络驱动程序管理环形缓冲区以供内核的IP协议栈使用。
当数据来自网卡时,网卡会做两件事: