예제 #1
0
파일: test.py 프로젝트: juansca/myProcess
    def test_ej_combinado_no_listo(self):
        """
        Calculamos 20/4 + (4 * 3) + 1. Reutilizamos el proceso de suma, sin
        antes resetearlo.
        """
        proceso_padre = Proceso(proc_id=1)
        f_suma = funciones_ponderadas['suma']
        proceso_suma = Proceso(proc_id=2, **f_suma)

        f_prod = funciones_ponderadas['prod']
        proceso_prod = Proceso(proc_id=3, **f_prod)

        f_div = funciones_ponderadas['div']
        proceso_div = Proceso(proc_id=4, **f_div)

        mi_prod = proceso_padre.enviar_pedido((4, 3), proceso_prod, 8)
        suma_parc = proceso_padre.enviar_pedido((mi_prod, 1), proceso_suma, 5)

        mi_div = proceso_padre.enviar_pedido((20, 4), proceso_div, 8)

        try:
            ret = proceso_padre.enviar_pedido((mi_div, suma_parc),
                                              proceso_suma, 5)
            self.assertTrue(False)
        except ProcesoNoListo:
            self.assertTrue(True)
예제 #2
0
파일: test.py 프로젝트: juansca/myProcess
    def test_termino_suma(self):
        """
        Calculamos normalmente 1 + 3
        """
        proceso_padre = Proceso(proc_id=1)
        f_suma = funciones_ponderadas['suma']
        proceso_suma = Proceso(proc_id=2, **f_suma)
        result = proceso_padre.enviar_pedido((1, 3), proceso_suma, 5)

        self.assertEqual(result, 4)
        self.assertEqual(proceso_suma.ya_use, proceso_suma.rafaga)
        self.assertEqual(proceso_suma.estado, 'terminado')
예제 #3
0
파일: cliente.py 프로젝트: fywer/basex
    def __init__(self, nodo, puerto):
        socket.socket.__init__(self)
        self.sock = (nodo, puerto)
        try:
            self.connect(self.sock)
            while True:
                nickname = input("INGRESA UN NICKNAME: ")
                if len(nickname) < 1:
                    pass
                else:
                    break
            self.nickname = nickname
            self.send(nickname.encode())
            Proceso(self).start()
        except Exception as e:
            sys.stderr.write(str(e) + '\n')
            return

        while True:
            try:
                request = input("@{0}: ".format(self.nickname))
                self.send(request.encode())
            except Exception as e:
                sys.stderr.write(str(e) + '\n')
                break
예제 #4
0
파일: test.py 프로젝트: juansca/myProcess
    def test_no_termino_prod(self):
        """
        Calculamos 4 * 2. Se ejecuta el proceso un rato, no termina, y despues
        se vuelve a ejecutar y efectivamente termina.
        """
        proceso_padre = Proceso(proc_id=1)
        f_prod = funciones_ponderadas['prod']
        proceso_prod = Proceso(proc_id=2, **f_prod)
        result = proceso_padre.enviar_pedido((4, 2), proceso_prod, 5)

        self.assertEqual(result, None)
        self.assertEqual(proceso_prod.ya_use + 3, proceso_prod.rafaga)
        self.assertEqual(proceso_prod.estado, 'listo')

        result = proceso_padre.enviar_pedido((4, 2), proceso_prod, 3)
        self.assertEqual(result, 8)
        self.assertEqual(proceso_prod.ya_use, proceso_prod.rafaga)
        self.assertEqual(proceso_prod.estado, 'terminado')
예제 #5
0
class Cpu:
    def __init__(self):
        self.mensaje_inicio()

        # Bloque de control de proceso
        self.listo = Nodo()
        self.ejecucion = Nodo()
        self.bloqueado = Nodo()
        self.suspendido_listo = Nodo()
        self.suspendido_bloqueado = Nodo()

        print("------------------------")
        print("Iniciando Sesion")

        # Carga de Procesos Prioritarios Basicos
        crear_procesos_nuevos("Alta", "root", 3)
        print("-------------------------")

    def cargar(self):
        pass

    def procesos(self):
        pass

    def carga_kernel(self):


    def mensaje_inicio(self):
        print ("---------------------")
        print ("Bienvenido al Kernel")
        print ("---------------------")
        print ("Iniciando bloque de control de proceso")

    def crear_procesos_nuevos(self, prioridad, usuario, cant):
        for i in range(0:cant):
            if (prioridad == 'Alta'):
                self.listo = self.listo.agregar(Proceso(random(1.1, 999999.89), "proceso-" + i, 7500, prioridad, 'comando - proceos - service', usuario))
            if (prioridad == 'Media'):
                self.listo = self.listo.agregar(Proceso(random(1.1, 999999.99), "proceso-medio-"+i, 3400, prioridad, 'comm- proceso - service - medio', usuario))
            if (prioridad == "Baja"):
                self.listo = self.listo.agregar(Proceso(random(1.1, 999999.99), "Proceso-Bajo-"+i, 1200, prioridad, "systemctl start service basic", usuario))
