网络设备驱动和数据链路层的分析
分类: linux源码分析 2006-07-24 16:15 1446人阅读 评论 (0) 收藏 举报 当物理网络设备接收到数据时,系统是如何知道并读取数据的呢?当前可通过两种途径解决这个问题。 一种方法是轮询方式 ,系统每隔一定的时间间隔就去检查一次物理设备,若设备“报告”说有数据到达,就调用读取数据的程序。在 Linux 中,轮询方式可通过 定时器 实现,但该方法存在一个明显的缺点:不管设备是否有数据,系统总是要固定地花 CPU 时间去查看设备,且可能延迟对一些紧急数据的处理,因为网络设备有数据时可能不能马上得到 CPU 的响应。在这种方式下,设备完全处于一种被动的状态,而 CPU 又负担过重。无论从资源的利用率上还是从效率上看,这种方法都不是最优的。 另一种方法是中断方式 ,中断方式利用硬件体系结构的中断机制实现设备和系统的应答对话,即当物理设备需要 CPU 处理数据时,设备就发一个中断信号给系统,系统则在收到信号后调用相应的中断服务程序响应对设备中断的处理。中断方式有效地解决了设备与 CPU 的对话交流问题,并将 CPU 从繁重的设备轮询中解脱出来,大大提高了 CPU 的利用率。当前不管是 Linux 平台还是 Windows 平台,它们的网络设备驱动程序 几乎都是使用中断方式 的。故在此我们主要讨论基于中断方式的网络设备驱动程序。 网 络分层引起的一个问题是