def leer(self,NombreTexto,p): #Extrae un proceso de un archivo .txt y lo inserta en la #cola de prioridades data = open(NombreTexto,'r') lineas = len(open(NombreTexto).readlines()) print('Se iniciaran ',lineas,' procesos nuevos') print() p = [None]*lineas for iter in range(lineas): p[iter] = Proyecto2ClassProcesos.proceso() for j in range(lineas): medidaJuntas = data.readline() medidaSep = medidaJuntas.split() p[j].nombre = str(medidaSep[1]) p[j].prioridad = int(medidaSep[2]) p[j].memoria = int(medidaSep[3]) p[j].duracion = int(medidaSep[4]) p[j].subprocesos = int(medidaSep[5]) print('Proceso :',p[j].nombre ) print() print('Prioridad: ',p[j].prioridad) print('Memoria usada',p[j].memoria) print('Duracion',p[j].duracion) print('Numero de subprocesos',p[j].subprocesos) print() if p[j].subprocesos > 0: p[j].ListaSubprocesos = [None]*p[j].subprocesos for iter in range(p[j].subprocesos): p[j].ListaSubprocesos[iter] = ( Proyecto2ClassProcesos.proceso()) p[j].ListaSubprocesos[iter].nombre = ( p[j].nombre +' - ' + str(iter)) p[j].ListaSubprocesos[iter].prioridad = ( (p[j].prioridad)) p[j].ListaSubprocesos[iter].memoria = ( (p[j].memoria)) p[j].ListaSubprocesos[iter].duracion = ( (p[j].duracion)) for iter in range(p[j].subprocesos): if (iter < (p[j].subprocesos - 1)): p[j].ListaSubprocesos[iter].subprocesos = 1 p[j].ListaSubprocesos[iter].ListaSubprocesos = [] p[j].ListaSubprocesos[iter].ListaSubprocesos.append( p[j].ListaSubprocesos[iter + 1]) #------------------------COLA PRIORIDAD-----------------------------# # Organiza los procedimientos por prioridad utilizando un TAD # cola implementado en otro archivo.py #Asignamos la clase cola prioridad a ProcOrd para poder #utilizar los procesos del tad y ordenarlos ProcOrd = Proyecto2ClassColaPrio.ColaPrio(len(p)) #Depositamos nuestra cola ordenada en un arreglo, elemento #por elemento for j in range(lineas): ArregloProcOrd = ProcOrd.proc_encolar(p[j], p[j].prioridad) #Comprobamos que se guardaron los elementos imprimiendolos #junto a sus prioridades para comprobar que se ordenaron de #manera correcta return ArregloProcOrd
def AsignarProceso(self,proceso,Tiempo): """ Busca el procesador con menos procesos en su pila de procesos empilados y empilamos "proceso" a la pila de ese procesador {Pre: "proceso" pertenece a la clase proceso} {Post: ProcMnOC.} """ #print('Se asignara el proceso: -',proceso.nombre,'-') #Inicializamos nuestra variable de comparacion para empezar #a comparar el tamaño de todas las pilas de los procesadores ProcMnOc = len(self.ListaProcesadores[0]. procesosEmpilados.elementos) #Comparamos el tamaño de cada pila de procesos empilados y #elegimos la meor de todas ellas for Comparacion in range(len(self.ListaProcesadores)- 1): comp2 = len(self.ListaProcesadores[Comparacion + 1]. procesosEmpilados.elementos) ProcMnOc = min(ProcMnOc,comp2) #Efectuamos la asignacion al procesador con menos procesos #con un proceso de "empilar" if (((ProcMnOc == len(self.ListaProcesadores[0]. procesosEmpilados.elementos))) and self.ListaProcesadores[0].procesosEmpilados.elementos == []): self.ListaProcesadores[0].procesosEmpilados.proc_empilar(proceso) self.MemoriaSimu = self.MemoriaSimu + proceso.memoria self.ListaProcesadores[0].EstadoMemoria = ( self.ListaProcesadores[0].EstadoMemoria + proceso.memoria) if (proceso.subprocesos > 0): salida.write(str(Tiempo)) salida.write(' Empilando ') salida.write(str(p[reparte].subprocesos)) salida.write(' subprocesos del proceso ') salida.write(p[reparte].nombre) salida.write(' en el procesador 1') salida.write('\n') salida.write(str(Tiempo)) salida.write(' Inicializando proceso ') salida.write(p[reparte].nombre) salida.write(' en el procesador 1') salida.write('\n') if proceso.subprocesos > 0: self.subprocesosencurso = [None]*proceso.subprocesos for iter in range(proceso.subprocesos): self.subprocesosencurso[iter] = ( (Proyecto2ClassProcesos.proceso())) self.subprocesosencurso[iter].nombre = (((proceso.nombre) + '-' + str(iter))) self.subprocesosencurso[iter].prioridad = ( (proceso.prioridad)) self.subprocesosencurso[iter].duracion = ( (proceso.duracion)) self.subprocesosencurso[iter] elif (((ProcMnOc == len(self.ListaProcesadores[1]. procesosEmpilados.elementos))) and self.ListaProcesadores[1].procesosEmpilados.elementos == []): self.ListaProcesadores[1].procesosEmpilados.proc_empilar(proceso) self.MemoriaSimu = self.MemoriaSimu + proceso.memoria self.ListaProcesadores[1].EstadoMemoria = ( self.ListaProcesadores[1].EstadoMemoria + proceso.memoria) if (proceso.subprocesos > 0): salida.write(str(Tiempo)) salida.write(' Empilando ') salida.write(str(p[reparte].subprocesos)) salida.write(' subprocesos del proceso ') salida.write(p[reparte].nombre) salida.write(' en el procesador 2') salida.write('\n') salida.write(str(Tiempo)) salida.write(' Inicializando proceso ') salida.write(p[reparte].nombre) salida.write(' en el procesador 2') salida.write('\n') if proceso.subprocesos > 0: self.subprocesosencurso = [None]*proceso.subprocesos for iter in range(proceso.subprocesos): self.subprocesosencurso[iter] = ( (Proyecto2ClassProcesos.proceso())) self.subprocesosencurso[iter].nombre = (((proceso.nombre) +'-' + str(iter))) self.subprocesosencurso[iter].prioridad = ( (proceso.prioridad)) self.subprocesosencurso[iter].duracion = ( (proceso.duracion)) self.subprocesosencurso[iter] elif (((ProcMnOc == len(self.ListaProcesadores[2]. procesosEmpilados.elementos))) and self.ListaProcesadores[2].procesosEmpilados.elementos == []): self.ListaProcesadores[2].procesosEmpilados.proc_empilar(proceso) self.MemoriaSimu = self.MemoriaSimu + proceso.memoria self.ListaProcesadores[2].EstadoMemoria = ( self.ListaProcesadores[2].EstadoMemoria + proceso.memoria) if (proceso.subprocesos > 0): salida.write(str(Tiempo)) salida.write(' Empilando ') salida.write(str(p[reparte].subprocesos)) salida.write(' subprocesos del proceso ') salida.write(p[reparte].nombre) salida.write(' en el procesador 3') salida.write('\n') salida.write(str(Tiempo)) salida.write(' Inicializando proceso ') salida.write(p[reparte].nombre) salida.write(' en el procesador 3') salida.write('\n') if proceso.subprocesos > 0: self.subprocesosencurso = [None]*proceso.subprocesos for iter in range(proceso.subprocesos): self.subprocesosencurso[iter] = ( (Proyecto2ClassProcesos.proceso())) self.subprocesosencurso[iter].nombre = (((proceso.nombre) +'-' + str(iter))) self.subprocesosencurso[iter].prioridad = ( (proceso.prioridad)) self.subprocesosencurso[iter].duracion = ( (proceso.duracion)) self.subprocesosencurso[iter] elif (((ProcMnOc == len(self.ListaProcesadores[3]. procesosEmpilados.elementos))) and self.ListaProcesadores[3].procesosEmpilados.elementos == []): self.ListaProcesadores[3].procesosEmpilados.proc_empilar(proceso) self.MemoriaSimu = self.MemoriaSimu + proceso.memoria self.ListaProcesadores[3].EstadoMemoria = ( self.ListaProcesadores[3].EstadoMemoria + proceso.memoria) if (proceso.subprocesos > 0): salida.write(str(Tiempo)) salida.write(' Empilando ') salida.write(str(p[reparte].subprocesos)) salida.write(' subprocesos del proceso ') salida.write(p[reparte].nombre) salida.write(' en el procesador 4') salida.write('\n') salida.write(str(Tiempo)) salida.write(' Inicializando proceso ') salida.write(p[reparte].nombre) salida.write(' en el procesador 4') salida.write('\n') if proceso.subprocesos > 0: self.subprocesosencurso = [None]*proceso.subprocesos for iter in range(proceso.subprocesos): self.subprocesosencurso[iter] = ( (Proyecto2ClassProcesos.proceso())) self.subprocesosencurso[iter].nombre = (((proceso.nombre) +'-' + str(iter))) self.subprocesosencurso[iter].prioridad = ( (proceso.prioridad)) self.subprocesosencurso[iter].duracion = ( (proceso.duracion)) self.subprocesosencurso[iter] for imprimir in range(4): for imprimir2 in self.ListaProcesadores[imprimir].procesosEmpilados.elementos: print('Los procesos del procesador ',imprimir + 1, 'son : ',imprimir2.nombre, '- prioridad: ',imprimir2.prioridad)