本文继上篇后续,介绍了一个Linux服务器接收一个数据包并发送的协议栈和用户套接字的过程。全文篇幅(约字,阅读至少需15分钟)
回顾上篇文章:浅谈Linux网络协议栈之接收数据(上篇)
SoftIRQs
什么是softirq?
Linux内核中的softirq系统是一种在驱动程序中实现的中断处理程序的机制。
softirq系统可以想象为一系列内核线程(每个CPU一个),为处理不同的终端事件而存在的函数。你可以通过top命令来看到ksoftirqd/0在你的进程列表中,这说明softirq正运行在CPU中。
内核的子系统通过open_softirq函数来注册一个softirq处理函数。
1
ksoftirqd
首先我们看看ksoftirqd是如何初始化的。
kernel/softirq.c
staticstructsmp_hotplug_threadsoftirq_threads={.store=ksoftirqd,.thread_should_run=ksoftirqd_should_run,.thread_fn=run_ksoftirqd,.thread_