Linux调度程序如何知道进程已经运行了定义的时间片?

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

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

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