Informe Tp1

Anuncio
Trabajo Práctico - Scheduling de tareas
Integrantes:
Gastón Lodieu, LU 661/97, [email protected]
Leonardo Raed, LU 579/04, [email protected]
Parte 1: Entendiendo el Simulador simusched

Ejercicio 1: Escriba un tipo de tarea TaskCon que simule una tarea interactiva. La tarea debe
realizar n llamadas bloqueantes de una duración al azar entre bmin y bmax inclusive. La tarea
debe recibir tres parámetros: n, bmin y bmax que serán interpretados como los tres elementos
del vector de enteros que recibe la función.
o Solución:
Ver código de archivo Task.cpp

Ejercicio 2: Escriba un lote de 3 tareas distintas: una intensiva en CPU y las otras dos de tipo
interactivo. Ejecute la simulación para FCFS y haga el diagrama de Gantt de este lote.
o Solución:
La tarea que se ejecutó fue la siguiente:
TaskCPU 10
*2 TaskCon 3 3 8
A simple vista se ve el funcionamiento del scheduling con politica Fifo , en donde una tarea que está
haciendo entrada/salida no permite la ejecución del resto de las tareas.
Parte 2: Extendiendo el Simulador simusched

Ejercicio 3: Completar la implementación del scheduler Round-Robin implementando los métodos
de la clase SchedRR en los archivos sched_rr.cpp y sched_rr.h. Esta implementación recibe un
único parámetro que representa el quantum del scheduler.
o Solución:
Ver código de sched_rr.cpp y sched_rr.h

Ejercicio 4: Diseñar y simular uno o más lotes de tareas con el algoritmo Round-Robin. Mostrar
y explicar brevemente que el comportamiento es el esperado en base a los diagramas de Gantt
generados. Realizar nuevos tipos de tarea de ser necesario para este propósito.
o Solución:
Para evaluar el desempeño del scheduler Round-Robin, se corrieron las siguientes tareas con un
quantum de 3 y un costo de cambio de contexto de una unidad:
Tarea 1:
*3 TaskBatch 20 5
Tarea 2:
*3 TaskBatch 20 5
*4 TaskCPU 4
A raíz de las tareas ejecutadas llegamos a la conclusión de que Round-Robin atiende rápido a todas
los procesos. Esto beneficia a aquellos procesos pequeños ya se aseguran su terminación en un
tiempo razonable, sin quedar en desventaja ante procesos grandes que ocuparían el cpu por mucho
tiempo.
Esta política de scheduler optimiza:
1- La latencia: minimiza el tiempo requerido para que un proceso empiece a dar resultados
(depende el quantum asignado).
2- El tiempo de respuesta: minimiza el tiempo de respuesta percibido por los usuarios
interactivos (depende el quantum asignado).
Queda claro también que exagerar con el quantum asignado genera una similitud con la política de
Fifo.

Ejercicio 5: Completar la implementación del scheduler Multilevel Feedback Queue
implementando los métodos de la clase SchedMFQ en los archivos sched_mfq.cpp y sched_mfq.h.
La implementación debe utilizar n colas con Round-Robin en cada una con los parámetros que
se detallan a continuación...(Sigue en el enunciado del tp)
o Solución:
Ver código de sched_mfq.cpp y sched_mfq.h
Parte 3: Evaluando los algoritmos de scheduling

Ejercicio 6: Programar un tipo de tarea TaskBatch que tome dos valores tot y blocks. El tiempo
total de CPU que utilice la tarea deberá ser de tot ciclos de reloj, incluyendo el tiempo utilizado
por las llamadas bloqueantes. La tarea realizará blocks llamadas bloqueantes que durarán
exactamente 1 ciclo de reloj, en momentos elegidos al azar.
o Solución:
Ver código de archivo Task.cpp

