中断上下文和进程上下文之间的区别?

Pan*_*shi 3 linux operating-system linux-kernel

什么是中断上下文?什么是进程上下文?中断上下文的优点是什么?

为什么需要下半部分?为什么不全部处理上半部分?

Pan*_*shi 6

进程上下文是进程的当前状态,进程上下文可以进入睡眠状态,可抢占,执行耗时任务,获取和释放互斥锁。

中断上下文是当中断发生时状态/优先级进入中断处理程序,当前进程停止/保存直到我们完成中断,中断上下文不是时间消耗的,不可抢占的,它不能进入​​睡眠状态。

Bottom Half机制,SoftIRQ,Tasklet工作在中断上下文中,workqueue可以进入睡眠状态,所以它不在中断上下文中运行。

进程上下文

进程中最重要的部分之一是执行程序代码。这段代码是从一个可执行文件中读入的,并在程序的地址空间内执行。正常的程序执行发生在用户空间。当程序执行系统调用或触发异常时,它进入内核空间。此时,内核被称为“代表进程执行”并且处于进程上下文中。在进程上下文中,当前宏有效。退出内核后,进程会在用户空间恢复执行,除非在过渡期间(过渡期)有更高优先级的进程变得可运行,在这种情况下,调度程序被调用以选择更高优先级的进程。

中断上下文

执行中断处理程序或下半部分时,内核处于中断上下文中。回想一下,进程上下文是内核代表进程执行时所处的操作模式——例如,执行系统调用或运行内核线。在流程上下文中,当前宏指向关联的任务。此外,由于进程在进程上下文中耦合到内核(因为进程以与上述进程相同的方式连接到内核),进程上下文可以休眠或以其他方式调用调度程序。

另一方面,中断上下文与进程无关。当前宏不相关(尽管它指向中断的进程)。没有后台进程(因为没有进程后台),中断上下文不能休眠——它怎么会重新调度?(或者如何重新安排它?)因此,不能从中断上下文调用某些函数。如果一个函数休眠,你不能从你的中断处理程序中使用它——这限制了函数,所以人们可以从一个中断处理程序调用它。(这是在中断处理程序中可以使用哪些函数的限制)

链接了解更多详情。