Você está na página 1de 9

2011

UNJFSC Ivan Luis

[LA CENA DE LOS GRANDES FILOSOFOS]


PROBLEMA CLASICO DE INTERBLOQUEO E INANICION

UNIVERSIDAD NACIONAL JOSE FAUSTINO SANCHEZ CARRION FACULTAD DE INGENIERIA


ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS

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

El problema de la cena de los filsofos

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

#define LEFT #define RIGHT

(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*/

#define THINKING #define HUNGRY #define EATING

typedef int semaphore; int state[N]. cada

/*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);. } }

/*i: de cul filsofo se trata (desde 0 hasta N-1)*/

/*se repite por siempre*/ /*es filsofo est pensando*/ /*obtiene dos tenedores o se bloquea*/ /*mmm, espaghetti!*/ /*coloca ambos tenedores en la mesa*/

void takes_forks(int i). {

/*i: de cul filsofo se trata (desde 0 hasta N-1)*/

SISTEMAS OPERATIVOS

Pgina 4

down (&mutex);. state [i] = HUNGRY;.

/*entra a la regin crtica*/ /*registra el hecho de que el filsofo i tiene hambre*/

test (i). up(&mutex);. down (&s[i]);. }

/*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);. }

/*i: cul filsofo se trata (desde 0 hasta N-1)*/

/*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*/

void test(int i). {

/* i: cul filsofo se trata (desde 0 hasta N-1)*/

if (state[i] == HUNGRY && state [LEFT] != EATING && state[RIGHT] != EATING) { state[i] == EATING up(&a[i]); } }
SISTEMAS OPERATIVOS Pgina 5

La aplicacion planteada:

Dsad Sadf Sd F sdaf

SISTEMAS OPERATIVOS

Pgina 6

SISTEMAS OPERATIVOS

Pgina 7

SISTEMAS OPERATIVOS

Pgina 8

Você também pode gostar