|
@@ -1,25 +1,24 @@
|
|
|
\newpage
|
|
\newpage
|
|
|
# Ejercicio 9
|
|
# Ejercicio 9
|
|
|
|
|
|
|
|
-Implementamos este ejercicio utilizando:
|
|
|
|
|
|
|
+Para la implementación de este ejercicio utilizando:
|
|
|
|
|
|
|
|
- * `Map<pid, process>`
|
|
|
|
|
- * `vector<queue<pid>>`
|
|
|
|
|
|
|
+`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.
|
|
|
|
|
|
|
|
-Donde pid es `unsigned int`.
|
|
|
|
|
|
|
+`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.
|
|
|
|
|
|
|
|
-Esto nos permite:
|
|
|
|
|
|
|
+`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.
|
|
|
|
|
|
|
|
- * Poder mantener cada cola de prioridad con los PIDs que tiene asignados.
|
|
|
|
|
- * Acceso fácil/rápido al estado de cada proceso por su PID.
|
|
|
|
|
|
|
+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 dicho `Map` se almacena un `struct` con datos del proceso actual como: _pid_, _state_ y *quantum_count*, a los que se accede utilizando el _pid_ como clave.
|
|
|
|
|
|
|
+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).
|
|
|
|
|
|
|
|
-En el constructor se leen los parámetros que recibe la cantidad de ticks a asignar por quantum a cada cola (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.
|
|
|
|
|
-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 (de existir) 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.
|
|
|
|
|
|
|
+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.
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|