PDF de programación - Concurrencia de memoria común

Imágen de pdf Concurrencia de memoria común

Concurrencia de memoria comúngráfica de visualizaciones

Publicado el 17 de Diciembre del 2018
534 visualizaciones desde el 17 de Diciembre del 2018
1,7 MB
67 paginas
Creado hace 13a (23/02/2011)
Concurrencia de memoria común

1.1

INTRODUCCIÓN

La programación concurrente se denomina de memoria única cuando tenemos
una única memoria central donde residen todos los datos utilizados por el ordenador y
todos los procesos en ejecución, así como el sistema operativo y los recursos utilizados
por éste.

Una memoria no implica una UCP (Procesador, Unidad Central de Proceso o
CPU). Podemos tener varias y será recomendable para conseguir la ejecución concurrente.
La Figura 7.1 representa nos posibles tipos de ordenador sobre los que ser realizaría la
programación concurrente de memoria única (en adelante sólo programación para memoria
única o PMU).

Figura 7.1: Esquemas de ordenadores para programación concurrente de memoria única

Este modelo de programación está fuertemente influido por la arquitectura de los
ordenadores ya que la comunicación y sincronización se van a realizar mediante el uso
de variables situadas en esta memoria común que se compartirán entre varios procesos.
Estas variables compartidas estarán en la base de todos los mecanismos de PMU,
permitiendo su existencia y creando los problemas a los que deberá dar solución la PMU.

Para ilustrar claramente la idea de las variables compartidas, tenemos los dos
diagramas de la Figura 7.2. Estos diagramas representan la memoria única, en la que vamos
a situar dos procesos. Para estos dos procesos se muestra la estructura interna de la

Tema 3. Programación concurrente de memoria común1 memoria asignada, habitualmente dotada por los sistemas operativos, que varía en cada
caso pero en línea de mínimos coincide con lo representado.

En el diagrama (a), tenemos solamente los procesos con su contenido formado por:
el código, las variables globales y la memora dinámica en la cual se irá tomando la cantidad
requerida para el crecimiento de la pila del proceso y el montículo.

En el diagrama (b), tenemos también un pequeño espacio de la memoria reservado
para como variable compartida y podemos observar que dicha variable, no forma parte de
ninguno de los dos procesos ya que la memoria en la que se aloja está reservada en otra
zona distinta. Sin embargo, ambos procesos cuentan con dicha variable como zona de
memoria utilizable.

Memoria

Pr1

Pr2

a
i
r
o
m
e
M

1
r
P
e
d



a
i
r
o
m
e
M

2
r
P
e
d



Código

Variables
globales

Pila y
Montículo

Código

Variables
globales

Pila y
Montículo

l

a
o

t

t


a
i
r
o
m
e
M



1
r
P
n
e
e
b
n
o
p
s
d

i

i

l

l

a
o

t

t


a
i
r
o
m
e
M



2
r
P
n
e
e
b
n
o
p
s
d

i

i

l

Memoria

Pr1

a
i
r
o
m
e
M

1
r
P
e
d



Código

Variables
globales

Pila y
Montículo

var. Comp.

variable compartida

Pr2

a
i
r
o
m
e
M

2
r
P
e
d



Código

Variables
globales

Pila y
Montículo

l

a
o

t

t


a
i
r
o
m
e
M



1
r
P
n
e
e
b
n
o
p
s
d

i

i

l

l

a
o

t

t


a
i
r
o
m
e
M



2
r
P
n
e
e
b
n
o
p
s
d

i

i

l

(a)

(b)

Figura 7.2: Memoria de los procesos usando una variable compartida

Gracias a estas variables compartidas, podemos comunicar dos procesos,

sincronizarlos o comunicarlos sincronizadamente.

La comunicación pura, implica el intercambio de información mediante una o
más variables de forma que los procesos depositan o toman información en las variables
sin control ninguno. Estos valores son valores de información relevante para las
aplicaciones concretas sin significado para la gestión de los procesos concurrentes.

En el caso de la sincronización, también se utilizan variables, pero los valores
depositados tienen un significado muy específico e importante para la gestión de los
procesos concurrentes que se realiza en base a dichos valores.

Tema 3. Programación concurrente de memoria común2 Por último, la comunicación sincronizada, combina ambos conceptos, teniendo
un intercambio de información relevante para la aplicación controlado por un intercambio
de información que permite la gestión de la concurrencia y del intercambio de información
de aplicación de forma correcta.

Para ilustrar los tres conceptos vamos a plantear sistemas en los que se necesitan o

utilizan los tres enfoques en el uso de las variables compartidas.

Para la comunicación pura, vamos a suponer la existencia de un sistema de
medición de la temperatura exterior y su representación en un panel informativo para su
lectura directa por personas. Cada una de las dos partes del sistema, será implementada
mediante un proceso, y estos procesos se comunicarán mediante una variable compartida
en la que el proceso de medición de la temperatura dejará un valor cada cierto tiempo y el
proceso de escritura en el panel lo tomará para escribirlo. La velocidad de refresco
requerida para el sistema no es muy elevada en la parte de visualización ya que los seres
humanos no somos capaces de distinguir imágenes que cambian a mayor velocidad que
1/25 de segundo. Además, si en algún momento falla la sincronización y uno de los dos
procesos se adelanta al otro, se tomará una temperatura y se mostrará dos veces o se
escribirá una nueva temperatura antes de que la última sea leída y ésta se perderá. Pero esto
no es un problema porque la temperatura necesita minutos para variar y no décimas de
segundo (lo que detectaría el ojo humano) ni milésimas de segundo (lo que tardarían
nuestro procesos en tomar una nueva temperatura correcta).

Por todo esto, el sistema de la Figura 7.3 implementa una comunicación pura.

20 ºC

Figura 7.3: Sistema con comunicación pura

Este tipo de sistemas se dan habitualmente en la realidad cuando aparecen este tipo
de situaciones en las que el valor de un dato concreto es muy escaso. En cambio, sistemas
en los que se realice una sincronización pura son un poco más difíciles de encontrar, ya que
esta características es más usada a bajo nivel.

Tema 3. Programación concurrente de memoria común3 Un sistema ejemplo de sincronización pura podría ser el formado por varios
procesos en los que tenemos uno especial encargado de inicializar una impresora y otros
que deben imprimir por esta impresora una vez que esté lista. El proceso de inicialización
puede durar unos 10 segundos y cada proceso de impresión deberá recibir un documento,
prepararlo e imprimirlo, pudiendo tardar las tareas previas a la impresión de 2 a 15
segundos. Se ve claramente que merece la pena que todos los procesos se inicien a la vez,
para que se ejecute la mayor cantidad de trabajo en paralelo, pero las impresiones no
podrán empezar hasta que el proceso especial inicialice la impresora. En este punto hará
falta una sincronización entre el proceso y los demás, sin ningún otro intercambio que el
destinado a asegurar el correcto orden de las operaciones. La Figura 7.4 representa este
sistema.

Inic.

Rec.

Rec.

Rec.

Rec.

Prep.

Prep.

Prep.

Prep.

Imp.

Imp.

Imp.

Imp.

Figura 7.4: Sistema con sincronización pura

El tercer tipo, comunicación sincronizada, es el más utilizado de todos, ya que los
datos manejados suelen ser muy importantes y no es admisible su pérdida o duplicación.
Existen mucho ejemplos de sistemas de este tipo, pero vamos a utilizar uno muy
interesante que consiste en un conjunto de cabinas de votación y un sistema central de
recuento. Cada cabina estará modelada en su funcionamiento por un proceso y el sistema
central por otro. La comunicación del valor de cada uno de los votos se realizará mediante
una variable compartida por cada una de las cabinas más variables adicionales de control
para cada variable compartida que nos informe de que un voto nuevo está disponible o de
que el voto ya ha sido contabilizado por el sistema central. El diagrama de la Figura 7.5
representa este sistema.

Tema 3. Programación concurrente de memoria común4 v. control

v. control

Proceso de
recuento

Figura 7.5: Sistema con comunicación sincronizada

Tanto estas como otras situaciones o sistemas, deberán ser representadas utilizando
las herramientas que hemos presentado en el capítulo anterior, PseudoPascal y diagramas
de precedencia.

Empezaremos con un primer ejemplo de programa que corresponde al esquema de
la comunicación pura. Se trata de un programa que toma una variable compartida X y le
suma 1, 2 y 3 en tres procesos distintos. La representación de este programa según la
técnica de los diagramas de precedencia es:

x =0

x=x+1

x=x+2

x=x+3

W(x)

Figura 7.6: Primer programa concurrente

Y el código equivalente en PseudoPascal:

program conc_001;
var

Tema 3. Programación concurrente de memoria común5 x: integer; { variable compartida }
procedure pr1; { instrucciones de un proceso }
begin
x:=x+1;
end;
procedure pr2; { instrucciones de otro proceso }
begin
x:=x+2;
end;
procedure pr3; { instrucciones de otro proceso }
begin
x:=x+3;
end;
begin { programa principal }
x:=0; { inicialización de la variable compartida }
cobegin
pr1;
pr2;
pr3;
coend
writeln(x);
end.

Este primer programa cuyo objetivo es realizar tres sumas debería producir un

valor final en la variable X de 6. Pero, ¿es éste el resultado?

El problema que existe es que las operaciones de tipo “X:=X+1” no son
indivisibles. En realidad el procesador realiza como mínimo tres operaciones como las
siguientes:

• Cargar en un registro de la CPU el valor de X desde la memoria.

• Devolver el resultado obtenido en el registro a la memoria designada por X.

Sumar 1 al valor del registro.

Debido a esta descomposición del contenido en varias operaciones, surgen los
problemas que serán mayores cuanto mayor sea una sección crítica, debido a que tendrá
mayor número de instrucciones y mayor duración.

Veamos una serie de cronogramas de la posible ejecución de este programa y su
efecto sobre la variable X según los procesos tengan mejor o peor fortuna en
  • Links de descarga
http://lwp-l.com/pdf14561

Comentarios de: Concurrencia de memoria comú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