Sincronización de Procesos

28
Sincronización de Procesos M.C. Juan Carlos Olivares Rojas

description

Sincronización de Procesos. M.C. Juan Carlos Olivares Rojas. Agenda. El Problema de la Sección Crítica Sincronización de Hardware Semáforos Regiones crítica. Agenda. Monitores Deadlocks. El Problema de la Sección Crítica. - PowerPoint PPT Presentation

Transcript of Sincronización de Procesos

Page 1: Sincronización de Procesos

Sincronización de Procesos

M.C. Juan Carlos Olivares Rojas

Page 2: Sincronización de Procesos

Agenda

El Problema de la Sección Crítica

Sincronización de Hardware

Semáforos

Regiones crítica

Page 3: Sincronización de Procesos

Agenda

Monitores

Deadlocks

Page 4: Sincronización de Procesos

El Problema de la Sección Crítica• Lo importante en un problema de compartición

de recursos, no es la compartición del recurso en sí, sino el mecanismo de protección para poder acceder de manera controlada y equitativa al recurso.

• La sección crítica es la parte de código que se desea compartir con otros procesos concurrentes. Esta región debe ser en algunos casos mutuamente excluyente (mutex).

Page 5: Sincronización de Procesos

El Problema de la Sección Crítica• En algunos casos como en las lecturas, el acceso

concurrente a un recurso no tiene mayor complicaciones.

• En otros casos como en la escritura, se debe de controlar el acceso, ya que no hacerlo podría causar muchos problemas.

• Los recursos se pueden compartir dinámicamente (intercalados) y estáticamente (exclusivo).

Page 6: Sincronización de Procesos

Sincronización de Hardware• La mejor forma de realizar sincronización de

proceso es a través de mecanismos de hardware.

• La gran mayoría de microprocesadores que permiten multitarea tienen esquemas robustos de protección para la concurrencia de procesos.

• Se puede contar con registro base y límite para el acceso controlado a los recursos, o bien esquemas de prioridad.

Page 7: Sincronización de Procesos

Semáforos• Desafortunadamente tener mecanismos de

sincronización en hardware es sumamente costoso. Por este motivo la inmensa mayoría de los métodos de compartición de recursos se hacen a nivel de software.

• Cualquier recurso compartido en una computadora está asociado a una localidad de memoria, por este motivo la protección de memoria juega un papel muy importante en la sincronización de procesos

Page 8: Sincronización de Procesos

Semáforos• Los semáforos son mecanismos que permiten

sincronizar procesos para prevenir colisiones cuando uno o más procesos solicitan simultáneamente un recurso.

• Dijsktra los define como un objeto tipo entero en los cuales se puede aplicar dos operaciones: P (Proberen, comprobar) y V (Verhogen, incrementar), donde P sirve para obtener el recurso y V para liberarlo.

Page 9: Sincronización de Procesos

Semáforos• Los semáforos son un mecanismo de IPC

estandarizado por POSIX.

• Todos los mecanismos IPC tienen una entrada en una tabla especial con una llave definida por el usuario.

• Los posibles valores de la llave son IPC_PRIVATE, IPC_CREATE, IP_EXECL, entre otros.

Page 10: Sincronización de Procesos

Semáforos• Cada entrada de la tabla tiene un registro de

permisos (rw), información de estado y llamadas de control.

• Las llaves son del tipo key_t. Para crear una llave se utiliza:

#include <types.h>#include <sys/ipc.h>key_t ftok(path, id)

Page 11: Sincronización de Procesos

Semáforos• Las operaciones sobre un semáforo son semget

para crear un semáforo o habilitar uno existente, semctl para realizar operaciones de control e inicialización, semop para realizar operaciones P y V.

#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>int semget(key, nsems, semflg)

Page 12: Sincronización de Procesos

Semáforos

int llave, semid;if((llave= ftok(“auxiliar”, ‘K’)) ==(key_t)-1)/*Tratamiento del error*/

if((semid= semget(llave, 4, IPC_CREAT | 0600)) == -1)/*Error al crear el semáforo*/

Page 13: Sincronización de Procesos

Semáforosint semctl(semid, semnum, cmd, arg)union semun{int val;struct semid_ds *buf;ushort *array;}arg;

• Las opciones de control son: GETVAL, SETVAL, GETPID, GETNCNT, GETZCNT, GETALL, SETALL, IPC_STAT, IPC_SET

Page 14: Sincronización de Procesos

Semáforos

ushort asem;asem[0]=5; asem[1]=3; asem[2]=4; asem[3]=8;semctrl(semid, 0, SETALL, asem)valor = semctrl(semid, 3, GETVAL, 0)

int semop(semid, sops, nsops)struct sembuf *sops;

Page 15: Sincronización de Procesos

Semáforosstruct sembuf{

ushort sem_num;short sem_op;short sem_flg;};

