9

I'm struggling to understand one thing about preemption. Citing Wikipedia:

In computing, preemption (more correctly pre-emption) is the act of temporarily interrupting a task being carried out by a computer system, without requiring its cooperation, and with the intention of resuming the task at a later time. Such a change is known as a context switch. It is normally carried out by a privileged task or part of the system known as a preemptive scheduler, which has the power to preempt, or interrupt, and later resume, other tasks in the system.

So, basically, they say the scheduler can interrupt the current running task. How is that even possible? CPU is running the code of this task at the moment, not the code of scheduler. So how a scheduler can do anything?

My guess is that there must be some kind of a hardware timer which physically interrupts CPU after some time has passed and give control back to scheduler. Is this correct? Is there any documentation where I can read about it in more detail?

Any answers will be highly appreciated.

4

2 回答 2

5

的确。x86 体系结构有一个称为interrupts. 一些中断由硬件触发(而其他中断可以由软件触发)。

内核注册处理此问题的“处理程序”。如果您从事内核设计,这里有一个可能会有所帮助的教程:http ://www.osdever.net/bkerndev/Docs/gettingstarted.htm (注意:其中一些内容可能非常困难,并且涵盖了一些不是严格来说是你问题的一部分)

当触发中断时,当前正在执行的代码将停止。CPU 将改为执行处理程序,一旦处理程序完成,就会返回到触发中断之前正在执行的代码。对于应用程序来说,就好像中断从未发生过一样。

我们可以将中断处理与硬件时钟(例如 PIT 芯片)结合起来,以获得您想要的结果。

您还可以查看http://wiki.osdev.org/PIT(同样,请注意,如果您刚刚开始了解该主题,其中一些内容可能会很复杂)。

使用 IRQ 进行抢先式多任务处理

定时器 IRQ 也可用于执行抢占式多任务。要给当前正在运行的任务一些运行时间,请设置一个阈值,例如 3 个滴答声。使用像之前一样的全局变量,但从 0 开始上升,当该变量达到 3 时,切换任务。你如何做到这一点取决于你。

所以:

  1. 内核通过注册适当的中断处理程序说“当时间到期时,我希望执行此代码”。
  2. 定时器到期,触发中断。然后执行内核注册的代码。
  3. 内核接管,从停止的进程中保存所有需要的数据(例如寄存器的状态和正在执行的代码的地址),并将控制权交给不同的进程。
  4. 稍后,当内核希望第一个进程继续运行时,它会使用所有保存的数据将进程恢复到之前的状态。然后,它告诉 CPU 从它停止的地方继续执行代码。
于 2012-08-15T21:35:51.603 回答
3

你的猜测是正确的。在大多数操作系统中,都有一个定时器中断,它以某个固定频率运行内核中的特权代码。此特权代码可以决定 (a) 返回到最初运行的代码,或 (b) 保存上下文并开始运行其他代码。

还有其他可能导致上下文切换的条件,例如从 I/O 读取的请求,其中进程必须等待 I/O 准备好。当第一个任务等待时,内核可能会切换到其他任务。

您可能也有兴趣阅读所谓的无滴答内核

于 2012-08-15T21:33:07.820 回答