aujss

Páginas: 8 (1898 palabras) Publicado: 17 de septiembre de 2013
Sincronización y
comunicación

3

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
independientes
Hasta ahora hemos hablado de procesos
como entidades independientes:
No comparten estado (unos aislados de
los otros)
Su ejecución esdeterminista = 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
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
dereproducir, dado que esta
sometida a condiciones de carrera.
SOI

3

Uso de procesos
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
paralelismoEl paralelismo de una aplicación multiprocesador 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 puedenejecutarse simultáneamente.

SOI

5

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
SOI

Aplicación multihebrada
6

Cómo se puede compartir
Procesosindependientes – 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
Se produce una condición de carrera (race
condition) cuando elresultado 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
Dos hebras ejecutan los código que se
muestra abajo y comparten la variable
i=0 (inicialemente) ¿Cuál de ellas gana?
voidincremento(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
#include
#include
volatile INT i=0; /* eliminar optimización compilador*/
void Incremento(void *) {
while(i < 10) {
i= i + 1;
printf("Hebra 1 ha ganado\n");}
voidDecremento(void *) {
while (i > -10) {
i= i- 1;
printf("Hebra 2 ha gandado\n"); }
void main(void) {
HANDLE Hebras[2];

/*ejecución aquí*/

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-consumidorParadigma de los procesos cooperantes: el
proceso productor genera información
(bloque de disco, mensaje de red, caracteres de teclado, etc.) que es utilizada por
el proceso consumidor (aplicación o SO)o a la inversa.
Consumidor

Productor
búfer
(finito o infinito)
SOI

11

Solución en memoria común
Vamos a dar la solución al problema del
productor-consumidor con búfer acotado....
Leer documento completo

Regístrate para leer el documento completo.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS