2 AE AyED Apunte2

9
18/11/2012 1 Universidad Autónoma de Entre Ríos Facultad de Ciencia y Tecnología Licenciatura en Sistemas de Información Algoritmos Concurrentes Cátedra “Algoritmos y Estructuras de Datos” Contenidos Introducción. Beneficios de la programación concurrente. Concurrencia y arquitecturas de hardware. Especificación de ejecución concurrente. Características de los sistemas concurrentes. Problemas inherentes a la programación concurrente. Arrancamos en lo conceptual: ¿Qué es la Concurrencia? Definición Real Academia Española: “Acaecimiento de varios sucesos en un mismo tiempo”. Una forma de ver la concurrencia es como un conjunto de actividades que se desarrollan de forma simultánea. En informática, cada una de esas actividades se suele llamar proceso. Hablamos entonces de concurrencia cuando hay una existencia simultánea de varios procesos en ejecución. Momento! Algoritmo; Programa; Proceso…? Conjunto de Instrucciones + Orden de Ejecución = Algoritmo. Algoritmo + Estructura de Datos = Programa. [Estático, Clase] Programa Ejecutándose = Proceso. [Dinámico, Objeto, Instancia con Estado] Ejemplo: 1 Programa 3 Instancias

description

es un apunte de coso que se puede utilizar para hacer cosas de cosas

Transcript of 2 AE AyED Apunte2

Page 1: 2 AE AyED Apunte2

18/11/2012

1

Universidad Autónoma de Entre Ríos Facultad de Ciencia y Tecnología Licenciatura en Sistemas de Información

Algoritmos Concurrentes Cátedra “Algoritmos y Estructuras de Datos”

Contenidos

Introducción.

Beneficios de la programación concurrente.

Concurrencia y arquitecturas de hardware.

Especificación de ejecución concurrente.

Características de los sistemas concurrentes.

Problemas inherentes a la programación

concurrente.

Arrancamos en lo conceptual: ¿Qué es la Concurrencia?

Definición Real Academia Española: “Acaecimiento de

varios sucesos en un mismo tiempo”.

Una forma de ver la concurrencia es como un conjunto

de actividades que se desarrollan de forma simultánea.

En informática, cada una de esas actividades se suele

llamar proceso.

Hablamos entonces de concurrencia cuando hay una existencia simultánea de varios procesos en ejecución.

Momento! Algoritmo; Programa; Proceso…?

Conjunto de Instrucciones + Orden de Ejecución = Algoritmo.

Algoritmo + Estructura de Datos =

Programa. [Estático, Clase]

Programa Ejecutándose = Proceso.

[Dinámico, Objeto, Instancia con Estado]

Ejemplo: 1 Programa 3 Instancias

Page 2: 2 AE AyED Apunte2

18/11/2012

2

Más formalmente: ¿Qué es la Concurrencia?

“Dos procesos serán concurrentes cuando la primera instrucción de uno de ellos se ejecuta después de la primera instrucción del otro y antes de la última”.

No Confundir

Ojo! Existencia simultánea no implica ejecución

simultánea

Dependerá del hardware subyacente.

El paralelismo es un caso particular de la concurrencia.

Se habla de paralelismo cuando ocurre la ejecución

simultánea de instrucciones. Implica:

Arquitecturas paralelas.

Procesamiento paralelo.

Algoritmos paralelos.

Programación paralela.

Una Clasificación para los Procesos

Independientes Cooperantes

Entonces…

En nuestros sistemas pueden coexistir varios

procesos que pueden pertenecer al mismo o distintos programas.

En algunas circunstancias estos procesos cooperan y en otras compiten.

Estas tareas de colaboración y competencia exigen mecanismos de Comunicación y Sincronización entre procesos para establecer una administración

de los recursos que utilizarán.

Del estudio de estos mecanismos de coordinación y comunicación se trata la “Programación

Concurrente”.

Programación Concurrente

“Disciplina que se encarga del estudio de las notaciones que permiten especificar la

ejecución concurrente de las acciones de un programa, así como las técnicas para

