コード例 #1
0
class TestScheduler(unittest.TestCase):

    def setUp(self):
        program1 = Program('D')
        program2 = Program('E')
        program3 = Program('H')
        program4 = Program('S')

        self.pcb1 = PCB(1, 20, PageHolder(program1))
        self.pcb1.set_priority(PCBPriorities.HIGH)

        self.pcb2 = PCB(2, 25, PageHolder(program2))
        self.pcb2.set_priority(PCBPriorities.MEDIUM)

        self.pcb3 = PCB(3, 15, PageHolder(program3))
        self.pcb3.set_priority(PCBPriorities.LOW)

        self.pcb4 = PCB(4, 6, PageHolder(program4))
        self.pcb4.set_priority(PCBPriorities.LOW)

        self.scheduler = Scheduler()

    def test_scheduler_with_fifo(self):
        self.fifo = FifoPolicy(self.scheduler)
        self.fifo.add_pcb(self.pcb1)
        self.fifo.add_pcb(self.pcb2)
        self.fifo.add_pcb(self.pcb3)
        self.fifo.add_pcb(self.pcb4)
        result = self.scheduler.next_process()
        self.assertEquals(self.pcb1.get_pid, result.get_pid)

    def test_scheduler_with_round_robin(self):
        quantum = 1
        self.round_robin = RoundRobinPolicy(self.scheduler, quantum)
        self.round_robin.add_pcb(self.pcb1)
        self.round_robin.add_pcb(self.pcb2)
        self.round_robin.add_pcb(self.pcb3)
        self.round_robin.add_pcb(self.pcb4)
        expected_elements = [self.pcb1, self.pcb2, self.pcb3, self.pcb4]
        for expected_element in expected_elements:
            self.assertEqual(expected_element.get_pid, self.round_robin.next_process().get_pid)

    def test_scheduler_with_priority(self):
        self.priority_policy = PriorityPolicy(self.scheduler)
        self.priority_policy.add_pcb(self.pcb1)
        self.priority_policy.add_pcb(self.pcb2)
        self.priority_policy.add_pcb(self.pcb3)
        self.priority_policy.add_pcb(self.pcb4)
        expected_elems = [self.pcb1, self.pcb2, self.pcb3, self.pcb4]
        for expected_elem in expected_elems:
            self.assertEqual(expected_elem.get_pid, self.scheduler.next_process().get_pid)
コード例 #2
0
 def test_when_given_scheduler_with_priority_and_cpu_then_scheduler_sends_next_process_to_cpu(self):
     queue = PriorityQueue()
     scheduler_priority = Scheduler(None, ready_queue=queue)
     self.a_kernel.set_scheduler(scheduler_priority)
     scheduler_priority.set_cpu(self.cpu)
     scheduler_priority.set_as_priority()
     self.pcb1.set_priority(1)
     scheduler_priority.push_to_queue(self.pcb1)
     self.pcb2.set_priority(2)
     scheduler_priority.push_to_queue(self.pcb2)
     expected_pcb = scheduler_priority.next_process()
     scheduler_priority.send_next_to_cpu()
     self.assertEqual(self.pcb2, self.cpu.get_actual_pcb())