为什么中断处理程序有睡眠function?

为什么中断处理程序不能进入睡眠状态? 我有同样的问题2意见: –

  1. 中断处理程序是不可调度的? 因为它没有task_struct。

  2. 如果处理器处于睡眠状态,则系统可能会挂起,因为系统时钟中断被屏蔽,无法调度睡眠进程。

没有得到的是,中断处理程序是可调度的,但是由于优先级较低的系统时钟中断因为较高优先级中断而被屏蔽而不能再次产生。

请给我一个很好的例子。

Solutions Collecting From Web of "为什么中断处理程序有睡眠function?"

当中断发生时,处理器进入异常状态(中断上下文)。 发生这种情况时,调度程序将被禁用,直到处理器退出此状态。 如果您将任务置于睡眠状态,则任务将进入等待队列,并通知调度程序将其他任务取出。 如果发生在中断上下文中,那么直到我们完成这个上下文,处理器才会挂起,因为我们没有完成中断。 究竟发生了什么事是处理器依赖。 一个解决方案就是在线程中运行实际的中断代码 – 这被称为线程中断,这是实时补丁中的一个配置,使得linux“硬实时”

你不能在Linux中的中断处理程序中休眠,因为它们没有被执行的线程支持。 换句话说,它们不是可调度的实体。

大多数系统将中断处理分成两半,通常称为上半部分和下半部分。 上半部分运行速度非常快,中断发生时中断(事实上正在运行),上半部分本身没有线程。 因此,上半部分无法入睡,因为在睡眠完成时没有任何东西需要重新安排。

从罗伯特·爱在Quora