Example #1
0
    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)
Example #2
0
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))
Example #3
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)
Example #4
0
 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)
Example #5
0
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))
Example #6
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)
Example #7
0
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")
Example #8
0
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")