Bladeren bron

Refactor intro ej9

Agustín Cangiani 10 jaren geleden
bovenliggende
commit
1133d2f0b9
1 gewijzigde bestanden met toevoegingen van 35 en 19 verwijderingen
  1. 35 19
      informe/9-informe.md

+ 35 - 19
informe/9-informe.md

@@ -5,29 +5,45 @@ Ejercicio 9
 
 ## Descripción del algoritmo 
 
-Este scheduler intenta alcanzar un balance entre throughput (para tareas con uso alto de recursos) y bajo waiting time (para tareas con poco uso de recursos y mucho IO).
-Las tareas priorizadas usan el CPU poco tiempo, por lo que es bueno reducir el waiting time para dar respuesta rápida.
-Las otras tareas requieren más recursos, por lo que no les afecta un waiting time mayor si eso significa obtener mas quantum.
+Este scheduler intenta alcanzar un balance entre las tareas con alto uso de recursos y 
+tareas con poco uso de recursos y mucho IO, garantizando mayor CPU a las primeras y un 
+menor waiting time para las segundas. Las tareas con menor prioridad tendrán más rápido acceso 
+al CPU pero por menos tiempo, reduciendo el waiting time y dando una respuesta más rápida. Por 
+otro lado las tareas que requieran más recursos, tendrán menos prioridad para acceder al CPU 
+pero a cambio de esto se les asignará más **Quantum** empeorando su **waiting time** pero
+mejorando el throughput.
 
 ## Implementacion
 Para la implementación de este ejercicio utilizando:
 
-`Map<pid, process>`
-En dicho `Map` se almacena un descriptor `struct` con datos del proceso actual como: _pid_, _state_ y *quantum_count*, a los que se accede utilizando el _pid_ como clave.
-
-`vector<queue<pid>>`
-En este `vector` se almacenan las distintas colas de ejecución, en las mismas se almacena solo el `pid` para poder luego consultarlo en el mapa si es necesario accederlo.
-
-`vector<uint>`
-Este vector tiene el mismo tamaño que el vector utilizado anteriormente y se utiliza para almacenar el cuantum correspondiente al índice de cada cola. Por ejemplo la cola en la posición *0* del arreglo de colas tiene el quantum almacenado en la posición *0* de este arreglo.
-
-Esto nos permite poder mantener cada cola de prioridad con los PIDs que tiene asignados e ir pasandolos de cola en cola sin tener que migrar todos los datos del proceso, ya que al mismo se accede por su PID mientras se encuentre en ejecución.
-
-En el constructor del scheduler se lee la cantidad de parámetros, con esto se inicializan los dos vectores (con las colas y los quantums) y se almacena el quantum correspondiente a cada cola segun el orden en el que se reciben. (Esto le da la 'prioridad' a cada cola).
-
-Cada vez que se carga un nuevo proceso, el mismo se aloja en la cola de mayor prioridad (La cola en la posición *0*).
-Al haber un _tick_ se controla que no se haya cumplido el _quantum_ establecido para dicha cola, si se cumplió se lo intenta mover a una cola de menor prioridad *(número más alto)* y se marca como READY.
-Al haber un _unblock_ se intenta 'premiar' a la tarea (que no utilizó completamente su quantum antes de ser desalojada), moviéndola a una cola de mayor prioridad.
+- `Map<pid, process>`: En dicho `Map` se almacena un descriptor `struct` con datos del 
+proceso actual como: _pid_, _state_ y *quantum_count*, a los que se accede utilizando 
+el _pid_ como clave.
+
+- `vector<queue<pid>>`: En este `vector` se almacenan las distintas colas de ejecución, 
+en las mismas se almacena solo el `pid` para poder luego consultarlo en el mapa si es 
+necesario accederlo.
+
+- `vector<uint>`: Este vector tiene el mismo tamaño que el vector utilizado anteriormente 
+y se utiliza para almacenar el cuantum correspondiente al índice de cada cola. Por ejemplo 
+la cola en la posición *0* del arreglo de colas tiene el quantum almacenado en la posición *0* 
+de este arreglo.
+
+Esto nos permite poder mantener cada cola de prioridad con los PIDs que tiene asignados e ir 
+pasandolos de cola en cola sin tener que migrar todos los datos del proceso, ya que al mismo se 
+accede por su PID mientras se encuentre en ejecución.
+
+En el constructor del scheduler se lee la cantidad de parámetros, con esto se inicializan los 
+dos vectores (con las colas y los quantums) y se almacena el quantum correspondiente a cada 
+cola segun el orden en el que se reciben. (Esto le da la 'prioridad' a cada cola).
+
+Cada vez que se carga un nuevo proceso, el mismo se aloja en la cola de mayor prioridad 
+(La cola en la posición *0*).
+Al haber un _tick_ se controla que no se haya cumplido el _quantum_ establecido para dicha 
+cola, si se cumplió se lo intenta mover a una cola de menor prioridad *(número más alto)* y 
+se marca como READY.
+Al haber un _unblock_ se intenta 'premiar' a la tarea (que no utilizó completamente su quantum 
+antes de ser desalojada), moviéndola a una cola de mayor prioridad.
 
 
 ## Casos de prueba