Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 *-*
- """
- UCSE DAR - Sistemas Operativos I - Trabajo Práctico Nro 1 - 2018
- Algoritmos de Planificación del Procesador
- """
- # TODO: completar con los datos de los integrantes del grupo
- __autores__ = [
- ["Agustín Jobson", "agujobson1@gmail.com"],
- ["Maximiliano Mainero", "maximainero7@gmail.com"],
- ["Franco Rossetti", "francorossetti98@gmail.com"]
- ]
- __all__ = [
- 'FIFO', 'SJN', 'SRT', 'RoundRobin',
- 'HRN', 'HRNsa',
- 'Prioridad', 'PrioridadA'
- ]
- def FIFO(proceso_actual, cola_procesos, tiempo_actual):
- siguiente = None
- if (proceso_actual is not None) and (not proceso_actual.fin()):
- siguiente = proceso_actual
- for proceso in cola_procesos:
- if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
- proceso.esperar()
- else:
- candidatos = []
- for proceso in cola_procesos:
- if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
- candidatos.append(proceso)
- if len(candidatos) > 0:
- menor = candidatos[0]
- for proceso in candidatos:
- if (proceso.inicio < menor.inicio) or proceso.inicio == menor.inicio and proceso.id < menor.id:
- menor = proceso
- siguiente = menor
- for proceso in candidatos:
- if proceso is not siguiente:
- proceso.esperar()
- if siguiente is not None:
- siguiente.ejecutar()
- return siguiente
- def SJN(proceso_actual, cola_procesos, tiempo_actual):
- siguiente = None
- if (proceso_actual is not None) and (not proceso_actual.fin()):
- siguiente = proceso_actual
- for proceso in cola_procesos:
- if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
- proceso.esperar()
- else:
- candidatos = []
- for proceso in cola_procesos:
- if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
- candidatos.append(proceso)
- if len(candidatos) > 0:
- menor = candidatos[0]
- for proceso in candidatos:
- if (proceso.duracion < menor.duracion):
- menor = proceso
- else:
- if (proceso.duracion == menor.duracion):
- if (proceso.inicio < menor.inicio):
- menor = proceso
- siguiente = menor
- for proceso in candidatos:
- if proceso is not siguiente:
- proceso.esperar()
- if siguiente is not None:
- siguiente.ejecutar()
- return siguiente
- def SRT(proceso_actual, cola_procesos, tiempo_actual):
- siguiente = None
- candidatos = []
- for proceso in cola_procesos:
- if not proceso.fin() and (proceso.inicio <= tiempo_actual):
- candidatos.append(proceso)
- if len(candidatos) > 0:
- menor = candidatos[0]
- tiemporestantemenor = menor.duracion - menor.procesado
- for proceso in candidatos:
- tiemporestante = proceso.duracion - proceso.procesado
- if (tiemporestante < tiemporestantemenor) or ((tiemporestantemenor == tiemporestante) and (proceso_actual == proceso)):
- tiemporestantemenor = tiemporestante
- menor = proceso
- siguiente = menor
- for proceso in candidatos:
- if proceso is not siguiente:
- proceso.esperar()
- if siguiente is not None:
- siguiente.ejecutar()
- return siguiente
- def HRN(proceso_actual, cola_procesos, tiempo_actual):
- raise NotImplementedError
- def HRNsa(proceso_actual, cola_procesos, tiempo_actual):
- raise NotImplementedError
- def Prioridad(proceso_actual, cola_procesos, tiempo_actual):
- """siguiente = None
- if (proceso_actual is not None) and (not proceso_actual.fin()):
- siguiente = proceso_actual
- for proceso in cola_procesos:
- if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
- proceso.esperar()
- else:
- candidatos = []
- for proceso in cola_procesos:
- if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
- candidatos.append(proceso)
- if len(candidatos) > 0:
- menor = candidatos[0]
- for proceso in candidatos:
- if (proceso.prioridad >= menor.prioridad):
- if (proceso.inicio < menor.inicio):
- menor = proceso
- elif (proceso.inicio == menor.inicio) and (proceso.id < menor.id):
- menor = proceso
- siguiente = menor
- for proceso in candidatos:
- if proceso is not siguiente:
- proceso.esperar()
- if siguiente is not None:
- siguiente.ejecutar()
- return siguiente"""
- siguiente = None
- if (proceso_actual is not None) and (not proceso_actual.fin()):
- siguiente = proceso_actual
- for proceso in cola_procesos:
- if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
- proceso.esperar()
- else:
- candidatos = []
- for proceso in cola_procesos:
- if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
- candidatos.append(proceso)
- if len(candidatos) > 0:
- menor = candidatos[0]
- for proceso in candidatos:
- if (proceso.prioridad > menor.prioridad):
- menor = proceso
- if proceso.prioridad == menor.prioridad:
- if proceso.inicio < menor.inicio:
- menor = proceso
- if proceso.inicio == menor.inicio and proceso.id < menor.id:
- menor = proceso
- siguiente = menor
- for proceso in candidatos:
- if proceso is not siguiente:
- proceso.esperar()
- if siguiente is not None:
- siguiente.ejecutar()
- return siguiente
- def PrioridadA(proceso_actual, cola_procesos, tiempo_actual):
- siguiente = None
- candidatos = []
- for proceso in cola_procesos:
- if not proceso.fin() and (proceso.inicio <= tiempo_actual):
- candidatos.append(proceso)
- if len(candidatos) > 0:
- menor = candidatos[0]
- for proceso in candidatos:
- if (proceso.prioridad > menor.prioridad):
- menor = proceso
- if proceso.prioridad == menor.prioridad:
- if proceso.inicio < menor.inicio:
- menor = proceso
- if proceso.inicio == menor.inicio and proceso.id < menor.id:
- menor = proceso
- siguiente = menor
- for proceso in candidatos:
- if proceso is not siguiente:
- proceso.esperar()
- if siguiente is not None:
- siguiente.ejecutar()
- return siguiente
- def RoundRobin(proceso_actual, cola_procesos, tiempo_actual, quantum):
- siguiente = None
- if proceso_actual is not None:
- if (proceso_actual.quantum == quantum) or (proceso_actual.fin()):
- proceso_actual.quantum = 0
- cola_procesos.remove(proceso_actual)
- cola_procesos.append(proceso_actual)
- for proceso in cola_procesos:
- if (proceso.inicio <= tiempo_actual) and (not proceso.fin()):
- siguiente = proceso
- break
- for proceso in cola_procesos:
- if (proceso.inicio <= tiempo_actual) and (proceso is not siguiente) and (not proceso.fin()):
- proceso.esperar()
- else:
- siguiente = proceso_actual
- for proceso in cola_procesos:
- if (proceso.inicio <= tiempo_actual) and (proceso is not siguiente) and (not proceso.fin()):
- proceso.esperar()
- else:
- for proceso in cola_procesos:
- if (proceso.inicio <= tiempo_actual) and (not proceso.fin()):
- siguiente = proceso
- break
- for proceso in cola_procesos:
- if (proceso.inicio <= tiempo_actual) and (proceso is not siguiente) and (not proceso.fin()):
- proceso.esperar()
- if siguiente is not None:
- siguiente.quantum += 1
- siguiente.ejecutar()
- return siguiente
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement