PDF de programación - Sincronización y Comunicación

Imágen de pdf Sincronización y Comunicación

Sincronización y Comunicacióngráfica de visualizaciones

Publicado el 8 de Mayo del 2019
549 visualizaciones desde el 8 de Mayo del 2019
955,7 KB
94 paginas
Creado hace 15a (30/09/2008)
3

Sincronización y
comunicación
• El Problema de la Sección
Crítica.
• Soluciones con:
– Espera ocupada.
– Soporte hardware a la
sincronización
– Soluciones con
bloqueo: Semáforos.
• Paso de mensajes.

SOI

1

Procesos
Procesos
independientes
independientes

Hasta ahora hemos hablado de procesos
como entidades independientes:

No comparten estado (unos aislados de
los otros)
Su ejecución es determinista = la
ejecución del mismo programa con los
mismos datos produce los mismos
resultados.
Cada proceso puede avanzar a un ritmo
arbitrario.

SOI

2

Procesos cooperantes
Procesos cooperantes

En este tema hablaremos de
procesos/hebras que cooperan:

Comparten estado, normalmente
mediante variables compartidas
entre los diferentes
procesos/hebras.
Ejecución no determinista o difícil
de reproducir, dado que esta
sometida a condiciones de carrera.

SOI

3

Uso de procesos
Uso de procesos
cooperantes
cooperantes

Los procesos que cooperan se pueden
utilizar para:

Ganar velocidad, solapando actividades
o realizando trabajo en paralelo.
Compartir información entre trabajos.
Estructurar mejor una aplicación
(recordar Argumento de la simplicidad
visto en Tema 1).

SOI

4

Concurrencia y
Concurrencia y
paralelismo
paralelismo

El paralelismo de una aplicación multi-
procesador es el grado real de ejecución
paralela alcanzado.

Está limitado por el nº de procesadores
disponibles para la aplicación.

La concurrencia de una aplicación es el
máximo grado de paralelismo alcanzable
con un “número ilimitado” de procesadores.
Depende de como está escrita la aplicación y del
número de hebras de control que pueden
ejecutarse simultáneamente.

SOI

5

Memoria compartida
Memoria compartida

En el tema, nos moveremos en el
paradigma de memoria compartida – dos
ó más procesos comparten memoria.

Procesos independientes

Espacio de
direcciones

del

Proceso 2

Espacio de
direcciones

del

Proceso 1

Espacio de direcciones

común a P1 y P2

Aplicación multihebrada

SOI

6

Cómo se puede compartir
Cómo se puede compartir

Procesos independientes – El SO suministra
medios para compartir memoria:
Unix – IPC shared memory (shmget(), ...)
Windows y Unix – archivos proyectados en
memoria.
Aplicaciones multihebradas – las hebras de
una aplicación comparten memoria de forma
natural, pues comparten el mismo espacio
de direcciones.

SOI

7

Condición de carrera
Condición de carrera

Se produce una condición de carrera (race
condition) cuando el resultado de la
ejecución de dos o más procesos, que
comparten variables comunes, depende de
la velocidad relativa a la que cada proceso
se ejecuta, es decir, del orden en el que se
ejecutan las instrucciones.
Para muestra, un botón ...

SOI

8

La carrera del 10
La carrera del 10

Dos hebras ejecutan los código que se
muestra abajo y comparten la variable
i=0 (inicialemente) ¿Cuál de ellas gana?

