def setUp(self): self.comparator = lambda pcb1, pcb2: pcb1.getPriority( ) > pcb2.getPriority() # the greater, the better self.semaphore = Mock() self.myCpu = Mock() self.queue = OwnHeap(self.semaphore, self.comparator) self.myScheduler = Scheduler(self.myCpu, self.queue, 1, self.semaphore) # Priority Round Robin self.highPriorityPCB = PCB(1, 1, 5, 10) self.higherPriorityPCB = PCB(1, 1, 5, 15) self.lowPriorityPCB = PCB(2, 6, 5, 1) self.queue.put(self.highPriorityPCB) self.queue.put(self.higherPriorityPCB) self.queue.put(self.lowPriorityPCB)
class IntegrationTest(unittest.TestCase): def setUp(self): # miscellaneous self.semaphore = Condition() self.disk = HardDisk() self.comparator = lambda pcb1, pcb2: pcb1.getPriority() > pcb2.getPriority() # the greater, the better self.readyQueue = OwnHeap(self.semaphore, self.comparator) # hardware self.memory = RAM(1000) self.mmu = MMU(1,self.memory) self.ioDelivery = IODelivery() self.progLoader = ProgramLoader(self.memory, self.disk, self.readyQueue,self.mmu) self.imanager = InterruptorManager() self.cpu = CPU(self.memory, self.imanager, self.semaphore,self.mmu) self.scheduler = Scheduler(self.cpu, self.readyQueue , 5, self.semaphore) # devices self.spooler = Device('printer', self.imanager) self.screen = Device('screen', self.imanager) self.ioDelivery.newDevice(self.spooler) self.ioDelivery.newDevice(self.screen) # im self.imanager.setScheduler(self.scheduler) self.imanager.setDisk(self.disk) self.imanager.setMmu(self.mmu) self.imanager.setIODelivery(self.ioDelivery) # loading programs self.ioInstruction = InstIO('directory', 0) self.cpuInstruction = InstCPU('1+1') self.prog1 = Program('ls') self.prog2 = Program('pwd') self.prog1.addInstruction(self.cpuInstruction) self.prog2.addInstruction(self.ioInstruction) self.disk.setProgram(self.prog1) self.disk.setProgram(self.prog2) def test_when_programLoader_loadProcessWithNoPriority_then_it_starts_the_expected_sequence(self): self.progLoader.loadProcess("ls") self.progLoader.loadProcess("pwd", 3) self.table = self.progLoader.getPcbTable() self.table.getPS() self.assertEqual(2, self.table.countActiveProcess()) self.assertEquals(2 , self.readyQueue.length()) self.assertEqual(self.cpuInstruction, self.memory.getDir(0))
def setUp(self): # miscellaneous self.semaphore = Condition() self.disk = HardDisk() self.comparator = lambda pcb1, pcb2: pcb1.getPriority() > pcb2.getPriority() # the greater, the better self.readyQueue = OwnHeap(self.semaphore, self.comparator) # hardware self.memory = RAM(1000) self.mmu = MMU(1,self.memory) self.ioDelivery = IODelivery() self.progLoader = ProgramLoader(self.memory, self.disk, self.readyQueue,self.mmu) self.imanager = InterruptorManager() self.cpu = CPU(self.memory, self.imanager, self.semaphore,self.mmu) self.scheduler = Scheduler(self.cpu, self.readyQueue , 5, self.semaphore) # devices self.spooler = Device('printer', self.imanager) self.screen = Device('screen', self.imanager) self.ioDelivery.newDevice(self.spooler) self.ioDelivery.newDevice(self.screen) # im self.imanager.setScheduler(self.scheduler) self.imanager.setDisk(self.disk) self.imanager.setMmu(self.mmu) self.imanager.setIODelivery(self.ioDelivery) # loading programs self.ioInstruction = InstIO('directory', 0) self.cpuInstruction = InstCPU('1+1') self.prog1 = Program('ls') self.prog2 = Program('pwd') self.prog1.addInstruction(self.cpuInstruction) self.prog2.addInstruction(self.ioInstruction) self.disk.setProgram(self.prog1) self.disk.setProgram(self.prog2)
def setUp(self): self.comparator = lambda pcb1, pcb2: pcb1.getPriority() > pcb2.getPriority() # the greater, the better self.semaphore = Mock() self.myCpu = Mock() self.queue = OwnHeap(self.semaphore, self.comparator) self.myScheduler = Scheduler(self.myCpu, self.queue, 1, self.semaphore) # Priority Round Robin self.highPriorityPCB = PCB(1, 1, 5, 10) self.higherPriorityPCB = PCB(1, 1, 5, 15) self.lowPriorityPCB = PCB(2, 6, 5, 1) self.queue.put(self.highPriorityPCB) self.queue.put(self.higherPriorityPCB) self.queue.put(self.lowPriorityPCB)
class IntegrationTest(unittest.TestCase): def setUp(self): # miscellaneous self.semaphore = Condition() self.disk = HardDisk() self.comparator = lambda pcb1, pcb2: pcb1.getPriority() > pcb2.getPriority() # the greater, the better self.readyQueue = OwnHeap(self.semaphore, self.comparator) # hardware self.memory = RAM(1000) self.mmu = MMU(1, self.memory) self.ioDelivery = IODelivery() self.progLoader = ProgramLoader(self.memory, self.disk, self.readyQueue, self.mmu) self.imanager = InterruptorManager() self.cpu = CPU(self.memory, self.imanager, self.semaphore, self.mmu) self.scheduler = Scheduler(self.cpu, self.readyQueue, 5, self.semaphore) # devices self.spooler = Device("printer", self.imanager) self.screen = Device("screen", self.imanager) self.ioDelivery.newDevice(self.spooler) self.ioDelivery.newDevice(self.screen) # im self.imanager.setScheduler(self.scheduler) self.imanager.setDisk(self.disk) self.imanager.setMmu(self.mmu) self.imanager.setIODelivery(self.ioDelivery) # loading programs self.ioInstruction = InstIO("directory", 0) self.cpuInstruction = InstCPU("1+1") self.prog1 = Program("ls") self.prog2 = Program("pwd") self.prog1.addInstruction(self.cpuInstruction) self.prog2.addInstruction(self.ioInstruction) self.disk.setProgram(self.prog1) self.disk.setProgram(self.prog2) def test_when_programLoader_loadProcessWithNoPriority_then_it_starts_the_expected_sequence(self): self.progLoader.loadProcess("ls") self.progLoader.loadProcess("pwd", 3) self.table = self.progLoader.getPcbTable() self.table.getPS() self.assertEqual(2, self.table.countActiveProcess()) self.assertEquals(2, self.readyQueue.length()) self.assertEqual(self.cpuInstruction, self.memory.getDir(0))
def setUp(self): # miscellaneous self.semaphore = Condition() self.disk = HardDisk() self.comparator = lambda pcb1, pcb2: pcb1.getPriority() > pcb2.getPriority() # the greater, the better self.readyQueue = OwnHeap(self.semaphore, self.comparator) # hardware self.memory = RAM(1000) self.mmu = MMU(1, self.memory) self.ioDelivery = IODelivery() self.progLoader = ProgramLoader(self.memory, self.disk, self.readyQueue, self.mmu) self.imanager = InterruptorManager() self.cpu = CPU(self.memory, self.imanager, self.semaphore, self.mmu) self.scheduler = Scheduler(self.cpu, self.readyQueue, 5, self.semaphore) # devices self.spooler = Device("printer", self.imanager) self.screen = Device("screen", self.imanager) self.ioDelivery.newDevice(self.spooler) self.ioDelivery.newDevice(self.screen) # im self.imanager.setScheduler(self.scheduler) self.imanager.setDisk(self.disk) self.imanager.setMmu(self.mmu) self.imanager.setIODelivery(self.ioDelivery) # loading programs self.ioInstruction = InstIO("directory", 0) self.cpuInstruction = InstCPU("1+1") self.prog1 = Program("ls") self.prog2 = Program("pwd") self.prog1.addInstruction(self.cpuInstruction) self.prog2.addInstruction(self.ioInstruction) self.disk.setProgram(self.prog1) self.disk.setProgram(self.prog2)
class TestSchedulerPriorityRoundRobin(unittest.TestCase): def repeat(self, f, N): for _ in itertools.repeat(None, N): f() def setUp(self): self.comparator = lambda pcb1, pcb2: pcb1.getPriority() > pcb2.getPriority() # the greater, the better self.semaphore = Mock() self.myCpu = Mock() self.queue = OwnHeap(self.semaphore, self.comparator) self.myScheduler = Scheduler(self.myCpu, self.queue, 1, self.semaphore) # Priority Round Robin self.highPriorityPCB = PCB(1, 1, 5, 10) self.higherPriorityPCB = PCB(1, 1, 5, 15) self.lowPriorityPCB = PCB(2, 6, 5, 1) self.queue.put(self.highPriorityPCB) self.queue.put(self.higherPriorityPCB) self.queue.put(self.lowPriorityPCB) def test_when_the_cpu_is_free_then_the_scheduler_set_the_pcb_with_the_higher_priority(self): self.myScheduler.setPcbToCPU() verify(self.myCpu).setPCB(self.higherPriorityPCB) def test_when_a_pcb_is_assingned_the_burst_is_assigned_too(self): self.myScheduler.setPcbToCPU() self.burstExpected = self.higherPriorityPCB.getBurst() self.assertEqual(1, self.burstExpected) def test_when_the_queue_is_empty_it_waits_until_it_is_refilled(self): try: self.repeat(self.myScheduler.setPcbToCPU, 3) self.myScheduler.setPcbToCPU() verify(self.semaphore).wait() except Exception: pass else: self.fail("unsexpected exception")
class TestSchedulerPriorityRoundRobin(unittest.TestCase): def repeat(self, f, N): for _ in itertools.repeat(None, N): f() def setUp(self): self.comparator = lambda pcb1, pcb2: pcb1.getPriority( ) > pcb2.getPriority() # the greater, the better self.semaphore = Mock() self.myCpu = Mock() self.queue = OwnHeap(self.semaphore, self.comparator) self.myScheduler = Scheduler(self.myCpu, self.queue, 1, self.semaphore) # Priority Round Robin self.highPriorityPCB = PCB(1, 1, 5, 10) self.higherPriorityPCB = PCB(1, 1, 5, 15) self.lowPriorityPCB = PCB(2, 6, 5, 1) self.queue.put(self.highPriorityPCB) self.queue.put(self.higherPriorityPCB) self.queue.put(self.lowPriorityPCB) def test_when_the_cpu_is_free_then_the_scheduler_set_the_pcb_with_the_higher_priority( self): self.myScheduler.setPcbToCPU() verify(self.myCpu).setPCB(self.higherPriorityPCB) def test_when_a_pcb_is_assingned_the_burst_is_assigned_too(self): self.myScheduler.setPcbToCPU() self.burstExpected = self.higherPriorityPCB.getBurst() self.assertEqual(1, self.burstExpected) def test_when_the_queue_is_empty_it_waits_until_it_is_refilled(self): try: self.repeat(self.myScheduler.setPcbToCPU, 3) self.myScheduler.setPcbToCPU() verify(self.semaphore).wait() except Exception: pass else: self.fail("unsexpected exception")