Upload
jonbonachon
View
2.366
Download
5
Embed Size (px)
Citation preview
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 1Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Sincronización de Procesos
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 2Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Semáforos
• La variable especial denominada semáforo se utiliza para señalizar
• Si un proceso está esperando una señal, este se suspende hasta que la señal haya sido enviada
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 3Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Semáforos
• Un semáforo es una variable que tiene un valor entero● Puede ser inicializado a un valor no negativo● La operación semWait decrementa el valor del
semáforo● La operación semSignal incrementa el valor del
semáforo
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 4Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Primitivas de Semáforosstruct semaphore {
int cuenta;queueType cola;
}void semWait (semaphore s) {
s.cuenta—;if (s.cuenta < 0) {
poner este proceso en s.cola;bloquear este proceso;
}}
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 5Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Primitivas de Semáforosvoid semSignal (semaphore s) { s.cuenta++; if (s.cuenta <=0) { extraer un proceso P de s.cola; poner el proceso P en la lista de listos; }}
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 6Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Exclusión Mutua Usando Semáforossemafore s = 1;void P (int i) { while (true) { SemWait (s); /* sección crítica */; SemSignal (s); /* resto */ }}void main() { paralelos (P(1), P(2), ..., P(n));}
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 7Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Semáforos en Linux
• Las funciones para trabajar con semáforos en Linux en C están incluidas en las librerías <sys/types.h>,<sys/ipc.h> y <sys/sem.h>. En particular, las funciones son semget, semop y semctl.
• Estas funciones, aunque muy potentes, son habitualmente complicadas de usar, por lo que se recomienda utilizarlas en su versión más básica, siempre que sea posible. Entre las complicaciones introducidas por estas funciones, es importante prestar atención a las siguientes:
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 8Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Semáforos en Linux
• En vez de un solo semáforo clásico representado por un entero no negativo, en realidad semget define un array de semáforos del tamaño especificado. Hay que trabajar por tanto con conjuntos de semáforos, aunque para crear un sólo semáforo necesitemos crear un array de un solo elemento.
• La creación de un semáforo es independiente de su inicialización, lo cual es especialmente peligroso ya que no se puede crear un semáforo inicializado de forma atómica. Es el programador el que debe tener cuidado de inicializar siempre los semáforos que cree.
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 9Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Monitores
• Un monitor es un módulo software• Características principales
• Las variables locales de datos son sólo accesibles por el monitor
• Un proceso entra en el monitor invocando uno de sus procedimientos
• Sólo un proceso puede estar ejecutando dentro del monitor al tiempo
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 10Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Colas de Mensajes
• Impone la exclusión mutua• Intercambia información
• send (destino, mensaje)• receive (origen, mensaje)
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 11Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Sincronización con Colas de Mensajes
• Emisor y receptor pueden o no bloquearse (esperando al mensaje)
• Envío bloqueante, recepción bloqueante• Ambos emisor y receptor se bloquean hasta que el
mensaje se entrega• Se le conoce como rendezvous
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 12Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Sincronización con Colas de Mensajes
• Envío no bloqueante, recepción bloqueante• El emisor puede continuar
• El receptor se bloquea hasta que el mensaje solicitado llegue• Envío no bloqueante, recepción no bloqueante• Ninguna de las partes tiene que esperar
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 13Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Sincronización con Colas de Mensajes
• Direccionamiento Directo• La primitiva send incluye un identificador específico
del proceso destinatario • La primitiva receive debe conocer con anticipación
de qué proceso espera el mensaje• La primitiva receive puede usar el parámetro origen
para devolver un valor cuando la operación de recepción se completa
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 14Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Sincronización con Colas de Mensajes
• Direccionamiento Indirecto: • Los mensajes se envían a una estructura de datos
compartida, que consiste en colas• Las colas se conocen como buzones (mailboxes)• Un proceso envía un mensaje al buzón apropiado y
otro proceso toma el mensaje del buzón
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 15Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Memoria Compartida en Linux
• La memoria compartida es una zona de memoria común a la que todos los procesos pueden conseguir acceso y de esta forma, lo que un proceso escribe en la memoria, es accesible al resto de procesos.
• Las funciones para trabajar con memoria compartida en Linux en C están incluidas en los includes <sys/types.h>, <sys/ipc.h> y <sys/shm.h>. En particular, las funciones que usaremos son: shmget, shmat, shmdt y shmctl.
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 16Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Problema de Sincronización (1)
• En una tienda de pájaros están teniendo problemas para tener a todos sus canarios felices. Los canarios comparten una jaula en la que hay un plato con alpiste y un columpio para hacer ejercicio. Todos los canarios quieren inicialmente comer del plato y, después columpiarse. Pero se encuentran con el inconveniente de que sólo tres de ellos pueden comer del plato al mismo tiempo y sólo uno puede columpiarse. Defina el diseño, así como los algoritmos en pseudocódigo que permitan que los canarios ejecuten concurrentemente de forma que sincronicen sus actividades usando semáforos.
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 17Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Solución (Problema 1)
Puedecomer, columpio: semáforo;
Process Canario wait (puedecomer); signal (puedecomer); wait (columpio); signal (columpio); ....End
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 18Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Solución (Problema 1)
Process PadreInitial (puedecomer, 3)Initial (columpio, 1)
// Creación de CanariosCobegin
C1,C2,C4,C5,C6,C7, ...Coend
End
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 19Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Problema de Sincronización (2)
• Implementar el seudo-código utilizando semáforos, para lograr la sincronización de tres procesos (P1, P2 y P3) de forma que se establezca el orden de ejecución P1, P3 y P2. Así, primero se ejecuta P1 y cuando finaliza P1 se puede ejecutar P3, y cuando finaliza P3 se puede ejecutar P2 y cuando finaliza P2 se puede ejecutar P1 y así sucesivamente.
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 20Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Solución (Problema 2)
Process P1 Process P2wait (finP2) wait (finP3)… ...signal (finP1) signal (finP2)
End EndProcess P3
wait (finP1)…signal (finP3)
End
Universidad Nacional Experimental de GuayanaEscuela de Ingeniería en InformáticaAsignatura: Sistemas de Operación
Página: 21Ing. Andrés R. Caniumilla
Tema: Sincronización de Procesos
Solución (Problema 2)
Process PadreInitial (FinP1, 0)Initial (FinP2, 1)Initial (FinP3, 0)Cobegin
P1;P2;P3Coend
End