class Main(Thread): def __init__(self): Thread.__init__(self) self.memory = Memory(50) self.a_kernel = Kernel(None) self.cpu = Cpu(self.a_kernel) self.scheduler = Scheduler() self.scheduler.set_as_fifo() self.clock = Clock(self.cpu) self.a_kernel.clock = self.clock self.pcb_table = PCBTable() def load_a_instruction_in_a_program(self): program = Program("SIN-IO") self.a_kernel.set_scheduler(self.scheduler) self.a_kernel.set_pcb_table(self.pcb_table) interruption_manager = InterruptionHandler(self.cpu) self.a_kernel.set_interruption_handler(interruption_manager) load_in_interruption_manager = Handle_Loaders() load_in_interruption_manager.load_handlers(interruption_manager) instruction = Instruction("Texto") program.addInstruction(instruction) program.addInstruction(instruction) self.write_program(program,self.memory) self.setup_load_of_a_program_in_memory(2, program, 1) def write_program(self,program,memory): pos = 0 for instruction in program.obtain_instructions(): memory.put(pos,instruction) def load_a_io_instruction_in_a_program(self): program = Program("IO") self.a_kernel.set_scheduler(self.scheduler) interruption_manager = InterruptionHandler(self.cpu) load_in_interruption_manager = Handle_Loaders() load_in_interruption_manager.load_handlers(interruption_manager) self.a_kernel.set_interruption_handler(interruption_manager) instruction = InstructionIO() program.addInstruction(instruction) program.addInstruction(instruction) self.write_program(program,self.memory) self.setup_load_of_a_program_in_memory(2, program, 2) def setup_load_of_a_program_in_memory(self, amount_instructions, program, pcb_id): block_holder = BlockHolder(program) block_holder.set_representation([0,1]) pcb = PCB(amount_instructions, pcb_id, block_holder) self.scheduler.policy.add_pcb(pcb) memory_admin = ToyMemoryAdmin(self.memory) self.cpu.set_actual_pcb(pcb) self.pcb_table.add(self.cpu.get_actual_pcb()) self.cpu.set_memory_manager(memory_admin) def run(self): self.load_a_instruction_in_a_program() self.clock.start()
class Helper: def __init__(self): self.memory = Memory(50) self.hdd = HDD(5) self.cpu = Cpu(None) self.scheduler = Scheduler() self.fifo = FifoPolicy(self.scheduler) self.pcb_table = PCBTable() self.memory_manager = MemoryManager() self.a_kernel = Kernel(self.cpu, self.memory_manager) self.a_kernel.set_scheduler(self.scheduler) self.a_kernel.set_pcb_table(self.pcb_table) self.a_kernel.set_hdd(self.hdd) self.a_kernel.hdd.generate_file_system() self.instruction = Instruction("Texto") self.instruction_io = InstructionIO("IO") def load_a_instruction_in_a_program(self): program = Program("SIN-IO") manager = Manager(self.scheduler, self.pcb_table, self.memory_manager) interruption_handler = InterruptionHandler(manager) self.a_kernel.set_interruption_handler(interruption_handler) self.cpu.kernel = self.a_kernel program.addInstruction(self.instruction) program.addInstruction(self.instruction) self.write_program(program,self.memory) self.setup_load_of_a_program_in_memory(2, program, 1) def load_a_io_instruction_in_a_program(self): program = Program("IO") manager = Manager(self.scheduler, self.pcb_table, self.memory_manager) interruption_handler = InterruptionHandler(manager) self.a_kernel.set_interruption_handler(interruption_handler) self.cpu.kernel = self.a_kernel program.addInstruction(self.instruction_io) program.addInstruction(self.instruction_io) self.write_program(program,self.memory) self.setup_load_of_a_program_in_memory(2, program, 2) def write_program(self,program,memory): pos = 0 for instruction in program.get_instructions(): memory.put(pos,instruction) def setup_load_of_a_program_in_memory(self, amount_instructions, program, pcb_id): page_holder = PageHolder(program) pcb = PCB(amount_instructions, pcb_id, page_holder) self.pcb_table.add(pcb) self.fifo.add_pcb(pcb) self.cpu.set_actual_pcb(pcb)
class Main: def __init__(self): self.arrangements = Arrangements() self.scheduler = Scheduler() self.fifo = FifoPolicy(self.scheduler) self.kernel = Kernel(None, self.arrangements.memory_manager, self.scheduler, self.arrangements.hdd) #Faltan arranges para que el init quede más chico. ''' Esto deberia ir a un arrange para cargar programas instructions1 = [] instructions2 = [] instructions3 = [] for i in range(0,10): instructions1.append(Instruction("instr1")) for i in range(0,20): instructions2.append(Instruction("instr2")) for i in range(0,30): instructions3.append(Instruction("instr3")) Otro arrange para dado un HDD, cargarle archivos al FS self.program1 = Program("Word",instructions1) self.program2 = Program("Excel",instructions2) self.program3 = Program("Powerpoint",instructions3) self.hdd = HDD(50) self.file_system = self.hdd.generate_file_system() self.file_system.add_file("Word", self.program1) self.file_system.add_file("Excel", self.program1) self.file_system.add_file("Powerpoint", self.program1) self.hdd.display(self.file_system) ''' self.arrangements.hddDependencies.load_programs_in_hdd(self.arrangements.hdd) ''' Otro arrange para el manejador de memoria self.memory_manager = MemoryManager(self.hdd) self.memory_manager.set_policy_as_paging(2) ''' self.arrangements.arrange_memory() ''' Otro arrange para el scheduler ''' self.arrangements.arrange_kernel(self.kernel, self.scheduler, self.fifo) def run_example(self): self.kernel.set_long_term_scheduler() self.kernel.run("Word") self.kernel.run("Excel") self.kernel.run("Powerpoint")
def __init__(self): Thread.__init__(self) self.memory = Memory(50) self.a_kernel = Kernel(None) self.cpu = Cpu(self.a_kernel) self.scheduler = Scheduler() self.scheduler.set_as_fifo() self.clock = Clock(self.cpu) self.a_kernel.clock = self.clock self.pcb_table = PCBTable()
class TestInterruption(unittest.TestCase): def setUp(self): self.cpu = Cpu(None) self.kernel = Kernel(None, self.cpu) self.cpu.kernel = self.kernel self.pcb_table = self.kernel.pcb_table self.memory_manager = self.kernel.memory_manager self.fifo = FifoPolicy(self.kernel.scheduler) self.program = Program("Pepe") self.instruction = Instruction("first instruction") self.program.addInstruction(self.instruction) self.info_unit = [1, 2, 3, 4] self.block_holder = BlockHolder(self.program) self.block_holder.set_representation(self.info_unit) self.pcb = PCB(1, 4, self.block_holder) self.pcb_table.add(self.pcb) self.cpu.set_actual_pcb(self.pcb) self.manager = Manager(self.kernel.scheduler, self.pcb_table, self.memory_manager) self.interruption_handler = InterruptionHandler(self.manager) self.kernel.set_interruption_handler(self.interruption_handler) def test_when_a_process_is_killed_then_it_is_removed_from_the_pcb_table(self): self.cpu.execute_single_instruction(self.program.get_instructions().pop()) self.assertEquals(self.pcb_table.size(), 0)
def __init__(self): self.memory = Memory(50) self.hdd = HDD(5) self.cpu = Cpu(None) self.scheduler = Scheduler() self.fifo = FifoPolicy(self.scheduler) self.pcb_table = PCBTable() self.memory_manager = MemoryManager() self.a_kernel = Kernel(self.cpu, self.memory_manager) self.a_kernel.set_scheduler(self.scheduler) self.a_kernel.set_pcb_table(self.pcb_table) self.a_kernel.set_hdd(self.hdd) self.a_kernel.hdd.generate_file_system() self.instruction = Instruction("Texto") self.instruction_io = InstructionIO("IO")
def setUp(self): self.cpu = Cpu(None) self.kernel = Kernel(None, self.cpu) self.cpu.kernel = self.kernel self.pcb_table = self.kernel.pcb_table self.memory_manager = self.kernel.memory_manager self.fifo = FifoPolicy(self.kernel.scheduler) self.program = Program("Pepe") self.instruction = Instruction("first instruction") self.program.addInstruction(self.instruction) self.info_unit = [1, 2, 3, 4] self.block_holder = BlockHolder(self.program) self.block_holder.set_representation(self.info_unit) self.pcb = PCB(1, 4, self.block_holder) self.pcb_table.add(self.pcb) self.cpu.set_actual_pcb(self.pcb) self.manager = Manager(self.kernel.scheduler, self.pcb_table, self.memory_manager) self.interruption_handler = InterruptionHandler(self.manager) self.kernel.set_interruption_handler(self.interruption_handler)