2012-06-15 31 views
0

我知道使用DMA将硬盘数据传输到主内存,但网络堆栈数据不能使用DMA,数据必须通过处理器。这是真的吗?如果是的话,有什么方法可以避免这种情况?通过处理器传输数据不是真的没有效率吗?我的电脑上的网络堆栈是否使用DMA?

+0

你在哪里以及如何学习? –

回答

1

大多数现代网卡或任何此类硬件也使用DMA进行数据传输,但这种混淆源于CPU必须将来自用户应用程序的大部分数据处理成网络数据卡需要(例如,以TCP数据包和以太网帧的形式)。这个处理必须由CPU完成,因为CPU实现了用于发送数据的各种网络协议。

顺便说一句,硬盘驱动器也是如此。尽管DMA用于将大块数据从RAM传输到硬盘,但几乎不可避免地CPU必须验证这些数据块是否将放置在正确的位置并格式化为正确的文件系统类型。

2

是真的吗?

不!网络设备DMA专门分配给内存缓冲区用于此目的。自20世纪90年代早期PCI总线出现以来,网络IO的DMA一直是x86领域的通用规则。

通过处理器传输数据不是真的低效吗?

是的,效率令人难以置信。在初始化之后,核心与一个现代网卡直接交互的唯一时间是发信号给“传送门铃”。这门铃是一个独立的写操作,它告诉卡检查内存中是否有新的数据包要传输。核心和网络设备之间的所有其他交互通过内存间接进行。

相关问题