예제 #6
0
 def leer(self, path):
    tanda = []
    archivo = open(path, "r")
    for trabajo in archivo.readlines():
       data = trabajo.split(";")
       proceso = Proceso(
          nombre=data[0],
          arribo=int(re.sub("\s+","", data[1])),
          tiempoTotal=int(re.sub("\s+","", data[2])),
          tamaño=int(re.sub("\s+","", data[3]))
       )
       tanda.append(proceso)
          
    archivo.close()
    return tanda
예제 #7
0
파일: test.py 프로젝트: juansca/myProcess
    def test_reset_div(self):
        """
        Calculamos 3 / 1. Y reseteamos
        """
        proceso_padre = Proceso(proc_id=1)
        f_div = funciones_ponderadas['div']
        proceso_div = Proceso(proc_id=2, **f_div)
        result = proceso_padre.enviar_pedido((3, 1), proceso_div, 8)

        self.assertEqual(result, 3)
        self.assertEqual(proceso_div.ya_use, proceso_div.rafaga)
        self.assertEqual(proceso_div.estado, 'terminado')

        proceso_div.reset()
        self.assertEqual(proceso_div.ya_use, 0)
        self.assertEqual(proceso_div.estado, 'listo')
예제 #8
0
    def __init__(self, args):        
        Proceso.__init__(self,args)

        self.numero = args[4]
        self.mensaje = args[5]
        self.duracion = math.ceil(len(self.mensaje)*0.02)
