|
@@ -23,23 +23,23 @@ geometry: margin=2cm
|
|
|
Ejercicio 1
|
|
Ejercicio 1
|
|
|
====
|
|
====
|
|
|
|
|
|
|
|
-Para el primer ejercicio de este trabajo práctico se nos pide implementar TaskConsola, una simulación
|
|
|
|
|
|
|
+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
|
|
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** ,
|
|
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
|
|
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.
|
|
**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
|
|
|
|
|
|
|
+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
|
|
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:
|
|
un ciclo de ejecución de cpu. Para determinar **x** utilizamos la siguiente fórmula:
|
|
|
|
|
|
|
|
-```python
|
|
|
|
|
|
|
+```c
|
|
|
x = rand() % ( bmax - bmin + 1 ) + bmin
|
|
x = rand() % ( bmax - bmin + 1 ) + bmin
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
Para probar y generar el gráfico de Gantt de la implementación realizada utilizamos el siguiente lote
|
|
Para probar y generar el gráfico de Gantt de la implementación realizada utilizamos el siguiente lote
|
|
|
- de tareas del tipo TaskConsola:
|
|
|
|
|
|
|
+ de tareas del tipo `TaskConsola`:
|
|
|
|
|
|
|
|
| Task | Release Time | n | bmin | bmax |
|
|
| Task | Release Time | n | bmin | bmax |
|
|
|
|------ |-------------- |--- |------ |------ |
|
|
|------ |-------------- |--- |------ |------ |
|
|
@@ -47,81 +47,8 @@ Para probar y generar el gráfico de Gantt de la implementación realizada utili
|
|
|
| 1 | 5 | 2 | 4 | 8 |
|
|
| 1 | 5 | 2 | 4 | 8 |
|
|
|
| 2 | 5 | 2 | 4 | 8 |
|
|
| 2 | 5 | 2 | 4 | 8 |
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
El el gráfico se puede observar que las llamadas bloqueantes se mantienen dentro de los rangos establecidos
|
|
El el gráfico se puede observar que las llamadas bloqueantes se mantienen dentro de los rangos establecidos
|
|
|
por los parámtetros de las tareas.
|
|
por los parámtetros de las tareas.
|
|
|
|
|
|
|
|
-\newpage
|
|
|
|
|
-Ejercicio 2
|
|
|
|
|
-====
|
|
|
|
|
-
|
|
|
|
|
-En este ejercicio se nos pide experimentar con un scheduler del tipo **FCFS**(*first come, first served*), esto
|
|
|
|
|
-significa que atendera a las tareas en el orden de llegada y no liberará el procesador hasta concluir con el
|
|
|
|
|
-proceso asignado.
|
|
|
|
|
-
|
|
|
|
|
-Para probar dicha implementación se unos brinda un lote de tareas compuesto por tareas del tipo
|
|
|
|
|
-TaskConsola y TaskCPU, donde el primer tipo ya fue expuesto en el primer ejercicio de este trabajo y la segundo
|
|
|
|
|
-es una tarea que solo consumirá consumirá una cantidad finita de ciclos de cpu(determinadas por parámetro). El
|
|
|
|
|
-siguiente cuadro muestra el lote utilizado:
|
|
|
|
|
-
|
|
|
|
|
-| Task | Tipo | Release time | n | bmin | bmax |
|
|
|
|
|
-|------|-------------|--------------|----|------|------|
|
|
|
|
|
-| 0 | TaskCPU | 0 | 10 | | |
|
|
|
|
|
-| 1 | TaskConsola | 5 | 5 | 1 | 4 |
|
|
|
|
|
-| 2 | TaskConsola | 6 | 5 | 1 | 2 |
|
|
|
|
|
-| 3 | TaskCPU | 8 | 10 | | |
|
|
|
|
|
-
|
|
|
|
|
-Para probar este lote, se nos pide hacer correr el scheduler con un costo de *cambio de contexto*
|
|
|
|
|
-de 2 ciclos en máquinas de 1, 2 y 4 cores, además es válido aclarar que el costo de *core switch*
|
|
|
|
|
-es irrelevante para esta implementación.
|
|
|
|
|
-
|
|
|
|
|
-1. Simulación con 1 core:
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-2. Simulación con 2 core:
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-3. Simulación con 4 core:
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-Finalmente se nos pide calcular *latencia*[^footnote] y *throughtput*[^footnote2] en cada una de las
|
|
|
|
|
-pruebas, a lo cual elaboramos los siguientes cuantos:
|
|
|
|
|
-
|
|
|
|
|
-A. Latencia:
|
|
|
|
|
-
|
|
|
|
|
-| Task | Tipo | 1 Core | 2 Cores | 4 Cores |
|
|
|
|
|
-|------|-------------|--------|---------|---------|
|
|
|
|
|
-| 0 | TaskCPU | 2 | 2 | 2 |
|
|
|
|
|
-| 1 | TaskConsola | 14 | 7 | 7 |
|
|
|
|
|
-| 2 | TaskConsola | 36 | 14 | 8 |
|
|
|
|
|
-| 3 | TaskCPU | 58 | 34 | 10 |
|
|
|
|
|
-| | Promedio | 27.5 | 14.25 | 6.75 |
|
|
|
|
|
-
|
|
|
|
|
-B. Throughtput:
|
|
|
|
|
-
|
|
|
|
|
-| Task | Tipo | 1 Core | 2 Core | 4 Cores |
|
|
|
|
|
-|------|-------------|--------|---------|---------|
|
|
|
|
|
-| 0 | TaskCPU | 0 | 0 | 0 |
|
|
|
|
|
-| 1 | TaskConsola | 0 | 0 | 0 |
|
|
|
|
|
-| 2 | TaskConsola | 0 | 0 | 0 |
|
|
|
|
|
-| 3 | TaskCPU | 0 | 0 | 0 |
|
|
|
|
|
-| | Promedio | 0 | 0 | 0 |
|
|
|
|
|
-
|
|
|
|
|
-AGREGAR UN CONCLUSIONE SOBRE LATENCIA Y THROUGTHPUT
|
|
|
|
|
-
|
|
|
|
|
-[^footnote]: Latencia, Cantidad de ticks en ready hasta que se ejecuta la task.
|
|
|
|
|
-[^footnote2]: Throughtput, Insert definition
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-\newpage
|
|
|
|
|
-Ejercicio 3
|
|
|
|
|
-====
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-\newpage
|
|
|