Io 带I/O的循环调度算法

Io 带I/O的循环调度算法,io,scheduling,round-robin,Io,Scheduling,Round Robin,若我们在就绪队列中有三个进程P1、P2、P3。假设时间片为4秒,P1的CPU突发时间为2秒,然后它的I/O突发时间为5秒。现在CPU将执行P1 2秒,下面是两种情况 CPU会给P1 2秒吗?因为时间片是4秒,所以CPU会记住P1已经消耗了2秒,当它从I/O返回到下一个CPU突发时,会给P1 2秒而不是4秒的时间片?(如果下一个CPU突发大于2秒) CPU会给P1 2秒时间吗?因为它的CPU突发结束了,它自愿离开了CPU,进入了I/O突发,所以CPU不需要记住任何东西,当它从I/O返回时,会给它

若我们在就绪队列中有三个进程P1、P2、P3。假设时间片为4秒,P1的CPU突发时间为2秒,然后它的I/O突发时间为5秒。现在CPU将执行P1 2秒,下面是两种情况

  • CPU会给P1 2秒吗?因为时间片是4秒,所以CPU会记住P1已经消耗了2秒,当它从I/O返回到下一个CPU突发时,会给P1 2秒而不是4秒的时间片?(如果下一个CPU突发大于2秒)

  • CPU会给P1 2秒时间吗?因为它的CPU突发结束了,它自愿离开了CPU,进入了I/O突发,所以CPU不需要记住任何东西,当它从I/O返回时,会给它4秒的时间片 但这里有个问题。。。。假设P1有5秒的CPU突发。CPU给P1 4秒并将其移动到队列的尾部,当轮到P1时,它给P1 1秒,因为它还有1秒的CPU突发时间,它将进行I/O,现在CPU将记住它已经消耗了1秒的时间片,并且每当它从I/O返回时,都会给它3秒,但这不是相同的场景吗?P1被给予4秒的时间片,它消耗1秒,CPU突发结束,它自愿离开CPU,与上面的情况相同,并进行I/O,CPU不应该记住,它从I/O返回后仅给予3秒?在这种情况下,CPU在任何情况下都不需要记住任何东西,当它从I/O返回时,会给每个进程4秒的时间


  • 哪种情况是正确的?你能解释一下吗?

    简短回答: P1返回时有4秒的时间是有道理的,但这取决于操作系统的设计。可以给17秒,但这与循环赛无关

    长答案: 让我们从最基本的场景开始:没有I/O。 每个过程有4秒钟的时间跳舞,直到轮到下一个。这是直到一个舞蹈结束,所以只有剩下的过程是轮流的

    现在,将I/O添加到它,但假设I/O从来都不忙并且总是瞬时的。 从I/O读取使用CPU时间。所以进程1开始跳舞2秒,然后使用I/O 2秒。然后CPU说别动!过程2开始跳舞。在下一个P1回合,它将读取I/O 4秒,而在最后一回合,它将只消耗1秒,然后说我完成了!所以它会离开舞厅

    现在让我们看看I/O可能繁忙的场景。 进程1开始跳舞两秒钟,然后想从I/O读取数据,但它很忙!于是它交叉双臂,什么也不做,等待他剩下的两秒钟。然后CPU在进程2上工作,然后在进程3上工作,然后返回到进程1。I/O还有1秒钟还没有准备好,所以进程1仍然等待这一秒,然后开始使用它3秒钟。等等

    现在这种“等待3秒钟”的情况很糟糕,因为这意味着CPU在处理其余进程时没有做任何事情。 为了避免这种情况,事情会有所不同: 进程1开始跳舞两秒钟,然后说“我什么也不能做,只能等到I/O准备就绪”。所以CPU说“没问题,我告诉你们什么时候准备好了”,然后进入下一个进程,让P1只跳2秒钟。并在2和3上工作,直到被I/O中断:“准备就绪的老板”。此时,它将控制权交给P1,P1使用I/O 4秒,然后算法一如既往地继续

    这是我能想到的最简单的实现。 你能写下P1因为等待而没有使用的时间,然后在它可以运行时给它更多的时间进行补偿吗?是的,你可以。循环赛与此没有多大关系。这更多的是关于你决定如何对待你的打扰


    如果两个进程需要I/O,会发生什么?那么,它们都可以挂起。

    在这种情况下,您应该将I/O突发视为忙等待。假设P1的CPU突发为2秒,下一个I/O突发为5秒,然后CPU突发为4秒。现在,CPU将执行它2秒,然后P1将转到阻塞队列,并在5秒后返回,直到下一个CPU突发4秒。现在我的问题是,会给它2秒钟吗?因为它已经消耗了2秒的CPU,所以已经从4秒中爆发出来,CPU应该记住这一点吗?或者给它4秒的时间来完成下一个CPU突发?(假设I/O不占用CPU时间,只是等待时间)乍一看,是的。它将被视为一种新的工艺。但正如我所说,这实际上取决于您的实现。您可以决定为那些从阻塞队列返回的进程提供任意数量的时间,比如说10秒。这取决于操作系统设计者,与循环无关。不要想从P1中减去这2秒。当P1停止工作,注意到它必须等待,所以它放弃了剩余的2秒时,请仔细想想。下一轮就是下一轮,不考虑最后一轮。(除非您明确希望)。