OBJETIVOS
En esta práctica vamos a trabajar con conceptos de planificación de procesos, una función
esencial en el núcleo de todo sistema operativo.
EL SIMULADOR DE PLANIFICADOR DE PROCESOS
Vamos a construir un simulador de planificador de procesos que
nos permita estudiar los distintos algoritmos de planificación, y el
tipo de operaciones necesarias para gestionar multiples tareas simultaneamente
dentro del nucleo de un sistema operativo.
El esqueleto del simulador consta de 6 clases y una interfaz:
- Simulator:
Es la clase que contiene el main. Crea un planificador, le asigna un conjunto
de tareas y lo arranca.
- Task:
Representa a los programas de usuario. Mantiene datos específicos del programa como:
- totalEffort: Tiempo total de procesamiento requerido por la tarea.
- remainingEffort: Tiempo de procesamiento restante.
- TaskFactory:
Encapsula la creación de tareas en el sistema. Le permite al planificador ir obteniendo
las tareas en el instante en el que deben ser iniciadas, y no antes.
- Process:
Representa un proceso del sistema operativo. Guarda la siguiente información sobre su ejecución:
- pid: identificador del proceso.
- state: estado en el que se encuentra el proceso.
- priority: prioridad del proceso.
- creationTime: momento en el que se crea el proceso en el sistema.
- responseTime: tiempo transcurrido desde que se crea el proceso hasta que se le permite acceso a la CPU
- runningTime: tiempo que el proceso ha permanecido en ejecución (RUNNING)
- waitingTime: tiempo que el proceso ha estado dormido, esperando por el procesador
- totalTime: tiempo total que el proceso ha pasado en el sistema
- SchedulingStrategy:
Interfaz propuesta para la implementación de los distintos algoritmos de planificación.
- DemoStrategy:
Ejemplo de implementación de una estrategia de planificación sencilla.
- Scheduler:
Esta clase es el planificador y contiene el motor de planificación de tareas.

Figura1: Diagrama de estados simulado por el planificador
La implementación se apoya en 2 objetos de tipo
Vector, que simulan las colas de procesos preparados para ser ejecutados y
los procesos terminados (aquellos que ya han realizado su procesamiento).
Funcionamiento del simulador
- En la clase Simulator se crean una serie de
tareas que se añaden a una clase de tipo TaskFactory.
- Las tareas se crean con una duración, pero además, se le indica a la factoría
el momento de entrada en el sistema y una prioridad.
- Se crea un objeto de tipo Scheduler al que se le pasa el
algoritmo de planificación y la factoría de tareas.
- Finalmente, se arranca el planificador. La clase Scheduler se encarga de:
- Seleccionar proceso según el algoritmo de planificación
- Garantizar la CPU al proceso durante el tiempo asignado (de manera simulada)
- Desalojar o terminar el proceso según corresponda
Se pide
- ¿Qué tipo de algoritmo de planificación implementa la clase DemoStrategy?
- ¿Cómo se garantiza que los identificadores de procesos sean únicos en el sistema?
- ¿Qué clase decide que la tarea ha terminado su procesamiento?
- Programar los algoritmos de planificación de procesos SJF, SRTF, Round Robin y por prioridades.
Para ello se pueden añadir y modificar cuantas cosas se quieran en las clases
- Completar la clase Process para que registre correctamente los tiempos
runningTime, waitingTime, responseTime y totalTime
- Implementar el método printStats() de la clase Scheduler. Este método
debe imprimir por pantalla el tiempo de espera medio y la productividad al terminar la
simulación.
- Opcionalmente, modificar el simulador para que un proceso
pueda entrar y salir del estado BLOCKED cuando de manera
aleatoria se produzca un evento de entrada salida.
ENLACES
|