resolver los problemas inherentes a la ejecución concurrente (comunicación y sincronización)”.

Programación Concurrente (PC) Tradicionalmente estuvo asociada al mundo de los

Sistemas Operativos (SO).

Eran rutinas que formaban parte del SO:

Evolución plataformas hardware.

El SO tenía diferentes partes en ejecución sin un orden

predecible y compartiendo variables => surgen nuevos

problemas.

Se aplicaban soluciones específicas “artesanales”.

Tres hitos importantes marcan su evolución:

El concepto de Hilo.

La aparición de lenguajes de alto nivel que dió soporte a la

PC.

La aparición de Internet que es un campo fértil para este

tipo de procedimientos.

Page 3: 2 AE AyED Apunte2

18/11/2012

3

Una primer Clasificación para Programas Concurrentes

Sistemas Inherentemente Concurrentes: El entorno

con el que interactúan, o el entorno que modelan tiene forzosamente actividades simultáneas.

Ejemplos:

Red de cajeros automáticos.

Sistemas de gestión de inventarios distribuidos.

Sistemas Potencialmente Concurrentes: No es estrictamente necesario que haya concurrencia, pero se puede sacar partido de ella.

Ejemplos:

Aumentar la velocidad de ejecución.

Sistemas de detección de riesgos.

La PC añade una gran complejidad a la tarea de programar y requiere de

condiciones particulares subyacentes que deben ser evaluadas con mucho cuidado.

Surge la pregunta entonces: ¿Por qué debería pagar este costo para la

realización de programas concurrentes?

Contenidos

Introducción.

Beneficios de la programación concurrente.

Concurrencia y arquitecturas de hardware.

Especificación de ejecución concurrente.

Características de los sistemas concurrentes.

Problemas inherentes a la programación

concurrente.

Beneficios de la Programación Concurrente

Aprovechamiento de la CPU.

Velocidad de ejecución.

Factibilidad de solución a problemas de naturaleza concurrente:

Sistemas de Control. Recolección simultanea de datos.

Tecnologías Web. Atención de múltiples conexiones.

Aplicaciones basadas en interfaces de usuarios.

Simulación. Comportamiento autónomo independiente.

SGBD. Atención a múltiples usuarios.

Contenidos

Introducción.

Beneficios de la programación concurrente.

Concurrencia y arquitecturas de hardware.

Especificación de ejecución concurrente.

Características de los sistemas concurrentes.

Problemas inherentes a la programación

concurrente.

Concurrencia y Arquitecturas de Hardware

Arquitecturas que soportan la programación concurrente:

Sistemas con un solo procesador

(sistemas monoprocesador).

Sistemas con más de un procesador

(sistemas multiprocesador).

Page 4: 2 AE AyED Apunte2

18/11/2012

4

Sistemas Monoprocesador

No hay paralelismo. Los procesos se reparten el

procesador: entrelazado (interleaving).

¿Quién planifica los procesos?

El sistema operativo.

El propio ejecutable (gracias al compilador) -> runtime

scheduler (RTSS).

Todos los procesos comparten la misma memoria.

Forma “natural” de sincronizar y comunicar procesos =>

Variables Compartidas.

Sincronización y Comunicación

Sistemas Multiprocesador

Más de un procesador. Permite que exista un paralelismo

real entre los procesos.

Igualmente lo más frecuente es tener más procesos que

procesadores con lo que sigue siendo necesaria la

utilización de mecanismos para la concurrencia.

Clasificación de los Sistemas Multiprocesador:

Estrechamente acoplados (multiprocesadores).

Débilmente acoplados (sistemas distribuidos).

Sistemas Estrechamente Acoplados

Los procesadores comparten memoria y bus.

Ventaja:

Aumento de velocidad de procesamiento con bajo coste.

Inconveniente:

Escalable sólo hasta decenas o centenares de procesadores.

Sistemas Estrechamente Acoplados

La sincronización y comunicación entre procesos hace

mediante variables compartidas.

Sistemas Débilmente Acoplados o Sistemas Distribuidos

Múltiples procesadores conectados mediante una red.

Los procesadores no comparten memoria

ni reloj.

