具有I / O的循环(调度)算法

时间:2013-12-31 18:17:27

标签: io scheduling round-robin

如果我们在就绪队列中有三个进程P1,P2,P3。假设时间片为4秒,P1具有2秒的CPU突发,然后它具有5秒的I / O突发。现在CPU将执行P1 2秒,这里有两个场景

  
      
  1. CPU会给P1 2秒,因为时间片是4秒,所以CPU会记住P1耗时2秒,当它从I / O返回时,它的下一个CPU爆发2秒将被给出到P1而不是4秒的时间片? (如果下一次CPU爆发可以说大于2秒)

  2.   
  3. CPU会给P1 2秒,因为它的CPU突发已经结束并且它已经自愿离开CPU并且已经用于I / O突发,因此CPU不需要记住任何内容以及何时它将从I / O它将被给予4秒的时间片   但这里有一个问题....假设P1有5秒的CPU爆发。 CPU给P1提供4秒的时间并将其移动到队列的尾部,当它的P1再次转向时,它给它1秒,因为它有1秒的CPU脉冲剩余并且它将用于I / O,现在CPU将记住它消耗了1秒的时间片,每当它从I / O返回时,它将被给予3秒,但不是同一个场景吗? P1给定4秒的时间片,它消耗1并且CPU突发结束并且它自动离开CPU与上述情况相同并且去I / O并且CPU不应该记住它在从它返回之后仅被给予3秒I / O?在这种情况下,CPU在任何情况下都不需要记住任何内容,并且当从I / O返回时,每个进程将给出4秒。

  4.   

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

1 个答案:

答案 0 :(得分:2)

简答: 有意义的是,当它返回时,P1被给予4秒,但这取决于操作系统的设计。可以给出17秒,但这与循环无关。

答案很长: 让我们从最基本的场景开始:没有I / O. 每个进程都有4秒的时间跳舞,直到下一轮进入。这是直到一个人完成跳舞,所以只有剩下的过程轮流。

现在,添加I / O,但假设I / O永远不会忙,并且总是瞬间完成。 从I / O读取使用CPU时间。因此,进程1开始跳舞2秒,然后使用I / O 2秒。然后CPU说FREEZE!并且过程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说“没有probs,我告诉你什么时候准备就绪”然后进入下一个过程让P1只跳2秒钟。在2和3上工作直到被I / O打断:“READY BOSS”。此时它控制P1,使用I / O 4秒,然后算法一如既往地继续。

现在这是我能想到的最简单的实现。 你能记下P1没有使用的时间,因为它正在等待然后补偿它,它可以提供更多时间吗?好吧,你可以。循环赛并没有太多关系。它更多的是关于你如何决定对待你的中断。

如果两个进程需要I / O会发生什么?好吧,那么他们就可以暂停了。