Problema lectores-escritores con mailbox avanzado

Problema lectores-escritores con mailbox avanzado

de Matteo Fernando Naccarato Rossi -
Número de respuestas: 2

Hola, buenas tardes,

Realizando el ejercicio 7 del práctico 4 me encontré por primera vez con el problema de manejar la prioridad con mailbox, por lo que, naturalmente, me fijé en el problema avanzado de lectores-escritores, donde se plantea el problema de la prioridad. Pero, de manera similar al caso que comenté el día de ayer con respecto al mismo problema pero con monitores, encuentro situaciones donde un lector puede acceder tranquilamente al documento a pesar de que haya un escritor a punto de hacerlo.

Por ejemplo, si el primero en ejecutar es un escritor, lo que va a hacer es obtener la prioridad, luego hace lo suyo hasta que, antes de irse, devuelve la prioridad y, por último, avisa que hay uno menos. Pero ¿qué pasa si justo después de devolver la prioridad y antes de avisar que hay uno menos pierde la CPU y llega un nuevo escritor? Lo que pasaría es que este no va a obtener prioridad, puesto que solo lo hace si no hay escritores, y esto hasta ese momento no es así, por lo que pasaría del if y, luego, justo antes de obtener el documento, puede perder la CPU y llegar un lector. Cuando esto pase, va a poder recibir la prioridad tranquilamente a pesar de que había un escritor a punto de obtener el documento.

De nuevo, como en el caso que comenté el día de ayer, entiendo que esto no es un error tan grande como tal, pues no genera deadlock ni ningún otro problema grave, pero me parece curioso que, siendo la prioridad entre procesos uno de los temas a tratar en el curso, las soluciones que proponen en el teórico no parecen reflejar tal importancia.

De cualquier forma, igual puede ser que esté entendiendo mal los temas, eso siempre es una posibilidad, y con lo complicado que es justamente este (el de la concurrencia), hay una gran posibilidad de que sea así. En dicho caso, agradecería si me despejan las dudas.

No obstante, igual se me hace raro el concepto de prioridad dentro de mailbox, pues estos funcionan como colas de mensajes. Pero si tengo varios procesos peleando por un mismo recurso, estos esperarán siempre en orden de llegada, por ser justamente colas, por lo que el concepto de prioridad como tal no le encuentro mucho sentido dentro de este ámbito.

Por ejemplo, con este mismo problema de lectores-escritores, bien podría suceder que lleguen lectores antes de que el primer escritor devuelva la prioridad, y estos lectores tendrán prioridad sobre los escritores que lleguen después. Básicamente, termina siendo una fila de espera para acceder al documento como tal y nada más. En ningún caso se ve una prioridad; los lectores y escritores van llegando y se van atendiendo según la fila de espera de estos en el mailbox de mtxprio, y ni tan así, por lo que comenté con anterioridad.

Desde ya, muchas gracias y saludos.

En respuesta a Matteo Fernando Naccarato Rossi

Re: Problema lectores-escritores con mailbox avanzado

de Matteo Fernando Naccarato Rossi -
Perdonen, releyendo nuevamente el problema me dí cuenta de que el segundo escritor no puede pasar del primer recibir, de cualquier forma, igual hay un escritor esperando antes de que lleguen nuevos lectores y este no les puede avisar que llegó antes y por lo tanto tendría el mismo problema de que se colen lectores.
En respuesta a Matteo Fernando Naccarato Rossi

Re: Problema lectores-escritores con mailbox avanzado

de Jorge Merlino -

En el contexto del curso entendemos que la prioridad solo se puede dar una vez que el proceso con prioridad tuvo alguna forma de alterar el estado global del sistema para indicar que está esperando. Antes de que eso pase no se puede saber que está esperando y por lo tanto no se le puede dar prioridad. En este caso la prioridad está dada por obtener el mensaje que está en mtxprio. Esta es la misma estrategia que se usa con semáforos y que se discutió con mas detalle en este post.

Saludos