![]() |
Problema de los filósofos comelones |
En 1965,
Dijkstra propuso y resolvió un problema de sincronización al que llamó el
problema de los filósofos comelones para
representar el problema de la sincronización de procesos en un sistema
operativo.
Cabe aclarar que la interpretación está basada
en pensadores chinos, quienes comían con dos palillos, donde es más lógico que se necesite el del comensal que
se siente al lado para poder comer.
Cinco filósofos se sientan alrededor de una mesa y
pasan su vida cenando y pensando. Cada filósofo tiene un plato de fideos y un
tenedor a la izquierda de su plato. Para comer los fideos son necesarios dos
tenedores y cada filósofo sólo puede tomar los que están a su izquierda y
derecha. Si cualquier filósofo toma un tenedor y el otro está ocupado, se
quedará esperando, con el tenedor en la mano, hasta que pueda tomar el otro
tenedor, para luego empezar a comer.
Si dos
filósofos adyacentes intentan tomar el mismo tenedor a una vez, se produce una condición de carrera: ambos compiten
por tomar el mismo tenedor, y uno de ellos se queda sin comer.
Si
todos los filósofos toman el tenedor que está a su derecha al mismo tiempo,
entonces todos se quedarán esperando eternamente, porque alguien debe liberar
el tenedor que les falta. Nadie lo hará porque todos se encuentran en la misma
situación. Entonces los filósofos se morirán de hambre. Este bloqueo mutuo se
denomina interbloqueo o deadlock.
Soluciones.
Primera
Solución
• Representar cada palillo con un semáforo
• Un
filósofo trata de tomar un palillo ejecutando una operación espera con ese
semáforo, y suelta sus palillos ejecutando la operación señal con los semáforos
apropiados.
• Inicialmente todos los elementos de palillo
están en 1
• Garantiza
que dos vecinos no estarán comiendo simultáneamente • Posibilidad de bloqueo
mutuo •Suponga que los cinco filósofos sienten hambre simultáneamente y cada
uno toma su palillo izquierdo
Posibles soluciones al problema de bloqueos
Permitir que como máximo filósofos se sienten
a la mesa cuatro filósofos
Sólo permitir que un filósofo tome sus
palillos si ambos están disponibles (dentro de la sección crítica)
Solución asimétrica è Un filósofo impar toma
primero su palillo izquierdo y luego el derecho, mientras que un filósofo par
toma primero su palillo derecho y luego el izquierdo.
Cualquier solución satisfactoria deberá evitar
la posibilidad que uno de los filósofos muera de hambre.
Una solución libre de bloqueos mutuos no
elimina necesariamente la posibilidad de inanición
Problemas de los
lectores y escritores.
Solución por monitores
Distinguir entre los tres estados en los que podría estar un filósofo è
Pensando, hambriento y comiendo
Definir el estado del mismo filósofo
Restricciones
• Sólo se permite que un escritor tenga acceso al objeto al mismo
tiempo. •Mientras el escritor esté accediendo al objeto, ningún otro proceso
lector ni escritor podrá acceder a él.
• Se permite que múltiples lectores tengan acceso al objeto, ya que ellos nunca van a modificar el contenido del mismo
• Se permite que múltiples lectores tengan acceso al objeto, ya que ellos nunca van a modificar el contenido del mismo
Un objeto se va a compartir entre varios usuarios, algunos solo quieren
leer el contenido (lectores), otros quieren actualizarlo (escritores)
Primer Problema: No se debe tener a ningún lector en espera a menos
que el escritor tenga el permiso del uso del objeto
Segundo Problema: Si un escritor está esperando acceder al
objeto, ningún otro lector puede comenzar a leer.
Sol/ Definir prioridades a lectores y escritores
Utilizado para probar las primitivas de sincronización nuevas
Muy Bien Gracias, por tu aporte!!!
ResponderEliminar