-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit acbb32e
Showing
10 changed files
with
755 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# created by virtualenv automatically | ||
* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
|
||
procesos = [] | ||
n = int(input("Ingrese el número de procesos: ")) | ||
|
||
# Función de entrada | ||
def inProcesos(): | ||
|
||
for i in range(n): | ||
print("-------------------------------------------------------------------") | ||
pName = input (f"Ingrese el nombre del proceso {i + 1}: ") | ||
llegada = int (input ("Ingrese la hora de llegada: ")) | ||
ejecucion = int (input ("Ingrese el tiempo de ejecucion: ")) | ||
|
||
# Nombre del proceso, hora de llegada, tiempo de ejecucion, inicio, finalización, tiempo de servicio, indice de servicio, tiempo de espera | ||
procesos.append([pName, llegada, ejecucion, 0, 0, 0, 0, 0]) | ||
|
||
def mostrarResultado(resultado): | ||
# Calcular el tiempo de servicio, el indice de servicio y tiempo de espera | ||
for i in range(n): | ||
resultado[i][5] = resultado[i][4] - resultado[i][1] | ||
resultado[i][6] = round((resultado[i][2] / resultado[i][5]),2) | ||
resultado[i][7] = resultado[i][5] - resultado[i][2] | ||
|
||
# Calcular el tiempo de servicio, el indice de servicio y el tiempo de espera promedio | ||
tiempoServicioProm = 0 | ||
tiempoIservicioProm = 0 | ||
tiempoEsperaProm = 0 | ||
|
||
for i in range(n): | ||
tiempoServicioProm = (tiempoServicioProm + resultado[i][5]) | ||
tiempoIservicioProm = (tiempoIservicioProm + resultado[i][6]) | ||
tiempoEsperaProm = (tiempoEsperaProm + resultado[i][7]) | ||
|
||
tiempoServicioProm = round((tiempoServicioProm/n),2) | ||
tiempoIservicioProm = round((tiempoIservicioProm/n),2) | ||
tiempoEsperaProm = round((tiempoEsperaProm/n),2) | ||
|
||
# Resultados de salida, ordenados según la hora de inicio | ||
resultado.sort(key = lambda x:x[3], reverse = False) | ||
print ("Resultado de la ejecución:") | ||
|
||
print("Proceso | Llegada | Ejecucion | Salida | Servicio | Indice Servicio | Espera |") | ||
for i in range(n): | ||
print(" ",resultado[i][0]," | ",resultado[i][1]," | ",resultado[i][2], " | ",resultado[i][4], " | ",resultado[i][5], " | ",resultado[i][6], " | ",resultado[i][7], " |") | ||
print(f"Tiempo de Servicio promedio: {tiempoServicioProm}") | ||
print(f"Indice Servicio promedio: {tiempoIservicioProm}" ) | ||
print(f"Tiempo de Espera promedio: {tiempoEsperaProm}") | ||
|
||
|
||
# Primero algoritmo de primer servicio | ||
def FCFS(): | ||
|
||
fcfs_procesos = procesos.copy() | ||
|
||
# Ordenar la lista en orden ascendente por hora de llegada x: x [1] se ordena por hora de llegada | ||
fcfs_procesos.sort(key = lambda x:x[1], reverse = False ) | ||
|
||
# Calcular tiempo de inicio y finalización | ||
for i in range(n): | ||
if(i == 0): | ||
startTime = fcfs_procesos[i][1] | ||
fcfs_procesos[i][3] = startTime | ||
fcfs_procesos[i][4] = startTime + fcfs_procesos[i][2] | ||
|
||
elif(i > 0 and fcfs_procesos[i - 1][4] < fcfs_procesos[i][1]): | ||
startTime = fcfs_procesos[i][1] | ||
fcfs_procesos[i][3] = startTime | ||
fcfs_procesos[i][4] = startTime + fcfs_procesos[i][2] | ||
|
||
else: | ||
startTime = procesos[i - 1][4] | ||
fcfs_procesos[i][3] = startTime | ||
fcfs_procesos[i][4] = startTime + fcfs_procesos[i][2] | ||
|
||
mostrarResultado(fcfs_procesos) | ||
|
||
def lanzar(): | ||
inProcesos() | ||
FCFS() | ||
|
||
lanzar() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
|
||
procesos = [] | ||
n = int (input ("Ingrese el número de procesos: ")) | ||
|
||
# Función de entrada | ||
def inProcesos(): | ||
for i in range(n): | ||
print("-------------------------------------------------------------") | ||
pName = input (f"Ingrese el nombre del proceso {i + 1}: ") | ||
llegada = int (input ("Ingrese la hora de llegada: ")) | ||
ejecucion = int (input ("Ingrese el tiempo de ejecucion: ")) | ||
|
||
# Nombre del proceso, hora de llegada, tiempo de ejecucion, inicio, finalización, tiempo de servicio, indice de servicio, tiempo de espera | ||
procesos.append([pName, llegada, ejecucion, 0, 0, 0, 0, 0]) | ||
|
||
def mostrarResultado(resultado): | ||
|
||
# Calcular el tiempo de servicio, el indice de servicio y tiempo de espera | ||
for i in range(n): | ||
resultado[i][5] = resultado[i][4] - resultado[i][1] | ||
resultado[i][6] = round((resultado[i][2] / resultado[i][5]),2) | ||
resultado[i][7] = resultado[i][5] - resultado[i][2] | ||
|
||
# Calcular el tiempo de servicio, el indice de servicio y el tiempo de espera promedio | ||
tiempoServicioProm = 0 | ||
tiempoIservicioProm = 0 | ||
tiempoEsperaProm = 0 | ||
|
||
for i in range(n): | ||
tiempoServicioProm = (tiempoServicioProm + resultado[i][5]) | ||
tiempoIservicioProm = (tiempoIservicioProm + resultado[i][6]) | ||
tiempoEsperaProm = (tiempoEsperaProm + resultado[i][7]) | ||
|
||
tiempoServicioProm = round((tiempoServicioProm/n),2) | ||
tiempoIservicioProm = round((tiempoIservicioProm/n),2) | ||
tiempoEsperaProm = round((tiempoEsperaProm/n),2) | ||
|
||
# Resultados de salida, ordenados según la hora de inicio | ||
resultado.sort(key = lambda x:x[3], reverse = False) | ||
print ("Resultado de la ejecución:") | ||
|
||
print("Proceso | Llegada | Ejecucion | Salida | Servicio | Indice Servicio | Espera |") | ||
for i in range(n): | ||
print(" ",resultado[i][0]," | ",resultado[i][1]," | ",resultado[i][2]," | ",resultado[i][4]," | ",resultado[i][5]," | ",resultado[i][6]," | ",resultado[i][7]," |") | ||
print(f"Tiempo de Servicio promedio: {tiempoServicioProm}") | ||
print(f"Indice Servicio promedio: {tiempoIservicioProm}" ) | ||
print(f"Tiempo de Espera promedio: {tiempoEsperaProm}") | ||
|
||
# Primer algoritmo de proceso más corto | ||
def SJF(): | ||
temp_procesos = procesos.copy() | ||
sjf_procesos = [] | ||
queue_procesos = [] | ||
|
||
# # Ordenar la lista en orden ascendente por hora de llegada x: x [1] se ordena por hora de llegada | ||
temp_procesos.sort(key = lambda x: x[1], reverse = False) | ||
|
||
|
||
while(len(sjf_procesos) < len(procesos)): | ||
|
||
for p in temp_procesos[::-1]: | ||
if(len(sjf_procesos) != 0): | ||
if (sjf_procesos[-1][1] < p[1] < sjf_procesos[-1][4]): | ||
queue_procesos.append(temp_procesos.pop(temp_procesos.index(p))) | ||
|
||
queue_procesos.sort(key=lambda x: x[2], reverse = False) | ||
|
||
if(len(queue_procesos) == 0): | ||
queue_procesos.append(temp_procesos.pop(0)) | ||
queue_procesos[0][3] = queue_procesos[0][1] | ||
queue_procesos[0][4] = queue_procesos[0][3] + queue_procesos[0][2] | ||
|
||
elif (queue_procesos[0][1] < sjf_procesos[-1][4]): | ||
queue_procesos[0][3] = sjf_procesos[-1][4] | ||
queue_procesos[0][4] = queue_procesos[0][3] + queue_procesos[0][2] | ||
|
||
sjf_procesos.append(queue_procesos.pop(0)) | ||
|
||
mostrarResultado(sjf_procesos) | ||
|
||
def lanzar(): | ||
inProcesos() | ||
SJF() | ||
|
||
lanzar() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
# Función para buscar el tiempo de espera | ||
# para cada proceso | ||
def buscarTiempoEspera(procesos, n, te): | ||
tr = [0] * n | ||
|
||
# Se copia el tiempo de ráfaga en tr[] | ||
for i in range(n): | ||
tr[i] = procesos[i][1] | ||
completados = 0 | ||
t = 0 | ||
min = 999999999 | ||
corto = 0 | ||
revisado = False | ||
|
||
# Procesar hasta que todos los procesos se completen | ||
while (completados != n): | ||
|
||
# Encuentrar el proceso con el tiempo restante | ||
# mínimo entre los procesos que llegan hasta la | ||
# hora actual | ||
for j in range(n): | ||
if ((procesos[j][2] <= t) and | ||
(tr[j] < min) and tr[j] > 0): | ||
min = tr[j] | ||
corto = j | ||
revisado = True | ||
if (revisado == False): | ||
t += 1 | ||
continue | ||
|
||
# Reducir el tiempo restante en uno | ||
tr[corto] -= 1 | ||
|
||
# Se actualiza el mínimo | ||
min = tr[corto] | ||
if (min == 0): | ||
min = 999999999 | ||
|
||
# Si un proceso se ejecuta completamente | ||
if (tr[corto] == 0): | ||
|
||
# Incremento completo | ||
completados += 1 | ||
revisado = False | ||
|
||
# Encuentra la hora de finalización | ||
# del proceso actual | ||
tiempoTerminacion = t + 1 | ||
|
||
# Calcular tiempo de espera | ||
te[corto] = (tiempoTerminacion - proc[corto][1] - | ||
proc[corto][2]) | ||
|
||
if (te[corto] < 0): | ||
te[corto] = 0 | ||
|
||
# Incrementa el tiempo | ||
t += 1 | ||
|
||
# Función para calcular el tiempo de respuesta | ||
def encontrarTiempoRespuesta(procesos, n, te, tdr): | ||
|
||
# Calcular tiempo de respuesta | ||
for i in range(n): | ||
tdr[i] = procesos[i][1] + te[i] | ||
|
||
# Función para calcular tiempos medios de espera | ||
# y respuesta. | ||
def encontrarTiempoPromedio(procesos, n): | ||
te = [0] * n | ||
tdr = [0] * n | ||
|
||
# Función para encontrar el tiempo de espera | ||
# para todos los procesos | ||
buscarTiempoEspera(procesos, n, te) | ||
|
||
# Función para encontrar el tiempo de respuesta | ||
# para todos los procesos | ||
encontrarTiempoRespuesta(procesos, n, te, tdr) | ||
|
||
# Mostrar procesos junto con todos los detalles | ||
print("Procesos Tiempo ráfaga en espera") | ||
total_te = 0 | ||
total_tdr = 0 | ||
for i in range(n): | ||
|
||
total_te = total_te + te[i] | ||
total_tdr = total_tdr + tdr[i] | ||
print(" ", procesos[i][0], "\t\t\t", | ||
procesos[i][1], "\t\t\t", | ||
te[i], "\t\t\t", tdr[i]) | ||
|
||
print("\nTiempo medio de espera = %.5f "%(total_te /n) ) | ||
print("Tiempo medio de respuesta = ", total_tdr / n) | ||
|
||
# Controlador del coódigo | ||
|
||
# id's de procesos | ||
proc = [[1, 5, 1], [2, 9, 2], | ||
[3, 7, 4], [4, 4, 3], | ||
[5, 8, 5]] | ||
n = 5 | ||
|
||
def lanzar(): | ||
encontrarTiempoPromedio(proc, n) | ||
|
||
lanzar() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
class proceso(object): | ||
def __init__(self, id, prioridad): | ||
self.id = id | ||
self.prioridad = prioridad | ||
|
||
print("Ingrese el numero de procesos") | ||
nnumeros = int(input(">")) | ||
if (nnumeros > 0): | ||
listadeprocesos = [] | ||
for i in range(nnumeros): | ||
tmpllegada = -1 | ||
print("-------------------- Proceso " + str(i + 1) + " ------------------------") | ||
|
||
prioridad = 0 | ||
while (prioridad< 1): | ||
print("Ingrese la prioridad del proceso", i+1) | ||
prioridad = int(input(">")) | ||
# en el arreglo el primer item es el "id del proceso", prioridad | ||
listadeprocesos.append(proceso((i + 1), prioridad)) | ||
print() | ||
print() | ||
|
||
print("Procesoss creados Con exito!!") | ||
print() | ||
|
||
listadeprocesos = sorted(listadeprocesos, key=lambda proceso: proceso.prioridad, reverse=True) | ||
print("Orden de ejecucion de procesos: ") | ||
for proceso in listadeprocesos: | ||
|
||
print("Proceso " + str(proceso.id) + " Prioridad " + str(proceso.prioridad)) | ||
|
||
|
||
|
Oops, something went wrong.