PDF de programación - PROGRAMACION CONCURRENTE - I.3. Interacción entre Procesos Concurrentes

Imágen de pdf PROGRAMACION CONCURRENTE - I.3. Interacción entre Procesos Concurrentes

PROGRAMACION CONCURRENTE - I.3. Interacción entre Procesos Concurrentesgráfica de visualizaciones

Publicado el 14 de Enero del 2017
450 visualizaciones desde el 14 de Enero del 2017
249,7 KB
23 paginas
Creado hace 12a (19/09/2008)
PROGRAMACION CONCURRENTE

I.3. Interacción entre Procesos

Concurrentes.

J.M. Drake

Notas:

1

Interacción entre Procesos Concurrentes

Modelos de interacción entre procesos.

Problemas de sincronización y exclusión mutua.

Procodis’08: I.3.- Interacción entre Procesos Concurrentes José M.Drake

2

Notas:

2

Tipos básicos de interacción entre procesos

Los procesos de una aplicación concurrente pueden interaccionar entre sí
de acuerdo con los siguientes esquemas:

Independientes entre sí: Interfieren por compartir el procesador.

Cooperan entren sí: Uno genera una información o realiza algún servicio que el
segundo necesita.

Compiten entre sí: Requieren usar recursos comunes en régimen exclusivo.

Procodis’08: I.3.- Interacción entre Procesos Concurrentes José M.Drake

3

Notas:

Las relaciones básicas que se pueden presentar entre dos procesos concurrentes de un
mismo programa, son:

•Son independientes entre sí.
•Son procesos cooperantes.
•Son procesos competidores.

En el primer caso, entre los procesos no se requiere que exista ningún tipo de interrelación.
Si embargo, en el segundo y en el tercer caso, se necesita disponer de componentes que
hagan posible establecer acciones de sincronización y de comunicación entre los procesos.

3

Interacciones entre procesos en programación OO.

Dentro de la metodología orientada a objetos, una aplicación resulta de componer
tres tipos de objetos:

Objetos activos: Tienen capacidad de realizar actividades autónomas propias.
Son procesos con thread propio.

Objetos neutros: Son objetos que prestan servicios a los objetos activos. Pueden
ser usados simultáneamente por los objetivos activos sin representar interacción
entre ellos. Son librerías pasivas.

Objetos pasivos: Son objetos que prestan servicios a los objetos activos. Cuando
varios objetos activos tratan de hacer uso de él simultáneamente arbitran el acceso
de acuerdo con una estrategia propia. Representan recursos de interacción entre
procesos.

Procodis’08: I.3.- Interacción entre Procesos Concurrentes José M.Drake

4

Notas:

Dentro del paradigma de programación orientada al objeto, cualquier aplicación resulta
como composición de tres tipos de objetos:

•Objetos activos: son aquellos entes que requieren tener capacidad de llevar a
cabo acciones espontáneas autónomas. En programación concurrente estos
objetos corresponden siempre a componentes tipo proceso.

•Objetos neutros: son aquellos objetos no activos que prestan servicios a los
objetos activos que lo requieren, sin necesidad de introducir ningún tipo de
actividad especifica por su parte. En programación concurrente, estos objetos se
construyen mediante estructuras de datos pasivas, y cuando convenga se las dota
con un interfaz de procedimientos que permita abstraer el acceso a ellos.

•Objetos pasivos: son aquellos objetos no activos que solo prestan servicios a los
objetos activos que lo requieren, pero introduciendo por su parte una actividad de
control o arbitraje efectivo, entre los sucesivos o simultáneos servicios que le son
requeridos. Estos objetos, que se pueden identificar con el concepto de servidor, se
introducen los aspectos más significativos de la programación concurrente

4

Implementación de objetos pasivos.

Los objetos pasivos se construyen en base a procesos internos que
implementan su control:
El thread de los mismos arbitran el acceso de los objetos activos.
No requieren introducir nuevos componentes de programación.
Son poco eficientes ya que requieren múltiples cambios de contexto.

Los objetos pasivos se construyen a partir de componentes de
sincronización pasivos:
Requieren la definición de nuevas primitivas de sincronización.
Introduce mayor complejidad ya que utiliza componentes de muy diferentes

niveles de abstracción.

Son muy eficientes.

Procodis’08: I.3.- Interacción entre Procesos Concurrentes José M.Drake

5

Notas:

Para construir los objetos pasivos se utiliza una de las dos siguientes estrategias:

•Los objetos pasivos se implementan como procesos, que incluyen los recursos
del objeto, y que con la actividad que le es propia, controlan y arbitran el acceso a
los mismos. Es la solución más simple ya que no implica introducir nuevos
componentes de programación, sin embargo presenta el inconveniente de que
incrementa el número de procesos del programa, así como los cambios de
contexto.

•Introducir nuevos componentes primitivos (tales como semáforos, señales,
zonas de exclusión mutua, etc.) que permitan representar explícitamente y
directamente los objetos pasivos. Con ellos se consigue que la programación
concurrente sea mucho más eficiente, aunque más compleja y proclive a errores.

5

Problemas específicos de programación concurrentes.

