- 论坛徽章:
- 0
|
现在很多网卡都采用DMA机制进行数据传输。在传输数据之前,驱动程序维护一个发送数据包的描述符(descriptor),这个描述符一般是环形的,每个描述符都和一个sk_buff结构以及存放数据包的缓冲区相联系。这些都是在接收数据包之前由驱动程序完成的。请问:
1.是不是驱动程序需要将descriptor的地址告诉网卡(写入相关寄存器?),这样网卡在接收到数据包之后就可以直接通过DMA将数据包放入对应的内存区域了,之后触发中断通知CPU。CPU通过中断处理程序取出数据包,递交协议栈处理。那么为了使得网卡能够继续接收数据包,请问descriptor的信息是不是由CPU改动更新,然后再写入网卡寄存器中,还是由网卡自动更改其寄存器中的值,这一步是在什么地方完成的?
2.在CPU取数据包时,把存有数据包的缓冲区与对应的descriptor脱开了,那么新的用于存放数据包的缓冲区是什么时候分配并和descriptor相联系的,又是怎么通知网卡的?
3.网卡在接收数据包的时候是怎么判断这个descriptor是否能用?这是由硬件完成的吗?
不知道我的理解是不是有问题?大家有谁比较熟悉,能够谈谈DMA机制网卡接收数据包的具体过程。万分感谢了 |
|