Está en la página 1de 5

Instituto Tecnolgico Superior de Teposcolula

Ingeniera en Sistemas Computacionales

ASIGNATURA:
Sistemas Operativos
ASESOR:
Ing. Antonio Garca Cruz
PRESENTA:
Elioena Garca Garca
GRUPO:
3 B
TRABAJO:
Ejercicio Problema de la cena de los filsofos

FECHA DE ENTREGA:
10 de Octubre del 2014

San Pedro y San Pablo Teposcolula, Oaxaca.

Edsger Disjksta naci el 11 de Mayo de 1930 en el pas de Holanda y muri el 2


de Agosto del 2002 en el mismo pas, estudio fsica en la universidad de Leiden y
trabajo como investigador a principios de 1970 y una de sus atribuciones es el
camino ms corto o tambin es conocido como algoritmo de Disjksta.
En1965 Disjksta planteo y resolvi sincronizacin de procesos en un sistema
operativo la que llamo cena de filsofos, desde entonces quien quiera que haya
inventado una primitiva de sincronizacin ms se ha sentido obligada a demostrar
la maravillosa que es mostrar la forma tan elegancia que resuelve el problema de
la cena de filsofos.
rase una vez cinco filsofos que vivan juntos. La vida de cada filsofo consista
principalmente en pensar y comer y, tras aos de pensar, todos los filsofos se
haban puesto de acuerdo en que la nica comida que contribua a sus esfuerzos
pensadores eran espaguetis.
Los preparativos de la comida eran simples: una mesa redonda en la que haba
una gran fuente de espaguetis, cinco platos (uno para cada filsofo) y cinco
tenedores (cada filsofo necesitara dos tenedores para comer los espaguetis).

EL PROBLEMA ES EL SIGUIENTE:
Inventar una rutina (algoritmo) que permita comer a los filsofos. El algoritmo debe
satisfacer la exclusin mutua (dos filsofos no pueden emplear el mismo tenedor a
la vez), adems de evitar el interbloqueo y la inanicin.
Exclusin mutua es la capacidad de prohibir a los dems procesos realizar una
accin cuando un proceso haya obtenido el permiso.
Para el problema de los filsofos se debe lograr que 2 filsofos no puedan
emplear el mismo tenedor a la vez.
Interbloqueo o deadlock es un bloqueo permanente de un conjunto de procesos
que compiten por los recursos del sistema o bien se comunican unos con otros.
En este caso todos los filsofos estn hambrientos al mismo tiempo, todos
se sientan, todos toman el tenedor a su izquierda y todos intentar tomar el
otro tenedor que no estar.
La inanicin es una situacin similar al interbloqueo pero las causas son
diferentes.
En el interbloqueo, dos procesos llegan a un punto muerto (se bloquean) cuando
cada uno de ellos necesita un recurso que es ocupado por el otro. En cambio, en
este caso, uno o ms procesos estn esperando recursos ocupados por otros
procesos que no se encuentran necesariamente bloqueados.

SOLUCIN:
Utiliza un vector, estado, para llevar un registro de la actividad de un filsofo:si
est comiendo, pensando o hambriento (estado que indica que quiere agarrarlos
tenedores). Un filsofo puede comer nicamente si los vecinos no estncomiendo.
Los vecinos del i-simo filsofo se definen en las macros IZQ y DER.En otras
palabras, si i= 2, entonces IZQ = 1, y DER = 3.El programa utiliza un vector de
semforos, uno por filsofo, de forma que losfilsofos hambrientos puedan
bloquearse si los tenedores necesarios estnocupados. Observe que cada
proceso ejecuta el procedimiento filsofo comoprograma principal, pero los dems
procedimientos, agarrar_tenedores, dejar_tenedores y prueba, son procedimientos
ordinarios y no procesos separados.
void agarrar_tenedores(int i) //i: de que folsofo se trata (desde 0 hasta N-1)//
{wait(&exmutua);

//entra en la seccin critica//

estado[i]=HAMBRIENTO;
prueba(i);
signal(&exmutua);
wait(&s[i]);

//registra el hecho de que el folosofo i tiene hambre//


//intenta agarrar dos tenedores//
//sale de la seccin critica//

//se bloque si no consigui los tenedores//

}
void dejar_tenedores(int i) //i: de que folsofo se trata (desde 0 hasta N-1)//
{wait(&exmutua);
estado[i]=PENSANDO;

//entra en la seccin critica//


//registra el hecho de que el folosofo i ha dejado de comer/

prueba(IZQ);

//comprueba si el vecino IZQUIERDO puede comer ahora//

prueba(DER);

//comprueba si el vecino DERECHO puede comer ahora//

signal(&exmutua);

//sale de la seccin critica//

}
void prueba(int i) //i: de que folsofo se trata (desde 0 hasta N-1)//
{if (estado [i]==HAMBRIENTO && estado[IZQ] != COMIENDO && estado[DER] != COMIENDO )
{estado[i]=COMIENDO;
signal(&s[i]); }}

CONCLUSIN
El problema de la cena de filsofos es til para modelar procesos que compiten
por el acceso exclusivo a un nmero ilimitado de recursos, como una unidad de
cinta, u otro dispositivo de entrada y salida.
De la misma manera el problema modela el concepto de concurrencia, es decir,
dos filsofos al momento de agarrar al mismo tiempo dos tenedores, al mismo
tiempo se genera un bloqueo por que compiten por el mismo recurso en este caso
por el mismo tenedor. Simula el mtodo de Round Robin (RR), porque a cada
proceso (filsofo) se le da un determinado tiempo, sino termina, se forma en la
lista de listos (vuelve a esperar su turno), el CPU es para el siguiente proceso y
as hasta que termine la ejecucin.