You are on page 1of 71

CATEDRA SISTEMAS OPERATIVOS II INGENIERA EN INFORMTICA

RUBEN CASTAO - CARLOS MANUEL TOLEDO


cmtoledo@dachary.edu.ar www.dachary.edu.ar

CONCURRENCIA

Introduccin Dificultades Grados de interaccin Problemas de la exclusin mutua (Interbloqueos, Inanicin)

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 2

Intercalacin Vs Superposicin:

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 3

INTERPROCESS COMUNICATION

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 4

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)

Implementadas por el sistema operativo

Implementadas por el hardware

Implementadas por el lenguaje de programacin

Monitores

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 5

Soluciones para dos procesos

Variable cerradura Alternancia estricta Solucin de Peterson

Algoritmo de la panadera Semforos Monitores Soluciones para varios procesos Mensajes TSL, evaluar y asignar, intercambiar

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 6

OTRAS HERRAMIENTAS DE COMUNICACIN

PIPES (Tuberas) MEMORIA COMPARTIDA


Slo sirve para comunicar datos, no para sincronizar, salvo si se ocupa en forma combinada con una herramienta de sincronizacin, por ejemplo, semforos para la sincronizacin de procesos independientes, no hilos.

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.

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 7

CONDICIN DE COMPETENCIA Y EXCLUSION MUTUA

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 8

EJEMPLO: Spooler de una impresora

B
OUT IN

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 9

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

SI ALGO PUEDE FALLAR FALLAR.


LEY DE MURPHY

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 11

SOLO CUANDO EXISTEN OPERACIONES DE ESCRITURAS SE DEBE BRINDAR EXCLUSIN MUTUA

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 12

SECCIONES CRTICAS

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 13

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.

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 14

P0

P1

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 15

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 16

Requisitos que debe cumplir una solucin:


EXCLUSIN MUTUA: Si un proceso P1 se est ejecutando en su seccin crtica, entonces ningn otro proceso se puede estar ejecutando en la suya. PROGRESO: Si ningn proceso se est ejecutando en su SC y hay otros procesos que desean entrar en las suyas, entonces slo aquellos procesos que no estn se estn ejecutando en su seccin restante pueden participar de la decisin de cul ser el siguiente en entrar en la SC y esta seleccin no puede postergarse indefinidamente. ESPERA LIMITADA: Debe haber un lmite en el nmero de veces que se permite que los dems proceso entren en su seccin crtica despus de que un proceso haya efectuado una solicitud para entrar en la suya y antes de que se conceda esa solicitud.
CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 17

AUNQUE SE CONSIDERA QUE LOS PROCESOS SE EJECUTAN A UNA VELOCIDAD NO NULA, NO SE PUEDEN HACER SUPOSICIONES ACERCA DE LA VELOCIDAD DE EJECUCIN

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 18

PROBLEMA DE LOS PRODUCTORES-CONSUMIDORES

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 19

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 20

#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); } }

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 21

SOLUCIONES IMPLEMENTADAS POR EL PROGRAMADOR

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 22

SOLUCIONES PARA DOS PROCESOS:


- Variable cerradura espero sc == 0? sc = 1 entro SC - Alternancia estricta sc = 0

i entra SC

turno == j?

j entra SC turno = i

turno = j
CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO

23

- Variable cerradura

