【问题标题】:What happens if when a system call is being executed, the hardware timer interrupt fires?如果在执行系统调用时触发硬件定时器中断会发生什么?
【发布时间】:2017-10-05 05:35:20
【问题描述】:

假设我们有一个只有一个核心的 CPU,并且有很多线程在这个核心上运行。

假设线程A发出了系统调用,现在系统调用的中断处理程序将被执行。

现在在执行系统调用时,假设硬件定时器中断(负责线程调度的中断)触发。在这种情况下会发生什么,CPU会停止运行系统调用并去执行调度程序代码,还是CPU必须等待系统调用完全执行才能切换到另一个线程?

【问题讨论】:

    标签: linux x86 operating-system interrupt scheduler


    【解决方案1】:

    除非系统调用阻止中断,否则将调用中断处理程序。

    【讨论】:

      【解决方案2】:

      在 Linux 中,答案实际上取决于名为 CONFIG_PREEMPT 的内核构建时配置选项。实际上有三种选择:

      如果没有设置 CONFIG_PREEMPT,中断处理程序将标记一个标志,指示调度程序需要运行。系统调用终止时,将在返回用户空间时检查该标志。

      如果设置了 CONFIG_PREEMPT_VOLUNTARY,除了检查标志并且调度程序在系统调用代码中的特定静态代码点运行(如果需要,任务可能会切换)之外,也会发生同样的情况

      如果设置了 CONFIG_PREEMPT_FULL,调度程序将在大多数情况下在从中断处理程序到系统调用代码的返回代码路径上运行,除非抢占临界区有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-29
        • 2015-04-21
        • 1970-01-01
        • 2014-04-04
        • 1970-01-01
        相关资源
        最近更新 更多