Multithreading 使用队列的进程调度

Multithreading 使用队列的进程调度,multithreading,queue,scheduled-tasks,Multithreading,Queue,Scheduled Tasks,先到先得的过程调度由 假设P1正在执行。P1必须等待I/O。然后它被发送到等待状态。由于在P1的I/O完成之前这是非抢占的,因此其他进程无法正确执行? 因此,一旦P1完成了I/O,它是进入队列末尾还是进入队列头部? 如果输入到末尾,则必须正确执行P3? 那它不是先发制人吗? 或者,非抢占意味着当P1等待I/O时,p3不会执行,但它会等待P1完成I/O并返回到队列的末尾。 有人能澄清一下这一段吗 当调度器需要运行一个进程时,它会选择要运行的进程 他在队伍的最前面。调度程序是非抢占的。如果 进程必

先到先得的过程调度由

假设P1正在执行。P1必须等待I/O。然后它被发送到等待状态。由于在P1的I/O完成之前这是非抢占的,因此其他进程无法正确执行?
因此,一旦P1完成了I/O,它是进入队列末尾还是进入队列头部?
如果输入到末尾,则必须正确执行P3?
那它不是先发制人吗?
或者,非抢占意味着当P1等待I/O时,p3不会执行,但它会等待P1完成I/O并返回到队列的末尾。
有人能澄清一下这一段吗

当调度器需要运行一个进程时,它会选择要运行的进程 他在队伍的最前面。调度程序是非抢占的。如果 进程必须在I/O上阻塞,它将进入等待状态,并且 调度器从队列的头部拾取进程。当I/O是 完成后,流程准备再次运行,并将其置于末尾 排队等候


最后一句说它是在最后输入的。这回答了你的问题吗?如果它被放在末尾,那么即使p1没有完成,P3也会被执行吗?不知道你所说的“P3会被执行吗?”。由于p1必须等待i/O,因此进入等待状态。然后p3是否在队列中向前移动,处理器开始执行它,而p1仍在等待i/O?在p1获得i/O后,它将返回队列,并且在这段时间内p3和p3后面排队的其余进程将有机会执行。会发生这种情况吗?i因为p1在等待I/O时这是非抢占式的,所以现在在队列头部的项目不可能被执行,因为在非抢占式的情况下,直到一个任务完成处理,其他进程才被执行?“如果进程必须在I/O上阻塞,它将进入等待状态,调度程序将从队列头拾取进程。“它在等着。它不再在就绪队列中。就绪队列的队列头弹出并进入运行状态。;关于您的评论,即在先发制人的调度模型中不可能做到这一点:启动IO和阻塞是一种协作的取消调度操作。任务要求操作系统重新调度,直到IO完成。事实上,我看不出先发制人和不先发制人对这种情况有什么不同。