Fernando:
Cómo estás?
Entiendo que ambas preguntas están asociadas a qué sucede al ejecutar un V de un semáforo. La operación V resulta en una system call, la cual puede o no despertar otro proceso. Si se ejecuta el V y ningún otro proceso es despertado, entonces no se volverá a llamar al scheduler y por tanto continuará ejecutando el mismo proceso que estaba ejecutando. Si por el contrario, la ejecución del V despierta a otro proceso, entonces el sistema operativo llamará al scheduler para ver a quién le corresponde ejecutar a continuación*.
En ambos puntos que planteás, al proceso que está ejecutando le queda quantum aún luego de finalizado el V, por lo tanto, si el algoritmo es round robin puro, el proceso continuará ejecutando. Si por el contrario, el algoritmo es por prioridad, el scheduler es expropiativo, y el proceso que se despierta tiene prioridad mayor, en ese caso el proceso que invocó el V perdería la CPU.
Es decir:
1)
- Ejecuta 20t
- Ejecuta el V de 5t [Se despierta otro proceso, se invoca al scheduler, se mantiene el mismo proceso en la CPU pues le quedan 5t de quantum]
- Ejecutar 5t.
- Se realiza un cambio de contexto al siguiente proceso en la lista de procesos listos.
2)
- Ejecuta 30t
- Se realiza un cambio de contexto al siguiente proceso en la lista de procesos listos.
...
...
- Eventualmente el proceso recupera la CPU y ejecutar el V (5t), pero mantiene la CPU pues le quedan 25t y luego procesa los 10t finales.
Saludos,
Federico
* Nota: si el SO tiene un algoritmo de planificación puramente round robin, podría tener sentido no realizar esta invocación al scheduler.