相关疑难解决方法(0)

为什么在中断上下文中执行的内核代码/线程无法休眠?

我正在阅读Robert Love的以下文章

http://www.linuxjournal.com/article/6916

说的是

"...让我们讨论工作队列在进程上下文中运行的事实.这与其他下半部机制形成对比,后者都在中断上下文中运行.在中断上下文中运行的代码无法休眠或阻塞,因为中断上下文没有重新安排的后台进程.因此,由于中断处理程序与进程没有关联,调度程序没有任何东西可以进入休眠状态,更重要的是,调度程序无需唤醒..."

我不明白.AFAIK,内核中的调度程序是O(1),它是通过位图实现的.那么什么阻止了scehduler将中断上下文置于睡眠状态并采取下一个可调度进程并将其传递给控件?

linux-kernel

48
推荐指数
3
解决办法
3万
查看次数

在工作队列中使用spin_lock()vs down_interruptible()

我遇到一种情况,即spin_lock()在多个中断之间的间隔太短的情况下,在工作队列中使用它会使系统挂起。更改spin_lock()down_interruptible()问题后,暂时消失了。

但是,我看到了在内核代码中使用下半部分的实现,而不是使用spin_lock()了互斥锁/信号量(例如,中的irq-function request_threaded_irq())。那是什么原因呢?我最好的猜测是,在这种情况下,互斥体/ sempahore可能会过大。

c mutex interrupt linux-kernel spinlock

1
推荐指数
1
解决办法
285
查看次数

标签 统计

linux-kernel ×2

c ×1

interrupt ×1

mutex ×1

spinlock ×1