我很难理解先发制人的一件事.引用维基百科:
在计算中,抢占(更正确地抢占)是暂时中断由计算机系统执行的任务的行为,而不需要其合作,并且意图在稍后的时间恢复任务.这种变化称为上下文切换.它通常由特权任务或称为抢占式调度程序的系统的一部分执行,该系统具有抢占,中断和稍后恢复系统中其他任务的能力.
所以,基本上,他们说调度程序可以中断当前正在运行的任务.这怎么可能呢?CPU正在运行此任务的代码,而不是调度程序的代码.那么调度程序如何做任何事情呢?
我的猜测是必须有某种硬件定时器,在经过一段时间后会物理地中断CPU并将控制权交还给调度程序.它是否正确?有没有我可以更详细地阅读的文件?
任何答案都将受到高度赞赏.
的确。x86 架构有一个概念,称为interrupts. 一些中断由硬件触发(而其他中断可以由软件触发)。
内核注册处理此问题的“处理程序”。如果您从事内核设计,这里的教程可能会有所帮助:http : //www.osdever.net/bkerndev/Docs/gettingstarted.htm(注意:其中一些内容可能非常难,涵盖了一些不严格来说是你问题的一部分)
当中断被触发时,当前正在执行的代码被停止。CPU 将改为执行处理程序,一旦处理程序完成,将返回到触发中断之前正在执行的代码。对于应用程序,就好像中断根本没有发生过一样。
我们可以将中断处理与硬件时钟(例如 PIT 芯片)结合起来,以获得您想要的结果。
您还可以查看http://wiki.osdev.org/PIT(同样,请注意,如果您刚刚开始讨论该主题,其中一些内容可能会很复杂)。
使用 IRQ 进行抢占式多任务处理
定时器 IRQ 也可用于执行抢占式多任务。要给当前正在运行的任务一些时间来运行,请设置一个阈值,例如 3 个滴答声。使用一个像之前一样的全局变量,但从 0 开始,当该变量达到 3 时,切换任务。你怎么做取决于你。
所以: