Implementamos este ejercicio utilizando:
Map<pid, process>vector<queue<pid>>Donde quantum y pid son unsigned int.
Esto nos permite:
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 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 dicho nucleo, si se cumplió se lo intenta mover a una cola de menor prioridad 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.
Latencia: Cantidad de ticks en ready hasta que se ejecuta la primera task. Esta métrica se puede extender para ver la latencia promedio de todos los procesos que corrió el scheduler.
Waiting time: Cantidad de ticks en ready durante toda la ejecución de un proceso.
Tiempo total de ejecución: Intervalo de ticks desde que se ejecuta un proceso hasta su terminación. --> buscar en las teóricas, la latencia del proceso puede o no ser incluida