예제 #9
0
def simular(tanda, tamañoMemoria: int, estrategia, tiempoSelecion: int,
            tiempoCarga: int, tiempoLiberacion: int):
    # SIMULAR
    simular = True
    memoria = Memoria(tamañoMemoria)

    admin = AdminMemoria(memoria, estrategia, tiempoSelecion, tiempoCarga,
                         tiempoLiberacion)

    # Estadistica
    logs = []
    tandaOriginal = []
    indiceFragmantacion = 0
    countFragamntacion = True
    tiemposRetorno = []
    tiempoMedioRetorno = 0
    # Contador
    T = 0
    # Ordenar tanda por tiempo de Arribo
    procesos = sorted(tanda, key=lambda proceso: proceso.arribo)
    txtIntro = "######################################################" + '\n'
    logs.append(txtIntro)
    print(txtIntro)

    txtIntro = "#################   SIMULADOR  #######################" + '\n'
    logs.append(txtIntro)
    print(txtIntro)

    txtIntro = "#########   ADMINISTRADOR DE MEMORIA  ################" + '\n'
    logs.append(txtIntro)
    print(txtIntro)

    txtIntro = "######################################################" + '\n'
    logs.append(txtIntro)
    print(txtIntro)

    txtTandaT = ('TANDA DE TRABAJO' + '\n')
    logs.append(txtTandaT)
    print(txtTandaT)

    for proceso in procesos:
        logs.append(str(proceso))
        print(proceso)

        tandaOriginal.append(proceso)

    txt = 'INICIAR SIMULACION\nT: 0 --> Inicializar Memoria\n'
    logs.append(txt)
    print(txt)

    txt = imprimirMemoria(admin.memoria)
    logs.append(txt)
    print(txt)

    T += 1
    admin.tiempo()
    while (simular):

        if ((len(procesos) != 0) or (len(admin.memoria.particiones) > 1)):

            # LIBERACION (Mientras existan procesos a liberar)
            estado = admin.liberacion()
            while (estado['exito']):
                Tliberacion = T
                for i in range(tiempoLiberacion):
                    txt = ('T: ' + str(Tliberacion) +
                           ':   --> Trabajando... ' + ' MemLib.: ' +
                           str(admin.memoria.libre) + '\n')
                    logs.append(txt)
                    print(txt)
                    Tliberacion += 1
                    admin.tiempo()
                    if (countFragamntacion):
                        indiceFragmantacion += admin.memoria.libre

                # Resta al indice la memoria contada como libre
                # en el ultimo ciclo.
                if (countFragamntacion):
                    indiceFragmantacion -= estado['proceso'].tamaño

                T += tiempoLiberacion
                txt = ('--- LIBERACION COMPLETADA ---\n')
                logs.append(txt)
                print(txt)
                tiemposRetorno.append({
                    'proceso': estado['proceso'].nombre,
                    'arribo': estado['proceso'].arribo,
                    'tiempoRetorno': T - 1
                })
                admin.arribos = True  #Permite nuevos arrivos
                estado = admin.liberacion()
                txt = (imprimirMemoria(admin.memoria))
                logs.append(txt)
                print(txt)

            # SELECCION
            if (len(procesos) != 0):
                proceso = procesos[0]
                # Verifica que esten permitidos los arribos y sea el turno del proceso
                if ((admin.arribos) and (proceso.arribo <= T)):
                    Tseleccion = T
                    for i in range(tiempoSelecion):
                        txt = ('T: ' + str(Tseleccion) +
                               ':   --> SELECCIONANDO PARTICION AL PROCESO: ' +
                               str(proceso) + ' MemLib: ' +
                               str(admin.memoria.libre) + '\n')
                        logs.append(txt)
                        print(txt)
                        Tseleccion += 1
                        admin.tiempo()
                        if (countFragamntacion):
                            indiceFragmantacion += admin.memoria.libre

                    T += tiempoSelecion

                    # ASIGNACION
                    procesoAsig = Proceso(proceso.nombre, proceso.arribo,
                                          proceso.tiempoTotal + tiempoCarga,
                                          proceso.tamaño)
                    memoriaLibreAsignacion = admin.memoria.libre
                    if (admin.arriboProceso(procesoAsig)):
                        Tasignacion = T
                        for i in range(tiempoCarga):
                            txt = ('T: ' + str(Tasignacion) +
                                   ':   --> CARGANDO PROCESO: ' +
                                   str(proceso.nombre) + ' MemLib: ' +
                                   str(memoriaLibreAsignacion) + '\n')
                            logs.append(txt)
                            print(txt)
                            Tasignacion += 1
                            admin.tiempo()
                            # Verifica | Si no es el ultimo proceso en arribar cuanta IndFrag / Detiene la cuenta.
                            indiceFragmantacion += memoriaLibreAsignacion

                        T += tiempoCarga

                        txt = imprimirMemoria(admin.memoria)
                        logs.append(txt)
                        print(txt)
                        procesos.pop(0)
                        if (len(procesos) == 0):
                            countFragamntacion = False
                    else:
                        if (proceso.tamaño > admin.memoria.tamaño):
                            txt = ('T: ' + str(T) + ':   --> EL PROCESO: ' +
                                   str(proceso.nombre) +
                                   ' EXEDE EL TAMAÑO DE LA MEMORIA' + '\n')
                            logs.append(txt)
                            print(txt)
                            procesos.pop(0)

                else:
                    txt = ('T: ' + str(T) + ':   --> Sin Arribos\n')
                    logs.append(txt)
                    print(txt)
                    # TIEMPO
                    T += 1
                    admin.tiempo()
                    if (countFragamntacion):
                        indiceFragmantacion += admin.memoria.libre
            else:
                txt = ('T: ' + str(T) +
                       ':   --> Sin Arribos - Tanda Completada' + '\n')
                logs.append(txt)
                print(txt)
                # TIEMPO
                T += 1
                admin.tiempo()
                tetx = imprimirMemoria(admin.memoria)
                logs.append(txt)
                print(txt)

        else:
            simular = False

    txtFin = "######################################################" + '\n'
    logs.append(txtFin)
    print(txtFin)

    txtFin = "#################   RESULTADO  #######################" + '\n'
    logs.append(txtFin)
    print(txtFin)

    txtFin = "######################################################" + '\n'
    logs.append(txtFin)
    print(txtFin)

    txtEstrageia = ('ESTRATEGIA: ' + admin.estrategia + '\n')
    logs.append(txtEstrageia)
    print(txtEstrageia)

    txtFragmentacion = ('FRAGMENTACION EXTERNA: ' + str(indiceFragmantacion) +
                        '\n')
    logs.append(txtFragmentacion)
    print(txtFragmentacion)

    txtTiempoRetorno = ('TIEMPO DE RETORNO | PROCESOS | ' + '\n')
    logs.append(txtTiempoRetorno)
    print(txtTiempoRetorno)

    for dato in tiemposRetorno:
        tiempoRetorno = dato['tiempoRetorno'] - dato['arribo']
        txtTR = ('| ' + str(dato['proceso']) + ' |' + ' Arribo: ' +
                 str(dato['arribo']) + ' Retorno: ' +
                 str(dato['tiempoRetorno']) + ' Tiempo Retorno: ' +
                 str(tiempoRetorno) + '\n')
        logs.append(txtTR)
        print(txtTR)

        tiempoMedioRetorno += tiempoRetorno

    # len(tiemposRetorno) retorn la cantidad de procesos
    tMedioRetorno = 0
    try:
        tMedioRetorno = tiempoMedioRetorno / len(tiemposRetorno)
    except ZeroDivisionError:
        pass

    tiempoRetornoTanda = 0
    try:
        tiempoRetornoTanda = tiemposRetorno.pop()['tiempoRetorno']
    except IndexError:
        pass

    txtTiempoMedioRetorno = ('TIEMPO MEDIO DE RETORNO: ' + str(tMedioRetorno) +
                             '\n')
    logs.append(txtTiempoMedioRetorno)
    print(txtTiempoMedioRetorno)

    txtTiempoRetornoTanda = ('TIEMPO DE RETORNO DE LA TANDA: ' +
                             str(tiempoRetornoTanda) + '\n')
    logs.append(txtTiempoRetornoTanda)
    print(txtTiempoRetornoTanda)

    return logs
