首页 > 解决方案 > 中断上下文和进程上下文的区别?

问题描述

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

为什么需要下半部分?为什么不把所有的处理都放在上半部分?

标签: linuxlinux-kerneloperating-system

解决方案


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

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

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

进程上下文

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

中断上下文

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

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

链接了解更多详情。


推荐阅读