Examen Febrero 2020 - Problema 2 (a)

Examen Febrero 2020 - Problema 2 (a)

de Mathías Rodríguez Castro -
Número de respuestas: 1

Buenas, tenía una consulta vinculada al problema del asunto y a la solución presentada en las diapositivas de Lectores-Escritores (variante II). Lo dejo a continuación:

Problema Febrero 2020

En este problema se utiliza el P(mutexTS) antes del P(try) para evitar qué una vez que haya llegado un TH a hacer P(try) se deba de hacer V(try) antes de dejar el mutexTS y por tanto se despierte TH, y no otro TS, lo cuál es correcto.

Problema Lectores-Escritores (variante II)

Sin embargo, en el problema de lectores y escritores (variante II) presentado en las diapositivas, en lectores se hace primero P(try) y luego P(mutexTS) pero esto creo que es erróneo debido qué podría suceder que un lector hace P(try), luego un escritor también hace P(try) y a tal punto no se debería permitir que más lectores ingresen, ya que son posteriores al escritor, pero esto no se cumple ya que si sucede que: otros lectores llegan y hacen P(try), cuando el primer lector hace V(try) no hay garantías de qué se despierte al escritor ya que podrían despertarse otros lectores, y estos luego leerán, pero son posteriores al escritor.

Una solución que propongo para lo anterior es basarnos en lo realizado en el Problema de Febrero 2020, y realizar el P(mL) antes del P(try) ya qué antes de liberar el mL que permitiría que otros lectores intentarán entrar, se hace el V(try) de modo qué si había un escritor esperando se despierte y si no lo había simplemente libere el mutex mL.

Duda general sobre estos problemas

Cuando se menciona qué cierta entidad tiene prioridad sobre cierta otra (por ej: los TH sobre los TS en el Problema de Febrero 2020), ¿cuál de las siguientes semánticas se le da a "tener prioridad"?

  1. Si hay un TS queriendo entrar y un TH llega posteriormente entonces entra TH.
  2. Si hay "N" TS queriendo entrar y un TH llega posteriormente, entonces entran estos "N" TS y no se permite que ingresen otros TS adicionales, ingresando TH luego de estos.
Sin embargo, en ambos problemas, Problema de Febrero 2022, Lectores y Escritores (variante II) (corregido con la solución propuesta) no sucede la segunda sino más bien:

    3. Si hay un TS queriendo entrar y un TH llega posteriormente, entonces entra el TS y posteriormente el TH. Es decir, hay uno sólo queriendo ingresar a la vez, debido al mutexTS (o mL), y se le permite pasar antes que al TH (o escritor) porqué "intento" (try) ingresar antes.

Así, en ambos casos no se da la semántica 1 ni la 2, sino la 3. La duda proviene de que en la letra del Problema de Febrero 2022 se menciona "darle prioridad" y quería saber si es la semántica 3 la que debemos entender por "darle prioridad" ya que es la manera en que se lo resuelve, entendiendo la prioridad de este modo.

Saludos, Mathias.
En respuesta a Mathías Rodríguez Castro

Re: Examen Febrero 2020 - Problema 2 (a)

de Jorge Merlino -

Perdón por la demora en responder pero recién vi ahora la pregunta.

En general lo que se espera es que después de que el sistema se entera que llegó un proceso prioritario no se deje entrar a más procesos sin prioridad hasta que entre el que tiene prioridad. La definición de "el sistema se entera" es un poco variable dependiendo de la herramienta que se use pero la idea es que se modifique algún estado global que indica que hay un proceso prioritario esperando.

En los casos que vos decís el sistema se entera cuando el proceso prioritario agarra el semáforo try. Si fuera en ADA por ejemplo en general podés hacer cosas mejores dado que el 'count te permite saber si hay alguien esperando antes de que obtenga el recurso (sería tu semántica 1). Esto es porque el solo hecho de esperar en un encuentro ya cambia el estado global del sistema.

Estoy de acuerdo que agregar un mutex como en el examen de diciembre hace que potencialmente el proceso prioritario espere menos dado que no puede haber más de uno no prioritario compitiendo con él pero no cambia la idea fundamental. Hasta que no agarre el semáforo try no se le puede dar prioridad.

Por último, en la solución del examen tampoco se cumple tu semántica 3 dado que los semáforos no son FIFO y no se sabe cuando lo va a obtener el proceso prioritario.

Espero que haya quedado más claro.

Saludos