【发布时间】:2017-05-10 11:35:10
【问题描述】:
我在 linux 中为 ipsec 开发模块。看看我的模块中的代码将被执行时的两种不同情况。
从进程上下文执行:应用程序产生一些流量通过网络传输,应用程序应该调用一些系统调用来传输数据,然后进程切换到内核空间,数据包通过linux的网络子系统,这里将执行我的模块,并且交给网卡任务后全部完成。所有这些步骤都是从进程上下文执行的,并且在任何时刻调度程序都可以将进程从一个切换到另一个。如下是使用我的模块的第一个案例-来自进程上下文。
从软中断上下文执行:当网卡接收到数据包时,它会产生硬件中断,从而“准备”适当的软中断运行。数据包通过 linux 的网络子系统(包括我的模块),直到某个应用程序得到它。这些步骤是从软中断上下文中执行的,只能被硬件中断打断,而不能被调度程序工作打断。
问题是:如何以编程方式确定在模块中,从哪个上下文模块执行?它可以是 struct task_struct 的某些元素或某些系统调用或其他东西。我自己找不到。
【问题讨论】:
标签: linux-kernel network-programming linux-device-driver