调度程序队列和中断的工作

Working of Scheduler queues and Interrupts

Galvin 的操作系统教科书如下 “如果就绪队列中有n个进程,时间片为q, 然后每个进程以最多 q 个时间单位的块获得 CPU 时间的 1/n。 每个进程必须等待不超过 (n — 1) x q 个时间单位,直到它 下一个时间片。 例如,有五个进程和一个时间片 20 毫秒,每个进程每 100 毫秒将最多占用 20 毫秒。"

是否正确?如果 CPU 正在执行这些进程时发生中断,会发生什么情况。一个过程可能需要等待更长的时间或者我遗漏了一些明显的东西?

这取决于您选择的调度程序策略,也取决于您使用的内核。如果您使用 RT 补丁(实时补丁),则与标准内核有很大不同。而且您必须知道您的系统有多少 cpu 个内核 运行。调度程序本身作为定时器 irq 之一的一部分运行,并且本身需要时间。我不知道调度是每 20 毫秒还是 (20 - irqtime) 毫秒进行一次。并且您还必须知道系统上有多少进程处于何种优先级。还要考虑到有一些具有高优先级的工作进程。它们主要用来处理"slow part"的irqs。

也许你可以看看:

http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html

http://www.embedded.com/design/operating-systems/4371651/Comparing-the-real-time-scheduling-policies-of-the-Linux-kernel-and-an-RTOS-

这取决于中断是否改变了就绪线程集、使用的调度算法、核心的可用性和其他东西。

Or I am missing something obvious?

可能现代抢占式调度 OS 将核心上的 CPU 执行管理为一种资源,仅提供给可以使用它的线程。中断(系统调用和硬件中断)是可以更改就绪线程集的事件。定时器中断只是其中之一。

固定在像 'quanta' 这样的术语上可能会导致误解先发制人的调度程序如何处理 CPU 在核心上作为资源执行。

What happens if interrupt occurs while CPU is executing these processes. A process might have to wait for longer time

是的,有可能。如果中断(通过驱动程序的系统调用或硬件中断)更改了就绪线程集,则调度算法将 运行 并可能决定抢占中断前 运行ning 的线程之一支持刚刚准备好的线程。显然,被抢占的线程在被另一个中断再次 运行ning 之前无法向前推进,所以,是的,一个进程可能需要等待更长的时间。