Linux Scheduler如何知道进程已运行定义的时间片?

时间:2014-04-22 01:10:40

标签: linux linux-kernel scheduler

我无法理解Linux Scheduler如何知道该进程已针对定义的时间片运行。在进程执行期间,定时器中断是否继续进行?

让我们看一个场景,HZ是100,所以每10毫秒会有一个勾号。现在假设只有具有相同优先级的进程,因此两者都应该获得相同的机会,因此如果时间片是4毫秒,则两个进程都将运行那么长时间。我怀疑调度程序将如何知道该进程消耗了4毫秒?

1 个答案:

答案 0 :(得分:2)

内核计时器始终在运行并中断进程。作为其管理职责的一部分,内核会跟踪进程消耗的完整(和部分)时间片数。现在,有很多事情会导致流程放弃部分时间片。这些通常被称为阻塞事件(尽管并非所有阻塞事件都会放弃时间片的剩余部分并将控制权返回给内核)。无论何时调用sleep,或等待用户输入或磁盘或网络I / O,内核都不会在切换到下一个任务之前旋转消耗剩余时间片的循环。相反,它会将部分消耗的切片中的时间量添加到流程信息存储中,然后继续执行其列表中的流程。然后,当您正在等待的事件发生时,您的进程排队等待在下一次机会时变为活动状态并给出新的全时时间片。这种情况一直持续到该过程以任何方式终止。