【问题标题】:Context Switching to Specific Process after Specific ISR特定 ISR 后上下文切换到特定进程
【发布时间】:2018-05-13 08:53:46
【问题描述】:

在特定的 ISR 之后,是否有任何(肮脏的)方法来引发上下文切换到特定进程?

在正常情况下,在 ISR 之后,被中断的进程将继续运行,我必须等待调度程序选择该特定进程。我想在 ISR 之后立即切换到具体流程。

任何建议都会很棒。谢谢!

【问题讨论】:

  • '在正常情况下,在 ISR 之后,被中断的进程将继续运行' - 不,并非总是如此,并且在硬件中断时准备好线程/进程不需要任何(脏)方法,这是驱动程序在 I/O 操作完成时的正常行为,通常使用信号量或事件信号,并在从中断状态返回时请求调度程序运行。
  • 如果有一个空闲的内核,或者如果您的等待线程具有足够高的优先级来抢占在中断之前内核上正在运行的任何内容,那么您的线程/进程将运行,而不仅仅是准备好.

标签: c linux interrupt isr context-switching


【解决方案1】:

构造您的驱动程序,以便进程在合适的系统调用(read()ioctl())上具有线程阻塞,同时 ISR 唤醒该线程(因为至少有一个字节可用于 read())。

然后,确保线程具有尽可能高的优先级,并且最好使用实时调度程序(SCHED_FIFOSCHED_RR)。在实践中,如果您的进程没有以 root 权限运行,您需要以 root 权限启动服务,设置线程,然后删除权限;或通过例如提供二进制可执行文件CAP_SYS_NICE 功能setcap pe=CAP_SYS_NICE binary.

从技术上讲,司机也可能会扰乱日程安排,但我不会那样做。任何时间紧迫的事情都应该在内核 ISR 中完成。

如果您想在用户空间中执行此操作,因为您不希望您的代码是内核的衍生品,因此是 GPL 许可的,那么您只能靠自己了。

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 2022-10-17
    • 1970-01-01
    • 2014-10-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多