Professional Documents
Culture Documents
CONCURRENCIA
Intercalacin Vs Superposicin:
INTERPROCESS COMUNICATION
Algoritmo de la panadera Implementadas por el programador Alternancia estricta Variable cerradura Semforos Colas de mensajes Inhabilitacin de las interrupciones Evaluar y asignar (comparar y fijar) Intercambiar TSL (Test and Set Lock)
Monitores
Algoritmo de la panadera Semforos Monitores Soluciones para varios procesos Mensajes TSL, evaluar y asignar, intercambiar
SEALES
Evento que debe ser procesado y que puede interrumpir el flujo normal de un programa. Una seal se pude capturar o ignorar. Alarma Seal que es activada por los temporizadores del sistema.
B
OUT IN
CONDICIN DE COMPETENCIA: En algunos SO los procesos que trabajan juntos comparten con frecuencia un espacio comn para almacenamiento (MP, archivo, etc), en el que cada uno puede leer o escribir. La actualizacin sin restricciones de variables compartidas puede conducir a inconsistencias. Tales errores suelen ser dependiente de la temporizacin especfica y del modo de entrelazarse las acciones de los procesos. Las situaciones como sta en que dos o ms procesos utilizan recursos compartidos y el resultado final depende de quin ejecuta qu y en qu momento, recibe el nombre de condicin de competencia.
Los errores introducidos por la concurrencia pueden ser extremadamente difciles de detectar, reproducir y depurar.
CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 10
SECCIONES CRTICAS
SECCIN CRITICA:
Considere un sistema compuesto por n procesos {P0, P1, ..., Pn-1}. Cada proceso tiene un segmento de cdigo, llamado seccin crtica, en la cual el proceso puede estar modificando variables comunes, actualizando una tabla, escribiendo un archivo, etc. La caracterstica importante del sistema es que, cuando un proceso del conjunto se ejecuta en su seccin crtica, no se permite que ningn otro proceso se ejecute en su seccin. De esta manera, la ejecucin de las secciones crticas de los proceso es mutuamente excluyentes en el tiempo.
P0
P1
AUNQUE SE CONSIDERA QUE LOS PROCESOS SE EJECUTAN A UNA VELOCIDAD NO NULA, NO SE PUEDEN HACER SUPOSICIONES ACERCA DE LA VELOCIDAD DE EJECUCIN
#include prototypes.h #define TRUE -1 #define N 100 int count = 0; void producer(){ int item; while (TRUE){ produce_item(&item); if (count == N) sleep() enter_item(item); count++; if(count == 1) wakeup(consumer) } } void consumer(){ int item; while (TRUE){ if(count == 0) sleep(); remove_item(&item); count++; if(count == (N-1)) wakeup(producer); consumer_item(item); } }
i entra SC
turno == j?
j entra SC turno = i
turno = j
CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO
23
- Variable cerradura
T0 arreglo[i]=T; T1 arreglo[j]=T;
- Solucin de Peterson
Primera solucin T. Dekker (Matemtico Holandes) Peterson (1981) Turnos + arreglo arreglo[i]=T; turno=j; while(arreglo[j] && turno==j); ; SECCION CRITICA arreglo[i]=F;
Estructuras compartidas: int eleccin[N]=F; int nmero[N]=0; Al principio a estas estructuras se le asigna un valor inicial FALSO y 0. (a,b) < (c,d) si a<c o si a=c y b<d max(a0, a1, ..., an-1) es un nmero k, tal que k>=ai para todo i.
eleccin[i] = T; nmero[i]=max(nmero[0], nmero[1], ..., nmero[n-1]) + 1; eleccin[i]=F; for(j=0,j<=n-1,j++){ while (eleccin[j]) ; while(nmero[j]!=0 && (nmero[j],j) < (nmero[i],i) ; } SECCIN CRITICA nmero[i]=0; SECCIN RESTANTE
CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 27
HARDWARE DE SINCRONIZACIN
HW DE SINCRONIZACIN
La caracterstica es que se ejecutan atmicamente, si dos instrucciones evaluar_asignar se ejecutan simultneamente, lo harn secuencialmente siguiendo un orden arbitrario. Evaluar y asignar: int evaluar_asignar(int *objetivo) { int temp; temp = *objetivo; *objetivo = T; return temp;
} Para resolver el problema de la SC se declara una variable cerradura en falso y luego se cambia el contenido con evaluar y asignar.
CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 29
HW DE SINCRONIZACIN Intercambiar: void intercambiar(int *a, int *b){ int * temp; temp = a; a=b; b=temp; } cerradura = F; clave= V; { intercambiar(cerradura, clave); }while(clave==F); SECCIN CRITICA cerradura=F;
CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 30
HW DE SINCRONIZACIN Instruccin TSL (Test and Set Lock) enter_region: tsl register, flag cmp register, #0 jnz enter_region ret leave_region mov flag, #0 ret
/*copia flag al registro y hace flag=1*/ /*pregunta si flag == 0 */ /*si era distinto de cero la cerradura estaba establecida por lo que hay que hacer un ciclo*/ /*caso contrario retorna*/
Cierra el bus de memoria. Inconveniente: espera ocupada (el proceso queda esperando hasta obtener el permiso).
CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 31
SEMFOROS
Un semforo S es una variable entera a la que, salvo por la asignacin de valores iniciales, slo se puede acceder mediante dos operaciones atmicas: espera (wait) y seal (signal) o bien UP y DOWN. Originalmente se las llamaba P y V, del Holands, comprobar e incrementar.
SYS-V
BSD
SOCKETS
Los pipes, mensajes y memoria compartida proporcionan un medio de comunicacin de datos entre procesos, mientras que los semforos y las seales se usan para provocar acciones en otros procesos.
CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 36
CLAVES IPC FUNCIN DE LIBRERA: ftok(); PROTOTIPO: key_t ftok ( char *nombre, char proj ); RETORNA: nueva clave IPC si hay xito. -1 si no hubo xito, dejando errno con el valor de la llamada stat()
La clave del valor devuelto de ftok () se genera por la combinacin del nmero del i-nodo y del nmero menor de dispositivo del archivo argumento, con el carcter identificador del proyecto del segundo argumento. Este no g arantiza la unicidad, pero una aplicacin puede comprobar las colisiones y reintentar la generacin de la clave.
EJEMPLO: key_t miclave; miclave = ftok("/tmp/miaplic", 'a'); key_t miclave; mykey = ftok(".", 'a');
El comando ipcs ipcs -q: Mostrar solo colas de mensajes ipcs -s: Mostrar solo los semforos ipcs -m: Mostrar solo la memoria compartida ipcs --help: Otros argumentos
El comando ipcr
SEMFOROS
SEMFOROS
Un semforo S es una variable entera a la que, salvo por la asignacin de valores iniciales, slo se puede acceder mediante dos operaciones atmicas: espera (wait) y seal (signal) o bien UP y DOWN. Originalmente se las llamaba P y V, del Holands, comprobar e incrementar.
Son a menudo considerados como el ms difcil asir de los tres tipos de objetos Sistema V IPC.
LLAMADA AL SISTEMA: semop() int semop (int semid, struct sembuf *operacion, unsigned nroOper);
errno =E2BIG, EACCESS, EAGAIN, EFAULT, EIDRM, EINTR, EINVAL, ENOMEM, ERANGE
semid
operacion Puntero a un array de operaciones para que se ejecuta en el conjunto de semforo, mientras el tercer argumento apunta a un array del tipo sembuf. Se declara esta estructura en linux/sem.h como sigue: struct sembuf { ushort sem_num; /* posicin en el array */ short sem_op; /* operacin del semforo */ short sem_flg; /* flags de la operacin */ }; sem_num Nmero de semforo sobre el que desea actuar sem_op Operacin a realizar (positiva, negativa o cero) sem_flg Flags (parmetros) de la operacin
LLAMADA AL SISTEMA: semctl(); Se usa para desempear operaciones de control sobre un conjunto de semforo.
int semctl ( int semid, int semnum, int cmd, union semun arg );
CREAR 4 FUNCIONES (CREAR E INICIALIZAR, UP, DOWN Y ELIMINAR) PARA EL MANEJO DE SEMFOROS Y AGRUPARLAS EN UN ARCHIVO DE CABECERA
PROBLEMAS CLASICOS DE SINCRONIZACIN #include prototypes.h #define TRUE -1 #define N 100 int count = 0; void producer(){ int item; while (TRUE){ produce_item(&item); if (count == N) sleep() enter_item(item); count++; if(count == 1) wakeup(consumer) } } void consumer(){ int item; while (TRUE){ if(count == 0) sleep(); remove_item(&item); count++; if(count == (N-1)) wakeup(producer); consumer_item(item); } }
PROBLEMAS CLASICOS DE SINCRONIZACIN #include prototypes.h #define N #define TRUE void philosopher(int i) { while(TRUE){ think(); take_fork(i); take_fork((i+1) % N); eat(); put_fork(i) put_fork((i+1) % N) } }
5 1
// Dice que piensa // Toma el palillo izquierdo // Toma el palillo derecho // Come // Dejo palillo izquierdo // Dejo palillo derecho
SOLUCIN CORRECTA
#include prototypes.h #define N #define TRUE #define LEFT #define RIGHT #define PENSANDO #define HAMBRIENTO #define COMIENDO typedef int semaphore; int state[N]; semafore mutex = 1; semaphore s[N]; void philosopher(int i){ while(TRUE){ think(); take_forks(i); eat(); put_forks(i); } }
#include prototypes.h #define CHAIRS 5 typedef int semaphore; semaphore customers = 0; semaphore barbers = 0; semaphore mutex = 1; int waiting = 0;
// Nro de clientes que esperan // Nro de barberos que esperan clientes // Nro de clientes que estn esperando
// Se va a dormir si # de clientes =0 // Entra a la SC // Decrementa el contador de clientes en espera // Barbero listo para cortar el pelo // Libera a waiting
// Buffer
// Genero algo // Espero que llegue un // mensaje vaco build_message(&m, item); // Construyo el mensaje // para enviarlo send(consumer, &m); // Envo el elemento al consumidor
// Obtiene el elemento // enviado por el productor extract_item(&m, &item); // Retira el elemento del // mensaje send(producer, &m); // Enva la autorizacin de uno ms consumer_item(item); // Consume el elemento
BIBLIOGRAFA
Sistemas Operativos Modernos Andrew S Tanenbaum Editorial Prentice Hall, Mxico 1993 Sistemas Operativos, Conceptos bsicos Abraham Silberschatz - James L. Peterson - Peter B. Galvin Editorial Addison Wesley Longman, Mxico 1998. Sistemas Operativos Abraham Silberschatz - Peter B. Galvin Editorial Addison Wesley Longman Sistemas Operativos, Diseo e implementacin Andrew S. Tanenbaum - Albert S. Woodhull Editorial Prentice Hall Sistemas Operativos, Una visin aplicada Jess Carretrero Prez - Pedro de Miguel Anasagasti - Flix Garca Carballerira Fernando Prez Costoya Editorial McGraw Hill, Espaa 2001
CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 70
Sistemas Operativos William Stallings Editorial Prentice Hall, Espaa 1998.Advanced Linux Programming Mark Mitchell, Jeffrey Oldham, and Alex Samuel Editorial New Riders, USA 2001.Programacin en Linux al descubierto Kurt Wall Segunda edicin Prentice-Hall. Espaa 2001.Programacin en Linux con ejemplos Kurt Wall Prentice-Hall, Per 2000.-