Linux 内核中的延迟工作与中断处理机制
1. Linux 内核的两种操作上下文
Linux 内核在两种上下文中执行操作:
1.1 进程上下文
进程上下文是内核代表用户进程执行操作时所处的模式,例如执行系统调用的内核服务例程。通过工作队列和线程化中断调度的延迟工作也在进程上下文中执行。这些内核线程在内核空间的进程上下文中运行,但并不代表任何用户进程。在进程上下文中执行的代码可以被阻塞。
1.2 中断上下文
中断上下文是由硬件中断控制器异步请求触发的。这种特殊上下文也被称为“原子上下文”,因为在该上下文中执行的代码不能被阻塞。此外,中断不可调度,它们发生时会执行中断处理程序并创建自己的上下文。软中断、小任务和定时器都在中断上下文中运行,这意味着它们不能调用阻塞函数。
2. 延迟工作的概念与作用
延迟工作允许将代码调度到稍后的时间点执行。这些调度的代码可以使用工作队列或线程化中断在进程上下文中运行(这两种方法都使用内核线程),也可以使用软中断、小任务和定时器在中断上下文中运行。工作队列和线程化中断的底半部是基于能够阻塞的内核线程实现的,而小任务和定时器是基于不能调用阻塞函数的软中断实现的。
延迟工作用于补充中断处理程序的功能,因为中断有重要的要求和限制:
- 中断处理程序的执行时间必须尽可能短。
- 在中断上下文中不能使用阻塞调用。
使用延迟工作时,可以在中断处理程序中执行最少量的对时间敏感的必要工作,并从中断处理程序调度一个异步操作,以便在中断启用时稍后运行。这种用于中断的延迟工作也称为底半部,因为其目的是执行中断处理程序(顶半部
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



