Linux调度程序如何知道进程已在定义的时间段内运行?

Linux调度程序如何知道进程已在定义的时间段内运行?,linux,linux-kernel,scheduler,Linux,Linux Kernel,Scheduler,我无法理解Linux调度器如何知道进程已经运行了定义的时间片。进程执行期间计时器中断是否持续出现 让我们假设一个场景,赫兹是100,所以每10毫秒就会有一个滴答声。现在假设只有一个进程具有相同的优先级,所以两个进程都有相同的机会,所以如果时间片为4毫秒,两个进程都将运行那么长的时间。我的疑问是调度程序如何知道进程已经消耗了它的4毫秒?内核计时器总是在运行并中断进程。作为其管理职责的一部分,内核跟踪进程消耗的完整(和部分)时间片的数量。现在,有很多事情会导致进程放弃部分时间片。这些通常被称为阻塞事

我无法理解Linux调度器如何知道进程已经运行了定义的时间片。进程执行期间计时器中断是否持续出现


让我们假设一个场景,赫兹是100,所以每10毫秒就会有一个滴答声。现在假设只有一个进程具有相同的优先级,所以两个进程都有相同的机会,所以如果时间片为4毫秒,两个进程都将运行那么长的时间。我的疑问是调度程序如何知道进程已经消耗了它的4毫秒?

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

是。这就是它的全部。请你详细说明一下。除非你问一个更具体的问题。我认为时间片不能小于一个刻度,在每个计时器中断内核上都会安排新的进程,不是吗?@AnkurTank时间片通常比一个刻度多一点。然而,只有100%个CPU绑定进程消耗它们的整个时间片,并且任何中断(不仅仅是定时器中断)给调度器一个机会考虑将“CPU”送给其他人。(例如,键盘驱动程序的中断将导致调度程序激活等待键盘输入的任何进程,从而使CPU远离不必要的进程。)