|
@@ -23,9 +23,35 @@ geometry: margin=2cm
|
|
|
Ejercicio 1
|
|
Ejercicio 1
|
|
|
====
|
|
====
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+Para el primer ejercicio de este trabajo práctico se nos pide implementar TaskConsola, una simulación
|
|
|
|
|
+de una tarea interativa que debe realizar llamadas bloquantes de duración aleatoria y luego de esto consumir
|
|
|
|
|
+un ciclo de cpu. Dicha tarea se contruye a partir de 3 parámetros **n**, **bmin** y **bmax** ,
|
|
|
|
|
+donde el primero determina la cantidad de llamadas de bloqueantes a realizar y luego
|
|
|
|
|
+**bmin** y **bmax** determinan el rango de la duración de cada la llamada bloqueante.
|
|
|
|
|
+
|
|
|
|
|
+La implementación de TaskConsola es bastante sencilla, se generan **n** iteraciones, donde
|
|
|
|
|
+en cada una de ellas se genera una llamada bloqueante con una duración de **x** ciclos de reloj y
|
|
|
|
|
+un ciclo de ejecución de cpu. Para determinar **x** utilizamos la siguiente fórmula:
|
|
|
|
|
+
|
|
|
|
|
+```python
|
|
|
|
|
+ x = rand() % ( bmax - bmin + 1 ) + bmin
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+Para probar y generar el gráfico de Gantt de la implementación realizada utilizamos el siguiente lote
|
|
|
|
|
+ de tareas del tipo TaskConsola:
|
|
|
|
|
|
|
|
|
|
+| Task | Release Time | n | bmin | bmax |
|
|
|
|
|
+|------ |-------------- |--- |------ |------ |
|
|
|
|
|
+| 0 | 3 | 5 | 1 | 3 |
|
|
|
|
|
+| 1 | 5 | 2 | 4 | 8 |
|
|
|
|
|
+| 2 | 5 | 2 | 4 | 8 |
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
+\newpage
|
|
|
Ejercicio 2
|
|
Ejercicio 2
|
|
|
====
|
|
====
|
|
|
|
|
|
|
@@ -34,11 +60,13 @@ Ejercicio 2
|
|
|

|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+\newpage
|
|
|
Ejercicio 3
|
|
Ejercicio 3
|
|
|
====
|
|
====
|
|
|

|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+\newpage
|
|
|
Ejercicio 4
|
|
Ejercicio 4
|
|
|
====
|
|
====
|
|
|
|
|
|
|
@@ -65,6 +93,7 @@ Se ve que aumentar la cantidad de cores no mejora los tiempos de ejecución de l
|
|
|
Esto se debe a que este scheduler toma el primer nucleo libre y tiene en cuenta en que nucleo se encuentra el proceso actual. Esto provoca que haya cambio de nucleos constantemente en los procesos, sin aprovechar los cores libres.
|
|
Esto se debe a que este scheduler toma el primer nucleo libre y tiene en cuenta en que nucleo se encuentra el proceso actual. Esto provoca que haya cambio de nucleos constantemente en los procesos, sin aprovechar los cores libres.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+\newpage
|
|
|
Ejercicio 5
|
|
Ejercicio 5
|
|
|
====
|
|
====
|
|
|
|
|
|
|
@@ -85,7 +114,7 @@ Ejercicio 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+\newpage
|
|
|
Definiciones
|
|
Definiciones
|
|
|
====
|
|
====
|
|
|
|
|
|
|
@@ -99,7 +128,7 @@ Tiempo total de ejecución: Intervalo de ticks desde que se ejecuta un proceso h
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+\newpage
|
|
|
# Ejercicio 8
|
|
# Ejercicio 8
|
|
|
|
|
|
|
|
A continuación se muestran los diferentes casos de prueba realizados para comparar los diferentes tipos de schedulers.
|
|
A continuación se muestran los diferentes casos de prueba realizados para comparar los diferentes tipos de schedulers.
|