Esempio n. 1
0
class RR(Scheduler):
    """Round Robin scheduler"""
    def init(self):
        self.ready_list = []
        self.delay = 2
        self.timer = Timer(self.sim,
                           RR.end_event, (self, self.processors[0]),
                           self.delay,
                           cpu=self.processors[0],
                           in_ms=True)
        self.interupt = False

    def on_activate(self, job):
        self.ready_list.append(job)
        job.cpu.resched()

    def on_terminated(self, job):
        if job in self.ready_list:
            self.ready_list.remove(job)
        self.timer.stop()
        job.cpu.resched()

    def end_event(self, cpu):
        self.interupt = True
        self.timer.stop()
        cpu.resched()

    def schedule(self, cpu):
        if self.ready_list:
            job = self.ready_list[0]
            if not cpu.running or self.interupt:
                self.interupt = False
                self.timer.start()
                self.ready_list.remove(job)
                if cpu.running:
                    self.ready_list.append(cpu.running)
                return (job, cpu)
        else:
            return None