|
|
@@ -10,11 +10,46 @@ ejecutará la tarea con menor cantidad de procesamiento pendiente.
|
|
|
|
|
|
## Implementación
|
|
|
|
|
|
+Para los dos tipos de schedulers empezamos usando `Map` de __C++__ ya
|
|
|
+usado en ejercicios anteriores para la carga inicial de los **Procesos**
|
|
|
+un struct que nos permite almacenar el process id, la duración de la tarea
|
|
|
+y en el caso de *RSJF* un contador de quantums consumidos.
|
|
|
+
|
|
|
+Luego cuando al momento de cargar un **Proceso** lo obtenemos
|
|
|
+del `Map` y lo encolamos en una `priority_queue` de **Procesos**, dicha cola
|
|
|
+nos asegura obtener siempre la tarea cargada que necesite menos tiempo de cpu.
|
|
|
+
|
|
|
+Finalmente los cpus de *SJF* siempre obtendrán la tarea lista de menor duración de la
|
|
|
+cola y la ejecutará hasta terminar. Por otro lado los cores *RSJF* ejecutaran la tarea
|
|
|
+lista por la cantidad de quantums asignados y una vez terminado el quantum reencolaran
|
|
|
+la tarea con la duración restante en la cola de prioridad para luego volver a obtener
|
|
|
+la siguiente tarea con menor duración o quedar idle.
|
|
|
|
|
|
## Pruebas
|
|
|
|
|
|
+Para hacer unas pruebas sencillas generamos dos lotes de tareas, los cuales tienen
|
|
|
+un *context switch* de 2 ciclos y un *core switch* y *quantum* de 4 ciclos obteniendo
|
|
|
+los siguientes resultados.
|
|
|
+
|
|
|
+A. Scheduler SJF con 1 y 2 cores, lote y resultados:
|
|
|
+
|
|
|
+| Task | Tipo | Release time | n |
|
|
|
+|------|-------------|--------------|----|
|
|
|
+| 0 | TaskCPU | 0 | 15 |
|
|
|
+| 1 | TaskCPU | 5 | 10 |
|
|
|
+| 2 | TaskCPU | 10 | 5 |
|
|
|
+
|
|
|

|
|
|

|
|
|
+
|
|
|
+B. Scheduler RSJF(reentrante) con 1 y 2 cores, lote y resultados:
|
|
|
+
|
|
|
+| Task | Tipo | Release time | n |
|
|
|
+|------|-------------|--------------|----|
|
|
|
+| 0 | TaskCPU | 0 | 20 |
|
|
|
+| 1 | TaskCPU | 5 | 4 |
|
|
|
+| 2 | TaskCPU | 10 | 5 |
|
|
|
+
|
|
|

|
|
|

|
|
|
|