예제 #10
0
import json
import algo.srtf as srtf
import algo.rr as rr
from proceso import Proceso
from flask import Flask

p1 = Proceso(0, 7, "p1")
p2 = Proceso(2, 4, "p2")
p3 = Proceso(4, 1, "p3")
p4 = Proceso(5, 4, "p4")
procesos = [p1, p2, p3, p4]

gantt = srtf.SRTF(*[p1, p2, p3, p4])
#gantt2 = rr.RR(2, *[p1, p2, p3, p4])

i=0
result = gantt.srtf()
print(result)

# print("Tiempo de espera individuales: ")
for proceso in procesos:
    print(f"Proceso: {proceso.nombre} - Espero: {proceso.wait}")
print("Total de tiempo en espera: ", gantt.total_wait_time())
print("Tiempo de espera promedio: ", gantt.total_wait_time()/gantt.count_processes)


예제 #11
0
 def __init__(self, args):        
     Proceso.__init__(self,args)
     
     self.nombreContacto = args[4]
     self.numeroContacto = args[5]
예제 #12
0
파일: test.py 프로젝트: juansca/myProcess
    def test_ej_combinado(self):
        """
        Calculamos 20/4 + (4 * 3) + 1
        """
        proceso_padre = Proceso(proc_id=1)
        f_suma = funciones_ponderadas['suma']
        proceso_suma = Proceso(proc_id=2, **f_suma)

        f_prod = funciones_ponderadas['prod']
        proceso_prod = Proceso(proc_id=3, **f_prod)

        f_div = funciones_ponderadas['div']
        proceso_div = Proceso(proc_id=4, **f_div)

        mi_prod = proceso_padre.enviar_pedido((4, 3), proceso_prod, 8)
        suma_parc = proceso_padre.enviar_pedido((mi_prod, 1), proceso_suma, 5)

        mi_div = proceso_padre.enviar_pedido((20, 4), proceso_div, 8)

        proceso_suma.reset()
        ret = proceso_padre.enviar_pedido((mi_div, suma_parc), proceso_suma, 5)

        self.assertEqual(ret, 18)
예제 #13
0
        print('-- Desde: ' + str(posBase) + '  Hasta: ' + str(posTope))
        # RECALCULAR TAMAÑO DE LA NUEVA PARTICION LIBRE
        newPartUnif = Particion(tamaño=memoriaTotal, libre=True)
        self.memoria.insertarEntre(newPartUnif, posBase, posTope)
        pass


if __name__ == "__main__":
    import random
    M = Memoria(256)
    # AdmMem = AdminMemoria(M,'first-fit',15,2,2)
    AdmMem = AdminMemoria(M, 'next-fit', 15, 2, 2)

    for i in range(6):
        P = Proceso(nombre='P-' + str(i),
                    arribo=random.randrange(60) + 1,
                    tiempoTotal=random.randrange(50) + 1,
                    tamaño=random.randrange(10) + 35)
        AdmMem.arriboProceso(P)

    print('NUEVA TANDA')
    imprimirMemoria(AdmMem.memoria)
    # AdmMem.eliminarProceso(0)
    AdmMem.eliminarProceso(1)
    AdmMem.eliminarProceso(3)
    # imprimirMemoria(AdmMem.memoria)

    # imprimirMemoria(AdmMem.memoria)
    AdmMem.eliminarProceso(2)
    imprimirMemoria(AdmMem.memoria)

    for i in range(1):
예제 #14
0
 def __init__(self, args):        
     Proceso.__init__(self,args)
     self.duracion = 2
예제 #15
0
	def __init__(self, nombre, tiempo,  sistema, recursos, prioridad):
		Proceso.__init__(self, nombre, tiempo, sistema, recursos)

		self.prioridad = prioridad
예제 #16
0
    def __init__(self, args):        
        Proceso.__init__(self,args)

        self.numero = args[4]
        self.duracion = int(args[5])
예제 #17
0
파일: otro.py 프로젝트: rlecaro2/so
 def __init__(self,args):
     Proceso.__init__(self,args)
     self.duracion = int(args[4])
예제 #18
0
    def __init__(self, nombre, tiempo, sistema, recursos):
        Proceso.__init__(self, nombre, tiempo, sistema, recursos)

        self.cuanto = 0