【问题标题】:Preempt a process by a timer interrupt通过定时器中断抢占进程
【发布时间】:2016-01-17 14:31:43
【问题描述】:

有两个进程(P-A 和 P-B)在同一个 CPU 内核上运行。进程 B 是多线程的。我希望进程 A 在每 2 微秒后被进程 B 的线程抢占一次。

是否可以在固定的时间间隔(以微秒为单位)后编写定时器中断(或其他任何东西)来抢占进程 A?

【问题讨论】:

  • 在用户空间程序中?
  • 是的,丹尼尔。正如@Chris 所建议的那样,我本可以使用警报(),但我想避免使用信号机制,因为它本身至少需要 1-2 微秒。没有信号也可以吗?
  • Linux 本身并未针对此用例进行优化。但是有些项目在内核中实现了这种技术(实时又名 RT)。如果没有修改过的内核,我不相信你有比警报更好的东西。在谷歌上搜索“linux real-time”发现以下内容:RTLinux、RTAI、LibeRTOS、Xenomai
  • @Scissor,您可以在现在支持高分辨率计时器的内核空间中执行此操作。

标签: linux-kernel scheduling preemption


【解决方案1】:

alarm 系统调用是你所需要的。根据其manpagealarm() 安排在几秒内将 SIGALRM 信号传递给调用进程。您可以通过signal/sigaction 接口为 SIGALRM 注册信号处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2018-09-16
    • 1970-01-01
    • 2022-09-28
    • 2012-01-17
    相关资源
    最近更新 更多