linux kernel
star006
攻城狮
展开
-
Linux内核数据包处理流程-数据包接收(2)
四、网卡的数据接收内核如何从网卡接受数据,传统的经典过程:1、数据到达网卡;2、网卡产生一个中断给内核;3、内核使用I/O指令,从网卡I/O区域中去读取数据;我们在许多网卡驱动中,都可以在网卡的中断函数中见到这一过程。但是,这一种方法,有一种重要的问题,就是大流量的数据来到,网卡会产生大量的中断,内核在中断上下文中,会浪费大量的资源来处理中断本身。所以,一个问题转载 2017-08-29 09:39:51 · 632 阅读 · 0 评论 -
Linux内核数据包处理流程-数据包接收(3)
五、队列层1、软中断与下半部当用中断处理的时候,为了减少中断处理的工作量,比如,一般中断处理时,需要屏蔽其它中断,如果中断处理时间过长,那么其它中断有可能得不到及时处理,也以,有一种机制,就是把“不必马上处理”的工作,推迟一点,让它在中断处理后的某一个时刻得到处理。这就是下半部。下半部只是一个机制,它在Linux中,有多种实现方式,其中一种对时间要求最严格的实现方式,叫转载 2017-08-29 09:40:50 · 408 阅读 · 0 评论 -
Linux内核数据包处理流程-数据包接收(1)
数据包的接收作者:kendoKernel:2.6.12一、从网卡说起这并非是一个网卡驱动分析的专门文档,只是对网卡处理数据包的流程进行一个重点的分析。这里以Intel的e100驱动为例进行分析。大多数网卡都是一个PCI设备,PCI设备都包含了一个标准的配置寄存器,寄存器中,包含了PCI设备的厂商ID、设备ID等等信息,驱动程序使用来描述这些寄存器的标识符。如转载 2017-08-29 09:38:17 · 2233 阅读 · 0 评论 -
epoll使用
1. int epoll_create(int size)创建一个epoll的句柄,size用来告诉内核这个监听的数目一共有多大(maxfd+1);当创建好epoll句柄后,它就是会占用一个fd值,在linux下如果查看/proc/进程id/fd/,是能够看到这个fd的,所以在使用完epoll后,必须调用close()关闭,否则可能导致fd被耗尽。2. int epoll_ctl(int原创 2017-10-09 14:54:10 · 222 阅读 · 0 评论