Ejercicio 7: Diseñar un lote de tareas TaskBatch de igual uso del CPU pero distinta cantidad de
bloqueos. Simular este lote con el algoritmo SchedRR con distintos valores de quantum y un
costo de cambio de contexto de una unidad. Concluir cuál debería ser la mejor elección del
quantum en base a las distintas medidas disponibles. Justificar.
o Solución:
Para concluir cual debería ser la mejor elección de quantum se analizaron las siguientes variantes:
Cantidad de procesos = 10 por prueba.
Duración de total por proceso = 20
Variación de quantum para cada prueba: 2 a 20
Costo de cambio de contexto = 1,2 y 3.
La ejecución de las tareas se realizó con el archivo run.sh, cambiando las tareas batch del archivo
TaskBatch.tsk
Prueba 1 Prueba 2 Prueba 3 Prueba 4
Tarea
Tas k Batch
Tas k Batch
Tas k Batch
Tas k Batch
Tas k Batch
Tas k Batch
Tas k Batch
Tas k Batch
Tas k Batch
Tas k Batch
Tot Block
20
20
20
20
20
20
20
20
20
20
Block
Block
Prueba 5 Prueba 6 Prueba 7 Prueba 8 Prueba 9 Prueba 10 Prueba 11 Prueba 12 Prueba 13 Prueba 14 Prueba 15
Block
Block
Block
Block
Block
Block
Block
Block
Block
Block
Block
Block
2
4
2
4
2
4
2
4
2
4
2
6
2
6
2
6
2
6
2
6
3
7
3
7
3
7
3
7
3
7
4
8
4
8
4
8
4
8
4
8
6
8
6
8
6
8
6
8
6
8
7
9
7
9
7
9
7
9
7
9
8
10
8
10
8
10
8
10
8
10
5
15
5
15
5
15
5
15
5
15
6
16
6
16
6
16
6
16
6
16
7
17
7
17
7
17
7
17
7
17
8
18
8
18
8
18
8
18
8
18
9
19
9
19
9
19
9
19
9
19
12
18
12
18
12
18
14
16
14
16
14
18
14
17
14
17
17
16
17
16
18
17
16
17
16
16
18
17
18
17
Cos to de Cam bio de Contex to
Qty interrupciones prom edio
Mejor Quantum
Tiem po m ax im o de ejecución
1
3
14
250
1
4
15
250
1
5
13
270
1
6
11
295
1
7
9
290
1
8
7
300
1
9
6
315
1
10
9
320
1
11
10
330
1
12
8
340
1
13
7
340
1
14
6
360
1
15
4
370
1
16
3
380
1
17
3
390
Cos to de Cam bio de Contex to
Mejor Quantum
Tiem po m ax im o de ejecución
2
17
290
2
14
320
2
13
330
2
11
360
2
9
370
2
7
380
2
6
410
2
8
440
2
10
450
2
8
470
2
7
490
2
5
510
2
5
530
2
3
550
2
3
570
Cos to de Cam bio de Contex to
Mejor Quantum
Tiem po m ax im o de ejecución
3
17
330
3
18
360
3
13
380
3
11
420
3
9
450
3
7
490
3
6
510
3
9
530
3
8
570
3
7
600
3
7
640
3
5
660
3
5
680
3
3
730
3
3
730
Los siguentes graficos muestran los resultados de las ejecuciones para tareas de tamaño 20 y un promedio de interrupciones que va de 3
a 17.
En este grafico se observa la curva dada por la relación entre qty de int promedio y el quantum elegido.
En este grafico observa que variando el costo por el ContexSwitch la curva mencionada en el grafico anterior no cambia.
Este grafico muestra que el tiempo de ejecución de los ejemplos evaluados crece linealmente en relación con el costo del ContexSwitch.
Analizando los resultados arrojados por las pruebas concluimos que:
 Las tareas con menor cantidad de interrupciones por I/O promedio terminan más rápido con un
quantum más grande. Esto se debe a que al tener menor cantidad de interrupciones aprovecha
mejor los bursts de CPU más largos para terminar antes. Logrando un tiempo total de ejecución
menor.
 No así aquellas tareas con más cantidad de interrupciones por I/O promedio, que por el
contrario, con un quantum pequeño tienen el mismo desempeño que con un quantum grande.
Esto se debe a que los desalojos de los procesos de la memoria se hace en su mayoria por causa
de estas interrupciones y no por agotar su quantum, por ende tener un quantum muy grande o
tenerlo muy pequeño no generan mejoras en la ejecución de los procesos.
 El tiempo final de ejecución acompaña lo que imaginábamos, mientras más interrupciones tienen