arreglo[i]=T; while(arreglo[j]; ; SECCION CRITICA arreglo[i]=F;

T0 arreglo[i]=T; T1 arreglo[j]=T;

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 24

- 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;

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 25

SOLUCION PARA VARIOS PROCESOS


(ALGORITMO DE LA PANADER PANADERA)

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.

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 26

SOLUCION PARA VARIOS PROCESOS


(ALGORITMO DE LA PANADER PANADERA)

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

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 28

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

/*almacena 0 en flag permitiendo que otros procesos ingresen a su SC*/ /*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

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 32

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.

void wait(int *s){ while(*s<=0){ ; (*s)++; } Disjkstra(1965)

void signal(int *s){ (*s)++; }

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 33

Espera activa (cerradura giratoria) Implementacin Con bloqueos

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 34

PROGRAMACIN DE IPC CON POSIX

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 35

HERRAMIENTAS IPC DISPONIBLES EN LINUX PIPES SEMFOROS

SYS-V

MENSAJES MEMORIA COMPARTIDA SEALES

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.

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 37

EJEMPLO: key_t miclave; miclave = ftok("/tmp/miaplic", 'a'); key_t miclave; mykey = ftok(".", 'a');

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 38

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

ipcrm <msg | sem | shm> <IPC ID>

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 39

SEMFOROS

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 40

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.

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 41

LLAMADAS AL SISTEMAS PARA EL MANEJO DE SEMFOROS

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 42

SEMFOROS: LLAMADAS AL SISTEMA

LLAMADA AL SISTEMA: semget();


Se usa para crear un nuevo conjunto o acceder a uno existente.

int semget ( key_t key, int nsems, int semflg );

XITO IDENTIFICADOR IPC RETORNA FALLO -1

errno= EACCESS, EEXIST, EIDRM, ENOENT, ENOMEM,ENOSPC


CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 43

SEMFOROS: LLAMADAS AL SISTEMA


key Es el valor clave (en nuestro caso devuelto por la llamada a ftok) IPC_PRIVATE Crea un semforo privado que no secomparte. nsems Nmero de semforos a crear semflg IPC_CREAT Crea el juego de semforos si no existe ya en el ncleo. IPC_EXCL Al usarlo con IPC CREAT, falla si el conjunto de semforos existe ya. Si se usa IPC CREAT solo, semget(), bien devuelve el identificador del semforo para un conjunto nuevo creado, o devuelve el identificador para un conjunto que existe con el mismo valor clave. No se usa IPC_EXCL solo. IPC_EXCL || IPC_CREAT Permisos Decide quien puede acceder al semforo y de que modo puede hacerlo
CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 44

SEMFOROS: LLAMADAS AL SISTEMA

int semget ( IPC_PRIVATE, 1, 0666 );

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 45

SEMFOROS: LLAMADAS AL SISTEMA

LLAMADA AL SISTEMA: semop() int semop (int semid, struct sembuf *operacion, unsigned nroOper);

XITO 0 RETORNA FALLO -1

errno =E2BIG, EACCESS, EAGAIN, EFAULT, EIDRM, EINTR, EINVAL, ENOMEM, ERANGE

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 46

semid

SEMFOROS: LLAMADAS AL SISTEMA


Es el valor clave (en nuestro caso devuelto por una llamada a semget).

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

= 1 signal sem_op = -1 wait


nroOperaciones cantidad de operaciones definidas en el arreglo
CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 47

SEMFOROS: LLAMADAS AL SISTEMA

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 );

XITO > 0 RETORNA FALLO -1

errno = EACCESS, EFAULT, EIDRM, EINVAL, EPERM, ERANGE

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 48

SEMFOROS: LLAMADAS AL SISTEMA


semid Es el valor clave (en nuestro caso devuelto por una llamada a semget). cmd Especifica el comando para ser realizado sobre el objeto IPC . Obtiene la estructura semid ds de un conjunto y la guarda en la direccin del argumento buf en la unin semun. SETVAL Coloca el valor de un semforo individual con el miembro val de la unin. IPC_RMID Elimina el conjunto de semforos. Otras operaciones: IPC_STAT IPC_SET GETALL GETNCNT GETPID GETVAL GETZCNT SETALL

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 49

SEMFOROS: LLAMADAS AL SISTEMA


arg apunta a una unin tipo semun que contiene lo siguientes campos: val Se usa con el comando SETVAL, para indicar el valor a poner en e l semforo. buf Se usa con los comandos IPC STAT/IPC SET. Es como una copia de la estructura de datos interna que tiene el ncleo para los semforos. array Puntero que se usa en los comandos GETALL/SETALL. Debe apuntar a una matriz de nmeros enteros donde se ponen o recuperan valores de los semforos.

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 50

CREAR 4 FUNCIONES (CREAR E INICIALIZAR, UP, DOWN Y ELIMINAR) PARA EL MANEJO DE SEMFOROS Y AGRUPARLAS EN UN ARCHIVO DE CABECERA

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 51

PROBLEMAS CLSICOS DE SINCRONIZACIN

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 52

PROBLEMA DE LOS PRODUCTORES-CONSUMIDORES

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 53

PROBLEMAS CLASICOS DE SINCRONIZACIN

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 54

PROBLEMAS CLASICOS DE SINCRONIZACIN

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 55

PROBLEMAS CLASICOS DE SINCRONIZACIN

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 56

PROBLEMAS CLASICOS DE SINCRONIZACIN

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 57

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); } }

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 58

PROBLEMA CLASICO LA CENA DE LOS FILSOFOS

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 59

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

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 60

SOLUCIN CORRECTA

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 61

#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); } }

PROBLEMAS CLASICOS DE SINCRONIZACIN


5 1 (i-1) %N (i+1) %N 0 1 2

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 62

PROBLEMAS CLASICOS DE SINCRONIZACIN


void take_forks(int i){ wait(&mutex); state[i] = HAMBRIENTO; test (i); signal(&mutex); wait(&s[i]); } void put_forks(int i){ wait(&mutex); state[i] = PENSANDO //El filsofo ha terminado de comer test(LEFT); test(RIGHT); signal(&mutex); } void test(int i){ if(state[i] == HAMBRIENTO && state[LEFT] != COMIENDO && state[RIGHT] != COMIENDO){ state[i] == COMIENDO; signal(&s[i]); } }
CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 63

EL PROBLEMA DEL BARBERO DORMILN

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 64

#include prototypes.h #define CHAIRS 5 typedef int semaphore; semaphore customers = 0; semaphore barbers = 0; semaphore mutex = 1; int waiting = 0;

PROBLEMAS CLASICOS DE SINCRONIZACIN


// Silla para los clientes

// Nro de clientes que esperan // Nro de barberos que esperan clientes // Nro de clientes que estn esperando

void barber(void){ while(TRUE){ wait(&customers); wait(&mutex); waiting--; signal(&barbers); signal(&mutex); cut_hair()

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

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 65

PROBLEMAS CLASICOS DE SINCRONIZACIN


void customer(void){ wait(&mutex); if(waiting < CHAIRS){ waiting++; signal(&customers); signal(&mutex); down(&barbers) get_haircut() }else{ signal(&mutex); } }

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 66

EL PROBLEMA DEL PRODUCTOR-CONSUMIDOR SOLUCIN CON MENSAJES

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 67

PROBLEMAS CLASICOS DE SINCRONIZACIN


#include prototypes.h #define N 100 #define MSIZE 4 typedef int message[MSIZE]; void producer(void){ int item; message m; while(TRUE){ produce_item(&item); receive(consumer, &m); // Nro de espacios en el buffer // Tamao del mensaje

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

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 68

PROBLEMAS CLASICOS DE SINCRONIZACIN


void consumer(void){ int item, i; message m; for(i = 0; i<N; i++) send(producer, &m); while(TRUE){ receive(producer, &m); // Envo N mensajes vacos

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

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 69

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.-

CATEDRA SISTEMAS OPERATIVOS II AO 2006 CARLOS MANUEL TOLEDO 71

You might also like