Actualizaciones concurrentes de variables compartidas:
“Cuando un proceso modifica una misma variable compartida que no es
atómica, mientras que otro proceso concurrente la lee o escribe, el
resultado que se obtiene no es seguro.”

Sincronización en la ejecución de tareas:
“La lógica de la aplicación requiere que un proceso no pueda ejecutar una
sentencia determinada hasta que otro proceso haya ejecutado una sentencia
de la que depende.”

Procodis’08: I.3.- Interacción entre Procesos Concurrentes José M.Drake

6

Notas:

En programación concurrente se presentan problemas específicos que pueden conducir a errores que
no existen en programación secuencial. Los dos problemas básicos propios de programación
concurrente son:

•La actualización concurrente de variables compartidas. Si dos procesos concurrentes tratan de
actualizar una variable compartida, y para ello cada uno de ellos debe realizar múltiples operaciones
de lectura y escritura de los campos de la variable la operación no es segura. Puede producirse que la
operación concurrente termine corrompiendo la variable que actualizan.

•Cuando dos procesos concurrentes necesitan colabora de forma sincrona, se necesita poder evitar
que un proceso no ejecute una cierta actividad hasta que el otro no haya alcanzado el punto adecuado
para que la colaboración sea eficaz.

6

Parque público: Actualización concurrente de variable

Procodis’08: I.3.- Interacción entre Procesos Concurrentes José M.Drake

7

Notas:

Ejemplo "Control de parque público": Considérese el caso de un parque público que
dispone de varias puertas de acceso. El acceso por cada una de las puertas del parque,
está controlada por un torno independiente, que envía un evento propio a una aplicación de
computador que debe contarlas y proporcionar en cualquier instante el número total de
visitantes que han entrado en el parque.

La solución concurrente inicial que se propone, se basa en las siguientes ideas:

•Los eventos que genera cada torno van a ser gestionados por un proceso
independiente.
•Los procesos de control de los tornos se ejecutan de forma concurrente.
•En el programa existe una variable global entera “cuenta" que representa el
número el numero de visitantes que ha entrado en el parque.
Cuando la actividad de los tornos ha concluido proporciona la información sobre el
número de visitantes que se han producidos.

7

Descripción de la aplicación parque público
Interacción entre procesos

Lógica del procedimiento main()

Procodis’08: I.3.- Interacción entre Procesos Concurrentes José M.Drake

8

Notas:

El diagrama de secuencias que muestra las interacciones entre los tres objetos que constituyen la
aplicación, y el diagrama de actividad que representa las actividades que genera la ejecución del
procedimiento main() que lanza la apliacación contienen una misma información:
•Inicialmente la variable cuanta se inicializa a cero.
•Se crean y lanzan los dos procesos que gestionan cada uno de los totos.
•Por cada visitante del parque que llega por un torno el proceso que lo gestiona ejecuta la sentencia
cuenta=cuenta+1 sobre una misma variable global.
•Cuando los procesos que gestionan los tornos terminan (por temporización: ha llegado la ora de
cerrar; o por cuenta: el parque está lleno) se imprime el valor de la variable cuenta.
El ejemplo presenta problemas porque dos procesos concurrentes actualizan de forma no segura la
misma variable global cuenta.

8

Código de la aplicación Parque Público.

program Control_parque;
var Cuenta : integer;

process Torno_1;
var n: Integer;
begin for n:=1 to 20 do Cuenta:=Cuenta +1; end;

process Torno_2;
var n: Integer;
begin for n:=1 to 20 do Cuenta:=Cuenta +1; end;

begin (* Cuerpo del programa principal Control_parque *)

Cuenta:=0;
cobegin Torno_1; Torno_2; coend;
writeln (“Total de visitantes: ”, Cuenta);

end;

Procodis’08: I.3.- Interacción entre Procesos Concurrentes José M.Drake

9

Notas:

A continuación se muestra un programa simple que emula el funcionamiento de este
programa. Se consideran dos tornos, cada uno de ellos representado mediante un proceso
independiente que recibe un número predeterminado (20) de visitantes y por cada uno de
ellos incrementa la variable global. Una sentencia writeln final emula la gestión del monitor.

Este programa da soluciones erroneas. No siempre escribe 40 como debiera.

9

Actualización concurrente de una variable compartida.

Proceso P

x=x+1

x

Proceso Q

x=x+1

(X1) Carga x en acumulador
(X2) Incrementa acumulador
(X3) Almacena acumulador en x

Entrelazado de operaciones concurrentes que conduce a error.

(P1)
(Q1)
(Q2)
(P2)
(Q3)
(P3)

Valor inicial de x

AcP = 4
P carga x en su acumulador
AcQ = 4
Q carga x en su acumulador
AcQ = 5
Q incrementa su acumulado
P incrementa su acumulador
AcP = 5
Q almacena el acumulador en x AcQ=5
P almacena el acumulador en x AcP = 5

x = 4
x = 4
x = 4
x = 4
x = 4
x = 5
x = 5
  • Links de descarga
http://lwp-l.com/pdf1015

Comentarios de: PROGRAMACION CONCURRENTE - I.3. Interacción entre Procesos Concurrentes (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