Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Los Procesosos y Caracteristicas
Los Procesosos y Caracteristicas
PROCESOS
SOP3161 Semestre 2005-I Eduardo Pea J.
Edopena
Sistemas Operativos
[ Procesos ]
Edopena
Sistemas Operativos
Prsentat ion
[ Procesos ]
Filsofos comensales
5 filsofos sentados en una mesa redonda. Cada uno tiene un plato con espagueti especialmente resbaladizo. Es tan resbaladizo que el filsofo debe ocupar dos tenedores para comerlo. Entre cada plato hay un tenedor. La vida del filsofo consta de 2 perodos alternados de pensar y comer. Cuando un filsofo siente hambre toma el tenedor de la izquierda y luego el de la derecha. Si logra tomar los dos tenedores, toma unos bocados y luego deja los tenedores en la mesa.
Edopena
Sistemas Operativos
Prsentat ion
[ Procesos ]
#define N 5 philosopher(i) int i; { while (TRUE) { think(); take_fork(i); take_fork((i+1) % N); eat(); put_fork(i); put_fork((i+1) % N); } }
Filsofos comensales
/* Nmero de filsofos */ /* Nmero de filsofo 0-4 */
/* filsofo meditando */ /* tomar tenedor de la izquierda */ /* tomar tenedor de la derecha */ /* comer */ /* dejar tenedor izquierdo en la mesa */ /* dejar tenedor derecho en la mesa */
Solucin obvia pero errnea. Suponga que los 5 filsofos toman los tenedores al mismo tiempo. Ninguno de ellos podr tomar el tenedor derecho y habr un estancamiento.
4 Sistemas Operativos
Prsentat ion
Edopena
[ Procesos ]
Filsofos comensales
Se podra modificar el programa de manera que despus de tomar el tenedor de la izquierda, el programa verifique si esta disponible el tenedor de la derecha. Si no lo est, el filsofo baja el de la izquierda, espera un tiempo y despus repite todo el proceso.
Esta proposicin tambin fracasa, aunque por una razn diferente. Si todos los filsofos dan inicio al algoritmo en forma simultnea verifican el tenedor de la izquierda luego ven que no esta disponible el de la derecha y retornan el izquierdo a la mesa, esperando, volviendo a levantar al mismo tiempo los tenedores de la izquierda y as sucesivamente. Si esto ocurre indefinidamente y no hay ningn progreso, se llama PROCESO INCOMPLETO POR FALTA DE 5 Sistemas Operativos INSUMOS.
Prsentat ion
Edopena
[ Procesos ]
Filsofos comensales
Por otro lado si los filsofos esperaran un tiempo arbitrario en lugar del mismo perodo de tiempo despus de que no pueden tomar el tenedor del lado derecho, la oportunidad de que todo siga en un ciclo cerrado hasta por una hora es pequea. En algunas aplicaciones se preferira una solucin que siempre funcione y no pueda fracasar debido a una serie improbable de nmeros seleccionados al azar. (piense lo que ocurrira en el control de la seguridad en una planta de energa nuclear).
Edopena
Sistemas Operativos
Prsentat ion
[ Procesos ]
#define N 5 #define LEFT (i-1)%N #define RIGHT (i+1)%N #define THINKING 0 #define HUNGRY 1 #define EATING 2 typedef int semaphore; int state[N];
semaphore mutex =1; semaphore s[N];
Filsofos comensales
/* Nmero de filsofos */ /* N del vecino de la izquierda de i */ /* N del vecino de la derecha de i */ /* el filsofo est meditando */ /* el filsofo intenta tomar los tenedores */ /* el filsofo est comiendo */ /* los semforos son de tipo especial int */ /* arreglo para llevar el control del estado de todos los filsofos */ /* exclusin mutua de regiones crticas */ /* un semforo por filsofo */
/* filsofo meditando */ /* tomar dos tenedores o bloquearse */ /* comer */ /* dejar dos tenedores en la mesa */
Sistemas Operativos
Prsentat ion
[ Procesos ]
take_forks(i) int i; { down(mutex); state[i]=HUNGRY; test(i); up(mutex); down(s[i]);
Filsofos comensales
/* meter en la regin crtica */ /* registrar que el filsofo i tiene hambre */ /* intentar tomar dos tenedores */ /* salir de la regin crtica */ /* bloquearse si no se tomaron los tenedores */
Edopena
Sistemas Operativos
Prsentat ion
[ Procesos ]
Filsofos comensales
test(i) int i; { if(state[i]==HUNGRY && state[LEFT]!=EATING && state[RIGHT]!=EATING) { state[i]=EATING; /* registrar que el filsofo i tiene hambre */ up(s[i]); /* desbloquearse */ }
Edopena
Sistemas Operativos
Prsentat ion
[ Procesos ]
put_forks(i) int i; { down(mutex); state[i]=THINKING; test(LEFT); test(RIGHT); up(mutex); }
Filsofos comensales
/* meter en la regin crtica */ /* filsofo ha terminado de comer */ /* ver ahora si puede comer el vecino de la izquierda */ /* ver ahora si puede comer el vecino de la izquierda */ /* salir de la regin crtica */
Edopena
10
Sistemas Operativos
Prsentat ion
Planificacin de un Proceso
Edopena
11
Sistemas Operativos
Prsentat ion