下面文章在这段时间内研究 select/poll/epoll的内核实现的一点心得体会:select实现poll的实现跟select基本差不多,按照我们再来看epoll为了解决select/poll天生的缺陷,是如何实现的。我们最后看看描述符就绪时候,是如何通知给select/poll/epoll的,以网络套接字的TCP协议来进行说明。tcp协议对应的 poll回调是tcp_poll, 对应的等待队列头是 struct sock结构里 sk_sleep成员,当物理网卡接收到数据包,引发硬件中断,驱动在中断ISR例程里,构建skb包,把数据copy进skb,接着调用netif_rx所以呢 select/poll/epoll其实他们在内核实现中,差别也不是太大,其实都差不多。
暂无评论