- 论坛徽章:
- 0
|
我觉得前面讨论的挺有道理。
另外,有个要注意的地方是:网卡收包是一个很长的,一系列的过程。大概可以分成检测到线路上有数据,数据经过PHY, 数据到了内部的FIFO, 最后数据发送(DMA)到主存。
很多东西是和硬件的设计有关的。
从我看的RTL8139 , E1000驱动来看。我觉得如果没驱动,那么网卡是不会收包的。因为在收包之前,一般都有个RX CTRL, 要通过驱动来启动接收,并设置接收的参数。当然,也许包是到了内部FIFO然后丢掉了,也许是在那之前就丢掉了 。反正肯定不会DMA到主存的。因为要DMA的话,就要知道个DMA的地址。网卡不能随便往内存里写东西啊。万一把其他内核用的数据覆盖了怎么办?
硬件一般都设计成被驱动控制的。因为软件可以很灵活,也容易更新。这样灵活的部分让软件来做,硬件基本上是被动的等待来自驱动的命令。
当然,你可以自己做一个网卡,不需要驱动,来了数据就收,然后硬是写到内存里固定的一个地方。但是在一般的GENERAL PURPOSE 计算机和OS来说,这样的设计估计是没人会用的。除非你有特殊要求。
PS: 我对发送那块看的比较多,接收这块也许有不准的地方,多包涵。 |
|