las tareas, más tiempo demora la ejecución. Esto se debe tambien a que, más interrupciones
implican más cambios de contexto, por lo cual suena logico que se tarde más.

Ejercicio 8: Para el algoritmo implementado en SchedMFQ:
o a) Explicar cómo podría producirse inanición (starvation) de una tarea TaskCPU 20
cargada al inicio.
o b) Mostrar un lote de tareas, parámetros iniciales y el diagrama de Gantt asociado para
un scheduler con 3 colas en donde se pueda ver que esto ocurre. Implementar nuevos
tipos de tarea si es necesario.
o Solución:
o a) La inanición puede producirse en sistemas de alta carga donde un ejemplo puede ser el
siguiente.
Una tarea TaskCPU 20 es cargada al inicio (donde 20 es mayor al quantum de la cola
más prioritaria).
Al ser un sistema de alta carga, en todo momento llegan tareas para ejecutar y estas se
encolan en la cola más prioritaria.
La tarea TaskCPU 20 no llega a completarse dentro del quantum asignado por la cola y
pasa a la siguiente de inferior de prioridad.
El procesador continúa ejecutando las tareas de alta prioridad, que se encuentra en la
cola mas prioritaria, y no deja ejecutar la tarea TaskCPU 20 por estar en una de menor
prioridad.
Una solución para este problema es la implementación de la técnica ageing, la tarea va
ganando prioridad a medida que pasa el tiempo.
Otro ejemplo donde se ve que se produce inanicion es el siguiente: Suficientes tareas
interactivas (TaskBatch) con gran cantidad de interrupciones IO cortas. Estos procesos
siempre se mantienen en la cola mas prioritaria, imposibilitando que procesos de colas
con menos prioridad puedan ejecutarse.
o b)A partir de la explicación en el punto a), y al no poder simular un sistema de alta carga, mostraremos como la TaskCPU 20
termina con su ejecución luego de que el procesador ejecute todas las demás tareas.
Usamos la implementación de SchedMFQ con parámetros 7 8 9.
En el diagrama de Gantt que se muestra a continuación, vemos como la TaskCPU 20 consume todo el quantum correspondiente a la cola
más prioritaria.
Al no completarse, la tarea pasa a la segunda cola prioritaria.
Luego el procesador ejecuta los siguientes procesos y estos finalizan su ejecución dentro del quantum de la cola más prioritaria.
Cuando el procesador finaliza con todos los procesos, la TaskCPU 20 completa su ejecución.
La tarea ejecutada es la siguiente:
TaskCPU 20
@10:
TaskCPU 4
TaskCPU 3
TaskCPU 2
TaskCPU 1
TaskCPU 4
TaskCPU 3
TaskCPU 2
TaskCPU 1
TaskCPU 4
TaskCPU 3
TaskCPU 2
TaskCPU 1
TaskCPU 4
TaskCPU 3
TaskCPU 2
TaskCPU 1
TaskCPU 4
TaskCPU 3
TaskCPU 2
TaskCPU 1
@15:
TaskCPU 4
TaskCPU 3
TaskCPU 2
TaskCPU 1
TaskCPU 4
TaskCPU 3
TaskCPU 2
TaskCPU 1
Otro ejemplo de tareas que producen inanición, tal como se menciona en el punto a es el siguiente:
En donde las tareas que se ejecutan son las siguientes:
TaskCPU 20
@10:
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
TaskBatch 20 18
Se observa que el proceso 0 consume su quantum, es desalojado y enviado a la siguiente cola de
menor prioridad. A partir de ese momento comienza la ejecución de los procesos interactivos que
alternan el uso de CPU entre ellos ya que se desalojan por IO, continuando su ejecución en la cola
más prioritaria del procesador.
En resumen, se analizaron 2 ejemplos en donde se podría producir inanición. Uno es aquel en el que
llegan suficientes procesos donde finalizan su ejecución dentro del quantum asignado por la cola de
mayor prioridad. El otro es aquel en el cual se atienden suficientes tareas del tipo interactivas que
realizan IO antes de completar el quantum asignado, conservando así su lugar en la cola más
prioritaria.
Descargar