Los sistemas conectados pueden ser de

cualquier tipo.

Escalable hasta millones de procesadores

(por ejemplo en Internet).

Page 5: 2 AE AyED Apunte2

18/11/2012

5

Ventajas de los Sistemas Débilmente Acoplados o Sistemas Distribuidos

Compartición de recursos dispersos.

Ayuda al trabajo cooperativo de equipos humanos.

Aumento de velocidad de ejecución.

Escalabilidad ilimitada.

Aumento de fiabilidad:

Tolerancia a fallos (fault tolerance).

Alta disponibilidad (hight availability).

Sistemas Débilmente Acoplados o Sistemas Distribuidos

La forma natural de comunicar y sincronizar procesos es

mediante el uso de paso de mensajes.

Contenidos

Introducción.

Beneficios de la programación concurrente.

Concurrencia y arquitecturas de hardware.

Especificación de ejecución concurrente.

Características de los sistemas concurrentes.

Problemas inherentes a la programación

concurrente.

¿Qué se puede ejecutar concurrentemente?

Analicemos los siguientes casos:

X = X + 1

X = X + 2

X = 1

Y = 2

Z = 3

¿Qué se puede ejecutar concurrentemente?

Condiciones de Bernstein.

L(Sk) = {a1, a2, …..an}, como el conjunto de lectura del

conjunto de instrucciones Sk. Formado por todas las

variables cuyos valores son referenciados (se leen)

durante la ejecución de las instrucciones en Sk.

E(Sk) = {a1, a2, …..an}, como el conjunto de escritura del conjunto de instrucciones Sk. Formado por todas las

variables cuyos valores son referenciados (se escriben)

durante la ejecución de las instrucciones en Sk.

Para que dos conjuntos de instrucciones

Si y Sj se puedan ejecutar

concurrentemente, se tiene que cumplir:

Cómo?! Veamos un ejemplo…

Partimos de un conjunto de instrucciones dado.

Utilizando las condiciones de Bernstein veremos qué

sentencias pueden ejecutarse de forma concurrente y

cuáles no. Para ello, en primer lugar calculamos los

conjuntos de lectura y escritura.

Aplicamos las condiciones de Bernstein a cada par de sentencias lo que nos va a dar cuales de ellas pueden

ser ejecutadas en paralelo.

Page 6: 2 AE AyED Apunte2

18/11/2012

6

Si tenemos

Representación

De todo esto se deduce la siguiente tabla en la que

puede verse qué pares de sentencias pueden ejecutarse

de forma concurrente:

Especificación de Ejecución Concurrente mediante Grafo

¿Cómo especificar la Concurrencia?

Técnicas para producir actividades concurrentes en el

computador.

De forma manual.

Trabajar directamente sobre el hardware.

Usar llamadas al sistema o bibliotecas de software

(por ejemplo pthreads).

Expresarla en un lenguaje de alto nivel.

De forma automática.

El sistema operativo se encarga automáticamente

(pro ejemplo multiprogramación).

El compilador detecta la concurrencia implícita en

nuestros programas secuenciales.

Lenguajes de Alto Nivel (LAN)

Los LAN permiten programar en un nivel más cercano al ámbito del problema

(problem domain) por medio de la abstracción.

Además, los lenguajes y el SO proporcionan herramientas para usar con

más comodidad los recursos del hardware.

Abstracción de la Concurrencia

Nuestro programa expresa acciones concurrentes (procesos o hilos), pero

éstas no tienen por qué ejecutarse en paralelo.

Cada proceso concurrente se ejecuta sobre un procesador virtual.

El compilador y el SO serán responsables

de ejecutar nuestros procesos como consideren más oportuno.

Page 7: 2 AE AyED Apunte2

18/11/2012

7

Lenguajes Concurrentes

Aquellos que incorporan características que permiten expresar la concurrencia

directamente, sin recurrir a servicios del SO, bibliotecas, etc.

Normalmente incluyen mecanismos de sincronización y comunicación entre

procesos.

Ejemplos: Ada, Java, SR, Occam, PARLOG.

Sentencias COBEGIN-COEND

