【问题标题】:How operating system obtain process switching操作系统如何获得进程切换
【发布时间】:2015-04-06 14:37:08
【问题描述】:

操作系统如何获得进程切换。我想更笼统地说一下。我们处于多任务时代,我知道基本概念,即有一些调度程序可以权威地指出现在将运行哪个进程。我的问题更多的是处理器如何保证某个进程将消耗 X 时间然后执行下一个进程。是否有任何低级机制在特定时间后中断进程?或者它是某种抽象方法来实现这一点?

是否有可能在没有特殊处理器帮助的情况下实现中断当前任务并将执行切换到另一个任务?如果不是,我们需要什么来实现它。假设我想在像 Atmega8 这样的简单 uC 中实现这样的东西(这只是 uC 的示例,我们可以使用其他家族的其他)

【问题讨论】:

    标签: operating-system scheduling scheduler


    【解决方案1】:

    有两种方法(我能想到的)可以导致上下文切换:

    1) 进程/线程产生。这往往是上下文切换的最常见原因。线程排队和 I/O 请求并等待响应。等待导致线程/进程屈服。

    2) 定时器,如上所述。在计算绑定进程(所有处理、无 I/O、无页面错误)的情况下,CPU 计时器会生成在内核模式下处理的中断。操作系统将有一组内务处理任务在定时器中断时执行。其中之一将是查看当前进程是否已超出其量程。如果是这样,并且有另一个具有更高优先级的进程准备就绪,请执行上下文切换。

    【讨论】:

    • 3) (1) 中请求的 I/O 操作完成,等待的线程开始运行,抢占另一个线程。
    • 定时器中断将无法找到具有更高优先级的就绪进程/线程 - 任何此类线程都将在其就绪时设置为“立即”运行,抢占优先级较低的线程。
    【解决方案2】:

    谷歌搜索“中断”。对于现代抢占式内核,来自正在运行的线程/进程的系统调用以及导致驱动程序运行的硬件中断,是可以驱动操作系统内核调度状态机的事件,因此是接下来将在可用内核上运行的进程/线程集.

    在许多操作系统设计中,尤其是在有限的硬件上,没有“处理器保证某些进程会消耗 X 时间”之类的东西。其他的则在调度程序中内置了反饥饿算法。

    还有其他的调度算法寻求提供保证,但面对来自系统调用和 I/O 完成事件的硬件中断的冲突需求,这非常困难

    【讨论】:

    猜你喜欢
    • 2020-03-13
    • 2016-01-01
    • 2019-02-17
    • 2012-07-14
    • 2015-03-16
    • 2011-06-22
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多