• Si semop es negativo se decrementará (P), si se incrementa (V) y si es 0 no hace nada.

• Las banderas son: IPC_WAIT, IPC_NOWAIT, SEM_UNDO

Page 16: Sincronización de Procesos

Semáforos

struct sembuf operacines[4];Operaciones[0].semnum = 1;Operaciones[0].sem_op = -1;Operaciones[0].sem_flg = 0;Operaciones[1].semnum = 4;Operaciones[1].sem_op = 1;Operaciones[1].sem_flg = 0;

semop(semid, operaciones, 2);

Page 17: Sincronización de Procesos

Regiones críticas• Las regiones críticas son otra forma de

sincronización de procesos.

• Un semáforo en algunas ocasiones no puede sincronizar más de un recurso diferente a la vez por lo que se necesitan de mecanismos de control de concurrencia más elaborados.

• Otros mecanismos IPC que permiten sincronizar y proteger regiones críticas son las colas de mensajes .

Page 18: Sincronización de Procesos

Colas de Mensajes• La filosofía de las colas de mensajes es similar a

las tuberías, pero con mayor versatilidad.

• Una cola es una estructura de datos gestionada por el kernel, en la cual varios procesos pueden escribir sobre ella. El sincronismo para evitar colisión lo realiza el kernel.

Page 19: Sincronización de Procesos

Colas de mensajes#include <sys/msg.h>int msgget(key, msgflg)

If((msqid= msgget(llave, IPC_CREATE | 0600)) == -1)

/*Error al crear la cola de mensajes*/

• msgctrl(msq, cmd, buf) sirve para leer y modificar la información estadística y de control de una cola.

Page 20: Sincronización de Procesos

Colas de mensajes• Los comandos de control son: IPC_STAT, IPC_SET,

IPC_RMID. Por ejemplo: msgctrl(msqid, IPC_RMID, 0);

• Las operaciones básicas de una cola de mensajes son enviar y recibir los mensajes que se realizan con las siguientes funciones:

int msgsnd(msqid, msgp, msgsz, msgflg);int msgrcv(msqid, msqp, msgtyp, msgflag);

Page 21: Sincronización de Procesos

Cola de mensajes

• El parámetro msgtyp indica el tipo de mensaje que se desea leer: 0 para el primer mensaje, > 0 el primer mensaje de tipo msgtyp que haya en la cola, <0 lee el primer mensaje que sea menor o igual al valor absoluto de msgtyp y además sea el mensaje más pequeño de los que hay.

Page 22: Sincronización de Procesos

Cola de mensajes

struct{

long tipo;char cadena[20];}mensaje;

strcpy(mensaje.cadena, “SD1”);mensaje.tipo = 1; longitud = strlen(mensaje.cadena)if(msgsnd(msqid,&mensaje,longitud,0)==-1) /*Err*/if(msgrcv(msqid,&mensaje,longitud,1,0) ==-1) /*Er*/

Page 23: Sincronización de Procesos

Monitores• Es un procesos que se encarga de verificar el

funcionamiento de algún recurso garantizando la exclusión mutua (mutex).

• En un monitor los procesos se bloquean y desbloquean.

• Pueden existir diversas implementaciones no estandarizadas de un monitor.

Page 24: Sincronización de Procesos

Monitores• En Java los monitores están implementados de

manera nativa con el modificador de los métodos syncronized.

• El monitor es el mecanismo que nos permite controlar el acceso a una región crítica, en este caso un método. También se puede utilizar semáforos como objetos mutex disponibles en el paquete java.util.concurrent.*;

Page 25: Sincronización de Procesos

Deadlocks• Los interbloqueos son la parte más problemática

de los mecanismos de sincronización.

• Un interbloqueo ocurre cuando un proceso A que utiliza un recurso no lo libera por que está en espera de otro recurso que el proceso B tiene y a su vez no libera por esperar el recurso de A.

• En casos de interbloqueo la concurrencia del sistema se ve eliminada.

Page 26: Sincronización de Procesos

Deadlocks• Los interbloqueos pueden ser detectados a través

de la verificación de un ciclo infinito. Desgraciadamente este problema se trata de un problema no deducible y por lo tanto no computable; es decir, es difícil saber si un programa realmente se bloqueo o si está en un ciclo activo.

• Existen muchos métodos para detectar los interbloqueos, a continuación se describen algunos.

Page 27: Sincronización de Procesos

Deadlocks• El método de la avestruz es el más sencillo,

consiste en agachar la cabeza y no hacer nada por el problema.

• El método de herir y esperar consiste en matar un proceso que esté el interbloqueo y esperar a que los procesos existentes se sincronicen.

• El procesos de herir y matar consiste en eliminar un proceso y asignar los recursos a los procesos de manera estática.

Page 28: Sincronización de Procesos

¿Preguntas, dudas y comentarios?