Escolar Documentos
Profissional Documentos
Cultura Documentos
CURSO: SISTEMAS OPERATIVOS. PROFESOR: Ing. Orlando Claros Vsquez. INTEGRANTES: Leiva Garca, Ivn Luis. Belln Pacheco, Jorge el DOC. Sols Crdenas, Jhonatan Will.
HUACHO 19/08/11
SISTEMAS OPERATIVOS Pgina 1
El Interbloqueo se puede definir como el bloque permanente de un conjunto de procesos que compiten por los recursos del sistema, todos los interbloqueos suponen necesidades contradictorias de recursos, por parte de dos o ms procesos. Un ejemplo clsico de interbloqueo es el interbloqueo de trfico
SISTEMAS OPERATIVOS
Pgina 2
Planteamiento. En 1965, Dijkstra plante y resolvi un problema de sincronizacin llamado el problema de la cena de los filsofos. Cinco filsofos se sientan a la mesa. Cada uno tiene un plato de espagueti. El espagueti es tan escurridizo que un filsofo necesita dos tenedores para comerlo. Entre cada dos platos hay un tenedor. La vida de un filsofo consta de periodos alternados de comer y pensar. Cuando un filsofo tiene hambre intenta obtener un tenedor para su manos izquierda y otro para su mano derecha, alzando uno a la vez y en cualquier orden. Si logra obtener los dos tenedores, come un rato y despus deja los tenedores y contina pensando. Anlisis. Debe haber el mximo nmero de filsofos comiendo, para aprovechar los tenedores, este caso slo dos porque se necesitan dos tenedores por filsofo, y slo tenemos cinco. Debe tenerse cuidado de que dos filsofos contiguos no lleguen al mismo tiempo a comer, ya que se generara un bloqueo.
Planteamiento de la solucin. Se tiene un arreglo para ver el estado del filsofo. Un filsofo slo puede comer si sus vecinos no lo hacen. Se utilizan semforos para indicar si los filsofos necesitan un tenedor y ste no est disponible, por que se procede a bloquearlo. Se toma en cuenta el vecino derecho e izquierdo de cada filsofo. Se usan generadores aleatorios.
Algoritmo
Cabe mencionar que el programa no fue 100% guiado por el algoritmo pero si existe relacin, el programa no sera presentado en lenguaje Java, por falta de conocimiento. #include prototypes.h #define N
SISTEMAS OPERATIVOS
/*nmero de filsofos*/
Pgina 3
(i-1)%N (i+1)%N 0 1 2
/*nmero del vecino izquierdo de i*/ /*nmero del vecino derecho de i*/ /*el filsofo est pensando*/ /*el filsofo intenta conseguir los tenedores*/ /*el filsofo est comiendo*/
/*los semforos son un caso particular de int*/ /*arreglo para llevar un registro del estado de
quien*/ semaphore mutex = 1;. semaphore s[N];. /*exclusin mutua para las regiones crticas*/ /*un semforo por filsofo*/
void philosopher(int i) { while (TRUE) {. think( );. take_forks(i);. eat( );. put_forks(i);. } }
/*se repite por siempre*/ /*es filsofo est pensando*/ /*obtiene dos tenedores o se bloquea*/ /*mmm, espaghetti!*/ /*coloca ambos tenedores en la mesa*/
SISTEMAS OPERATIVOS
Pgina 4
/*intenta tomar dos tenedores*/ /*sale de la regin crtica*/ /*se bloquea si no consigui los tenedores*/
void put_forks_(int i). { down (&mutex);. state [i] = THINKING;. test (LEFT);. test (RIGHT);. up (&mutex);. }
/*entra a la regin crtica*/ /*el filsofo ha terminado de comer*/ /*ve si el vecino izquierdo puede comer ahora*/ /* ve si el vecino derecho puede comer ahora*/ /*sale de la regin crtica*/
if (state[i] == HUNGRY && state [LEFT] != EATING && state[RIGHT] != EATING) { state[i] == EATING up(&a[i]); } }
SISTEMAS OPERATIVOS Pgina 5
La aplicacion planteada:
SISTEMAS OPERATIVOS
Pgina 6
SISTEMAS OPERATIVOS
Pgina 7
SISTEMAS OPERATIVOS
Pgina 8