Comsin
sincronización entre procesos
María de los Santos Pérez
Hernández
mperez@fi.upm.es
Índice
Procesos concurrentes.
El problema de la sección crítica.
Problemas clásicos de comunicación y
sincronización.
Mecanismos de comunicación y
sincronización.
Interbloqueos.
mperez@fi.upm.es
2
Referencias bibliográficas
“Sistemas Operativos: una visión aplicada”
JesúsCarretero et al.
McGraw Hill, 2001
“Sistemas Operativos” Willian Stalling
Willian Stalling
Prentice Hall, 1997
“Operating System Concepts”
A. Silberschatz, P. Galvin
Addison-Wesley, 1998
mperez@fi.upm.es
3
Procesos concurrentes (I)
Modelos
Multiprogramación en un único procesador
Multiprocesador
Multicomputador (proceso distribuido)
Razones
Compartir recursos físicosCompartir recursos lógicos
Acelerar los cálculos
Modularidad
Comodidad
mperez@fi.upm.es
4
Procesos concurrentes (II)
Tipos de procesos
Independientes
Cooperantes
Interacción entre procesos
Compiten por recursos
Comparten recursos
mperez@fi.upm.es
5
Problema de la interacción
entre procesos (procesos
Calcula
la suma de los N primeros
ligeros)
Si varios procesos
númerosutilizando procesos ligeros.
int suma_total = 0;
void suma_parcial(int ni, int nf)
{
int j = 0;
int suma_parcial = 0;
for (j = ni; j <= nf; j++)
suma_parcial = suma_parcial +j;
suma_total = suma_total +
pthread_exit(0);
}
suma_parcial;
ejecutan
concurrentemente
este código se
puede obtener un
resultado
incorrecto.
Solución:
secciones críticas
mperez@fi.upm.es
6
Ejemplo con sección crítica(procesos ligeros)
void suma_parcial(int ni, int nf)
{
int j = 0;
int suma_parcial = 0;
for (j = ni; j <= nf; j++)
suma_parcial = suma_parcial + j;
Entrada en la sección crítica
suma_total = suma_total+
suma_parcial;
Salida de la sección crítica
Requisitos para
ofrecer secciones
críticas:
Exclusión mutua
Progreso
Espera limitada
pthread_exit(0);
}
mperez@fi.upm.es
7
Problema de lainteracción
entre procesos
void ingresar(char *cuenta,
int cantidad)
{
int saldo, fd;
fd = open(cuenta, O_RDWR);
read(fd, &saldo,sizeof(int));
saldo = saldo + cantidad;
lseek(fd, 0, SEEK_SET);
write(fd, &saldo,sizeof(int));
close(fd);
return;
Si dos procesos
ejecutan
concurrentemente
este código se
puede perder algún
ingreso.
Solución:
secciones críticas
}
mperez@fi.upm.es
8
Ejemplocon sección crítica
void ingresar(char *cuenta,
int cantidad)
{
int saldo, fd;
fd = open(cuenta, O_RDWR);
Entrada en la sección crítica
read(fd,
&saldo, sizeof(int));
saldo = saldo + cantidad;
lseek(fd, 0, SEEK_SET);
write(fd, &saldo, sizeof(int));
Salida de la sección crítica
Requisitos para
ofrecer secciones
críticas:
Exclusión mutua
Progreso
Espera limitada
close(fd);
return;
}mperez@fi.upm.es
9
Mecanismos de comunicación
Ficheros
Pipes
FIFOS
Variables en memoria compartida
Paso de mensajes
Sockets
mperez@fi.upm.es
10
Mecanismos de
Sincronización
Construcciones de los lenguajes concurrentes
(procesos ligeros)
Servicios del sistema operativo:
Señales (asincronismo)
Pipes
FIFOS
Semáforos
Mutex y variables condicionales
Paso demensajes
Las operaciones de sincronización deben ser
atómicas
mperez@fi.upm.es
11
Características de los
mecanismos de
comunicación
Identificación
Mecanismos de nombrado
Sin nombre
Con nombre local
Con nombre de red
Identificador propio
Descriptor de fichero
Unidireccional
Bidireccional
Buffering
Identificador interno
Flujo de datos
Sin buffering
Conbuffering
Sincronización
Síncrono (bloqueante)
Asíncrono (no
bloqueante)
mperez@fi.upm.es
12
Problemas clásicos de
comunicación y
sincronización
• Productor-consumidor: • Lectores-escritores:
P ro c e s o
C o n s u m id o r
P ro c e s o
P ro d u c to r
L e c to r
L e c to r
E s c r ito r
L e c to r
E s c r ito r
F l u jo d e
d a to s
M e c a n is m o d e
c o m u n ic a c ió n
R...
Regístrate para leer el documento completo.