Todas aquellas acciones que puedan ejecutarse

concurrentemente las introducimos dentro del par

cobegin/coend. El ejemplo anterior quedaría de la

siguiente forma:

Contenidos

Introducción.

Beneficios de la programación concurrente.

Concurrencia y arquitecturas de hardware.

Especificación de ejecución concurrente.

Características de los sistemas concurrentes.

Problemas inherentes a la programación

concurrente.

Características de los Sistemas Concurrentes

Orden de ejecución de las instrucciones.

Indeterminismo.

Orden de Ejecución de las Instrucciones

La programación secuencial

define un orden total de

las instrucciones => Ante

un conjunto de datos de

entrada el flujo de ejecución

es siempre el mismo.

Un programa concurrente

define un orden parcial de

ejecución => Ante un

conjunto de datos de

entrada no se puede saber

cual va a ser el flujo de

ejecución.

Indeterminismo

El orden parcial implica el no determinismo de los programas

concurrentes.

Es decir, puede producir diferentes resultados cuando se ejecuta repetidamente sobre el mismo conjunto

de datos de entrada.

Page 8: 2 AE AyED Apunte2

18/11/2012

8

Ejemplo:

¿Qué valor tendrá la x cuando termine el programa?

Indeterminismo

El no determinismo es una propiedad inherente a la concurrencia.

Por culpa del no determinismo, es más

difícil analizar y verificar un algoritmo concurrente

Ojo! que existan varias posibilidades de salida NO significa necesariamente que un

programa concurrente sea incorrecto.

Contenidos

Introducción.

Beneficios de la programación concurrente.

Concurrencia y arquitecturas de hardware.

Especificación de ejecución concurrente.

Características de los sistemas concurrentes.

Problemas inherentes a la programación

concurrente.

Problemas Inherentes a la Programación Concurrente

Exclusión Mutua.

Sincronización.

Exclusión Mutua

Problema derivado de la abstracción en los

lenguajes de alto nivel.

Una instrucción de alto nivel se convierte en un conjunto de instrucciones máquina. Son las que realmente se ejecutan concurrentemente.

En el paradigma secuencial este hecho carece de importancia pero en ejecuciones concurrentes de instrucciones el resultado puede ser incorrecto.

Exclusión Mutua

Sección crítica: porción de código con variables

compartidas y que debe ejecutarse en exclusión mutua.

Los lenguajes concurrentes deben proporcionar

herramientas para resolver este tipo de problemas.

Page 9: 2 AE AyED Apunte2

18/11/2012

9

Condición de Sincronización Vamos derecho con un ejemplo…

Tres procesos cuyo comportamiento es el siguiente:

Lector, que va almacenando en un buffer las imágenes

capturadas desde una cámara.

Gestor, que va recogiendo las imágenes desde el buffer,

las trata y las va colocando en una cola de impresión.

Impresor, que va imprimiendo las imágenes colocadas

en la cola de impresión.

Supongamos que los tres procesos se ejecutan de manera concurrente en un bucle

infinito como se muestra aquí:

¿Qué ocurre cuando el proceso lector o el proceso gestor

tratan de poner una imagen y el buffer o la cola están

llenos?

¿Qué ocurre cuando el proceso gestor o el proceso

impresor tratan de obtener una imagen y el buffer o la cola están vacíos?

Condición de Sincronización

Muchas posibilidades diferentes en cuanto al orden de

ejecución.

Sin embargo, pueden ser necesarias ciertas restricciones

en el orden de ejecución.

La sincronización entre procesos puede definirse como la

necesidad que tienen algunos procesos de bloquearse en determinadas circunstancias y ser despertados cuando

ocurren ciertos eventos.

Bibliografía

"Programción Concurrente"

J. Tomás, M. Garrido, F. Sánchez, A. Quesada, 2003

Capítulo 1 y 2

"Principles of Concurrent and Distributed Programming"

M. Ben-Ari. Prentice Hall, 1990

Capítulo 1 y 2

"Concurrent Programming"

A. Burns, G Davis. Addison-Wesley, 1993

Capítulo 1