是否有可能在中断处理程序中执行上下文切换以安排以前注册的另一个进程?如果是,如何?如何在中断处理程序中进行上下文切换?
回答
我不确定我是否正确理解你的问题,但你是指延期工作?
有既定的方式通过使用微进程等推迟在ISR的工作
如果你想安排一个用户进程,一个办法是挂起一个信号量的用户线程(在内核中),并捅ISR中的信号量。
我在用户模式进程中注册了一个用户模式irq处理程序。所以当中断来临时,我可以直接跳到处理程序。我想让当前流程成为我注册的流程。 – goodjesse 2013-03-07 02:30:34
好的,首先,你不能在中断部分即上半部分切换上下文。
但是,您可以安排另一个函数在中断上下文或进程上下文中运行。 实现这一目标的方式是中断处理程序的下半部分。
1:如果你想安排你的注册函数运行在中断上下文中使用Tasklet。
DECLARE_TASKLET(my_tasklet,functionname,0);
irqreturn_t my_tl_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
tasklet_schedule(&my_tasklet);
return IRQ_HANDLED;
}
2:如果你想安排你的注册函数在进程上下文中运行,使用workqueue。 (void *)(void *))函数名,NULL);函数名,函数名,函数名,函数名,函数名,函数名,函数名,函数名,函数名,函数名,函数名,函数名,函数名,
irqreturn_t my_tl_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
schedule_work(&short_wq);
return IRQ_HANDLED;
}
不,您不能在中断上下文中进行上下文切换。由于调度程序被禁用,因此在中断上下文中运行的任务不能被抢占。
在下半部分的情况下,softirq和tasklet都在中断上下文中运行,因此不允许像睡眠呼叫那样的上下文切换。但是在工作队列下半部分上下文切换可能是,因为它在进程上下文ksoftirqd中运行。
- 1. 中断处理程序中的上下文切换
- 2. 线程上下文切换vs进程上下文切换
- 3. 如何在softirq上下文中运行hrtimer处理程序?
- 4. 如何在python程序中处理文件从窗口切换
- 5. 切断预处理程序行
- 6. 当中断发生时内核如何处理进程上下文中的锁?
- 7. python如何处理线程锁定/上下文切换?
- 8. 当中断处理程序被另一个中断中断时,中断上下文如何“恢复”?
- 9. 在中断处理程序
- 10. 阻止调度程序在Java中执行上下文切换
- 11. 如何在多核处理器上完成线程的上下文切换?
- 12. 从进程上下文切换切换线程上下文有多好?
- 13. ARM如何在IRQ处理程序中切换到svc模式?
- 14. 如何在netty中的2组处理程序之间切换
- 15. 如何中断事件处理程序
- 16. 在处理程序中执行切换(ProgressDialog)
- 17. 处理中断的程序,即中断处理程序存储在哪里?
- 18. 在Linux中的两个进程之间的上下文切换
- 19. java thead池执行程序如何处理中断线程
- 20. 在一个进程和两个进程中的线程上下文切换
- 21. 进程中线程之间的上下文切换
- 22. 如何在信号处理程序中获得执行上下文?
- 23. 如何在内核模块线程中切换上下文?
- 24. 如何在java多线程中实现上下文切换
- 25. 程序检测上下文切换
- 26. 中断处理程序在不同的线程中执行?
- 27. POSIX:如何在线程之间执行上下文切换?
- 28. ksoftirqd在中断或进程上下文中的下半部分?
- 29. 处理器如何知道如何切换高prioirity进程?
- 30. 文件处理程序下载中断+会话不见了
具体而言,我在用户模式进程中注册了一个用户模式irq处理程序。所以当中断到来时,我想立即跳转到用户模式处理程序,但是当do_IRQ中的当前进程不是我之前注册的进程时,我想进行上下文切换以获取我注册的进程运行。 – goodjesse 2013-03-07 02:21:43