【问题标题】:How does a scheduler end a running process?调度程序如何结束正在运行的进程?
【发布时间】:2011-07-14 07:50:47
【问题描述】:

我刚刚意识到,在学习了很多关于各种调度算法,上下文切换是如何完成的等等之后,我仍然不清楚一件事。

以单处理器系统为例:

如果进程A 正在运行并且它的时隙应该在5 秒后结束,那么调度程序或操作系统如何知道如何在5 秒后结束它?当 A 运行时,操作系统的任何部分都不能运行。调度器应该在监控它,但是如果它不能运行它怎么可能呢?操作系统的调度程序是否编写 ISR 并每 5 秒产生一次中断?这可能吗?即使是这样,它似乎也不是实现它的好方法。

调度程序究竟是如何做到这一点的?

【问题讨论】:

    标签: scheduling cpu


    【解决方案1】:

    操作系统的调度程序是否会写入 ISR 并每 5 秒产生一次中断?这可能吗?即使是这样,它似乎也不是实现它的好方法。

    是的,这正是它在抢占式多任务系统上的工作方式(尽管在桌面系统上,间隔通常更像 10 毫秒)。

    是的,还有其他方案,例如协作多任务,每个进程自行决定何时让步。

    【讨论】:

    • 它究竟是如何每 X 毫秒产生一个中断的?
    • @Vanwaril,带有某种计时器。显然,这取决于 ISA。这是一种方法。有一个 CPU 寄存器,当其值达到 0 时触发中断。操作系统写入该寄存器,可能值 10 毫秒 * 2 GHz = 2000 万。计数器每个时钟周期递减,在 2000 万个时钟周期后触发中断,操作系统的 ISR 运行并执行调度逻辑。
    • @rlibby,您能否推荐一些更广泛地讨论这个概念的书籍/在线资源。
    【解决方案2】:

    是的,通常会触发某种定时器中断。然后内核可以运行一段时间并在需要时切换进程上下文 - 通常,该中断会比每 5 秒触发一次更频繁。为什么它看起来不是一个很好的实现方式?

    【讨论】:

    • 因为它必须经常触发。如果它每 20 毫秒左右触发一次只是为了处理新进程/查看当前进程是否可以继续,它的时间片已经到了,或者它应该被抢占,那么这不会占用你大量的 CPU 时间吗?而且我认为当前的操作系统使用 20 毫秒的时隙,所以这不会更频繁地触发吗?
    • @Vanwaril,是的,它会消耗一些时间,但只要中断处理程序比时间片短得多,它就不会消耗那么多时间。 20 ms 对您来说可能看起来很短,但对于 2 GHz CPU,它是 4000 万个周期。上下文切换的更大代价不是时间损失,而是缓存损失。
    猜你喜欢
    • 2015-01-07
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多