0% encontró este documento útil (0 votos)
89 vistas3 páginas

Explicacion Round Robin

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
89 vistas3 páginas

Explicacion Round Robin

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

init__(self, root):

El método constructor de la clase. Recibe un parámetro root, que es una referencia al widget raíz
de la interfaz gráfica de la aplicación. En este método, se inicializan diversas variables y se
configuran los elementos de la interfaz.

Variables de la clase:

root: El widget raíz de la interfaz gráfica, que se pasa como parámetro al constructor.

processes: Una lista que almacenará la información de los procesos a ser planificados.

current_process_index: Un entero que indicará el índice del proceso actual que está siendo
ejecutado.

current_time: Un entero que representa el tiempo actual del algoritmo.

quantum: Un entero que representa el quantum (la cantidad de tiempo que cada proceso puede
ejecutarse en una ronda) utilizado en el algoritmo.

Creación de la interfaz gráfica:

Se crea un objeto ttk.Treeview llamado tree que muestra una tabla con columnas para el "Número"
del proceso, la "Ráfaga" (tiempo de ejecución), el "Tiempo Restante" (tiempo restante para la
finalización del proceso), la "Prioridad" del proceso y el "Quantum" utilizado en el algoritmo. Esta
tabla se muestra sin el encabezado de las filas.

Se crean etiquetas y campos de entrada (Entry) para que el usuario pueda ingresar información de
un proceso, como su número, ráfaga (tiempo de ejecución), prioridad y quantum.

Se crea un lienzo (Canvas) llamado canvas_timeline con un fondo blanco y una altura de 50 píxeles.
Este canvas se utilizará para visualizar la línea de tiempo de los procesos durante la ejecución del
algoritmo

add_process(self): Este método se llama cuando el botón "Agregar Proceso" es presionado. Extrae
los valores ingresados en los campos de entrada (número, ráfaga y prioridad) y verifica que sean
números enteros válidos. Si los valores son válidos y el quantum también es válido (un número
entero positivo), se procede a verificar que el número del proceso no existe previamente en la lista
self.processes. Si el número del proceso ya existe, muestra un mensaje de error. Si no existe, agrega
un nuevo proceso a la lista self.processes con la información ingresada y luego actualiza la tabla
llamando al método update_table(). Si ocurre una excepción de tipo ValueError, se muestra un
mensaje de error indicando que los valores de ráfaga, prioridad y quantum deben ser números
enteros no negativos.
update_table(self): Este método actualiza la tabla self.tree con los datos almacenados en la lista
self.processes. Primero, borra todas las filas existentes en la tabla y luego inserta cada proceso
almacenado en self.processes como una nueva fila en la tabla.

run_round_robin(self): Este método se llama cuando el botón "Ejecutar Round Robin" es


presionado. Extrae el valor del quantum ingresado en el campo de entrada y verifica que sea un
número entero positivo. Luego, actualiza el quantum para todos los procesos almacenados en
self.processes. Después de realizar estas configuraciones, se reinician las variables
self.current_time y self.current_process_index a cero y se llama al método execute_next_process()
para comenzar la ejecución del algoritmo Round Robin.

execute_next_process(self): Este método es el corazón del algoritmo Round Robin. Se encarga de


ejecutar el siguiente proceso en la lista self.processes. Comienza verificando si el índice
self.current_process_index es menor que la longitud de la lista self.processes, lo que indica que
aún hay procesos por ejecutar. Luego, obtiene el proceso actual de la lista en función del índice
actual.

Si el tiempo restante del proceso es mayor que cero (current_process["remaining_time"] > 0), se
calcula el tiempo a ejecutar, que será el mínimo entre el quantum (self.quantum) y el tiempo
restante del proceso. El proceso se ejecuta durante este tiempo, y su tiempo restante se actualiza.

Si el tiempo restante del proceso es igual a cero (current_process["remaining_time"] == 0),


significa que el proceso ha sido completado, por lo que se elimina de la lista de procesos y se
muestra un mensaje informativo indicando que el proceso ha sido completado.

Luego, se actualiza la tabla para reflejar los cambios en el tiempo restante de los procesos
(self.update_table()) y se programa una nueva ejecución del método execute_next_process()
después de 1000 milisegundos (1 segundo) utilizando self.root.after(1000,
self.execute_next_process). Esto simula el avance del tiempo y permite que el algoritmo continúe
ejecutándose hasta que todos los procesos se hayan completado.
draw_running_process(self, process_name, remaining_time): Este método se encarga de visualizar
el progreso de ejecución del proceso actual en el canvas self.canvas_timeline. Primero, calcula la
proporción de progreso completado (progress) basándose en el tiempo restante del proceso en
comparación con su tiempo total de ráfaga. Luego, utiliza esta proporción para determinar el
ancho del rectángulo que representa el progreso en el canvas. El canvas se actualiza con el
progreso del proceso, y si el tiempo restante del proceso es mayor que cero, programa una nueva
llamada al método draw_running_process() después de 1000 milisegundos para actualizar el
progreso.

clear_running_process(self): Este método se utiliza para limpiar el canvas self.canvas_timeline,


eliminando cualquier representación visual previa de los procesos en ejecución.

Finalmente, en el bloque if __name__ == "__main__":, se crea una instancia de la clase


ProcessSchedulerApp, se pasa la referencia root del widget raíz de la interfaz gráfica y se ejecuta el
bucle principal de la aplicación utilizando root.mainloop().

También podría gustarte