void incremento(int i) {
while(i< 10) {
i= i + 1;

};
printf("Hebra 1 ha
ganado\n");

}

SOI

void decremento(int i) {
while(i > -10) {

i= i - 1;

};
printf("Hebra 2 ha
ganado\n");

}

9

Código real del ejemplo
Código real del ejemplo

#include <windows.h>
#include <stdio.h>
volatile INT i=0; /* eliminar optimización compilador*/
void Incremento(void *) {
while(i < 10) {

i= i + 1;
printf("Hebra 1 ha ganado\n");}
void Decremento(void *) {
while (i > -10) {
i= i- 1;
printf("Hebra 2 ha gandado\n"); }

void main(void) {
/*ejecución aquí*/
HANDLE Hebras[2];
Hebras[0]=CreateThread(0,0,Incremento,NULL,0, NULL);
Hebras[1]=CreateThread(0,0,Decremento,NULL,0, NULL);
WaitForMultipleObjects(2, handles, TRUE, INFINITE);
} /* El valor de la variable depende de la ejecución*/

SOI

10

El productor-consumidor
El productor-consumidor

Paradigma de los procesos cooperantes: el
proceso productor genera información
(bloque de disco, mensaje de red, carac-
teres de teclado, etc.) que es utilizada por
el proceso consumidor (aplicación o SO)-
o a la inversa.

Productor

Consumidor

búfer

(finito o infinito)

SOI

11

Solución en memoria común
Solución en memoria común

Vamos a dar la solución al problema del
productor-consumidor con búfer acotado.
Datos compartidos:

/*tamaño del bufer */

int n;
struct item {...} ;
typedef bufer {0..n-1} item;
int ent, sal: 0..n-1;
ent = 0; /*inicialmente*/
sal = 0; /*inicialmente*/

SOI

12

Solución (cont.)
Solución (cont.)

Proceso productor
while (true) {
...
produce itemp;
...
while (ent+1 % n==
sal) {/*nada*/};

bufer[ent]=itemP;
ent = ent+1 % n;
};

Proceso consumidor
while (true) {
while (ent == sal){/
*nada*/};
itemC=bufer[sal];
sal = sal+1 % n;
...
consume itemC;
...
};

SOI

13

Conclusión del ejemplo
Conclusión del ejemplo

La solución en memoria compartida del
problema del búfer acotado es correcta
pero sólo permite la existencia de n-1
ítems en el búfer a la vez. ¿Por qué?
Para solventarlo, modificamos el código
añadiendo una variable común, contador,
inicializada a cero y que se incrementa cada
vez que se añade un nuevo ítem al búfer, y
se decrementa cada vez que retiramos un
elemento.

SOI

14

2ª versión del
2ª versión del
productor-consumidor
productor-consumidor

/*tamaño del bufer */

Datos compartidos:
int n;
struct item {...} ;
typedef bufer {0..n-1} item;
int ent, sal: 0..n-1;
ent = 0;
sal = 0;
cont: 0..n; /*lleva la cuenta del numero
bufer*/
cont := 0;

/*inicialmente*/
/*inicialmente*/
de items que hay en el
/*inicialmente*/

SOI

15

Nuevo código
Nuevo código

Proceso productor

while (true) }

...
produce itemP;
...
while (cont == n)
bufer[ent]=itemP;
ent=ent+1 % n;
cont= cont+1;

{/*nada*/;

};

Proceso consumidor

while (true) {

while (cont = 0)
{/nada*/};
itemC=bufer[sal];
sal=sal+1 % n;
cont = cont-1;
...
consume itemC;
...

};

SOI

16

Intercalados y
Intercalados y
variables compartidas
variables compartidas

Operación n:=n+1
en seudoensamblador:
I11: load M into R1
I12: add 1 to R1
I13: store R1 in M
Operación n:=n-1
en seudoensamblador:
I21: load M into R2
I22: sub 1 to R2
I23: store R2 in M

Sea inicialmente n=5:
El intercalado:
I11, I12 , I13 ,I21 ,I22 ,I23
daría el valor final n=5.
Otro intercalado:
I11, I21 , I12 ,I13 ,I22 ,I23
daría finalmente n=4.
Otro intercalado:
I21, I21 , I22 ,I23 ,I12 ,I13
daría finalmente n=6.
¡ Hay condición de
carrera !

17

SOI

Conclusión de la
Conclusión de la
nueva versión
nueva versión

La corrección de la solución depende de que
todas las declaraciones donde se manipulan
variables compartidas se ejecuten de forma
atómica (o indivisible). En este ejemplo,
cont==?, cont:=cont+1 y cont:=cont-1).
Conclusión: el acceso concurrente a los datos
compartidos provoca inconsistencias, salvo
que dispongamos de un mecanismo para
asegurar la ejecución ordenada de los
procesos cooperantes; esto es, que sólo
permita los intercalados correctos.

SOI

18

Otro ejemplo
Otro ejemplo

Tendemos a pensar que solo las operaciones de ++
ó –- producen problemas, pero éstos se dan en
cualquier manipulación de variables compartidas.
Un fragmento de código erróneo que solemos usar
en los primeros ejercicios es el siguiente:

var: variable compartida;
x= sin(5);
if (var > 0)

y = cos(3)
var = 3*x + 2*y;
else
…;

Hebra_2
Hebra_1
¿Qué intercalados se pueden producir?

SOI

19

El problema de la
El problema de la
Sección Crítica
Sección Crítica

Sean n procesos compitiendo todos para
usar algunos datos compartidos.
Cada proceso tiene un segmento de
código, denominado Sección Crítica (SC),
en el que accede a los datos compartidos.
Problema: asegurar que cuando un proceso
está ejecutando su SC, ningún otro proceso
puede ejecutarse en la suya, es decir,
asegurar que múltiples instrucciones, las
SCs, parezcan una única instrucción.

SOI

20

Sección crítica
Sección crítica

Hebras

SOI

Sección crítica

21

Estructura de la solución
Estructura de la solución

Estructura de Pi:
while (true){
entrada a sección

sección crítica
salida de sección
resto de código
};

Construiremos una
solución que de la forma :
Protocolo de entrada a SC
– controla el acceso de
los procesos a las SCs.
Protocolo de salida de la
SC – notifica salida de un
proceso de su SC.
Y cumpla las propiedades


SOI

22

1º requisito de una
1º requisito de una
solución al p.s.c.
solución al p.s.c.

Exclusión mutua - Si Pi se está ejecutando
en su SC, entonces ningún Pj (con j „ i)
puede ejecutarse en su SC.

Pk

Pj

Pi

Secciones

críticas

SOI

23

2º requisito de una
2º requisito de una
solución al p.s.c.
solución al p.s.c.

Progreso (o libre de interbloqueo) - Si no
hay Pjs en sus SCs y existe Pi que desea
entrar en su SC, entonces la selección de
Pi no debe posponerse indefinidamente.

Pk

Pj

Pi

Secciones

críticas

SOI

24

3º requisito de una
3º requisito de una
solución al p.s.c.
solución al p.s.c.

Espera limitada (o libre inanición) - Debe
existir un límite al número de veces que
se les permite a los Pj’s entrar en sus SC’s
después de que un Pi haya realizado un
petición de entrar en la suya y antes de
que petición se satisfaga.
Pi

¡¡ Limitada !!

Pk

Pj

Sección
crítica

SOI

25

Condiciones de entorno
Condiciones de entorno
y propiedades
y propiedades

Una solución correcta al problema de la SC:
No debe suponer nada a cerca de las
velocidades relativas de los n procesos.
Supone que ningún proceso se ejecuta a
velocidad cero.
Imparcialidad: no hacer esperar más a
unos que a otros.
Eficiencia: no gastar más recursos de los
necesarios.
¡Ah sí!, y que sea lo más simple posible.

+Propiedades deseables de la solución:

SOI

26

Soluciones para la
Soluciones para la
Exclusión Mutua
Exclusión Mutua

Exclusión frente al hardware - Deshabilitar
las interrupciones para proteger nuestra SC
de la rutina de servicio de interrupción.
Exclusión frente a otros procesos:

Espera ocupada-los procesos comprueban
constantemente si es seguro entrar a la SC
Bloqueo -los procesos se bloquean al
intentar en
  • Links de descarga
http://lwp-l.com/pdf15869

Comentarios de: Sincronización y Comunicación (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad