2011-02-05 75 views
0

当一个进程设置为以10的初始时间片运行时,例如,硬件中的某个人应该知道这个初始时间片并将其递减,当时间片变为0时,应该触发中断!递增时钟

在freeBSD内核中,我明白hardclock和softclock是做这个会计任务的。但是我的问题是,这个时钟的减量与进程的执行是否平行?

+0

请阅读有关[抢先调度](http://en.wikipedia.org/wiki/Scheduling_(计算))和相关主题的一些资源。 – ulidtko 2011-02-05 01:03:42

+0

我的确读过这些......但是后来我无法获得清晰的照片.. – 2011-02-05 01:08:28

回答

1

这里我将使用PIT作为示例,因为它是最简单的计时机制(并且已经存在了很长一段时间)。

此外,这个答案是相当x86特定的;也是操作系统不可知论者。我对FreeBSD和Linux的内部知识不够详细。其他人可能会更有能力。

从本质上讲,时间片与执行过程并行“递减”,因为定时器为每个“滴答”创建一个IRQ(注意,诸如HPET之类的定时器可以执行“一次性”模式, IRQ经过特定的延迟后,也可用于调度)。一旦时间片减少到零,调度程序将被通知并发生任务切换。所有这些与您的进程“同时”发生:IRQ跳转,运行一些代码,然后让您的进程继续进行,直到时间片耗尽。

需要注意的是,一般来说,由于系统调用的直接结果可能会发生任务切换,因此您不会看到进程运行到其时间片的末尾(例如,从磁盘读取块,甚至写入终端)。

+0

非常棒......这是我寻找的答案! – 2011-02-05 01:29:00

1

在迷蒙的过去,这更简单:时钟芯片 - 主板上的分立器件 - 将被配置为以XHz的频率周期性触发中断。每当这个“定时器中断”关闭时,当前程序的执行将被挂起(就像任何其他中断一样),内核的调度程序代码会减少它的时间片。当时间片一直归零时,内核会将CPU从程序中移出并将其交给另一个程序。时钟芯片与CPU分离,显然与程序的执行并行运行,但内核的簿记工作必须中断程序(这是我们所谈论的模糊的过去,所以只有一个CPU,所以内核代码和用户代码不能同时运行)。现在,时钟不是一个分立器件,它是CPU的一部分,它可以被编程来做各种聪明的事情。最重要的是,它可以编程为在N微秒后触发一个一个中断,其中N可能非常大;这允许内核在很长时间内使CPU闲置(计算机方面,也许就像一整秒),如果没有什么建设性的,可以节省电力。与此同时,很难再找到单核CPU,内核会做各种巧妙的把戏,把他们的簿记工作推给没有更好的事情处理的CPU,时间片记账会变得更加复杂。 Linux目前使用“Completely Fair Scheduler”,它甚至没有真正的“时间片”概念。我不知道FreeBSD是什么,但如果它很简单,我会感到惊讶。

因此,对于您的问题的简短回答是“大部分是并行的,现在比过去更多,但它不像遥控倒计时器那么简单”。